小编Kob*_*obs的帖子

MATLAB函数第一次运行缓慢,但随后更快.为什么?

我有一个很大的MATLAB函数文件.它首先创建一个零矩阵,然后通过评估函数中硬编码的多个相应(长)代数表达式来更新大约70%的单元格.完成后,将返回一个数字矩阵.

.m文件大约4 MB(我有100个这样的m.文件,但这不是直接相关的).当我第一次评估该功能时,需要大约9秒来评估.然而,后续运行只需要大约0.1秒,这正是我所期待的.

为什么第一次评估需要9秒钟?每当我关闭并重新打开MATLAB时,我每次都会进行这种缓慢的第一次评估,后续运行速度要快得多.为什么是这样?

米 文件可以在以下公共链接中找到(您可以从浏览器中复制文本):https: //dl.dropboxusercontent.com/u/157153767/K_a_12_102x.m

您应该使用的命令窗口输入是:[test] = K_a_12_102x(414000000,1.1095e + 09,1.2500e-04,0.0840,0.0840,0.0240,0.0240,0.0020,0.0020,0,0,0,0,3.0397e + 08,8.9930e + 07,0,3.0397e + 08,0,1.0702e + 08,0,0,0,0,0,0,497.7389,80.7355,-15.9811,391.1985,-15.9811,103.5248,20440000,0,20440000 ,0.06)

benchmarking matlab

7
推荐指数
2
解决办法
2198
查看次数

组合两个Fortran子程序以与ABAQUS一起使用

我有两个小的用户定义的子程序,我已经在有限元软件ABAQUS中实现了(它们在我的有限元模型中定义了两种特殊类型(JTYPE = 1,2)的多点约束(MPC)).这些子程序根据需要在FORTRAN 66/77中编写,并由ABAQUS在运行时使用Intel FORTRAN编译器进行编译.我已经验证他们编译并正常工作.

但是,我只能在我的模型中一次使用其中一个子程序.这是因为他们必须使用以下名称和参数(为了让ABAQUS知道何时调用它们以及如何使用它们):

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
Run Code Online (Sandbox Code Playgroud)

然而,事实证明,我需要能够在给定的分析中同时使用这两种类型.由于为我的有限元模型中使用的每个MPC实例指定的JTYPE是1或2,因此理想的解决方案是组合我当前单独的子例程,并在这个新子例程内的两种类型之间切换.我想我可以使用IF(JTYPE .EQ.1)THEN类型语法来做到这一点.

问题是每个JTYPE所需的代码块都不同,即使它们都是SUBROUTINE MPC.对于我的第一个子例程(JTYPE = 1),手册需要以下界面:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION A(N),JDOF(N),X(6,N),U(MAXDOF,N),UINIT(MAXDOF,N),
     * TIME(2),TEMP(NT,N),FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N)


      user coding to define A, JDOF, and, optionally, LMPC


      RETURN
      END
Run Code Online (Sandbox Code Playgroud)

对于第二个子例程(JTYPE = 2),手册需要以下接口:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION UE(MDOF),A(MDOF,MDOF,N),JDOF(MDOF,N),X(6,N),
     * U(MAXDOF,N),UINIT(MAXDOF,N),TIME(2),TEMP(NT,N),
     * FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N)


      user coding to define JDOF, A and, optionally, LMPC


      RETURN
      END
Run Code Online (Sandbox Code Playgroud)

重要的区别在于A和JDOF阵列的尺寸对于每种类型都是不同的.

我希望通过在IF循环中声明这些变量来解决这个问题,如下所示:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
C     CUSTOM MULTI POINT …
Run Code Online (Sandbox Code Playgroud)

fortran fortran77 finite-element-analysis

5
推荐指数
1
解决办法
2184
查看次数