24小时热门版块排行榜    

查看: 3928  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

fangdian

木虫 (正式写手)

[求助] Marc2013中subroutine flux子程序能编译成功,但是不运行? 已有1人参与

新安装了Marc2013,编译器采用VC2010和Intel.Visual.Fortran.Composer.XE.2011.5.221.ISO-TBE,进行焊接模拟测试,采用的子程序EEE.f内容如下:
      subroutine flux(f,temflu,mibody,time)
c      implicit real*8 (a-h,o-z)
c     ** Start of generated type statements **
c      real*8 f
c      integer mibody
c      real*8 temflu, time
c     ** End of generated type statements **
      dimension f(2),mibody(10),temflu(6)
c* * * * * *
c
c     user subroutine for non-uniform flux input.
c
c     f(1)         flux value (to be defined)
c     f(2)         derivative of flux with respect to temperature
c                  (to be defined; optional, this might improve the
c                   convergence behavior)
c
c     temflu(1)    estimated temperature
c     temflu(2)    previous volumetric flux
c     temflu(3)    temperature at beginning of increment
c     temflu(4,5,6)integration point coordinates
c     mibody(1)    element number
c     mibody(2)    flux type
c     mibody(3)    integration point number
c     mibody(4)    flux index - not used if table input
c     mibody(5)    not used
c     mibody(6)    =1 : heat transfer
c                  =2 : joule
c                  =3 : bearing
c                  =4 : electrostatic
c                  =5 : magnetostatic
c                  =6 : acoustic
c     mibody(7)    internal element number
c     mibody(8)    layer number for heat transfer shells elements
c                  and volume flux
c     mibody(9)    Not used
c     mibody(10)   boundary condition number if table input
c     time         time
c
c* * * * * *
      OPEN(UNIT=10,FILE='HELLO.TXT')
      WRITE(10,*) "HELLLLL!"
      a=0.005
      b=0.005
      c=0.005
      v=0.02
      d0=0
      d=v*time
      q=3000*0.7
      pi=3.14
      x=temflu(4)
      y=temflu(5)
      z=temflu(6)
      mibody(6)=1
      y0=0.01
      x0=0
      heat=6*sqrt(3.0)*q/(a*b*c*pi)
      ex=exp(-3*(z-d)**2/c**2-3*(y-y0)**2/b**2-3*(x-x0)**2/a**2)
      f(1)=heat*ex
      return
      end
建模的模型及坐标系如下:
Marc2013中subroutine flux子程序能编译成功,但是不运行?
热源加载的边界条件如下图:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-1
上图中,有些疑问:我明明已经选择了那个子程序选项,为何dimension和motion框中还有热源参数的值?这些值还起作用吗?(从计算结果看,没有起作用)
job的check结果是正确的,信息如下:
INFO: Analysis dimension is derived from element class hex8.
INFO: Assuming 3-D analysis!
INFO: Found 0 errors and 0 warnings.
INFO: Job check complete.
结果设置及运行提示如下图:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-2
可以看到,提示框中是选择的EEE.f的子程序,并且参与编译,运行代码3004也是对的。
运行log文件前部分如下:
Marc 2013.1.0 , Build  230727  Windows_NT version
--------------------------------
                     :         
Program name         : marc  
Job ID               : C:\Users\xxxxxxxxx\model3_job1   
Version type         : i8  
User subroutine name : EEE  
User objects/libs    :   
Restart file job ID  :   
Substructure file ID :   
Post file job ID     :   
Defaults file ID     :   
View factor file ID  :   
Save generated module: no
MPI library          : intel-mpi
Auto restart         : 0  
Contact decoupling   : 0
DDM processes        :  
Element loop threads :  
Solver processes     :  
Solver threads       :  
GPGPU option         :  
Host file            :   
Distributed i/o      :   
Run directory        : C:\Users\xxxxxxxxx
Scratch directory    : C:\Users\xxxxxxxxx
Default bin directory: E:\software\special\mar2013\marc2013.1\bin\win64i8
Material database    : E:\software\special\mar2013\marc2013.1\AF_flowmat\   
                     :            
ifort  /fpp /c /DWIN32_intel  -D_IMPLICITNONE /nologo /integer_size:64 -DI64 -DMKL -DOPENMP -DOMP_COMPAT -D_MSCMARC -DWIN64 /I"E:\software\special\mar2013\marc2013.1\common" /I"E:\software\special\mar2013\marc2013.1\bcsgpusolver\common" /I"E:\software\special\mar2013\marc2013.1\mumpssolver\include" /I"E:\software\special\mar2013\marc2013.1\intelmpi\win64\include" /O2 /Qip /Qvec- /Qsafe-cray-ptr /switch:fe_old_modvar /W0  /Qopenmp /Qopenmp-threadprivate:compat  -DCASI -DPARDISO -DMUMPS -DBCSGPU -DCUDA /MD -DDDM /object:"C:\Users\xxxxxxxxx\EEE.obj"  "C:\Users\xxxxxxxxx\EEE.f"

LINK /nologo  /out:"EEE.exe" "E:\software\special\mar2013\marc2013.1\lib\win64i8\main.obj" "E:\software\special\mar2013\marc2013.1\lib\win64i8\blkdta.obj" "E:\software\special\mar2013\marc2013.1\lib\win64i8\comm1.obj" "E:\software\special\mar2013\marc2013.1\lib\win64i8\comm2.obj" "E:\software\special\mar2013\marc2013.1\lib\win64i8\comm3.obj" "C:\Users\xxxxxxxxx\EEE.obj"  "E:\software\special\mar2013\marc2013.1\lib\win64i8\srclib.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\mcvfit.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\mnflib.lib" ""E:\software\special\mar2013\marc2013.1\lib\win64i8\md_user.lib"" "E:\software\special\mar2013\marc2013.1\lib\win64i8\mdsrc.lib"  "E:\software\special\mar2013\marc2013.1\lib\win64i8\bcsgpulib.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\marccuda.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_intel_ilp64.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_intel_thread.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_core.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\libiomp5mt.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\blas_src.lib"  "E:\software\special\mar2013\marc2013.1\lib\win64i8\casilib.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_solver_ilp64.lib"  "E:\software\special\mar2013\marc2013.1\lib\win64i8\mumps.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_scalapack_ilp64.lib" "E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_lapack95_ilp64.lib"  ""E:\software\special\mar2013\marc2013.1\intelmkl\win64i8\mkl_blacs_intelmpi_ilp64.lib""    "E:\software\special\mar2013\marc2013.1\lib\win64i8\stubs.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\clib.lib" "E:\software\special\mar2013\marc2013.1\lib\win64i8\metislib.lib" "E:\software\special\mar2013\marc2013.1\xdr_lib\win64\xdr_irc.lib" /release /subsystem:console /incremental:no /nodefaultlib:libc.lib /nodefaultlib:libcmt.lib /nodefaultlib:libifcoremt.lib libmmd.lib libifcoremd.lib /LIBPATH:"E:\software\special\mar2013\marc2013.1\intelmpi\win64\lib" impi.lib ws2_32.lib kernel32.lib user32.lib netapi32.lib advapi32.lib comdlg32.lib comctl32.lib
从上述运行过程,看到EEE.f参与了编译过程,并且编译成功!
运行的log文件显示运行完毕,信息如下:

             **************************************************************************


            
             This is a successful completion to a Marc simulation,
             indicating that no additional incremental data was
             found and that the analysis is complete.
            




             **************************************************************************
但是运行结果显示如下:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-3
程序运行结果明显不对!通过查阅output文件,,发现flux没有加载上,output证实如下:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-4
另外,我的子函数中      OPEN(UNIT=10,FILE='HELLO.TXT')和      WRITE(10,*) "HELLLLL!" 这句没有起作用,因为工作目录下没有生成HELLO.TXT文件(这也说明了子程序没有起作用!)
不知道是什么原因?谢谢
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

我取消子程序的设置,改为常数值:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-5
计算结果如下:
Marc2013中subroutine flux子程序能编译成功,但是不运行?-6
可以看到,取消子程序后,计算结果是期望的,说明其它设置应该没有问题。

就是子函数的问题?谢谢
3楼2015-01-13 23:07:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

fangdian

木虫 (正式写手)

运行结果中温度场居然是负值!!
2楼2015-01-13 23:03:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

为了方便讨论,我附上了我的相应文件:
谢谢

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 文件附件.rar
  • 2015-01-13 23:05:47, 15 K
4楼2015-01-13 23:09:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

同时分享一下我的子程序连接经验,主要参考网上文章:
http://wenku.baidu.com/link?url= ... wl1AzYP1b8haxCQJOw_
主要内容如下;
MSC.marc 2010子程序链接指南(亲测成功)

1.安装 visual studio 2005英文版
2.安装intel fortran 10.1.034,破解文件采用intel_tbe的license;
安装后,打开vs2005,在help中你可以看到fortran已经定位其中了,新建可以看见fortran的project。
3.安装 marc 2010;
4.修改C:\MSC.Software\Marc\2010\marc2010\tools下include_win32.bat文件(64位系统为include_win64.bat)  
在文件开头处添加语句(强调是在文件开头),@call "D:\Program Files\Intel\Compiler\fortran\10.1.034\ia32\bin\ifortvars.bat"
只要找到ifortvars.bat,参照其路径就可以了,不同的版本,其文件名有可能不同。
5.修改环境变量:32位系统下的设置,其中有几个64位设置可去掉。
include
C:\Program Files\Intel\Compiler\11.0\061\fortran\mkl\include;C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\include;C:\Program Files\Intel\Compiler\11.0\061\fortran\include;C:\Program Files\Microsoft Visual Studio 8\VC\include;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include;C:\Program Files\Intel\Compiler\11.0\061\fortran\mkl\include;%IFORT_COMPILER10%\IA32\Include;
lib
C:\Program Files\Intel\Compiler\11.0\061\fortran\mkl\ia32\lib;C:\Program Files\Intel\Compiler\11.0\061\fortran\lib\ia32;C:\Program Files\Intel\Compiler\11.0\061\fortran\lib\intel64;C:\Program Files\Microsoft Visual Studio 8\VC\lib;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Lib;C:\MSC.Software\Marc\2010\marc2010\lib;C:\MSC.Software\Marc\2010\marc2010\lib\win32;C:\MSC.Software\Marc\2010\marc2010\intelmpi\win32\lib;%IFORT_COMPILER10%\IA32\Lib;
path
%IFORT_COMPILER11%lib\ia32;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Intel\Compiler\11.0\061\fortran\Bin\IA32;C:\Program Files\Microsoft Visual Studio 8\VC\bin;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Bin;C:\MSC.Software\Marc\2010\marc2010\bin\win32;C:\MSC.Software\Marc\2010\marc2010\tools;C:\MSC.Software\Marc\2010\mentat2010\bin;C:\Program Files\Microsoft Visual Studio 8\VC\bin\amd64;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;

在marc中加载子程序后,运行时会出现 mspdb80.dll无法找到的情况,是因为VC\Bin\下没有 “msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件,直接从Common7\IDE \下复制这四个文件到VC\Bin\下即可解决


如过子程序连接不上,退出号为3。
说明Fortran编译环境设置不对,找不到ifort引起的错误。

检查一下是否安装了Microsoft VS 2005和Intel Fortran 10.1.024(或以上版本)。
如果都安装好了,可以用我前两天说的简便方法试一试,还没有不成功的。
1) 关于MSC.Marc使用用户子程序时软件的安装和配置问题,有一个最简便的方法,简述如下:
a). 安装 Microsoft VS 2005
b). 安装 Intel Fortran V10.1.024或以上版本(假设你用Marc/Mentat 2010或以上版本)
c). 安装Marc/Mentat
   做完上面三步就装好了。如果你不想配置环境设置,可以先启动Fortran build environment for applications ,这时在屏幕上会出现一个类似DOS一样的窗口。在此窗口中进入你的工作目录,然后运行mentat, 就可以使用子程序了。

如果你想人工设置子程序编译连接环境,有两个方法:一个是运行脚本文件C:\Program Files\Intel\Compiler\Fortran\10.1.024\IA32\bin\ifortvars.bat或者手工将这个文件中的环境变量添加到电脑里去;另一个方法是在Marc的tools目录下include.bat文件中手工添加语句:  call "C:\Program Files\Intel\Compiler\Fortran\10.1.024\IA32\bin\ifortvars.bat"
5楼2015-01-13 23:16:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见