Fortran编程知识杂货店

目录
  1. 数组
    1. 动态数组
    2. 赋值
  2. 文件
    1. WRITE
    2. OPEN
    3. READ
  3. 字符串
    1. 拼接
    2. 转化
  4. 子程序
  5. 编译

本栏目开设的目的主要是为了记录一些学过或是见过的语法,算是个备忘录(自用)

数组

动态数组

动态数组的定义为

1
2
3
integer,allocatable::time(:)
allocate(time(N))
deallocate(time)

多维只需添加逗号隔开

赋值

利用data

1
2
3
4
5
6
7
8
9
integer a(3)
data a /1,2,3/

integer b(3)
data b/3*1/ !denote three elements are all 1

integer c(3)
integer i
data(c(i),i=2,3)/4,5 !denote that element 2 and 3 are 4 and 5 respectively

不利用data

1
integer::d(3)=(/1,2,3/) !there shouldn't be anything between '(' and '/'

这里需要特别说明的是

data语句不会循环重复赋初值,因此在循环体,例如求和计算需要每次赋值为0的时候,不能够在循环体内使用data,这样起不到效果的,还是需要

1
2
3
4
5
do i=1,n
a(i)=0
end do
!而不是
data a/n*0/!无效果

文件

WRITE

如果想打印不换行,可以

1
2
3
write(*,'(i2,$)') xxx
write(*,'(i2\)') xxx
write(*,'(i2)',advance='no') xxx

OPEN

遇到

1
bad integer for intem1 in list input

也可能是循环中文件打开没有close导致的


想要在文件后继续输入,不覆盖写入

1
2
open(unit,file='xxx',position='append')
close(unit)

重复顺序读取文件时,可以使用

1
open(1,file='filename.txt',position='rewind')

READ

在do-while循环中,如果需要读到文件末尾结束,标记语句需要在循环体外部

1
2
3
4
5
6
7
t=.true.
do while(t)
xxx
read(1,*,end=100) xxx
xxx
end do
100 t=.false.

字符串

拼接

1
2
3
a='filename'
b='.txt'
c=a//b !c='filename.txt'

转化

1、整数

1
2
3
4
5
6
7
integer a
character*4 astr
character*20 dir
a=2
write(astr,'(i2)') a !now astr is a string ' 2'
dir='dir'//trim(adjustl(astr))//'.txt'
!dir=dir2.txt

实数其实也一样

子程序

编译