Fotran学习笔记
- 格式:pdf
- 大小:518.98 KB
- 文档页数:5
《FORTRAN 95 程序设计》学习笔记66RPG gg★ 目录★《FORTRAN 95 程序设计》学习笔记 (1)基础知识(基础、字符串、FORMAT 、隐式、TYPE) (1)流程与控制(if 、select、do) (4)数组(声明、隐式循环、整体操作、可变数组) (5)函数与子程序(子程序、函数、全局变量) (6)MODULE 与面向对象(重载操作符、虚函数) (9)文件相关(OPEN 、WRITE 、READ) (10)指针(指向变量、数组、函数) (11)Visual Fortran 编译器(DLL ,VB 调用) (12)数值算法与IMSL (数值算法插件) (14)常用库函数(数学、数组、零碎、子程序) (15)基础知识(基础、字符串、FORMAT 、隐式、TYPE)★ 【小玩意】二进制观察器:装在M.. Visual Studio\DF98\bin ,有一个Bitviewer ,可以观察变量储存方式★ 【语法】续行:行结尾或行开头使用& 符号;注释:使用! 符号★ 【语法】数学表达式:+ ;- ;* ;/ ;(;);** 乘幂★ 【语法】程序结束:STOP (Ruby 的exit)★ 【语法】输出:write(*,*),完整写法:write(unit=*,fmt=*)建议:少用print ,尽量用write★ 【语法】声明整型:integer(kind=4) a ;其中kind 是使用的bytes 数, 4 or 2其他写法:integer*4 a; integer(4) a浮点:real(kind=4) a ;有效数位 6 位(12345678 存为 1.234567E7 ),如果是kind8 则为15 位有效数字此外:1E10:单精10X0, 1D10:双精10X0复数:complex :: a=(2,3)实部:real(a) ;虚部:imag(a)布尔型:Logical , .true. 和.false.★ 【语法与函数】字符串:character(20) string注意理解, fortran 的弱智字符串就是一个长度不能变的一维的东西, 极其猥琐, 和Java、Ruby 不能相提并论的string(13:13) = a” :对第13个字节的读、存string(2:3) = “go”string(6) = “我的妈呀”:从第6 个位置开始设置为“我的妈呀”a = string_a II string_b :用"〃”连接两个字符串【常用函数】char(num) , ichar(char):ASCII 码的转换相关功能【常用函数】len(string) , len_trim(string) :长度,去掉尾部空格后的长度【常用函数】index(string,key) :找key 在string 首出现的位置【常用函数】trim(string) :返回去掉尾部空格的字符串(用途不大)【函数】repeat(char,int):返回一个重复int次的char串character(len=20) string 普通声明;character(len=*) string 接收的时候可自动长度★ 【规范格式】FORMA T 格式化e.g.write (*,100) A100 format(I4) 这里是100 号标识调用的格式参数控制符(前面加数字为重复次数,如416或<a>l6。
不要把两个独立的程序文件放入同一个Project中,否则会导致编译过程的出现错误。
不区分大小写,小写字母会被视为大写。
有自由格式(.F90)和固定格式(.F/.FOR)两种,建议用.F90。
运算符+-*、**(乘幂,两个星号要连续)比如2的2次方要写成2**2。
注意括号的使用,如((A+B)*(C+D))/(2*(E+F)),不要漏掉。
乘号不能省略,2*A不能写成2A。
Program描述开头,后面接自定义的程序名称。
想不出名称建议使用MAIN。
程序最后END。
STOP程序结束。
连续两个双引号可以打出一个双引号。
!后面是注释,最后&,下一行与这一行连接;开头是&,与上一行连接。
同一个单次也可以用&分在两行。
空格无意义。
每行132个字符。
数据类型:整型INTEGER、浮点数REAL、复数COMPLEX、字符CHARACTER、逻辑判断LOGICAL 1代表TRUE,0代表FALSE。
可以integer a; a=2*3+1 a=一个表达式,若a=3/2 会得到1,因为整型会舍去小数部分。
Integer (kind=2) a 或者integer*2 a或者integer(2) a短整型integer (kind=4) a 长整形integer a,b,c同时声明多个。
Real(kind=4) b 单精度浮点数,Real(kind=8) b 双精度浮点数,单精度有效位数为6-7位,双精度为15-16位,精确到时候应使用双精度。
注意:real a;a=2.5+3/2会得到3.5,因为3/2被当成了整型,应改成a=2.5+3.0/2.0保证被当成浮点数而不是整型来处理。
单精度浮点数用E,2.5E11表示2.5乘以10的11次方。
双精度浮点数用D,2.2D3=230字符character(len=10) character(10) character*10 a 申明字符数为10的字符串。
《FORTRAN 95程序设计》学习笔记66RPG gg★目录★《FORTRAN 95程序设计》学习笔记 (1)基础知识(基础、字符串、FORMAT、隐式、TYPE) (1)流程与控制(if、select、do) (4)数组(声明、隐式循环、整体操作、可变数组) (5)函数与子程序(子程序、函数、全局变量) (7)MODULE与面向对象(重载操作符、虚函数) (9)文件相关(OPEN、WRITE、READ) (10)指针(指向变量、数组、函数) (12)Visual Fortran 编译器(DLL,VB调用) (13)数值算法与IMSL(数值算法插件) (15)常用库函数(数学、数组、零碎、子程序) (16)基础知识(基础、字符串、FORMAT、隐式、TYPE)★【小玩意】二进制观察器:装在M.. Visual Studio\DF98\bin,有一个Bitviewer,可以观察变量储存方式★【语法】续行:行结尾或行开头使用 & 符号;注释:使用 ! 符号★【语法】数学表达式:+ ;- ;* ;/ ;( ;) ;**乘幂★【语法】程序结束:STOP (Ruby的exit)★【语法】输出:write(*,*),完整写法:write(unit=*,fmt=*)⏹建议:少用print,尽量用write★【语法】声明⏹整型:integer(kind=4) a ;其中kind是使用的bytes数,4 or 2◆其他写法:integer*4 a; integer(4) a⏹浮点:real(kind=4) a ;有效数位6位(12345678存为1.234567E7),如果是kind8则为15位有效数字◆此外:1E10:单精10^10,1D10:双精10^10⏹复数:complex :: a=(2,3)◆实部:real(a) ;虚部:imag(a)⏹布尔型:Logical,.true. 和 .false.★【语法与函数】字符串:character(20) string⏹注意理解,fortran的弱智字符串就是一个长度不能变的一维的东西,极其猥琐,和Java、Ruby不能相提并论的⏹string(13:13) = “a”:对第13个字节的读、存⏹string(2:3) = “go”⏹string(6) = “我的妈呀”:从第6个位置开始设置为“我的妈呀”⏹ a = string_a // string_b:用“//”连接两个字符串⏹【常用函数】char(num),ichar(char):ASCII码的转换相关功能⏹【常用函数】len(string),len_trim(string):长度,去掉尾部空格后的长度⏹【常用函数】index(string,key):找key在string首出现的位置⏹【常用函数】trim(string):返回去掉尾部空格的字符串(用途不大)⏹【函数】repeat(char,int):返回一个重复int次的char串⏹character(len=20) string 普通声明;character(len=*) string 接收的时候可自动长度★【规范格式】FORMAT格式化⏹ e.g.◆write (*,100) A◆100 format(I4) ←这里是100号标识调用的格式⏹参数控制符(前面加数字为重复次数,如4I6或<a>I6。
Fortran学习总结- 我不是企鹅的日志- 网易博客Fortran学习总结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是读彭国伦《Fortran 95 程序设计》的笔记。
二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
fortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 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 : Fortran90程序设计实验指导与测验(超星图书)------------------------------- 基本过程----------基本过程, 先新建一个工作环境, workspace(工作区), 再建一个project(项目), 然后建一个源文件..f90是源程序文件项目里面可以新建txt和doc, 源程序写完之后可以编译为.exe具体步骤如下 :.opt和.dsw及.dsp注意一个问题, 在建新的project的时候, 我使用的版本(Compaq visual fortran)会出现以下对话框:问你是那一种console app., 按照这本书上说的, 需要自己手动建立主程序.f90的说法, 应该是建了一个empty project, 因为另外两种project建立后, 会自动有一个.f90的文件生成.源文件创建步骤如下 :其他的辅助文件也可以在项目中创建输入源程序结束之后, 要进行编译 (编译之后生成.obj文件):编译和构建exe的快捷键分别为: compile: ctrl+F7; build : F7运行: ctrl+F5Debug文件夹可以删除.-----------------------------------下面开始具体命令及注意事项-----------------排比啊...==定义变量必须在程序的开头就全部定义完, 一旦开始有执行的语句, 就不能再定义了(我猜是这个规则).Kind参数的概念意思就是, 默认的情况下占4字节(单精度), 后面写(1)就是占1字节, 写(8)就是占8字节, 也就是双精度的.下面这句里面_8 是啥意思?复数..后面很多习题解答, 这个书是一本辅导书, 感觉内容太零散了.书目2: FORTRAN 90/95高级程序设计(超星图书)第1章背景FORTRAN编译器的发展VF(DVF即Digital Visual Fortran)环境介绍: MS visual studio第2章: 基础执行部分和非执行部分要分开. 关于续行:标识符:五种数据类型, INTEGER, REAL, COMPLEX, CHARACTER, LOGICAL. INTEGER:整型常量的kind参数则是用下划线来说明:REAL:REAL(2)是错误命令. 只能是4或8COMPLEX:LOGICAL:CHARECTAR:强制规定类型: IMPLICIT NONE变量声明及初始化(::):第3章例程和模块第4章控制结构第5章数组几个数组声明如下:一般形式:书目3: Fortran90程序设计教程/张晓霞田秀平(超星图书)(个人觉得这本书比前两本都给力)第七章数组(讲的不错, 要看)没搞清write(*,*)到底怎么用?跟print的区别?第八章函数与子程序第一节语句函数:就是一句可以说明白的语句, 不必写成子函数的形式(yy的), 说明如下:例子一枚:第二节例行子函数subroutine语句wiki对于subroutine的解释:下面这段介绍了subroutine, 很清晰: (主程序是以program开头的)一个包含subroutine的程序的结构:return命令的说明:书目4: FORTRAN常用算法程序集徐士良以上为高斯法另外一个算法:(AX=B, 注意X=A-1B; 求出A的逆也可以得到X.): 如下:!/************************************************************* ! 程序:Gauss_Jordan消去法! 过程:Gauss_Jordan(aa,b,n,sgn)! 作用:aa为方阵,b为aa的逆,n为aa的阶! sgn为标识符,1表示求逆成功,0表示求逆失败! 调用格式为:call Gauss_Jordan(aa,b,n,sgn)!*************************************************************/ subroutine Gauss_Jordan(aa,b,n,sgn)implicit noneinteger(4):: n,sgnreal(8):: aa(n,n),b(n,n)integer(4):: i,j,kreal(8),allocatable:: a(:,:)real(8):: tallocate(a(n,n))a=aa ! a代替aa进行运算sgn=1! 初始化b为单位阵do i=1,ndo j=1,nif(i==j) thenb(i,j)=1elseb(i,j)=0end ifend doend do! Gauss_Jordan消去法过程do k=1,nif(a(k,k)==0) thensgn=0;EXITend if! 化第k行使得a(k,k)为1t=1.0d0/a(k,k)do j=k,na(k,j)=a(k,j)*tend dodo j=1,nb(k,j)=b(k,j)*tend do! 完成第k列的计算do i=1,nif(i/=k)thent=a(i,k)do j=k,na(i,j)=a(i,j)-a(k,j)*tend dodo j=1,nb(i,j)=b(i,j)-b(k,j)*tend doend ifend doend doend subroutine Gauss_Jordan。
fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。
下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。
每个程序单元由一个或多个声明和执行语句组成。
2. 注释:在Fortran中,注释可以用来提高代码的可读性。
注释以感叹号(!)开头,直到行末为止。
3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。
标识符用于表示变量、函数、子程序等。
4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。
例如,REAL :: x 表示声明了一个实数类型的变量x。
5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。
这些结构提供了程序的流程控制和逻辑控制。
6. 函数和子程序:Fortran支持函数和子程序的定义和调用。
函数和子程序可以帮助程序员组织和重用代码。
7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。
模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。
二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。
Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。
下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。
在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。
2. 实数:实数类型用于表示实数值。
在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。
REAL类型用于表示实数,COMPLEX类型用于表示复数。
3. 字符:字符类型用于表示字符值。
在Fortran中,字符类型使用CHARACTER关键字进行声明。
字符类型可以表示单个字符或者字符数组。
4. 数组:数组类型用于表示多个相同类型的数据。
读有限元程序笔记1.ALLOCATABLE::COORD(:,:),PROPS(:,:,:) !声明两个可变大小的数组,COORD(:,:)是二维数组,PROPS(:,:,:)是三维数组。
2.Fortran程序行首为C代表改行为注释,不会被编译3.全局变量(common),不同的程序之间,也就是在不同的函数之间或者是主程序跟函数之间,除了可以通过传递参数的方法来共享内存,还可以通过“全局变量”来让不同程序中声明出来的变量使用相同的内存位置。
4.Dimensional维的,viscoplastic塑性的,elastic有弹力的,finite有限的,element元素,program程序。
5.THREE DIMENSIONAL ELASTIC-VISCOPLASTIC FINITE ELEMENT PROGRAM三维弹塑性有限元程序6.Module可以用来封装程序模块,通常是用来把程序中,具备相关功能的函数及变量封装在一起。
程序在开始定义了一个module模块,在模块中定义了MXKKK=50000000,MXGSJ=1000,MXGSJ=1000三个常量(PARAMETER表示常量),并且每个常量都赋了值。
在module模块中定义了NELEM,NPOIN,NPROP,MXDFN,NSTEP,IDEVP,IDDP,LTYPE以及NFIX1,NPL,NVL,NSL,NHL,NTL,IDCVG,NTOTV,NKK以及DTIME,TOLER,SCALE,DSCALE这些全局变量(common表示全局变量),定义了ICM(3,8),CGAUS(2),VSHAP(8,8),DERIV(3,8,8)以及POSGP(3),COPG(3),EJ(3,3),EJACI(3,3),R(8,8)这些维数与大小都确定的全局数组变量,定义了COORD(:,:),PROPS(:,:,:)以及STRSG(:,:,:),DJ(:,:),CARTD(:,:,:,:)以及TRANJ(:,:,:,:),DJRMX(:,:,:)以及DREMX(:,:,:),DJEMX(:,:,:,:)以及CREMX(:,:,:),CJEMX(:,:,:,:)以及MELEM(:,:),MPROP(:),ISSOR(:,:),NNDEX(:)以及MPFIX(:,:),MPSJ(:),MMATP(:),MPIV(:)以及TSTIF(:)以及ADISP(:),TDISP(:),ALOAD(:)以及PSNBR(:,:,:),PSNBJ(:,:)以及PSTNR(:,:,:),PSTNJ(:,:)以及STRSP(:,:),STRSJ(:,:)这些维数确定但是大小不确定的可变大小的数组,ALLOCA TABLE表示可变大小的数组变量。