fortran文件操作-open

fortran文件操作-open
fortran文件操作-open

1.文件读取的概念:

读取:“顺序读取”和“直接读取”。

保存:“文本文件”和“二进制文件”。

二进制文件:读取快,因为保存格式和数据在存中的保存方法一样,同时也节省空间。

----------------------------------

2. 文件的操作:

----------------------------------

open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。

example:

program ex0901

impicit none

open(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file指定文件名称。

write(10, *) "hello" !在代码为10的文件中写入hello

stop

end program ex0901

open中有很多参数可以使用,详细如下:

OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...')

UNIT='number':number必须是一个正整数,它可以使用变量或是常量来赋值。number最好避开1,2,5,6。因为2,6是默认的输出位置,也就是屏幕。1,5则是默认的输入位置,键盘。

FILE='filename':指定要打开的文件名称,文件名要符合系统规定。windows下不区分大小写,unix下则会区分大小写,最好不要使用中文文件名。

FORM='FORMATTED' OR 'UNFORMATTED'

FORM字段只有两个值可以设置:

FORM='FORMATTED' “文本文件”格式来保存

FORM='UNFORMATTED' “二进制文件”格式保存

这一栏不给定时候的默认值是: FORM='FORMATTED'

STATUS='NEW' or 'OLD' or 'SCRATCH' or 'UNKNOWN' 用来说明打开一个新的文件或已经存在的旧文件。

STATUS='NEW' 打开一个原本不存在的新文件

STATUS='OLD' 打开一个原来已经存在的文件

STATUS='REPLACE' 若文件已经存在则重新创建一次,原来的容消失;若不存在则会创建新文件。

STATUS='SCRATCH' 表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。

STATUS='UNKNOWN' 由各编译器自定义。通常会同REPLACE的效果。

!这一栏不给定时,默认为STATUS='UNKNOWN'。

ACCESS='SEQUENTIAL' or 'DIRECT' 设置读写文件的方法:ACCESS='SEQUENTIAL' 读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。

ACCESS='DIRET' 读写文件的操作可以任意指定位置,“直接读取文件”。

!不赋值时候,默认为:ACCESS='SEQUENTIAL'。

RECL=length 在顺序读取文件中,RECL字段值用来设置一次可以读取多大容量的数据。

打开“直接读取文件”,RECL=length的length值是用来设置文件中每

一个模块单元的分区长度。

length的单位在文本根式下为1个字符,也就是1 byte。在二进制格式下则由编译器自行决定,一般可能为1 byte (G77) 或4 byte (Visual Fortran)。

ERR=LABEL这个字段用来设置当文件打开发生错误时,程序会跳跃到LABEL所指定的行代码处来继续执行程序。

IOSTAT=var 这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:

var>0 表示读取操作错误

var=0 表示读取操作正常

var<0 表示文件终了

BLANK='NULL' or 'ZERO' 用来设置输入数字时,当所设置的格式字段中有空格存在时所代表的意义。

BLANK='NULL'时,空格代表没有东西。BLANK='ZERO'时,空格部分会自动以0代入。

以下是Fortran 90添加的功能:

POSITION='ASIS' or 'REWIND' or 'APPEND' 设置文件打开时候的读写位置:

POSITION='ASIS' 表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。是默认值。

POSITION='REWIND' 表示文件打开时的读取位置移到文件的开头。

POSITION='APPEND' 表示文件打开时的读取位置移到文件的结尾。

ACTION='READ' or 'WRITE' or 'READWRITE' 设置打开文件的读写权限:

ACTION='READWRITE' 表示所打开的文件可以用来读取及写入,这是默认值。

ACTION='READ' 表示所打开的文件只能用来读取数据。ACTION='WRITE' 表示所打开的文件只能用来写入数据。

PAD='YES' or 'NO'

PAD='YES' 在格式化输入时,最前面的不足字段会自动以空格填满,默认值是PAD='YES'。

PAD='NO' 在格式化输入时,不足的字段不会自动以空格填满。

DELIM='APOSTEROPHE' or 'QUOTE' or 'NONE'

DELIM='NONE' 纯粹输出字符串容

DELIM='QUOTE' 输出字符串容会在前后加上双引号

DELIM='APOSTEROPHE' 输出字符串容会在前后加上单引号

-----------------------------------------

WRITE & READ的使用(详细):

WRITE/READ(UNIT=number, FMT=format, NML=namelist, REC=record, IOSTAT=stat, ERR=errlabel, END=endlabel, ADVANCE=advance, SIZE=size)

UNIT=number 指定read/write所使用的输入输出的位置。

FMT=format 指定输入输出格式的使用。

NML=namelist 指定读写某个NAMELIST的容(后续介绍)。REC=record 在直接读取文件中,设置所要读写的文件的模块位置。IOSTAT=stat 会设置一个数值给在它后面的变量,用来说明文件的读写状态。

stat>0 表示读取操作发生错误。

stat=0 表示读取操作正常。

stat<0 表示文件终了。

ERR=errlabel 指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。

END=endlabel 指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。

以下是fortran 90添加功能:

ADVANCE='YES' or 'NO' 设置在文本格式下的顺序文件中,每一次的READ,WRITE命令完成后,

读写位置会不会自动想下移动一行。

ADVANCE='YES' 是默认的状态,每读写一次会向下移动一行。

ADVANCE='NO' 会暂停自动换行的操作。

!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制write命令是否会自动换行。

SIZE=count 在ADVANCE='NO'时,才可以使用这个字段。它会把这一次输出入的字符数目设置给后面的整型变量。

----------------------------------

查询文件的状态INQUIRE:

在使用open打开文件的前后,都可以通过inquire命令来查询文件目前的情况,inquire命令中的各个字段和第一小节中open的字段很类似。example: !检查某个程序是否存在

program ex0903

implicit none

character(len=20) :: filename = "ex0903.f90"

logical alive

inquire(file=filename, exist=alive)

if(alive) then

write (*, *) filename, " exist."

else

write (*, *) filename, "doesn't exist."

end if

stop

edn program ex0903

详细介绍inquire的使用方法:

INQUIRE(UNIT=number, FILE=filename, IOSTAT=stat, ERR=label, EXIST=exist, OPENED=opened, NUMBER=number, NAMED=named, ACCESS=access, SEQUENTIAL=sequential, DIRECT=direct, FORM=form, FORMATTED=formatted, UNFORMATTED=unformatted, RECL=recl)

UNIT=number 文件代号

FILE=filename 文件名

IOSTAT=stat 查询文件读取情况,会设置一个整数给后面的变量:stat>0 文件读取操作错误

stat=0 文件读取操作正常

stat<0 文件终了

ERR=errlabel 发生错误时会转移到复制的代码行继续执行程序。EXIST=exist 检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。

OPEND=opened 检查文件是否用已经用open打开,返回布尔变量,真表示已经打开,假表示尚未打开。

NUMBER=number 用文件名来查询这个文件所给定的代码。NAMED=named 查询文件是否取了名字,也就是检查文件是否为临时保存盘,返回值为逻辑数。

ACCESS=access 检查文件的读取格式,返回一个字符串,可以是:'SEQUENTIAL' 代表文件使用顺序读取格式

'DIRECT' 代表文件使用直接读取格式

'UNDEFINED' 代表没有定义

SEQUENTIAL=sequential 查看文件是否使用顺序格式,会返回一个字符串,可以是:

'YES' 代表文件是顺序读取文件

'NO' 代表文件不是顺序读取文件

'UNKNOWN' 代表不知道

DIRECT=direct 查看文件是否使用直接格式,会返回一个字符串,可以是:

'YES' 文件是直接读取文件

'NO' 文件是非直接读取文件

'UNKNOWN' 代表不知道

FORM=form 查看文件的保存方法,返回字符串,可以是:'FORMATTED' 打开的是文本文件

'UNFORMATTED' 打开的是二进制文件

'UNDEFINED' 没有定义

FORMATTED=fmt 查看文件是否是文本文件,返回字符串,可以是:'YES' 本文件是文本文件

'NO' 本文件非文本文件

'UNDEFINED' 无法判断

UNFORMATTED=fmt 查看文件是否是二进制文件,返回字符串,可以是:

'YES' 本文件是二进制文件

'NO' 本文件非二进制文件

'UNKNOWN' 无法判断

RECL=length 返回open文件时recl栏的设置值。

NEXTREC=nr 返回下一次文件读写的位置。

BLANK=blank 返回值是字符串,用来查看open文件时的blank参数所给定的字符串值。

以下是fortran 90的添加功能:

POSITION=position 返回打开文件时position字段所给定的字符串, 可能是'REWIND',

'APPEND', 'ASIS', 'UNDEFINED'

ACTION=action 返回打开文件时action 字段所赋值的字符串,可能是'READ', 'WRITE',

'READWRITE'。

READ=read 返回字符串,检查文件是否为只读文件:

'YES' 文件是只读的

'NO' 文件不是只读的

'UNKNOWN' 无法判断

WRITE=write 返回一个字符串,检查文件是否可写入:

'YES' 文件可以写入

'NO' 文件不可以写入

'UNKNOWN' 无法判定

READWRITE=readwrite 返回一个字符串,检查文件是否可以同时读及写:

'YES' 文件可以同时读写

'NO' 文件不可以同时读写

'UNKNOWN' 无法判定

DELIM=delim 返回打开文件时,DELIM字段所设置的字符串,返回值可以是:

'APOSTROPHE', 'QUOTE', 'NONE', 'UNDEFINED' PAD=pad 返回打开文件时PAD字段所设置的字符串,返回值可以是:'YES', 'NO'。

其他文件运行命令:

BACKSPACE(UNIT=number, ERR=errlabel, IOSTAT=iostat) 把文件读写位置退回一步。

ENDFILE(UNNIT=number, ERR=errlabel, IOSTAT=iostat)使用这个命令会把目前文件的读写位置变成文件的结尾。

REWIND(UNIT=number, ERR=errlabel, IOSTAT=iostat)把文件的读写位置倒回到文件开头。

CLOSE(UNIT=number, STATUS=string, ERR=errlabel, IOSTAT=) 把文件关闭,不要进行读写操作。

STAT='KEEP' 会在文件关闭后,保留这个文件。是默认状态。

STAT='DELETE' 在文件关闭后,消除这个文件。

-------------------------------------------

!程序结束时候会自动关闭文件,不过最好要养成自己关闭文件的习惯。!在读文件的时候要懂得略掉一些没有必要的数据,如文件中的注释行。!自由格式的数据文件读取(可以先读入前面的判断字符,结合select case或其他方法判断读入的数据)

!在open,read,write时使用不同的unit值,就可以打开多个文件。最好不要同时打开很多个文件。

顺序文件(SEQUENTIAL):在读写时,不能任意赋值到文件的某个位置读写数据,只能从开头开始一步步向下进行。在改变文件读写位置时,只能一步步地退,或是直接移回到文件开头。

直接访问文件:把文件的空间,容,事先分区成好几个同样大小的小模块,这些模块会自动序编号。读写文件时,要先赋值文件读写位置在第几个模块,再进行读写的工作。直接访问文件可以任意到文件的任何一个地方来读写。在使用直接访问文件时,要小心使用endfile命令,使用这个命令会把目前所在的文件位置之后的数据都清除掉。

二进制文件的操作:使用二进制文件来做直接读取时,open命令中的recl字段所设置的整数n值所代表的大小会随编译器不同而改变。每个编译器应该都可以经过设置来改变recl字段的单位大小。二进制文件没有必要在数据之间用区分符号来增加文件的可读性,因为二进制文件本身就没有可读性。二进制文件是直接把存的二进制数据写入文件,就没有所谓的格式化输入/出存在。存放“精确”及“大量”的数据时,使用二进制文件是比较好的选择。二进制文件也可以使用顺序格式来操作,顺序格式下显示来的二进制文件,每个数据的前后都会被编译器补上一些额外的信息,所生成的文件不太容易被其他程序读取。

关于以上文件操作详细见《fortran 95程序设计》9-3~9-5。

Internal File(部文件)

使用写入文件的方法,把数据写到一个字符串变量中。

example:

a=2

b=3

character (len=20) :: string

write (unit=string, fmt="(I2,'+',I2,'=',I2)") a, b, a+b !把字符串变量当作输出的目的。

write(*, *) string

结果: 2+ 3= 5

还可以经过read命令从字符串读入数据:

integer :: a

character (len=20) :: string="123"

read(string, *) a

write(*, *) a

在某些情况下需要使用部文件来设置数据:

使用read命令从键盘输入数据时,如果用户输入错误的数据,会导致死机。如需要输入整数时却输入英文字母,就可能会死机。比较好的处理办法是,程序先暂时把数据当作字符串读入,检查字符串中是否含有不合理的字符,如果字符串中都是0~9的数字字符,就把字符串转成整数,不然就请用户在输入一次。

部文件还可应用在动态改变输出格式,输出格式可以事先存放在字符串中,程序进行时,动态改变字符串容就可以改变输出格式。(见书P263)

NAMELIST:

NAMELIST是很特殊的输入/输出方法,收录在f90标准当中,f90中有统一NAMELIST的格式。

NAMELIST可以把一组相关变量封装在一起,输入/出这一组变量时,只要在write/read中的NML字段赋值使用哪一个NAMELIST就行了。

example:

program ex0918

implicit none

integer :: a = 1, b = 2, c= 3

namelist /na/ a,b,c

write(*,nml=na)

stop

end program ex0918

&NA

A = 1,

B = 2,

C = 3,

/

程序中把a,b,c这三个变量放在名字叫做na的namelist中。namelist 也算是声明的一部分,必须编写在程序执行命令前面。

NAMELIST的语法很类似COMMON,不过使用namelist时一定要取名字:

namelist /nl_name/ var1, var2, ... !后面的变量会放在nl_name 这个namelist中。

封装好namelist后,在write的NML字段中指名要输出哪一个namelist,就可以把namelist中的变量全部输出。

write(*,nml=na) !输出na这个namelist

输出namelist时候不能赋值输出格式,f90标准中规定输出namelist 时首先会输出符号&,后面紧接着这个namelist的名字。接着会根据顺序输出变量的名称,等号以及容,变量之间用空格或逗号来做分隔,最后使用除号来作结束。

至于每个数值容会使用何种格式输出由编译器自行决定。NAMELIST也可以用来输入数据,不过通常都会用来读取文件,不会用在键盘输入。输入格式需要按照前面的格式。&na ....../ 不需要按照变量顺序输入,程序会自动按照变量名称来设置数值。变量甚至可以重复输入,不过变量会得到最后一次设置的数值。

namelist通常使用在文本文件的输入/输出中,使用read从文件中读取数据时,会自动从目前的位置向下寻找存放namelist的地方。example:

program ex0920

implicit none

integer :: a(3)

namelist /na/ a

open(10, file="ex0920.txt")

read(10, nml=na)

write(*, "(3I2)") a

stop

end program

输入文件的容如下:

happy birthday

&na a = 1,2,3/

程序打开时,读写位置在文件的开头,read命令会自动向下寻找na这个namelist的存放位置来读取数据,这边可以看到namelist处理数组的方法,它会在等号后面根据顺序显示数组容。

fortran常见问题解决

楼主为了减少重复回答问题,特编此帖,并不定期添加和更新内容。 错误难免,欢迎讨论,仅供参考。 很多人问哪里可以找到Fortran编译器,有不少热心学友提供网址,特汇集在这里。虽然俺检验过这些链接,但是它们不一定总有效。 Fortran编译器下载: CVF? FTN95(License:Freeforpersonaluse) 以下操作,如无特别说明,都是以为例。 1.如何加大Stacksize? 选Project=>Settings=>Link=>Category:Output=>? Stackallocations Reserve:这里填新值(默认为1M,若需要10M,则填) 2.如何用Fortran批量生成文件? 设要生成4000个文件,文件名为AA1-AA4000,如何写循环生成文件,而不用写4000次write 命令呢? 用内部文件: character(len=80)::filename,form integer::i doi=1,4000 selectcase(i) case(1:9) write(form,'(i1)')i case(10:99) write(form,'(i2)')i case(100:999) write(form,'(i3)')i case(1000:9999) write(form,'(i4)')i endselect write(filename,*)"AA",trim(form),".TXT" open(10,file=filename) write(10,*)i close(10)

enddo? stop end 3.如何用Fortran动态生成输出格式? 设有一个数组data(100),输出时,希望每行输出num个数,而num由用户输入,如何实现? 用内部文件: character(len=80)::form real::data(100) integer::i,num data=(/(i,i=1,100)/)/ read(*,*)num write(form,*)"(",num,"" write(*,form)data stop end 4.MS是不是很垃圾? 是垃圾,其中Bug太多,多到不可用的地步! 在这个主题里,换了CVF后问题就没了的人已有相当的数目。 如果你用,遇到莫名其妙的错误,建议换,这是一个比较成熟的编译器。 5.如何用F90/95生成随机数? 注意: 现在计算机产生的随机数都是伪随机数。 random_number(x)产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。用了random_seed()后,系统根据日期和时间随机地提供种子,使得随机数更随机了。 programrandom implicitnone real::x callrandom_seed()!系统根据日期和时间随机地提供种子 callrandom_number(x)!每次的随机数就都不一样了 write(*,*)x stop endprogramrandom 6.函数/子程序超载的例子

fortran文件读取技巧

最近专业课海洋要素计算作业需要用fortran编程读取验潮站资料(如下,是txt,其中数据是有62行,限于篇幅,我只截取了前5行数据外加验潮站的4行头信息) !要注意的是最后一列数据后面没有空格 program ex1 !********************************************** !* written by 潘海东, 2015,3,20 !*一次性读取744个数据,放入一维数组中 !*(如果一次性读取太多的话可能会对系统造成某些影响) !********************************************** INTEGER :: b(62*12),i character(len=20) time,location,u1,u2 open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old') !********读取头信息 read(10,"(A3)") u1 read(10,"(A18)") time read(10,"(A13)") location read(10,"(A2)") u2 !********读取数据 read(10,100) b(:) 100 format(61(11(I4,1x),I4,/),11(I4,1x),I4) !在fortran的输入输出中'/'代表换行 close(10) end program ex2 !********************************************** !* written by 潘海东, 2015,3,20 !*读取第3列至第11列 !********************************************** INTEGER :: a(62,9),i character(len=20) time,location,u1,u2 open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old') !***读取头信息

用Grads处理GRIB格式文件的准备_2007-07-12

Grads处理GRIB格式文件的准备 LYanbing 2007-7-2初稿,2007-7-12修改1 开场说明 WHAT IS GRIB? GRIB (GRIdded Binary) is an international, public, binary format for the efficient storage of meteorological/oceanographic variables. Typically, GRIB data consists of a sequence of 2-D (lon,lat) chunks of a (in most general sense) 4-D variable (e.g., u comp on the wind = f(lon,lat,level,time)). The sequence is commonly organized in files containing all variables at a particular time (i.e., 3-D (lon,lat,level) volume). 大气所的NCEP再分析资料使用这种格式。 这里针对6小时一次的1°×1°,26层数据来处理。 Grads中识别路径的方式基本为Unix的方式,即路径中用斜杠/,而不是反斜杠\,cmd中也支持这种方式,所以,使用Grads及其相关组件时,指定路径用斜杠/会很方便。 Grads中用!pwd可以看到当前目录,C:盘对应/cygdrive/c/,d:盘对应/cygdrive/d/。cmd中用pwd看到的也是如此,cygdrive是怎么来的?与cygwin程序有关,它能把Unix程序嫁接到windows下使用,它的目录系统以/cygdrive/为根目录。 如果ctl文件中,数据文件指定不是全路径,而是^,则可以在open命令中指定上述形式的全路径,例如: ga-> open /cygdrive/d/data/ncep/grib2006060100.ctl 它等效于: ga-> open d:/data/ncep/grib2006060100.ctl 2 生成描述文件 PCGrads软件的User’s Guide中介绍了GRIB及其处理方法,但不完全。实际上有两种方法:1)利用工具grib2ctl.exe生成整个文件的描述文件.ctl,再利用工具gribmap.exe生成映射文件.idx;2)利用工具wgrib.exe解码文件中需要使用的部分记录,建立新的数据文件,然后人工建立描述文件.ctl。 为了使用方便,环境变量Path中增加Grads可执行文件所在目录,则在cmd中其他路径下亦可访问所有该目录下的工具。 2.1 方法1 使用工具grib2ctl.exe生成GRIB数据文件的描述文件ctl,之后还要使用gribmap工具生成映射文件.idx。 1. 工具grib2ctl.exe的获得。

几种Fortran 编译器简介

几种Fortran 编译器 --------------------------------------------------------------------------------------- 1.CVF Compaq Visual Fortran (CVF), 当今PC平台上功能相当强大与完整的Fortran程序开发工具,还用于Abaqus的开发。 1997年,微软将Fortran PowerStation卖给DEC之后,微软就不再出版Fortran编译器了。后来DEC并入了Compaq,再后来Compaq又和HP合并了。现在最新的版本是HP出的Fortran for Windows v6.6,现在HP/Compaq已经不再开发Fortran了,CVF 6.6是最终的版本了,Compaq的Fortran开发小组已经投入Intel旗下,目前Intel已经有Intel Visual Fortran 11.0。Compaq Visual Fortran 6.6官方的单价也相当昂贵。 Compaq Visual Fortran 6.6 下载: https://www.360docs.net/doc/db16658360.html,/SoftDown.asp?ID=11937 Compaq Visual Fortran 6.6 绿色版下载: https://www.360docs.net/doc/db16658360.html,/down/10915.html Compaq Visual Fortran 6.5 下载: https://www.360docs.net/doc/db16658360.html,/soft/fortran6.5.rar ftp://2006:2006@https://www.360docs.net/doc/db16658360.html,/36/https://www.360docs.net/doc/db16658360.html,-002124.rar --------------------------------------------------------------------------------------- 2. IVF Intel Visual Fortran (IVF)将Compaq Visual Fortran* (CVF) 语言的丰富功能与英特尔代码生成及优化技术结合在一起。目前Intel已经有Intel Visual Fortran 11.0。 下载: Intel官方网站 ftp://166.111.26.159/software/science/ ftp://202.112.85.101/pub2/Windows/Scientific_Tools/Fortran/https://www.360docs.net/doc/db16658360.html,p iler/ 从https://www.360docs.net/doc/db16658360.html,/maths/下载。IVF10可以用IVF9的licence https://www.360docs.net/doc/db16658360.html,/irc_nas/730/w_cc_p_10.0.025_ia3 2.exe 集成VS2005的IVF10.1:w_fc_p_10.1.021.exe (302MB) Intel(R) Visual Fortran for IA-32 and Intel(R) 64 (with Microsoft Visual Studio 2005

GrADSctl文件编写

Components of a GrADS Data Descriptor File DSET data_filename back to top This entry specifies the filename of the data file being described. If the data and the descriptor file are not in the same directory, then data_filename must include a full path. If a ^ character is placed in front of data_filename, then data_filename is assumed to be relative to the path of the descriptor file. If you are using the ^ character in the DSET entry, then the descriptor file and the data file may be moved to a new directory without changing any entries in the data descriptor file, provided their relative paths remain the same. For example: If the data descriptor file is: /data/wx/grads/sa.ctl and the binary data file is: /data/wx/grads/sa.dat then the data file name in the data descriptor file can be: DSET ^sa.dat instead of: DSET /data/wx/grads/sa.dat If data_filename does not include a full path or a ^, then GrADS will only look for data files in the directory where you are running GrADS. GrADS allows you use a single DSET entry to aggregate multiple data files and handle them as if they were one individual file. The individual data files must be identical in all dimensions except time, and the time range of each individual file must be indicated it its filename. To accomplish this, the DSET entry has a substitution template instead of a filename. See the section on Using Templates for a description of all the possible components of the template. Second, the OPTIONS entry must contain the template keyword. CHSUB t1 t2 string back to top (GrADS version 1.9b4) This entry is used with a new option for templating data files that allows for any user-specified string substitution, instead of only date string substitution. This is useful when none of the standard template options match the time ranges in the files you wish to aggregate, or if the files are located on different disks. When you put the %ch template in your DSET entry, then you also need to put additional CHSUB entries in the descriptor file. The string will be substituted for%ch in the data file name for the time steps beginning with t1 and ending with t2.See the section on Using Templates for examples. DTYPE keyword back to top The DTYPE entry specifies the type of data being described. There are four options: grib, hdfsds, netcdf, or station. If the data type is none of these, then the DTYPE entry is omitted completely from the descriptor file and GrADS will assume the data type is gridded binary.

fortran心得

Read 的规则: 按行读取,每次读一行,读完后光标自动跳到下一行的开头,空格和逗号代表结束(所以空格和逗号也是读取的一部分的话,需要使用“输入输出格式”) 如果想要将一行数据读入数组,代码为: Read(10,*) s(:,:,:) 不用规定输入输出格式,因为会根据s(:,:,:)确定需要读入的数字的个数,然后fortran会按部就班的读取,甚至文件中当前这一行的数字个数不足以填满s(:,:,:)的时候,read会自动跳到下一行继续搜索数字,直到填满s(:,:,:)为止。 但是需要注意给数组赋值的顺序:read会把它搜索到的第一个数字给s(1,1,1),第二个给s(2,1,1),第三个给s(3,1,1)… 程序9 1: 将read(unit=field,fmt="(A79)",iostat=status)buffer 中的A79改为A2,结果只输出每行的前两个字符,说明read是按整行整行读取的。 中间空了几行之后,空行之后的内容还是能被读取和输出,这说明,空行和空白是不一样的:空行也算是一种文本内容,因此不会终止读取,而空白意味着结束。 !读取文件 program main implicit none character(len=79)::filename="number.txt",buffer integer,parameter::field=10 integer::status=0 logical alive inquire(file=filename,exist=alive) if(alive)then open(unit=field,file=filename) do while(.true.) read(unit=field,fmt="(A79)",iostat=status)buffer if(status/=0)exit write(*,"(A79)")buffer end do else write(*,*)filename,"does't exist." end if pause stop end program main ============================================= 附number.txt =============================== 1234555666

FNL_1x1资料认识与应用(GrADS)- 兰溪整合版(grib1 grib2)

FNL 1X1 资料认识与应用 兰溪之水整合版2011-12-16 14:34:05(第一版) 2012-05-01 22:42:49(第二版)FNL 1.0X1.0数据下载地址:https://www.360docs.net/doc/db16658360.html,/datasets/ds083.2/需要注册通过方可下载。 FNL 1.0X1.0 资料包含的物理量及其缩写 缩写参数名称 No4LFTXsfc 近地表四层等压面的抬升指数 No5WAVAprs 500 hPa等压面位势高度距平 No5WAVHprs 500 hPa等压面位势高度 ABSVprs 绝对涡度 CAPE 对流有效位能 CIN 对流抑制能 CLWMRprs 云水 CWATclm 气柱云水 GPAprs 位势高度距平 HGT 位势高度 HPBLsfc 地表行星边界层高度 ICECsfc 海冰密集度 LANDsfc 陆地覆盖 LFTXsfc 地表抬升指数 O3MRprs 臭氧层混合比 POTsig995 位温 PRE 气压 PWATclm 可降水量 RH 相对湿度 SOILW 土壤体积含水量 SPFH 比湿 TCDCcvl 对流云总云量 TM 温度 TOZNEclm 臭氧含量 UGRD u分量 VGRD v 分量 VVEL 垂直速度 VWSH 垂直风切变 WEASDsfc 累积雪量

GrADS处理FNL 1.0X1.0(grib1)数据 处理前需要先将grib2ctl.exe放到GrADS安装文件夹GrADS19\win32(1.9版本)或OpenGrADS\Contents\Cygwin\Versions\2.0.a9.oga.1\i686(2.0版本)下,方便操作。gribmap.exe(这个GrADS自带的) 第一步:先生成一个描述文件ctl 打开命令提示符, C:\Documents and Settings\Administrator>grib2ctl grib_file > grib_file.ctl 如: 或者进入GrADS: gs>!grib2ctl grib_file > grib_file.ctl (!表示调用外部的程序,注意路径用“/”) 如: 这样fnl_20101013_00_00_c.ctl描述文件就生成了! 第二步:利用GrADS自带的gribmap.exe生成索引文件: C:\Documents and Settings\Administrator>gribmap –v –i grib_file.ctl > b.txt 如: 或进入GrADS: 这样就会在H:\test路径下生成名为fnl_20101013_00_00_c.idx的索引文件,并会把整个映射过程写入到b.txt文件中,当然这里也可省略查看映射过程,即 C:\Documents and Settings\Administrator>gribmap –i grib_file.ctl 这样就可以开始用GrADS读取FNL文件画图了! 不过我们处理FNL资料的时候一般都是不止一个文件,所以我们就需要用到批处理了! 第一步:利用grib2ctl.exe生成初始时刻ncep数据的ctl文件;示例中生成的是fnl_20101013_00_00_c数据的文件。

Fortran编译器及下载地址

Fortran 编译器 --------------------------------------------------------------------------------------- 1. Fortran Powerstation 4.0 Fortran Powerstation 4.0是最老的版本 下载ftp://2006:2006@https://www.360docs.net/doc/db16658360.html,/36/https://www.360docs.net/doc/db16658360.html,-002123.ZIP --------------------------------------------------------------------------------------- 2.CVF Compaq Visual Fortran (CVF), 当今PC平台上功能相当强大与完整的Fortran程序开发工具,还用于Abaqus的开发。 1997年,微软将Fortran PowerStation卖给DEC之后,微软就不再出版Fortran编译器了。后来DEC并入了Compaq,再后来Compaq又和HP合并了。现在最新的版本是HP出的Fortran for Windows v6.6,现在HP/Compaq已经不再开发Fortran了,CVF 6.6是最终的版本了,Compaq的Fortran开发小组已经投入Intel旗下,目前Intel 已经有Intel Visual Fortran 11.0。Compaq Visual Fortran 6.6官方的单价也相当昂贵。 Compaq Visual Fortran 6.6 下载: https://www.360docs.net/doc/db16658360.html,/SoftDown.asp?ID=11937 Compaq Visual Fortran 6.6 绿色版下载: https://www.360docs.net/doc/db16658360.html,/down/10915.html Compaq Visual Fortran 6.5 下载: https://www.360docs.net/doc/db16658360.html,/soft/fortran6.5.rar ftp://2006:2006@https://www.360docs.net/doc/db16658360.html,/36/https://www.360docs.net/doc/db16658360.html,-002124.rar ---------------------------------------------------------------------------------------

Fortran进行批处理地方法

Fortran中批量处理文件的方法总结 —循环读取目录下的所有符合条件的文件===================== 一、简单的介绍 在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。 对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦! 这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。 我总结的批处理方法大概可以用下面这个示意图来说明: | | |将文件目录写入一个文本文件,供fortran循环读取 |————手动输入文件名 |————运行程序之前命令行工具导出文件名 |————程序运行后,未开始计算之前,生成文件名 | ————调用CMD命令生成 | ————GETFILEINFOQQ方法生成 | ————调用WIN32API生成 | |在程序运行时动态生成文件名 | | 对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。第二种方法主要是说明其思路。 二、方法的介绍 1、将文件目录写入一个文本文件,供fortran循环读取 1.1、手动输入文件名 这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。

FORTRAN-90-程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号

fortran新建,添加外部文件和简要读写格式说明

1.建立新的运行空间 File>new>workspace>new>prject>console application>new>file>free-form 2.建立多个文件 可以把子程序文件和主程序文件放在同一个source文件下 3.建立外部文件用于读写数据 Open(1,file=’ exam.txt ‘)用于打开文件,其中1为设备号——用一整数表示,exam.txt为要打开的文件名,文件有文件名和文件类型构成,文件名可给出路径如file=’ D:\exam\exam.txt ‘Write(1,*)’学生的成绩为:’用于在写在前面打开的1文件里写数据,其中*和0、5、6是系统预定义的设备号由系统隐含规定。一个文件名只能和一个设备号建立联系,同样一个设备号也只能与一个文件建立联系,一个通过OPEN语句打开并指定了设备号的文件不能再次用OPEN语句打开 Read(1,*)表示从文件里面读取数据,一次读取一个数据,数据间用逗号隔开 每隔一个read语句或write语句默认的换一行读入或写入 Write(1,”(‘输入’)”)=write(1,*) ‘输入’ Write(1,”(‘I3,’输出’,I7)”) x,y结果是x以3个整型字符输出,输出,y以7个整型输出 Read(1,100)或write(1,100)I,j,k 100 format(I3,I7,F6)表示按照100语句的格式读入或输出顺序读写数据: Read(uint设备号,fmt格式说明,end结束语句转移,eor错误语句转移) 输入数据可以按规定的域宽输入,也可以用逗号强制间隔, 1.使用read语句读取数据时,read语句输入表中的数据类型和格式应该与当前指针位置 数据类型和格式一致。 2.使用read语句读取数据时,从当前文件指针开始读取,完成读取后文件指针自动后移一 个记录,使用OPEN和REWIND语句时,文件指针指向第一个记录,从第一个记录开始读取。 3.使用read语句读取时,如果输入表要求输入的数据少于当前记录的数据个数,则多余的 数据将被忽略,下一个read语句从下一个新的记录开始读取数据。相反则继续读取下条数据记录直到读完全部输入数据。 4.使用write语句时,从当前文件指针开始存写,完成存写后文件指针自动后移一个记录, 使用OPEN和REWIND语句时,文件指针指向第一个记录,从第一个记录开始读取。如果文件已存在,则原文件的数据将丢失。 5.使用write语句写入数据时,从当前的位置开始写入,可使用format语句中的格式说明 及括号和反斜杠/创建多条新纪录写入,完成操作后,文件指针自动后移一个记录。6.使用了read以后,立即使用write语句,将导致写入的数据为最后一个记录,其余的数 据将丢失。如果在文件末尾要写入新的记录可以通过下了语句实现: 100 read(1,*,end=200) Goto 100 200 write(1,*)’’ 7.使用了write语句立即使用read语句会遇到一个文件结束标志。如果写入后要立即进行 读取,需要用OPEN、rewind、backspace等对文件重新定位。 文件打开操作: Open(unit=设备号,file=文件名,access=存取方式,form=存取格式,recl=记录长度,err=错误转移,pad=补加空格,position=读取位置) 如err=100,表示跳到100号语句 Position 为文件位置包括三个格式,ASIS,已存在文件的上一次操作位置为文件的位置,缺

气象绘图软件GrADS高级使用技巧

收稿日期:2002-11-1 作者简介:高文良,男,31岁,主要从事短期气候预测等研究工作。 气象绘图软件GrADS 高级使用技巧 高文良1 刘晓燕2 曾小东3 (11成都高原气象研究所 成都 610072; 21阿坝州金川县气象局 624100 31阿坝州马尔康县气象局 624000 ) 摘 要:本文通过介绍气象绘图软件GrADS 使用中 的一些高级技巧,分析了GrADS Script 语言中的难理解之处,并介绍了在GrADS 中做合成分析和t 检验的程序,可以对学习和使用GrADS 的科研人员起参考、帮助作用,达到事半功倍的效果,促进GrADS 软件的应用更广泛、深入,提高科研人员的工作效率。关键词:GrADS ;技巧;程序中图分类号:TP391文献标识码:C 文章编号:1003-7187(2002)04-0057-03 1 引言 气象绘图软件GrADS (Grid Analysis and Dis 2play System )是免费共享软件,可随时从互联网上下载(http ://https://www.360docs.net/doc/db16658360.html,/grads/),后续版本正陆续推出[1]。GrADS 有丰富的内部函数,可以对数据进行计算和分析处理。它支持处理格点资料和站点资料,并且支持对GriB 码文件、特殊格式文件(如一字节整型、二字节整型、大中型机器二进制数据等)的直接读取,气象科研领域应用非常广泛[2]。在其最新1.8SL 9版本中,GrADS 又将应用领域推进到了海洋学科,功能也得到了进一步地增强和扩展。 但在使用GrADS 的过程中,特别是使用GrADS Script 语言编程当中,有一些问题需要特别注意。因为GrADS Script 语言是一种类似于VB Script (或MA TL AB Script )的高级语言,稍不注意就容易出现错误,且查错十分困难,这点与其他语言有较大的差别。2 站点数据处理 GrADS 中站点数据处理基于格点数据的基础之上,需先将站点数据通过Cressman 客观分析方法内插至格点上,然后再依照格点资料的处理方式对站点资料数据进行分析和处理。所以,内插的背景网格点的选取就显得比较重要。提供背景格点资料数据只起一个背景网格场的作用,格点数据并不参与运算,只提供网格背景,告诉站点数据插至什么点及各个点的距离、综合考虑几个点来插值等信息。 因此,对于需要揭示小尺度特征气象场的站点数据,就需要将背景网格点的间距取得小一些,这样可以将局地小尺度信息完整地体现出来。反之,如果要强调大尺度的信息,就可以将背景格点场的间距取得大一些,将小尺度的噪声滤掉,体现大尺度场的特征。两种方法的最终目的是画出真实而美观的原始数据场的图形。 要将已有的站点数据资料转换成GrADS 可以读取格式的站点数据,也可使用Visual Fortran 6.0或C 语言(Turbo C 、Visual C ++等)进行转换。但必须按照GrADS 的规定格式来变换。数据文件头的结构和定义也必须按规定且与后续数据一致。在Visual Fortran 6.0语言中可以用流式文件(Stream )的方式生成GrADS 需要的站点数据文件,可以写成多时次、多层次和多变量的数据集(在Power Station 4.0中则不能写成多时次和多层次的数据集,它不支持Stream 方式的文件,只能写一个时次的数据)。而在C 语言中的操作更加方便,因为C 语言中对文件的操作方式一般是以字节为单位进行的,没有其他多余的信息。只要按照GrADS 要求的数据格式生成数据,以上的各种语言环境下都能够被GrADS 正确读取。 另一个需注意的问题是在格点文件和站点文件之间,一定使两者的数据描述文件保持时间上的一致性。起始时间和时间步长都要符合数据本身的规定。如果起始时间不一致,在GrADS 中会出现少于两个站的提示,画出的图被标示为缺测值。如果上述两种数据的时间步长不一致,则可能出现错误的结果,导致在一个特定时间下的数据成为另一个时间下的数据,而不是操作者想要的时次。或者图形的结果和前面第一种错误一样,出现全为缺测值的错误情况。

Fortran基本用法小结档

Fortran基本用法小结 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。以下是77和90的一些格式上的区别。

grads处理多个ctl文件和nc文件

grads处理多个ctl文件和nc文件 2011-10-10 21:03:59| 分类:grads学习| 标签:|举报|字号大中小订阅 下载LOFTER我的照片书 | 用grads处理多个相同格式的数据时若单个单个处理非常麻烦,当文件非常多的时候是单个处理是不实际的。下面介绍一种方法; 第一步,在这种情况下可以重新写一个ctl描述文件,其文件变量都和已知的ctl相同,若原来的n 文件只是时间不同,那么新描述文件的时间维数是所有原文件的时间的和。同样,若其他维数不同时也用同样的方法处理。 第二步,在第一行之后添加一行:options template 表示多个时间序列原始数据文件想用一个描述文件统一地描述。这些原数据的原文件名由dset定义的形势命名文件名。 第三步,修改dset 的文件名。原路径不变,把文件名用%表示。其中: %y2 代表两位数年 %y4 代表四位数年 %m1 代表一位或者两位数的月 %m2 代表两位数月(用0补齐1位数) %mc 3个字符月份的缩写 %d1 1或2位天 %d2 两位天 %h1 1或者2位时 %h2 2位时 例如: 原文件其中之一的文件名为gdas2006050812f00,且所有文件只有天和时的变化 那么新描述文件的文件名为:gdas200605%d2%h2f00 另外如果源文件里有index项的话,需要修改其idx的文件名,假设改成fnl.idx。并用在dos下用gribmap函数生成一个新的idx文件。gribmap -e -i fnl.ctl(加绝对路径) open fnl.ctl就可以打开所有文件。 *************************************************************************************************************** *******************

Fortran基本用法小结

【以下文字转载自D_Atmosphere 讨论区】 【原文由superjyq 所发表】 我的Fortran基本用法小结 高级语言和算法组heavensky 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所

相关文档
最新文档