fortran子程序
- 格式:ppt
- 大小:398.50 KB
- 文档页数:19
第一种方法:/ o/ J5 @6 U/ ^- o$ 1. 建立工作目录/ ]"2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc或aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc;# ~/ |0 I0 E6 {, @4 X3 q: W3. 将编译的fortran程序拷贝到工作目录;4. 将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqusjob=inp_name user=fortran name即可。
第二种方法:在Job模块里,创建工作,在EditJob对话框中选择General选项卡,在Usersubroutine file中点击Select 按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。
, D8 i7 d/r c6 @" |以下是网上摘录的资料,供参考:. |$ t/ }$W7 Y6 m4 h6 D6 j用户进行二次开发时,要在命令行窗口执行下面的命令:4 O. R+ ^,@( ? abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
: j6 g' R-o( {0 [* N2 J3 X这些生成的临时文件要到文件夹C:\Documentsand Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
fortran语言中entry用法Fortran语言中entry用法1. 什么是Fortran语言中的entry?在Fortran语言中,entry是一种用于定义子程序的方式。
它可以在同一个程序中定义多个名称相同但参数不同的子程序,使得程序更加灵活和可扩展。
2. entry的基本语法entry语句的基本语法如下:entry entry_name[arg1, arg2, ...]! 子程序的代码块end entry_name其中,entry_name表示定义的entry的名称,可以根据需要自行定义。
arg1, arg2, ...表示entry的参数列表,每个参数都可以有自己的数据类型和属性。
3. entry的作用和优点使用entry语句可以实现以下几个方面的功能和优点:•重载子程序名称:通过使用不同参数列表的entry,可以实现对同一名称的子程序进行重载,提高代码的可读性和可维护性。
•灵活性:通过传递不同的参数和属性,可以实现对子程序的不同功能和行为。
•代码复用:可以重复使用相同的子程序名称,避免在不同的位置重复编写相似的代码。
•模块化:使用entry可以将一个复杂的程序分解为多个简单的子程序,便于调试和维护。
4. entry的示例下面是一个简单的示例,展示了如何使用entry语句定义一个求和子程序,并实现对不同数据类型的支持:program entry_demoimplicit noneinteger :: i1, i2, i3real :: r1, r2, r3i1 = 1i2 = 2r1 =r2 =call sum_entry(i1, i2, i3)call sum_entry(r1, r2, r3)print *, "Integer sum: ", i3print *, "Real sum: ", r3containsentry sum_entry(arg1, arg2, res)integer, intent(in) :: arg1, arg2integer, intent(out) :: resres = arg1 + arg2end entry sum_entryentry sum_entry(arg1, arg2, res)real, intent(in) :: arg1, arg2real, intent(out) :: resres = arg1 + arg2end entry sum_entryend program entry_demo在上述示例中,我们定义了一个sum_entry的entry,它分别支持两个整数参数和两个实数参数。
fortran 子程序参数摘要:I.引言A.Fortran 子程序的概念B.Fortran 子程序的作用II.Fortran 子程序参数的定义与使用A.参数的定义1.内部参数2.外部参数B.参数的传递1.值传递2.引用传递C.参数的返回值1.返回值的概念2.返回值的类型III.Fortran 子程序的调用A.调用子程序的方式1.外部调用2.内部调用B.调用子程序的参数1.参数的传递方式2.参数的默认值IV.Fortran 子程序参数的实例分析A.实例介绍B.实例代码解析1.定义子程序2.调用子程序C.实例总结V.结论A.Fortran 子程序参数的重要性B.Fortran 子程序参数的应用场景C.展望Fortran 子程序参数的未来发展正文:I.引言Fortran(Formula Translation)是一种高级编程语言,广泛应用于数值计算、科学计算等领域。
在Fortran 程序设计中,子程序(Subprogram)是一种重要的程序组织方式,可以将程序划分为更小的、可重用的功能模块。
子程序参数是子程序与主程序之间进行数据交换的关键,正确理解和使用子程序参数对于编写高效的Fortran 程序具有重要意义。
II.Fortran 子程序参数的定义与使用A.参数的定义Fortran 子程序参数分为内部参数和外部参数。
1.内部参数:在子程序内部定义的参数,仅在子程序内部使用,与外部程序无关。
内部参数的定义格式如下:```fortraninteger :: a, b, sum```2.外部参数:在子程序外部定义的参数,可以在子程序内部和外部程序中使用。
外部参数的定义格式如下:```fortraninteger, external :: a, b, sum```B.参数的传递Fortran 子程序参数的传递方式有值传递和引用传递两种。
1.值传递:将参数的值传递给子程序,子程序中对参数的修改不会影响主程序中的参数值。
fortran 子程序参数(最新版)目录1.Fortran 子程序参数概述2.Fortran 子程序参数的定义与声明3.Fortran 子程序参数的传递与使用4.Fortran 子程序参数的优点与局限性正文1.Fortran 子程序参数概述在 Fortran 编程语言中,子程序是一种可以实现代码重用的模块化程序结构。
通过将一些功能相似的代码组织成一个子程序,可以提高代码的可读性、可维护性和可重用性。
为了实现子程序之间的数据交互,Fortran 提供了一种名为“子程序参数”的机制,用于在子程序之间传递数据。
2.Fortran 子程序参数的定义与声明Fortran 子程序参数的定义与声明主要包括以下几个步骤:(1)在主程序中定义子程序。
使用“subroutine”关键字定义一个子程序,并给子程序起一个名字。
例如:```fortransubroutine my_subroutine```(2)在子程序中声明参数。
在子程序内部,使用“implicit none”语句关闭隐式参数,然后通过“parameter”语句声明子程序参数。
例如:```fortranimplicit noneparameter :: x = 0, y = 0```(3)在主程序中声明子程序参数。
在主程序中,使用“interface”语句声明子程序参数,并指定参数的类型和名称。
例如:```fortraninterface my_subroutinesubroutine my_subroutine(real :: x, real :: y)end interface```3.Fortran 子程序参数的传递与使用Fortran 子程序参数的传递与使用主要包括以下几个步骤:(1)在主程序中调用子程序。
在主程序中,使用子程序名和括号内的参数列表调用子程序。
例如:```fortrancall my_subroutine(3.14, 2.71)```(2)在子程序中使用参数。
、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。
以下是77和90的一些格式上的区别。
Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for (1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入输出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。
Fortran 90:自由格式(free format),扩展名:.f90(1)以"!"引导注释;(2)每行可132字符,行代码放在每行最前面;(3)以&续行,放在该行末或下行初。
以下都是讨论Fortran 90。
3、Fortran的一些特点,和C的一些不同其实很多,在下面涉及具体方面时可以看到。
这里只是大致提一些。
(1)不分大小写(2)每句末尾不必要写分号(3)程序代码命令间的空格没有意义(4)不像C,Fortran不使用{ }(5)数据类型多出了复数和逻辑判断类型。
比如复数类型complex :: a !声明复数的方法。
复数显然方便了科学计算,满足了工程方面的需求a=, ! a=1+i(6)多出了乘幂运算(**)。
乘幂除了整数还可以是实数形式。
如开方,开立方a=**,a=**。
(7)数组有一些整体操作的功能;可以方便的对部分元素进行操作(8)有些情况下可以声明大小待定的数组,很实用的功能4、Fortran的基本程序结构先看一看所谓的"Hello Fortran"程序。
第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for 或.f)。
第二种方法:1. 建立工作目录2. 将Abaqus安装目录\\site下的或拷贝到工作目录,并改名为;3. 将编译的fortran程序拷贝到工作目录;4. 将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqus job=inp_name user=fortran name即可。
以下是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库和动态库,还有其它一些临时文件,而它的主程序(如和等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\LocalSettings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
1 子程序格式(程序后缀是.f; .f90; .for;.obj)答:我试过,.for格是应该是不可以的,至少和版本应该是不行,其他的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for (.f,.f90应该都不行的,手册上也有讲过),只有在文件没有找到的情况下,才会去搜索,如果两者都没有,就会报错误信息。
如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。
fortran subroutine的用法Fortran子程序(Subroutine)是指Fortran编程语言中一个常用的独立执行程序。
Fortran子程序是一种对主程序可以被多次引用的可重用的模块,可被通过特定的函数声明来完成较复杂的任务。
与函数不同,它不会返回任何值也不会接收任何参数,因此运行的结果只能写入和/或输出给主程序。
包括Fortran的多种编程语言,如C,C++等,都有子程序的用法。
1. Fortran子程序的定义:Fortran子程序是指一个独立的程序,可以被引用多次,可以用来完成更为复杂的任务,它不会返回任何值。
2. Fortran子程序的声明:子程序的声明由特定的子程序声明构成,语法如下:[SUBCOMMON subroutineDDORTY] [CHARACTER*(*) name] [EXTERNAL name] [PARAMETER (param,…)] name(list of arguments) [INTEGER*4 │ INTEGER │LOGICAL │ REAL │ DOUBLE │ CHARACTER │ COMPLEX function]其中,参数SUBCOMMON子程序提供了一种定义并发要求子程序的方式;PARAMETER子程序声明提供了一种定义常量的方式;EXTERNAL子程序姆挨本声明是一种定义要调用程序库函数的方式;CHARACTER子程序姆挨本声明提供了一种定义字符串变量的方式;而FUNCTION子程序姆挨本声明提供了定义函数的方法,在本子程序中定义的函数的参数和返回值必须是自定义的。
3. Fortran子程序的编写:子程序的编写和普通Fortran程序一样,采用fortran写程序语言,运行环境推荐使用fortran编译器(compiler)。
在子程序中,程序可以使用多个定义在主程序中的变量(全局变量),也可以使用局部变量,局部变量的定义使用clause选项,放在子程序声明里。
fortran子程序参数一、引言Fortran是一种广泛应用于科学计算和工程领域的编程语言。
在Fortran程序中,子程序是一种常用的模块化程序设计方法,允许将重复的任务或功能封装在单独的程序段中,以提高代码的可读性和可维护性。
在Fortran子程序中,参数传递是一种常见的操作,用于将数据从一个程序段传递到另一个程序段。
本文档将介绍Fortran子程序参数的基本概念、传递方式以及注意事项。
二、参数传递的基本概念在Fortran中,子程序参数可以通过传值、传引用和传指针等方式进行传递。
传值是将参数作为副本传递给子程序,子程序对参数的修改不会影响原始变量的值。
传引用是将参数的地址传递给子程序,子程序对参数的修改会影响原始变量的值。
传指针是将变量的地址以指针的形式传递给子程序,子程序可以通过指针访问和修改该变量的值。
三、参数传递的方式1.传值参数:传值参数是通过将数据拷贝到子程序中传递的。
在函数调用时,会将原始变量的值复制一份给函数参数,函数对参数的修改不会影响原始变量。
例如:```scsssubroutinemy_subroutine(value_param)implicitnoneinteger,intent(in)::value_param...endsubroutinemy_subroutine```在上面的代码中,`value_param`是一个传值参数,子程序对它的修改不会影响原始变量。
2.传引用参数:传引用参数是将原始变量的地址传递给子程序。
子程序可以通过该地址访问和修改原始变量的值。
例如:```scsssubroutinemy_subroutine(ref_param)implicitnoneinteger,pointer::ref_param...endsubroutinemy_subroutine```在上面的代码中,`ref_param`是一个指向整数的指针,子程序可以通过该指针访问和修改原始变量。
第一种方法: 在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择您要调用的子程序文件(后缀为、for或、f)。
第二种方法:1、建立工作目录2、将Abaqus安装目录\6、4-pr11\site下的aba_param_dp、inc 或aba_param_sp、inc拷贝到工作目录,并改名为aba_param、inc;3、将编译的fortran程序拷贝到工作目录;4、将、obj文件拷贝到工作目录;5、建立好输入文件、inp;6、运行abaqus job=inp_name user=fortran name即可。
以下就是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU、lib与动态库standardU、dll,还有其它一些临时文件,而它的主程序(如standard、exe与explicit、exe等)则没有任何改变,由此瞧来ABAQUS就是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也就是6楼所说的藏了一些工作吧,大家不妨试一下。
1子程序格式(程序后缀就是、f; 、f90; 、for;、obj??)答:我试过,、for格就是应该就是不可以的,至少6、2与6、3版本应该就是不行,其她的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名就是、for(、f,、f90应该都不行的,手册上也有讲过),只有在username、for文件没有找到的情况下,才会去搜索username、obj,如果两者都没有,就会报错误信息。
Aspen plus fortran子程序的编译、连接与运行Aspen Plus 可以用来模拟反应精馏,但提供的动力学方程形式比较死板,很多类型的动力学方程都不能直接输入,不得不外接一个fortran子程序。
本来用到fortran的机会就不多,所以会的人也不多。
何况编写好fortran子程序后,还要用fortran编译器来编译生成obj文件,而且每次运行的时候都得连接一次,比较麻烦。
我的电脑以前是装了编译器这些软件的,但最近出了问题,只能编译fortran子程序,运行aspen外接fortran子程序的时候就会出错。
恰好这几天要帮师兄写个fortran子程序,写完后需要调试,但又运行不了,重装呢也没把握,想起网上有兄弟说过可以用asplink命令生成一个dll文件,这样就不用运行aspen的时候每次都连接编译器了。
于是找来资料学习学习,居然成功了,欣喜之余,分享给大家。
第一步当然是编写动力学子程序了(此处省略若干字)第二步编译写好的动力学子程序(以网友soaty的动力学子程序为例)打开Aspen Plus Simulation Engine打开后是这样的接下来改变文件夹路径,转到存放动力学子程序的那个文件夹比如我的文件路径是C:\ProgramData\AspenTech\Aspen Plus V7.1\IPP于是输入cd C:\ProgramData\AspenTech\Aspen Plus V7.1\IPP回车后就转到这个文件夹了,这时候就可以进行编译了:编译命令:aspcomp 输入命令aspcomp RIPPA.f,回车到文件夹一看你会发现已经生成了obj文件了,第二步就完成了第三步:生成obj文件的OPT文件这个很简单,只需要在文件夹里面先新建一个文本文件,然后把名字改为RIPPA_LIST_OBJ,双击打开文本文件,在里面先添加上刚刚生成的obj文件的路径(就是我们第一步提到的那个文件夹路径加上最后生成的RIPPA.obj就可以了最后把txt格式改成opt格式就行了第四步:链接第二步生成的OBJ文件,生成dll文件命令格式:ASPLINK [DLOPT dloptfile] libnameDloptfile是在刚刚生成的OPT文件的文件名,Libname是给要生成的dll文件指定一个文件名于是我们输入asplink [dlopt RIPPA_LIST_OBJ.opt] RIPPA 回车(这里如果输入的命令是ASPLINK libname 就会链接这个文件夹下所有的OBJ文件,如果你的文件夹下刚好有多个OBJ文件,那么一般不能成功生成dll文件)第五步:生成dll文件的opt文件,和第三步类似贴个图好了,大家参考第三步把txt格式改成opt格式,这时所有的编译链接都完成了,我们就可以在没有安装fortran编译器的电脑上运行带fortran的子程序的Aspen Plus文件了首先打开BKP文件后,点击RUN——settings——Engine Files——Linker填入dll文件的OPT文件名RIPPA_LOC_DLL.opt点击确定,这时,不出意外,就可以运行aspen了注意:上面提到的这些文件必须放到一个文件夹里面,如果您下载了我的文件更改了文件夹的目录就需要在那两个OPT文件中更改成您自己的文件夹目录。
多重积分Fortran子程序-------VEGAS.F流程图说明:这里只是对子程序的算法和如何分层做详细介绍,对打印输出和其他一些东西都做略过。
还有这个子程序中涉及的变量很多,而且变量的意义也变化,所以下面涉及到的变量我都会在画流程图前加以适当的说明。
1.子程序所涉及的变量及其的意义:有用输入参数:FXN:被积函数。
ACC:所要求的精度。
NDIM:被积函数的变量的个数。
NCALL:投点的总数。
ITMX:要求的叠代的次数。
NPRN:打印的要求(具体要求略过)。
子程序内部的参数及其意义:TI(A VGI):数值积分的结果。
IT:叠代的次数。
X(I,J):各随机变量的分布,J表示各个变量。
ERR(SD):数值积分的误差。
ALPH0:变化区间的参数。
RAND(20):[0,1]的随机数列。
X(J):用于积分的坐标等。
2.主要的程序模块和各模块的功能总的流程图:3.各模块的流程图1)初始化设定各个参数该部分的主要工作就是给各参数输入初始值,下面简述各个初始化的参数以及各参数的意义或在以下何模块里要用到。
ALPH=1.5; 这是在7中用到,作为变换分布的参数。
CALLS=NCALL;投点的总数。
XND=ND=50;区间分为50份。
NDM=ND-1=49;为以下处理方便。
IT=0;叠代初始为零。
SI=0;SI2=0;SWGT=0;SCHI=0;SCALLS=0;以上五个变量均是叠代参数,在5中用。
2)初始化内部分布:变量的意义:RC:分层的间隔。
NDIM:变量的个数。
XI(I,J):变量的区间的分布。
XND:区间分层数。
XNDM=XND-1。
DR:求和号。
初始化的分布是一个均匀分布,实现的流程图如下:3) 初始叠代参数:这不仅仅是初始化的过程了,而是大的循环的一部分,每改变一次变量的分布,就需要初始化叠代参数一次。
下面简述各个初始化的参数以及各参数的意义或在以下何模块里要用到。
IT=IT+1;叠代的次数。
TI=0;积分值清零。