计算材料学Fortran程序汇总
fortran程序案例题汇编(14道)
1.Fibonacci数列定义如下:F1=1F2=1Fn=Fn-1+Fn-2(n>2)求Fibonacci数列的前30项。
integer f(30),if(1)=1f(2)=2do i=3,30f(i)=f(i-1)+f(i-2)enddoprint*,fend2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,jdo i=1,10read*,s(i)enddodo i=1,10a(i)=1do j=1,10if(s(i)<s(j))a(i)=a(i)+1enddoenddodo i=1,10print*,s(i),a(i)enddoend3.给定一组数,按照从小到大的顺序输出。
integer a(10)integer pdo i=1,10read *,a(i)enddodo j=1,9p=jdo i=j+1,10if (a(i)<a(p))p=ienddoif (p/=j) thent=a(p);a(p)=a(j);a(j)=tendifenddoprint *,(a(i),i=1,10)end4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。
character*6,dimension(:),allocatable::xueinteger,dimension(:,:),allocatable::ginteger,dimension(:),allocatable::zonginteger i,j,ncharacter*6,xhprint *,"请输入学生的个数"read *,nallocate(xue(n))allocate(g(n,3))allocate(zong(n))do i=1,nread *,xue(i),(g(i,j),j=1,3)enddodo i=1,nzong(i)=0do j=1,3zong(i)=zong(i)+g(i,j)enddoenddoprint *,"请输入你要打印的学生的学号"read *,xhdo i=1,nif(xue(i)==xh)thenprint *,(g(i,j),j=1,3),zong(i)exitendifenddoend5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。
Fortran学习总结
Fortran学习总结1、⽤结构体读取⼆进制⽂件存在的问题及解决⽅案在讲这个问题之前,我们先看⼀段代码:01 program fcode_cn02 integer(4)::i=1,j=2,k=303 character::ch*2='cn'04 type head05 !sequence06 character*2ch07 integer(4)i,j,k08 end type09 type(head)he1011 open(11,file='11.txt',access='stream')12 write(11)ch,i,j,k13 close(11)14 ! ⽅法115 open(11,file='11.txt',access='stream')16 read(11)he.ch,he.i,he.j,he.k17 close(11)18 print*,he19 ! ⽅法220 open(11,file='11.txt',access='stream')21 read(11)he22 close(11)23 print*,he24 pause25 end代码开头先向⽂件11.txt中写⼊⼀个字符串”cn”和3个4字节整数1, 2, 3 ,然后分别使⽤⽅法1和⽅法2读取并输出数据。
从代码本⾝分析,我们向⽂件中写⼊了14个字节的信息,⽅法1和⽅法2均⽤结构体去读取这个14字节信息。
理论上说,这不存在问题,但是在执⾏时,我们遇到下⾯的错误(图1):读取同样的数据为什么⽅法1能够正确执⾏,⽽⽅法2却遇到⽂件尾呢?这跟结构体元素的对齐⽅式有关。
打开项⽬属性-Fortran-data,点开structure member alignment选项(如图2),查看对齐⽅式,有1字节、2字节、4字节、8字节和16字节,win32系统缺省为4字节。
fortran程序案例题汇编(14道)-推荐下载
t=.false. exit endif enddo prime=t end
1
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电通,力1根保过据护管生高线产中0不工资仅艺料可高试以中卷解资配决料置吊试技顶卷术层要是配求指置,机不对组规电在范气进高设行中备继资进电料行保试空护卷载高问与中题带资2负料2,荷试而下卷且高总可中体保资配障料置2试时32卷,3各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并25工且52作尽22下可护都能1关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编工.写况保复进护杂行层设自防备动腐与处跨装理接置,地高尤线中其弯资要曲料避半试免径卷错标调误高试高等方中,案资要,料求编试技5写、卷术重电保交要气护底设设装。备备置管4高调、动线中试电作敷资高气,设料中课并技3试资件且、术卷料中拒管试试调绝路包验卷试动敷含方技作设线案术,技槽以来术、及避管系免架统不等启必多动要项方高方案中式;资,对料为整试解套卷决启突高动然中过停语程机文中。电高因气中此课资,件料电中试力管卷高壁电中薄气资、设料接备试口进卷不行保严调护等试装问工置题作调,并试合且技理进术利行,用过要管关求线运电敷行力设高保技中护术资装。料置线试做缆卷到敷技准设术确原指灵则导活:。。在对对分于于线调差盒试动处过保,程护当中装不高置同中高电资中压料资回试料路卷试交技卷叉术调时问试,题技应,术采作是用为指金调发属试电隔人机板员一进,变行需压隔要器开在组处事在理前发;掌生同握内一图部线纸故槽资障内料时,、,强设需电备要回制进路造行须厂外同家部时出电切具源断高高习中中题资资电料料源试试,卷卷线试切缆验除敷报从设告而完与采毕相用,关高要技中进术资行资料检料试查,卷和并主检且要测了保处解护理现装。场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
FORTRAN知识点总结
F O R T R A N第2章FORTRAN90基础知识:程序单元的概念:fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。
每个程序只有一个主程序单元。
各单元体的程序体形式上相同。
程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。
语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。
字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。
数据结构:整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成;逻辑型LOGICAL。
派生数据类型TYPE;数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A);字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。
变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。
第3章基本语句:类型说明语句:类型说明(种别说明),属性说明::变量名表尽量避免把两个实数作相等或不相等的比较。
淘汰隐式说明IMPLICIT NONE种别说明:种别参数即对可移植数据精度和范围进行选择的机制KIND(X) 返回变元X的种别参数值SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。
fortran常用程序
fortran常用程序----------------------- Page 1----------------------- Fortran 简单程序集杨洋1!大小写转换program ex39implicit nonecharacter*20 strinteger iprint*,'input the string:'read*,strdo i=1,len_trim(str)if(str(i:i)>='a'.and.str(i:i)<='z') str(i:i)=char(ichar(str(i:i))-32) end doprint*,'the inverted string:'print*,strend!将字符串转化为整数program ex104implicit noneexternal fcharacter*10 strinteger fprint*,'输入由数字组成的字符串:'read*,strprint*,'转化后的整数:'print*,f(str)endfunction f(str)implicit nonecharacter*(*) strinteger f,k,if=0k=len_trim(str)do i=1,kf=f+(ichar(str(i:i))-ichar('0'))*10**(k-i)end doend function!将十进制数转化为二进制数(用字符串保存)program ex1101 作者简介:杨洋,南京信息工程大学大气科学学院海洋科学系2008 级1----------------------- Page 2-----------------------program ex110implicit noneinteger acharacter*8::b=' 'print*,'输入一个十进制整数:'read*,ado while(a>0)if (mod(a,2)==1) thenb='1'//belseb='0'//bend ifa=a/2end doprint*,'对应的二进制数为:'print*,bend!将二进制数(用字符串保存)转化为十进制数program ex111implicit nonecharacter*8 ainteger::b=0,k,iprint*,'输入一个二进制数:'read*,ak=len_trim(a)do i=1,kb=b+(ichar(a(i:i))-ichar('0'))*2**(k-i)end doprint*,'对应的十进制数为:'print*,bend!统计大写、小写、数字及其他字符的个数program ex51implicit nonecharacter*20 strinteger::i,n1=0,n2=0,n3=0,n4=0print*,'输入字符串:'read*,strdo i=1,len_trim(str)select case(str(i:i))case('a':'z')n1=n1+12----------------------- Page 3-----------------------case('A':'Z')n2=n2+1case('0':'9')n3=n3+1case defaultn4=n4+1end selectend doprint*,’大写字母个数:’,n1print*,’小写字母个数:’,n2print*,’数字个数:’,n3print*,’其他字符个数:’,n4End!判断闰年program ex24implicit noneinteger yearprint*,'input a year:'read*,yeark=k+1work(k)=num(i)end ifend docall sort(work,k)print*,'the final array:'8----------------------- Page 9-----------------------print*,(work(i),i=1,k)endfunction prime(n)implicit noneinteger i,k,nlogical primek=sqrt(real(n))do i=2,kif (mod(n,i)==0) exitend doif (i>k) thenprime=.true.elseprime=.false.end ifend functionsubroutine sort(a,n)implicit noneinteger i,j,k,n,a(n),tdo i=1,n-1k=ido j=i+1,nif (a(j)>a(k)) k=jend doif (k/=i) thent=a(k)a(k)=a(i)a(i)=tend ifend doend subroutine! 求2~999 中同时满足下列条件的数:(a) 该数各位数字之和为奇数;(b) 该数是素数。
16 Fortran要点总结
Fortran 课程要点总结2011/6/1主要内容♦Fortran基础知识♦变量类型与表达式♦例程和模块♦控制结构♦数组♦派生类型和指针♦输入输出简单Fortran 90程序的构造形式:[PROGRAM 程序名][声明语句][执行语句]END [PROGRAM [MONEY]]一个程序,只有end不能省,其他都是可选的所有的声明语句必须在执行语句之前一个项目中只能有一个主程序Fortran 77 & Fortran 90&第六列0以外的任何字符续行标志注释行宽书写格式变量名长度任意位置!第一列为C/c/*0~1327~72自由格式固定格式316Fortran 90Fortran 77字符集(character sets)♦允许出现在一个语言的程序里的字符的全体♦26个大写字母:A ~ Z♦26个小写字母:a ~z♦10个数字:0 ~ 9♦下划线:_♦5个运算符号:+ -* / (**)♦特殊字符:() = . , ; : ’”$ ! % & < > ? &♦空格“”标识符命名♦给变量、常量、函数等标识符命名时,必须以字母开头,后面可接多达30个字母(A~Z、a~z)、数字(0~9)或下划线(_)–只能以字母开头;–不能含有空格;–不区分字母大小写;–长度限定为31个字符(Fortran 77为6个字符);–避免与关键字、标准例程重名。
变量名(Variable name)♦有效的变量名areadistancez123456789long_axis_of_elliptic_circlea3b4c5abstract_3TimeAndSpacecentury____♦area,AREA,aREa等等都是一个变量变量名(Variable name)♦无效的变量名This_is_a_very_long_variable_name3_day$600my-helpexchange rateU.S.AAsk?“UK”b/aengry&powerwang@fluent 6.3语句(Statement)♦语句是Fortran程序的基本单位,一条语句可包含0~132个字符;♦除赋值语句外,所有的语句都从一个关键字开始;♦一般情况下,每行一条语句;♦如果一行有多条语句,它们之间以分号分隔♦假如一条语句一行写不完,允许出现续行,但要求被续行最后的非空白字符为“&”♦续行从下一行(非注释行)的第一个非空白字符开始,如果下一行的非空白字符为“&”,则续行从该字符后的第一个字符开始。
fortran用法总结
我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
FORTRAN 程序设计01
一, Fortran 简介 二,程序流程 三,循环结构 四,数据类型 五,数组 六,过程和模块 七,输入,输出,文件 八,复习,总结
Fortran是目前国际上广泛流行的一种高级语言, 适用于科学计算.Fortran是英文FORmula TRANslation的缩写,意为"公式翻译".它 是为科学,工程问题中的那些能够用数学公式 表达的问题而设计的语言,主要用于数值计算. 这种语言简单易学,因为可以像抄写数学教科 书里的公式一样书写数学公式,它比英文书写 的自然语言更接近数学语言.Fortran语言是 第一个真正推广的高级语言.
Fortran77 (I ~ N)规则; 以(I,j,k,m,l,n)字母开头的 变量为整型. 建议编程时使用声明语句,并在 程序中加入implicit non 语句, 屏蔽(I ~ N)规则;
asb exp sin cos Asin Acos Sqrt ……
asb(x) |x| 指数运算 exp(x) exp(x) 正弦函数 sin(x) sinx 余弦函数 cos(x) cosx 反正弦 Asin(x) arcsinx 反余弦 Acos(x) arccosx 开平方 Sqrt(x) x ………………
系统为每一个常量,变量分配一个存储单元,放它的 值.
6, 数据类型
整型:(数学上的整数集合) integer(n),属性列表,变量列表 例:integer (kind=4) i,t2,pop -2147483638 ~ 2147483637 例:integer (1):: k,m -128 ~127
实型(数学上的实数集合) real(n),属性列表,变量列表 单精度: real(4), real 双精度: real(8), double real(4),:: dx,dy real(8),:: d_p,y2
fortran子程序【精选】
parameter (n1=3,n2=3,n3=3)
dimension a(n1,n2)
dimension b(n2,n3),c(n1,n3)
open(5,file='input.dat')
call getmat(a,n1,n2)
call getmat(b,n2,n3)
call matpro(a,n1,n2,b,n3,c)
20 continue end
real w(5,5) call readin(w)
输入矩阵 1,2,3,4,5 2,3,4,5,1
call opp(w,x1,x2) write(*,100) x1,x2 100 format(1x,'The two sum of',
3,4,5,1,2
$ ' oppusite angles elements:',
subroutine sub(ch) charact...er*(*) ch end
11
(4)如果实参是变量或数组元素,在调用子程序时, 对应的虚实参数实际上将共用同一存储单元。
program main
subroutine sub(x,a)
integer a,c(3)
integer x,a
data c/3*0/
4,5,1,2,3 5,1,2,3,4
$ /1x,'x1=',f8.2,' x2=',f8.2) end
9
主要区别:
1. 形式不一样(function、subroutine、call),无虚参 时括号使用不一样。
2. 子程序名的意义不一样。函数子程序名代表函数值, 通过其传递数据,需要类型说明;而子例行程序名仅 为了调用使用,通过虚实参传递数据。
Fortran语言编程小结(五篇材料)
Fortran语言编程小结(五篇材料)第一篇:Fortran语言编程小结1.单双精度Program ex01 implicit none real(kind=4):: a real(kind=8):: b a=3.***66666666_4!确定这个数字是使用单精度 b=3.***66666666_8!确定这个数字是使用双精度 write(*,*)a,b End program ex012.判断kind值 program ex02 Implicit none!判断可以记录9个位数的整数kind值integer, parameter :: long_int = selected_int_kind(9)!判断可以记录3个位数的整数kind值integer, parameter :: short_int = selected_int_kind(3)!判断可以有3个有效位数, 指数可以记录到3的浮点数kind值integer, parameter :: long_real = selected_real_kind(10, 50)!判断可以有10个有效位数, 指数可以记录到50的浮点数kind值integer, parameter :: short_real= selected_real_kind(3, 3)integer(kind=long_int):: a = 123456 integer(kind=short_int):: b = 123 real(kind=long_real):: c = +1.23456789D45 real(kind=short_real):: d =+1230 write(*, “(I3,1X,I10)”)long_int,a write(*, “(I3,1X,I10)”)short_int, b write(*, “(I3,1X,E10.5)”)long_real, c write(*, “(I3,1X,E10.5)”)short_real, d END3.TYPE program ex0434 implicit none Type :: person!开始建立person这个类型character(len=30):: name!人名integer :: age!年龄integer :: height!身高INTEGER :: weight!体重character(len=80):: address!地址End type person type(person):: a!声明一个person类型的变量write(*,*)“NAME:” read(*,*)a%name write(*,*)“AGE:” read(*,*)a%age write(*,*)“HEIGHT:” read(*,*)a%height write(*,*)“WEIGHT:” read(*,*)a%weight write(*,*)“ADDRESS:” read(*,*)a%address write(*,100)a%name,a%age,a%height,a%weight 100 format(“Name:”,A10/,“Age:”,I3/,“Height:”,I3/,“Weight:”,I 3/,&“Addres:”,A80)End4.REAL 与 INTEGER Program ex0431 implicit noneinteger :: a=1integer :: b=2real:: cc=a/b!c=1/2=0, 虽然c是浮点数,但因为a,b是整数,计算a/b时会用整数去计算.write(*,“(F5.2)”)c End5.DATA 变量表/初值表/,变量表/初值表/,… PROGRAM ex0430 IMPLICIT NONE INTEGER A REALB COMPLEXC CHARACTER(20)STR DATA A,B,C,STR /1,2.0,(1.0,2.0), 'FORTRAN 77'/ WRITE(*,*)A,B,C,STR END6.复数实虚部Program ex0430 complex :: c =(1,2)write(*,100)real(c),'+',aimag(c),'i' 100 format(f5.1,a1,f5.1,a1)End7.逻辑输出 Program ex0416logical a,ba=.true.b=.false.write(*,100)a,bformat(L5,L4)End8.Program ex0415character(len=20)stringcharacter(len=5)substringstring = “Have a nice day.”substring = “nice”write(*,*)ichar('A')!输出字符A的ASCII码write(*,*)char(65)!输出ASCII码65所代表的字符,也就是Awrite(*,*)len(string)!输出字符串string声明时的长度write(*,*)len_trim(string)!输出字符串string内容的长度write(*,*)index(string, substring)!nice在Have a nice day的第8个位置 End9.Program ex0414character(len= 6)firstcharacter(len=10)secondcharacter(len=20)addfirst=“Happy ”second=“Birthday”add = first//second!经由两个连续的除号可以连接两个字符串write(*,100)addFORMAT('生日快乐',/,A)End10.带精度计算 Program ex0408real(kind=8):: a,ba=1b=0.1write(*,*)a,“+”,b,“=”,a+b End11.逻辑if语句 Program ex0504 implicit noneinteger rain, windspeedlogical r,wwrite(*,*)“Rain:”read(*,*)rainwrite(*,*)“Wind:”read(*,*)windspeedr =(rain>=500)!如果rain>=150, r=.true, 不然r=.false.w =(windspeed>=10)!如果windspeed>=10, w=.true, 不然w=.false.if(r.or.w)then !只要r或w有一个值是true就成立write(*,*)“停止上班上课”elsewrite(*,*)“照常上班上课” End if End12.Select Case用法 Program ex0512 implicit noneinteger :: scorecharacter gradewr ite(*,*)“Score:”read(*,*)scoreselect case(score)case(90:100)grade='A'case(80:89)grade='B'case defaultgrade='?'End selectwrite(*,“('Grade:',A1)”)grade End13.IF GOTO语句PROGRAM ex0514 IMPLICIT NONE REAL heightREAL weightWRITE(*,*)“height:” READ(*,*)heightWRITE(*,*)“weight:” READ(*,*)weightIF(weight > height-100)GOTO 200 100 WRITE(*,*)“Under control.”GOTO 300200WRITE(*,*)“Too fat!” 300 STOP END14.DO WHILE 循环 Program ex0604 implicit noneinteger, parameter :: limit=10integer counterinteger :: ans = 0counter = 2do while(counter <= limit)ans = ans + countercounter = counter + 2end dowrite(*,*)ans END15.CYCLE,EXIT 语句 Program ex0609 implicit noneinteger :: i,jloop1: do i=1,3loop2: do j=1,3if(i==3)exit loop1!跳离loop1循环if(j==2)cycle loop2!重做loop2循环write(*, “('(',i2,',',i2,')')”)i, jend do loop2end do loop1 End16.大小写字符 Program ex0612 implicit noneinteger iinteger strlencharacter(len=20):: stringwrite(*,*)“String:”read(*,*)stringstrlen = LEN_TRIM(string)do i = 1, strlenstring(i:i)= char(ichar(string(i:i))+32)end dowrite(*,“('encoded:',A20)”)string End17.循环计算 Program ex0614 implicit nonereal a,b,anscharacter :: key = 'y'!为了至少循环一次do while(key=='y'.or.key=='Y')read(*,*)a read(*,“(A1)”)key read(*,*)b select case(key)case('+')ans = a+b case('-')ans = a-b case('*')ans = a*bcase('/')ans = a/b case defaultwrite(*,“('Unknown operator ',A1)”)keystop end selectwrite(*,“(F6.2,A1,F6.2,'=',F6.2)”)a,key,b,answrite(*,*)“(Y/y)to do again.(Other)to exit.” read(*,“(A1)”)key end do End18.矩阵相加 pogram ex implicit noneinteger, parameter :: row = 2integer, parameter :: col = 2integer :: matrixA(row,col)integer :: matrixB(row,col)integer :: matrixC(row,col)integer rinteger cwrite(*,*)“Matrix A”do r=1, rowdo c=1, colwrite(*,“('A(',I1,',',I1,')=')”)r,cread(*,*)matrixA(r,c)end doend dowrite(*,*)“Matrix B”do r=1, rowdo c=1, colwrite(*,“('B(',I1,',',I1,')=')”)r,cread(*,*)matrixB(r,c)end doend dowrite(*,*)“Matrix A+B=”do r=1, rowdo c=1, colmatrixC(r,c)= matrixB(r,c)+matrixA(r,c)write(*,“('(',I1,',',I1,')=',I3)”)r,c,matrixC(r,c)end do end do end pogram ex[ write(*,“(I3,I3,/,I3,I3)”)((mc(i,j), i=1,2),j=1,2)] 19.program eximplicit noneinteger, parameter :: row = 2integer, parameter :: col = 2integer :: a(2,2)=(/ 1,2,3,4 /)!a(1,1)=1, a(2,1)=2, a(1,2)=3, a(2,2)=4integer :: b(4)=(/ 5,6,7,8 /)integer :: c(2)write(*,*)a,2)write(*,*)a(:,1)c = a(:,1)!c(1)=a(1,1), c(2)=a(2,1)write(*,*)c!c(1), c(2)c = a(2,:)!c(1)=a(2,1), c(2)=a(2,2)write(*,*)c!c(1), c(2)write(*,*)c(2:1:-1)!c(2), c(1)c = b(1:4:2)!c(1)=b(1), c(2)=b(3)write(*,*)c!c(1), c(2)End20.FORALL语句 Program ex Implicit none integer :: I,Jinteger, parameter :: size = 5integer :: a(size,size)forall(I=1:size, J=1:size, I>J)a(I,J)=1!上半部分forall(I=1:size, J=1:size, I==J)a(I,J)=2!对角线forall(I=1:size, J=1:size, I!下半部分write(*,“(5(5I5,/))”)a End21.Allocatable Program EX Implicit none integer :: size, error=0integer, parameter :: one_mb=1024*1024 !1MBcharacter, allocatable :: a(:)Dosize=size+one_mb!allocate(a(size), stat=error)if(error/=0)exitwrite(*,“('Allocate ',I10, ' bytes')”)size write(*,“(F10.2,' MB used')”)real(size)/real(one_mb)deallocate(a)End do End22.Function 函数 Program ex implicit nonereal :: a=10real :: b=20real :: addwrite(*,“(f6.2)”)add(a,b)End Function add(a,b)implicit none real :: a,breal :: addadd = a*b End23.SAVE语句 Program ex Implicit nonecall sub()call sub()call sub()End program Subroutine sub()Implicit noneInteger :: count = 1Save count!指定save变量永远活着,不会忘记它的内容Write(*,*)countcount = count+1 End[运行结果:1 2 3 ]24.生成随机数 program ex implicit noneinterface!定义函数的接口function random10(lbound, ubound)implicit none real :: lbound, ubound real :: random10(10)end functionend interfacereal :: a(10)CALL RANDOM_SEED()!系统根据日期和时间随机地提供种子a = random10(1.0, 10.0)write(*,“(10F6.2)”)aend function random10(lbound, ubound)implicit nonereal :: lbound, uboundreal :: lenreal :: random10(10)realtinteger ilen = ubound-lbound!计算范围大小do i=1,10call random_number(t)!t会是0~1之间的随机数random10(i)= lbound + len * t!把t转换成lbound~ubound 间的随机数end do End25.MODULE语句 Module globalimplicit noneinteger a,bcommon a,b End module Program ex0834use globalimplicit nonea=1b=2call sub()End program Subroutine sub()use globalimplicit nonewrite(*,*)a,breturn End subroutine26.写文件到text program ex0902implicit nonecharacter(len=20):: stringopen(unit=10, file=“test.txt”)write(10,“(A20)”)“I LOVE YOU.”!写到文件中rewind(10)read(10,“(A20)”)string!从文件中读出来write(*,“(A20)”)string!写到屏幕上 end27.随机成绩 program gendataimplicit noneinteger studentsinteger irealr(3)write(*,“(4A5)”)“座位”,“语文”,“数学”,“英语”call random_seed()write(*,*)“How many students?”read(*,*)studentsdo i=1,studentscall random_number(r)write(*,“(6I5)”)i,int(r*50+50)end do end program第二篇:Fortran语言复习大纲复习内容提纲1.FORTRAN程序的结构、书写规则FORTRAN程序的构成(主程序和子程序);FORTRAN77源程序的书写格式。
Fortran程序总结
1.行的书写(行的长度、分行、续行)一行可以是0~132个字符,空格有意义,语句最长不超过2640个字符一行可以有多个语句,用“;”分隔一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。
最多可有511个续行。
2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。
3.注释标志符:自由格式:!固定格式:C *语句分隔符:分号;(仅自由格式可以使用)续行符:自由格式:&申明标号:1到5位无符号整数空格:关键字、变量、常量内部不能用空格,但相邻两者之间须用空格4.信息处理的分类:数值处理和信息处理现代计算机工作原理:程序存储和程序控制(冯·诺依曼)1、运算器——算术运算、逻辑运算2、控制器——根据指令控制计算机工作运算器、控制器和寄存器称为中央处理器CPU3、I/O设备——提供数据传输服务4、总线——数据传输的公共通道1.机器语言:二进制代码形式,可以被计算机直接执行,不可移植2.汇编语言:用助记符来代替机器指令,容易记忆,不可移植3.高级语言:接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易维护,可移植性好例:FORTRAN、BASIC、PASCAL、C、LISP、PROLOG等5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成:主程序、外部子程序、模块、块数据单元无论是主程序单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。
非语句行:注释语句:!后的所有字符都被编译器忽略。
可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*)6.常量的定义:常量是程序执行过程中不能变化的量。
基本数据类型有五种:整型、实型、复型、字符型和逻辑型前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。
FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。
Fortran讲义第二章汇总课件
优先级(最好加括号) : ①括号 ②函数 ③** ④*、/ ⑤单目+、- 双目+、-
类型转换(向高看齐),int, nint, real, dble, cmplx
复数运算
exam_2_5
表达式和赋值语句
❖ 字符表达式 ①
子字符串 字符串的连接 相关内部函数
exam_2_6
❖ 关系表达式: ②
内部过程或模块过程
END
Fortran源程序的书写格式
❖ 固定格式(*.for或*.f)
Fortran源程序的书写格式
Fortran源程序的书写格式
lists.for
Fortran源程序的书写格式
❖ 自由格式(*.f90)和固定格式的比较
exam_2_1
固定格式
自由格式
每行字符数 80
132(VF 中几乎不限制)
Fortran的名称
❖ 用来标识程序中的实体(变量、子程序、函数…)
❖ <名称>→<英文字母>{<英文字母>|<数字>|_|$}
❖ 名称长度不能超过6(FORTRAN77) 31(Fortran90) 63(Visual Fortran)
Fortran的名称
program X-Y-Z Find_it 1A _program $total
注释
第一列: c *
任意位置: !
73-80列
任意位置:!(第六列除外)
每行语句数 多条,用;隔开
多条,用;隔开
(FORTRAN77只能有1条)
续行
第六列,非0非空格 最多续19行
& 最多续39行
Visual Fortran允许续511行
(完整版)fortran函数总结
附录C SCILAB 部分函数指令表(c)LIAMA. All rights reserved.(注解:本指令表只收集了部分常用指令, 有关全部指令请参照文档文件) + 加- 减* 矩阵乘数组乘 *.1. 通用指令^ 矩阵乘方数组乘方 ^.\ 反斜杠或左除help 在线帮助/ 斜杠或右除apropos 文档中关键词搜寻或.\ 数组除/.ans 缺省变量名以及最新表达式的运算结果== 等号~= 不等号clear 从内存中清除变量和函数< 小于exit 关闭SCILAB> 大于quit 退出SCILAB<= 小于或等于save 把内存变量存入磁盘>= 大于或等于exec 运行脚本文件&,and 逻辑与mode 文件运行中的显示格式|,or 逻辑或getversion 显示SCILAB 版本~,not 逻辑非ieee 浮点运算溢出显示模式选择: 冒号who 列出工作内存中的变量名( ) 园括号edit 文件编辑器[ ] 方括号type 变量类型{ } 花括号what 列出SCILAB 基本命令小数点 .format 设置数据输出格式, 逗号chdir 改变当前工作目录; 分号getenv 给出环境值// 注释号mkdir 创建目录= 赋值符号pwd 显示当前工作目录' 引号evstr 执行表达式' 复数转置号转置号 '.ans 最新表达式的运算结果2.运算符和特殊算符%eps 浮点误差容限, =2 -52≈2.22×10-16%i 虚数单位= √(-1)%inf 正无穷大%pi 圆周率,π=3.1415926535897....3. 编程语言结构abort 中止计算或循环break 终止最内循环case 同select 一起使用continue 将控制转交给外层的for或while循环else 同if一起使用elseif 同if一起使用end 结束for,while,if 语句for 按规定次数重复执行语句if 条件执行语句otherwise 可同switch 一起使用pause 暂停模式return 返回select 多个条件分支then 同if一起使用while 不确定次数重复执行语句eval 特定值计算feval 函数特定值计算或多变量计算function 函数文件头global 定义全局变量isglobal 检测变量是否为全局变量error 显示错误信息lasterror 显示最近的错误信息sprintf 按格式把数字转换为串warning 显示警告信息4.基本数学函数acos 反余弦acosh 反双曲余弦acot 反余切acoth 反双曲余切acsc 反余割acsch 反双曲余割asin 反正弦asinh 反双曲正弦atan 反正切atanh 反双曲正切cos 余弦cosh 双曲余弦cotg 余切coth 双曲余切sin 正弦sinh 双曲正弦tan 正切tanh 双曲正切exp 指数log 自然对数log10 常用对数log2 以2为底的对数sqrt 平方根abs 绝对值conj 复数共轭imag 复数虚部real 复数实部ceil 向上(正无穷大方向)取整fix 向零方向取整floor 向下(负无穷大方向)取整round 四舍五入取整sign 符号函数gsort 降次排序erf 误差函数erfc 补误差函数gamma gamma 函数interp 插值函数interpln 线性插值函数intsplin 样条插值函数smooth 样条平滑函数spline 样条函数quarewave 方波函数sign 符号函数double 将整数转换为双精度浮点数5.基本矩阵函数和操作eye 单位阵zeros 全零矩阵ones 全1 矩阵rand 均匀分布随机阵genmarkov 生成随机Markov 矩阵linspace 线性等分向量logspace 对数等分向量logm 矩阵对数运算cumprod 矩阵元素累计乘cumsum 矩阵元素累计和toeplitz Toeplitz 矩阵disp 显示矩阵和文字内容length 确定向量的长度size 确定矩阵的维数diag 创建对角阵或抽取对角向量find 找出非零元素1的下标matrix 矩阵变维rot90 矩阵逆时针旋转90度sub2ind 据全下标换算出单下标tril 抽取下三角阵triu 抽取上三角阵conj 共轭矩阵companion 伴随矩阵det 行列式的值norm 矩阵或向量范数nnz 矩阵中非零元素个数null 清空向量或矩阵中的某个元素orth 正交基rank 矩阵秩trace 矩阵迹cond 矩阵条件数rcond 逆矩阵条件数inv 矩阵的逆lu LU分解或高斯消元法pinv 伪逆qr QR分解givens Givens 变换linsolve 求解线性方程lyap Lyapunov 方程hess Hessenberg 矩阵poly 特征多项式schur Schur 分解expm 矩阵指数expm1 矩阵指数的Pade逼近expm2 用泰勒级数求矩阵指数expm3 通过特征值和特征向量求矩阵指数funm 计算一般矩阵函数logm 矩阵对数sqrtm 矩阵平方根6. 特性值与奇异值spec 矩阵特征值gspec 矩阵束特征值bdiag 块矩阵, 广义特征向量eigenmarkov 正则化Markov 特征向量pbig 特征空间投影svd 奇异值分解sva 奇异值分解近似7. 矩阵元素运算cumprod 元素累计积cumsum 元素累计和hist 统计频数直方图max 最大值mean 平均值median 中值min 最小值prod 元素积sort 由大到小排序std 标准差sum 元素和trapz 梯形数值积分corr 求相关系数或方差8. 稀疏矩阵运算sparse 稀疏矩阵(只存储非零元素)adj2sp 邻接矩阵转换为稀疏矩阵full 稀疏矩阵转换为全矩阵mtlb_sparse 将SCILAB 稀疏矩阵转换为MATLAB稀疏矩阵格式sp2adj 稀疏矩阵转换为邻接矩阵speye 稀疏矩阵方式单位阵sprand 稀疏矩阵方式随机矩阵spzeros 稀疏矩阵方式全零阵lufact 稀疏矩阵LU分解lusolve 稀疏矩阵方程求解spchol 稀疏矩阵Cholesky分解9. 输入输出函数diary 生成屏幕文本记录disp 变量显示file 文件管理input 用户键盘输入load 读已存的变量mclose 关闭文件mget 读二进制文件mgetl 按行读ASCII码文件mgetstr 读字符串中单个字mopen 打开文件mput 写二进制文件mfscanf 读ASCII 码文件print 将变量记录为文件read 读矩阵变量save 存变量为二进制文件strartup 启动文件write 按格式存文件xgetfile 对话方式获取文件路径x_dialog 建立Xwindow参数输入对话框Tk_Getvar 得到Tk文件变量Tk_EvalFile 执行Tk 文件10. 函数与函数库操作deff 在线定义函数edit 函数编辑器function 打开函数定义functions SCILAB 函数或对象genlib 在给定目录下建立所有文件的函数库get_function_path 读函数库的文件存储目录路径getd 读函数库中的全部文件getf 在文件中定义一个函数lib 函数库定义macro SCILAB函数或对象macrovar 输入变量个数newfun 输出变量个数11. 字符串操作code2str 将SCILAB数码转换为字符串convstr 字母大小转换emptystr 清空字符串grep 搜寻相同字符串part 字符提取str2code 将字符串转换为SCILAB数码string 字符串转换strings SCILAB 对象, 字符串strcat 连接字符strindex 字符串的字符位置搜寻strsubst 字符串中的字符替换12. 日期与时间date 日期getdate 读日期与时间timer CPU时间计时13. 二维图形函数plot2d 直角坐标下线性刻度曲线champ 2 维向量场champ1 由颜色箭头表示的2维向量场contour2d 等高线图errbar 曲线上增加误差范围框线条grayplot 应用颜色表示的表面xgrid 画坐标网格线histplot 统计频数直方图Matplot 散点图阵列14. 三维图形函数plot3d 三维表面plot3d1 用颜色或灰度表示的三维表面param3d 三维中单曲线param3d1 三维中多曲线contour 三维表面上的等高线图hist3d 三维表示的统计频数直方图geom3d 三维向二维上的投影15. 线条类图形xpoly 单线条或单多边形xpolys 多线条或多各多边形xrpoly 正多边形xsegs 非连接线段xfpoly 单个多边形内填充xfpolys 多个多边形内填充xrect 矩形xfrect 单个矩形内填充xrects 多个矩形内填充xarc 单个弧线段或弧园xarcs 多个弧线段或弧园xfarc 单个弧线段或弧园填充xfarcs 多个弧线段或弧园填充xarrows 多箭头16. 图形注释, 变换xstring 图形中字符xstringb 框内字符xtitle 图形标题xaxis 轴名标注plotframe 图形加框并画坐标网格线isoview 等尺寸比例显示(原图形窗口不改变)square 等尺寸比例显示(原图形窗口改变)xsetech 设置小窗口xchange 转换实数为图形象素坐标值subplot 设置多个子窗口17. 图形颜色及图形文字colormap 应用颜色图getcolor 交互式选择颜色图addcolor 增加新色于颜色图graycolormap 线性灰度图hotcolormap 热色(红到黄色)颜色图xset 图形显示方式设定xget 读当前图形显示方式设定getsymbol 交互式选择符号和尺寸18. 图形文件及图形文字xsave 将图形存储为文件xload 从磁盘中读出图形文件xbasimp 将图形按PS文件打印或存储为文件xs2fig 将图形生成Xfig 格式文件xbasc 取消图形窗及其相关内容xclear 清空图形窗driver 选择图形驱动器xinit 图形驱动器初始化xend 关闭图形xbasr 图形刷新replot 更改显示范围后的图形刷新xdel 关闭图形xname 改变当前图形窗名称19. 控制分析用图形bode 伯德图坐标gainplot 幅值图坐标(伯德图中的幅值图)nyquist 奈奎斯特图m_circle M-圆图chart 尼库拉斯图black Black-图evans 根轨迹图sgrid s 平面图plzr 零-极点图zgrid z 平面图20. 图形应用中的其它指令graphics 图形库指令表xclick 等待鼠标在图形上的点击输入locate 由鼠标点击读入图形中的多点位置坐标xgetmouse 由鼠标点击读入图形中的当前点位置坐标21. 系统与控制abcd 状态空间矩阵cont_mat 可控矩阵csim 线性系统时域响应dsimul 状态空间的离散时域响应feedback 反馈操作符flts 时域响应(离散、采样系统〕frep2tf 基于传递函数的频域响应freq 频域响应g_margin 幅值裕量imrep2ss 基于状态空间的脉冲响应lin 线性化操作lqe Kalman 滤波器lqg LQG补偿器lqr LQ补偿器ltitr 基于状态空间的离散时域响应obscont 基于观测器的控制器observer 观测器obsv_mat 观测矩阵p_margin 相位裕量phasemag 相位与幅值计算ppol 极点配置repfreq 频域响应ricc Riccati 方程rtitr 基于传递函数的离散时域响应sm2ss 系统矩阵到状态空间变换ss2ss 反馈连接的状态空间到状态空间变换ss2tf 状态空间到传递函数变换stabil 稳定性计算tf2ss 传递函数到状态空间变换time_id SISO系统最小方差辨识22. 鲁棒控制augment 被控对象增广操作bstap Hankel 矩阵近似ccontrg H∞控制器dhnorm 离散H∞范数h2norm H2 范数h_cl 闭环矩阵h_inf H∞控制器h_norm H∞范数hankelsv Hankel 矩阵奇异值leqr H∞控制器的LQ增益linf 无穷范数riccati Riccati 矩阵sensi 敏感函数23. 动态系统arma ARMA 模型arma2p 基于AR模型中获得多项式矩阵armac ARMAX 辨识arsimul ARMAX系统仿真noisegen 噪声信号发生器odedi 常微分方程仿真检测prbs_a 伪随机二进制序列发生器reglin 线性拟合24. 系统与控制实例artest Arnold 动态系统bifish 鱼群人口发展的离散时域模型boucle 具有观测器的动态系统相位图chaintest 生物链模型gpech 渔业模型fusee 登陆火箭问题lotest Lorennz 吸引子mine 采矿问题obscontl 可控可观系统portr3d 三维相位图portrait 二维相位图recur 双线性回归方程systems 动态系统tangent 动态系统的线性化tadinit 动态系统的交互初始化25. 非线性工具(优化与仿真〕bvode 边界值问题的常微分方程dasrt 隐式微分方程过零解dassl 代数微分方程datafit 基于测量数据的参数辨识derivative 导数计算fsolve 非线性函数过零解impl 线性微分方程int2d 二维定积分int3d 三维定积分intg 不定积分leastsq 非线性最小二乘法linpro 线性规划lmisolver 线性不等矩阵ode 常微分方程ode_discrete 离散常微分方程ode_root 常微分方程根解odedc 连续/离散常微分方程optim 非线性优化quapro 线性二次型规划semidef 半正定规划26. 多项式计算coeff 多项式系数coffg 多项式矩阵逆degree 多项式阶数denom 分母项derivat 有理矩阵求导determ 矩阵行列式值factors 因式分解hermit Hermit 型horner 多项式计算invr 有理矩阵逆lcm 最小公倍数ldiv 多项式矩阵长除numer 分子项pdiv 多项式矩阵除pol2des 多项式矩阵到表达式变换pol2str 多项式到字符串变换polfact 最小因式residu 余量roots 多项式根simp 多项式化简systmat 系统矩阵27. 信号处理%asn 椭圆积分%k Jacobi 完全椭圆积分%sn Jacobi 椭圆函数analpf 模拟量低通滤波器buttmag Butterworth 滤波器响应cepstrum 倒谱计算cheb1mag Chebyshev 一型响应cheb2mag Chebyshev 二型响应chepol Chebyshev 多项式convol 卷积corr 相关, 协方差cspect 谱估计(应用相关法)dft 离散富立叶变换fft 快速富立叶变换filter 滤波器建模fsfirlin FIR滤波器设计hank 协方差矩阵到Hankel矩阵变换hilb Hilbert 变换iir IIR数字滤波器intdec 信号采样率更改kalm Kalman 滤波器更新mese 最大熵谱估计mfft 多维快速富立叶变换mrfit 频率响应拟合phc Markov 过程srkf Kalman 滤波器平方根sskf 稳态Kalman 滤波器system 观测更新wfir 线性相位FIR滤波器weiener Weiener(维纳)滤波器window 对称窗函数yulewalk 最小二乘滤波器zpbutt Buthererworth 模拟滤波器zpch1 Chebyshev 模拟滤波器28. 音频信号analyze 音频信号频域图auread 读*.au 音频文件auwrite 写*.au 音频文件lin2mu 将线性信号转换为μ率码信号loadwave 取*.wav 音频文件mapsound 音频信号图示mu2lin 将μ率码信号转换为线性信号playsnd 音频信号播放savewave 存*.wav 音频文件wavread 读*.wav 音频文件wavwrite 写*.wav 音频文件29. 语言与数据转换工具ascii 字符串的ASCII码excel2sci 读ASCII 格式的Excel 文件fun2string 将SCILAB 函数生成ASCII 码mfile2sci 将MATLAB 的M 格式文件转换为SCI格式文件mtlb_load 取MATLAB第4版本文件中变量matlb_save 按MATLAB 第4 版本文件格式存变量pol2tex 将多项式转换为TeX格式sci2for 将SCILAB 函数转换为FORTRAN格式文件texprint 按TeX 格式输出SCILAB 对象translatepaths 将子目录下的所有MATLAB文件转换为SCI文件格式。
计算材料学Fortran程序汇总
INTEGER M(1:10000), NUMBER1(0:364), NUMBER2REAL X,YISEED=RTC()DO J=1, 10000NUMBER1=0X=RAN(ISEED)NUMBER1(0)=INT(365*X+1)JJJ=1DO I=1,364Y=RAN(ISEED)NUMBER2=INT(365*Y+1)ETR=COUNT(NUMBER1.EQ.NUMBER2)IF (ETR= =1) THENEXITELSEJJJ=JJJ+1M(J)=JJJNUMBER1(I)=NUMBER2END IFEND DOEND DODO I=1,10000IF(M(I).LE.23) SUM=SUM+1END DOPRINT *,SUM/10000END=================================================Monte Carlo Simulation of One Dimensional DiffusionINTEGER X,XX(1:1000,1:1000)REAL XXM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃! XXM(I): THE MEAN OF XXWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!DO I=1,IMAX !第几步跳跃RN=RAN(ISEED)IF(RN<0.5)THENX=X+1ELSEX=X-1END IFXX(J,I)=X*XEND DOEND DOOPEN(1,FILE="C:\DIF1.DAT")DO I=1,IMAXXXM=0.0XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !!WRITE(1,*) I, XXM(I)END DOCLOSE(1)END============================================================ ! Monte Carlo Simulation of Two Dimensional DiffusionINTEGER X,Y,XY(1:1000,1:1000)REAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!DO I=1,IMAX !第几步跳跃RN=RAN(ISEED)IF(RN.LT.0.25)THENx=xy=y-1END IFIF(RN.LT.0.5.AND.RN.GE.0.25)THENx=xy=y+1END IFIF(RN.LT.0.75.AND.RN.GE.0.5)THENx=x-1y=yEND IFIF(RN.GE.0.75)THENx=x+1y=yEND IFXY(J,I)=X*X+Y*YEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)END===============================================! Monte Carlo Simulation of One Dimensional Diffusion INTEGER X,XY(1:1000,1:1000),y,XN(1:4),YN(1:4),RNREAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXXN=(/0,0,-1,1/)YN=(/-1,1,0,0/)ISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!DO I=1,IMAX !第几步跳跃RN=4*RAN(ISEED)+1X=X+YN(RN)Y=Y+YN(RN)XY(J,I)=X*X+Y*YEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)END做三维空间随机行走??留作业! Monte Carlo Simulation of One Dimensional Diffusion INTEGER X,XY(1:1000,1:1000),y,XN(1:6),YN(1:6),ZN(1:6),RN REAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXXN=(/0,0,-1,1,0,0/)YN=(/-1,1,0,0,0,0/)ZN=(/0,0,0,0,1,-1/)ISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!Z=0DO I=1,IMAX !第几步跳跃RN=6*RAN(ISEED)+1X=X+XN(RN)Y=Y+YN(RN)Z=Z+ZN(RN)XY(J,I)=X*X+Y*Y+Z*ZEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)==============================================通过该程序了解fortran语言如何画图(通过像素画图)USE MSFLIBINTEGER XR,YR !在的区域中画一个圆PARAMETER XR=400,YR=400INTEGER R, S(1:XR,1:YR)X0=XR/2 ! 圆心位置X0,YOY0=YR/2R=MIN(X0-10,Y0-10) !圆半径S=0 !像素的初始状态(颜色)DO I=1,XRDO J=1,YRIF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10IER=SETCOLOR(S(I,J))IER=SETPIXEL(I,J)END DOEND DOEND=================================================! 画一个圆(1、如何选出晶界区域;2、进一步加深对画图的理解)USE MSFLIBINTEGER XR,YR !在的区域中画一个圆PARAMETER XR=400,YR=400INTEGER R, S(0:XR+1,0:YR+1), XN(1:4), YN(1:4), SNSXN=(/0,0,-1,1/)YN=(/-1,1,0,0/)X0=XR/2 ! 圆心位置X0,Y0Y0=YR/2R=MIN(X0-10,Y0-10) !圆半径S=0 !像素的初始状态(颜色)DO I=1,XRDO J=1,YRIF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10IER=SETCOLOR(S(I,J))IER=SETPIXEL(I,J)END DOEND DODO I=1,XR !画晶界DO J=1,YRNDS=0DO K=1,4IF(S(I,J).NE.S(I+XN(K),J+YN(K)))NDS=NDS+1END DOIF(NDS>0)THENIER=SETCOLOR(9)ELSEIER=SETCOLOR(8)END IFIER=SETPIXEL(I,J)END DOEND DOEND如何画有一定宽度的晶界?====================================================!MC模拟一个晶粒的缩小(1、如何定义基体和晶粒;(2、如何寻找边界;(3、如何计算能量(构造或描述问题的概率过程)步骤:1、在基体上画一个原始晶粒,并赋予基体和原始晶粒不同的状态(取向号或体积能)2、寻找晶界3、MC的一个时间步(晶粒长大过程中一种随机性)4、计算晶界上网格点的相互作用,每个格点的相互作用导致晶粒长大①随机选取一个初始格点;②若此点属于晶界,那么可以随机转变为它邻居的状态,若不是晶界,则跳出循环,不发生转变;③计算转变前后的能量变化,⊿E=⊿E v +⊿E s +⊿E q(自由能=体积能+表面能+能量起伏)④若⊿E小于0,则新晶相被接受,网格状态发生转变。
fortran语言知识点总结
fortran语言知识点总结Fortran语言知识点总结:1. 基本语法和数据类型Fortran的基本语法和数据类型与其他编程语言类似,包括变量声明、赋值、条件语句、循环语句等。
在Fortran中,变量可以使用不同的数据类型进行声明,包括整数、实数、逻辑型和字符串型。
此外,Fortran还支持数组类型,可以方便地处理多维数组数据。
2. 过程和函数Fortran支持模块化编程,可以将代码模块化为过程和函数。
过程是一系列执行指令的代码块,可以在程序中被多次调用。
函数是一个具有返回值的过程,可以被其他代码调用,并返回一个值。
通过过程和函数的使用,可以提高代码的重用性和可维护性。
3. 指针和动态内存分配Fortran支持指针和动态内存分配,可以在程序中灵活地操作内存。
通过指针,可以获得变量的地址,并在程序中直接操作内存。
同时,动态内存分配允许程序在运行时分配或释放内存,可用于处理不确定大小的数据。
4. 文件操作Fortran提供了丰富的文件操作功能,可以进行文件的打开、写入、读取和关闭等操作。
通过文件操作,可以将程序的输入和输出与外部文件进行交互,从而扩展程序的功能和应用范围。
5. 并行计算Fortran具有强大的并行计算能力,可以利用多核处理器和分布式计算环境实现并行计算。
通过并行计算,可以加速程序的执行速度,提高计算效率。
6. 编译和调试Fortran程序需要通过编译器进行编译,生成可执行文件。
Fortran编译器通常会检查程序的语法和语义错误,并生成可执行文件。
同时,Fortran还提供了丰富的调试工具,可以帮助程序员发现和修复程序中的错误。
7. 数值计算和科学工程计算Fortran是一种专门用于数值计算和科学工程计算的语言,提供了丰富的数学库和科学计算库。
通过这些库,可以方便地进行复杂的数值计算和科学工程计算。
总结:Fortran是一种专门用于数值计算和科学工程计算的编程语言,具有丰富的数学库和科学计算库。
fortran常用算法程序集
fortran常用算法程序集Fortran是一种高级编程语言,广泛应用于科学计算和数值分析领域。
它的强大之处在于它提供了丰富的算法库,使程序开发人员能够快速实现各种常见算法。
本文将介绍一些Fortran常用的算法程序集,帮助读者更好地理解和应用这些算法。
一、线性代数算法线性代数是科学计算和数值分析的基础,Fortran提供了许多用于求解线性方程组、矩阵分解和矩阵运算的算法。
其中一些常用的算法包括:1. 高斯消元法高斯消元法是一种求解线性方程组的方法,可以将线性方程组转化为上三角或下三角矩阵,并进一步求解。
Fortran提供了多种高斯消元法的实现,如LU分解法和托伯利兹矩阵法。
2. 特征值与特征向量计算特征值与特征向量计算是矩阵分解的一种重要问题。
Fortran提供了多种算法来计算矩阵的特征值与特征向量,如幂法、反幂法、QR算法等。
3. 矩阵乘法和矩阵求逆矩阵乘法和矩阵求逆是线性代数中常见的操作。
Fortran提供了多种高效的算法来实现矩阵乘法和矩阵求逆,如Strassen算法、LU分解法等。
二、数值计算算法数值计算算法广泛应用于科学计算、数值模拟和数据分析等领域。
Fortran提供了多种数值计算算法的实现,如数值积分、函数逼近、插值算法等。
以下是一些常用的数值计算算法:1. 数值积分数值积分可以用来对函数进行近似求积,求解曲线下面积或计算定积分。
Fortran提供了多种数值积分方法的实现,如梯形法则、辛普森法则和龙贝格方法等。
2. 函数逼近函数逼近是将多项式或其他数学函数与给定函数进行拟合,用于简化函数计算或数据分析。
Fortran提供了多种函数逼近的方法,如最小二乘逼近、最大误差逼近等。
3. 插值算法插值算法用于根据已知的离散数据点估计未知点的值。
Fortran提供了多种插值算法的实现,如拉格朗日插值法、牛顿插值法和样条插值法等。
三、优化算法优化算法用于求解最优化问题,如寻找函数最大值或最小值的点。
计算材料学作业
用蒙特卡罗方法估计圆周率 值.其fortran语言程序如下:REAL R,R1,R2,PIISEED=RTC()N0=0N=300000DO I=1,NR1=RAN(ISEED)R2=RAN(ISEED)R=SQRT(R1*R1+R2*R2)IF(R<1.0)N0=N0+1END DOPI=4.0*N0/Ndo J=1,5write(*,*)end doWRITE(*,*)”用MC方法估算的圆周率为”WRITE(*,*)PIEND其运行结果如下:用蒙特卡罗方法计算定积分.其fortran语言程序如下:REAL YY=0N=300000ISEED=RTC()DO I=1,NX=RAN(ISEED)Y=Y+X**2/N !计算x^2在[0,1]上的定积分END DOdo J=1,5write(*,*)end doWRITE(*,*)"用MC方法计算x^2在[0,1]上的定积分为"WRITE(*,*)YEND其运行结果如下:用蒙特卡罗方法模拟一维随机行走 其fortran 语言程序如下:INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第n 个原子,I:第几步跳跃 !XXM(I): THE MEAN OF XXWRITE(*,*) “原子个数JMAX ,跳动次数 IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第n 个原子跳跃 X=0 DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THENX=X+1ELSE X=X-1 END IF XX(J,I)=X*X END DO END DOOPEN(1,FILE=“f:\DIF1.DAT") DO I=1,IMAX XXM=0.0XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1)END其运行结果如下:符合 = 的理论关系.用蒙特卡罗方法模拟晶界其fortran语言程序如下:USE MSFLIBINTEGER XR,YR !在的区域中画一个圆PARAMETER XR=400,YR=400INTEGERR,S(0:XR+1,0:YR+1),XN(1:4),YN(1:4),SNS XN=(/0,0,-1,1/)YN=(/-1,1,0,0/)X0=XR/2 ! 圆心位置X0,Y0Y0=YR/2R=MIN(X0-10,Y0-10) !圆半径S=0 !像素的初始状态(颜色)DO I=1,XRDO J=1,YRIF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10IER=SETCOLOR(S(I,J))IER=SETPIXEL(I,J)END DOEND DODO I=1,XR !画晶界DO J=1,YRNDS=0DO K=1,4IF(S(I,J).NE.S(I+XN(K),J+YN(K)))NDS=NDS+ 1END DOIF(NDS>0)THENIER=SETCOLOR(9)ELSEIER=SETCOLOR(8)END IFIER=SETPIXEL(I,J)END DOEND DOEND其运行结果如下:用MC方法模拟单晶粒长大其fortran语言程序如下:USE MSFLIBPARAMETER IR=400,JR=400NTEGERIS(0:IR+1,0:JR+1),TMAX,ISN(1:8),N STATE,T,NR,IX,IYWRITE(*,*)"PLEASE INPUT THE TIME STEP "READ(*,*)TMAXISEED=RTC()IRC=IR/2JRC=JR/2IS=10IS(IRC,JRC)=2OPEN(1,FILE="E:\LUKE.DAT")DO T=1,TMAXDO X=1,IRDO Y=1,JRIX=IR*RAN(ISEED)+1JY=JR*RAN(ISEED)+1ISN=(/IS(IX-1,JY-1),IS(IX-1,JY),IS(IX -1,JY+1),IS(IX,JY-1)&,IS(IX,JY+1),IS(IX+1,JY-1),IS(IX+1, JY),IS(IX+1,JY+1)/)E0=COUNT(ISN.NE.IS(IX,JY))IF(E0.EQ.0)CYCLENR=8*RAN(ISEED)+1NSTATE=ISN(NR)E=COUNT(ISN.NE.NSTATE)RD=RAN(ISEED)DE=E-E0+NSTATE-IS(IX,JY)+2.5*RD-1.25IF(DE.LT.0.0)IS(IX,JY)=NSTATEISRE=SETCOLOR(IS(IX,JY))ISRE=SETPIXEL(IX,JY)ENDDOENDDOWRITE(1,*)T,SQRT(1.0*COUNT(IS.EQ.2))ENDDOCLOSE(1)ENDUSE MSFLIBPARAMETER IR=400,JR=400INTEGERIS(0:IR+1,0:JR+1),TMAX,ISN(1:8),NSTATE,T,NR,IX,IYWRITE(*,*)"PLEASE INPUTTHE TIME STEP "READ(*,*)TMAXISEED=RTC()IRC=IR/2JRC=JR/2IS=10IS(IRC,JRC)=2OPEN(1,FILE="E:\LUKE.DAT")DO T=1,TMAXDO X=1,IRDO Y=1,JRIX=IR*RAN(ISEED)+1JY=JR*RAN(ISEED)+1ISN=(/IS(IX-1,JY-1),IS(IX-1,JY),IS(IX-1,JY+1),IS(IX,JY-1)&,IS(IX,JY+1),IS(IX+1,JY-1),IS(IX+1,JY),IS(IX+1,JY+1)/)E0=COUNT(ISN.NE.IS(IX,JY))IF(E0.EQ.0)CYCLENR=8*RAN(ISEED)+1NSTATE=ISN(NR)E=COUNT(ISN.NE.NSTATE)RD=RAN(ISEED)DE=E-E0+NSTATE-IS(IX,JY)+2.5*RD-1.25IF(DE.LT.0.0)IS(IX,JY)=NSTATEISRE=SETCOLOR(IS(IX,JY))ISRE=SETPIXEL(IX,JY)ENDDOENDDOWRITE(1,*)T,SQRT(1.0*COUNT(IS.EQ.2))ENDDOCLOSE(1)END其运行结果如下:计算材料学第六次试验报告氧化层增重其fortran语言程序如下:integer t1,t2real w1,w2,kwrite(*,*)"第一次氧化时间t1,氧化后增重w1,二次氧化时间t2"read(*,*)t1,w1,t2k=w1**2/t1w2=sqrt(k*(t1+t2))write(*,*)"则第二次氧化后增重:"write (*,*)w2end其运行结果如下:计算材料学第七次试验报告用MC方法模拟多晶粒长大其fortran语言程序如下:USE MSFLIBPARAMETER IR=400,JR=400,NMAX=100 INTEGERIS(0:IR+1,0:JR+1),TMAX,ISN(1:8),NSTATE,T,NR,I X0,IY0,IX,IYINTEGER IGV(0:NMAX)! 读取晶粒生长步长;WRITE(*,*)"PLEASE INPUT THE TIME STEP "READ(*,*)TMAXISEED=RTC()! 定义晶粒长大位置(100个形核点初始形核位置),并附已不同的取向号DO I=1, NMAXIX0=IR*RAN(ISEED)+1JY0=JR*RAN(ISEED)+1IS(IX0,JY0)=IEND DO! 边界条件IS(0,1:JMAX)=IS(IMAX,1:JMAX)IS(IMAX+1,1:JMAX)=IS(1,1:JMAX)IS(0:IMAX+1,0)=IS(0:IMAX+1,JMAX) IS(0:IMAX+1,JMAX+1)=IS(0:IMAX+1,1)OPEN(1,FILE="E:\LUKE.DAT")! 定义基体体积能为10,所有晶粒体积能为1IGV=1IGV(0)=10! 寻找晶粒边界。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
INTEGER M(1:10000), NUMBER1(0:364), NUMBER2REAL X,YISEED=RTC()DO J=1, 10000NUMBER1=0X=RAN(ISEED)NUMBER1(0)=INT(365*X+1)JJJ=1DO I=1,364Y=RAN(ISEED)NUMBER2=INT(365*Y+1)ETR=COUNT(NUMBER1.EQ.NUMBER2)IF (ETR= =1) THENEXITELSEJJJ=JJJ+1M(J)=JJJNUMBER1(I)=NUMBER2END IFEND DOEND DODO I=1,10000IF(M(I).LE.23) SUM=SUM+1END DOPRINT *,SUM/10000END=================================================Monte Carlo Simulation of One Dimensional DiffusionINTEGER X,XX(1:1000,1:1000)REAL XXM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃! XXM(I): THE MEAN OF XXWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!DO I=1,IMAX !第几步跳跃RN=RAN(ISEED)IF(RN<0.5)THENX=X+1ELSEX=X-1END IFXX(J,I)=X*XEND DOEND DOOPEN(1,FILE="C:\DIF1.DAT")DO I=1,IMAXXXM=0.0XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !!WRITE(1,*) I, XXM(I)END DOCLOSE(1)END============================================================ ! Monte Carlo Simulation of Two Dimensional DiffusionINTEGER X,Y,XY(1:1000,1:1000)REAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!DO I=1,IMAX !第几步跳跃RN=RAN(ISEED)IF(RN.LT.0.25)THENx=xy=y-1END IFIF(RN.LT.0.5.AND.RN.GE.0.25)THENx=xy=y+1END IFIF(RN.LT.0.75.AND.RN.GE.0.5)THENx=x-1y=yEND IFIF(RN.GE.0.75)THENx=x+1y=yEND IFXY(J,I)=X*X+Y*YEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)END===============================================! Monte Carlo Simulation of One Dimensional Diffusion INTEGER X,XY(1:1000,1:1000),y,XN(1:4),YN(1:4),RNREAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXXN=(/0,0,-1,1/)YN=(/-1,1,0,0/)ISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!DO I=1,IMAX !第几步跳跃RN=4*RAN(ISEED)+1X=X+YN(RN)Y=Y+YN(RN)XY(J,I)=X*X+Y*YEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)END做三维空间随机行走??留作业! Monte Carlo Simulation of One Dimensional Diffusion INTEGER X,XY(1:1000,1:1000),y,XN(1:6),YN(1:6),ZN(1:6),RN REAL XYM(1:1000)! X:INSTANTANEOUS POSITION OF ATOM! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃! XYM(I): THE MEAN OF XYWRITE(*,*) "实验天数JMAX,实验次数IMAX"READ(*,*) JMAX,IMAXXN=(/0,0,-1,1,0,0/)YN=(/-1,1,0,0,0,0/)ZN=(/0,0,0,0,1,-1/)ISEED=RTC()DO J=1,JMAX !第几天实验X=0 !!!Y=0 !!!Z=0DO I=1,IMAX !第几步跳跃RN=6*RAN(ISEED)+1X=X+XN(RN)Y=Y+YN(RN)Z=Z+ZN(RN)XY(J,I)=X*X+Y*Y+Z*ZEND DOEND DOOPEN(1,FILE="C:\DIF2.DAT")DO I=1,IMAXXYM=0.0XYM(I)=1.0*SUM(XY(1:JMAX,I))/JMAX !!WRITE(1,*) I, XYM(I)END DOCLOSE(1)==============================================通过该程序了解fortran语言如何画图(通过像素画图)USE MSFLIBINTEGER XR,YR !在的区域中画一个圆PARAMETER XR=400,YR=400INTEGER R, S(1:XR,1:YR)X0=XR/2 ! 圆心位置X0,YOY0=YR/2R=MIN(X0-10,Y0-10) !圆半径S=0 !像素的初始状态(颜色)DO I=1,XRDO J=1,YRIF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10IER=SETCOLOR(S(I,J))IER=SETPIXEL(I,J)END DOEND DOEND=================================================! 画一个圆(1、如何选出晶界区域;2、进一步加深对画图的理解)USE MSFLIBINTEGER XR,YR !在的区域中画一个圆PARAMETER XR=400,YR=400INTEGER R, S(0:XR+1,0:YR+1), XN(1:4), YN(1:4), SNSXN=(/0,0,-1,1/)YN=(/-1,1,0,0/)X0=XR/2 ! 圆心位置X0,Y0Y0=YR/2R=MIN(X0-10,Y0-10) !圆半径S=0 !像素的初始状态(颜色)DO I=1,XRDO J=1,YRIF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10IER=SETCOLOR(S(I,J))IER=SETPIXEL(I,J)END DOEND DODO I=1,XR !画晶界DO J=1,YRNDS=0DO K=1,4IF(S(I,J).NE.S(I+XN(K),J+YN(K)))NDS=NDS+1END DOIF(NDS>0)THENIER=SETCOLOR(9)ELSEIER=SETCOLOR(8)END IFIER=SETPIXEL(I,J)END DOEND DOEND如何画有一定宽度的晶界?====================================================!MC模拟一个晶粒的缩小(1、如何定义基体和晶粒;(2、如何寻找边界;(3、如何计算能量(构造或描述问题的概率过程)步骤:1、在基体上画一个原始晶粒,并赋予基体和原始晶粒不同的状态(取向号或体积能)2、寻找晶界3、MC的一个时间步(晶粒长大过程中一种随机性)4、计算晶界上网格点的相互作用,每个格点的相互作用导致晶粒长大①随机选取一个初始格点;②若此点属于晶界,那么可以随机转变为它邻居的状态,若不是晶界,则跳出循环,不发生转变;③计算转变前后的能量变化,⊿E=⊿E v +⊿E s +⊿E q(自由能=体积能+表面能+能量起伏)④若⊿E小于0,则新晶相被接受,网格状态发生转变。
USE MSFLIBPARAMETER IR=400,JR=400INTEGER IS(0:IR+1,0:JR+1),TMAX,ISN(1:8),NSTA TE,T,NR,IX,IYWRITE(*,*)"PLEASE INPUT THE TIME STEP "READ(*,*)TMAXISEED=RTC()! 定义圆心和半径JRC=JR/2R=MIN(IRC,JRC)-10! 定义基体和圆晶粒分别为状态1、状态2IS=1DO I=1,IRDO J=1,JRDISTANCE=SQRT(1.0*(I-IRC)**2+1.0*(J-JRC)**2)IF(DISTANCE.LT.R)IS(I,J)=2ISE=SETCOLOR(IS(I,J))ISE=SETPIXEL(I,J)END DOEND DOOPEN(1,FILE="E:\LUKE.DAT")! 寻找晶粒边界,计算能量,改变状态。