20180907运行 CRTL+F5
编译器: 一般编译器本身都是控制台程序(console),没有界面。 命令行
IDE : 集成开发环境,用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。如Microsoft Visual Studio和Code::Blocks等
编辑器 : UEStudio
Intel Visual Fortran 配合 Visual Studio
GFortran 配合Code::Blocks
固定格式:.f .for .fpp 语言版本:f66 f77
自由格式:.f90 .f95 .f2k 语言版本: f90, f95,f2003,f2018,f2015
开发环境:计算机、操作系统、编译器
安装的时候,vs仅需 C++ 组件,ivf仅需安装编译器并集成于vs
先装VS,然后ivf。
ivf安装目录下会带有帮助文档。 .chm
默认下是单精度的。
图中 1.6 表示单精度数据,1.6d0 是双精度数据。 单精度有误差,尽量可以用到双精度。
implicit real*8(a-z) 说明 从从a到z开头的变量都是浮点数。
implicit none 关闭默认类型功能,所有变量都事先声明。
默认情况下,第一个字母为I,J,K,L,M,N的变量会视为整数类型,其他的变量则会被当成浮点数来使用。
ivf帮助文档中,所有绿色字体标注的内容均为非标准用法
Fortran数据类型 | ||||||
类型 | character | logical | integer | real | complex |
|
kind值 (单个数据占用内存字节数) | 1 | 1 | 1 |
|
|
|
| 2 | 2 |
|
|
| |
| 4 | 4 | 4 | 4 | complex*8 | |
| 8 | 8 | 8 | 8 | complex*16 | |
|
|
| 16 | 16 | complex*32 |
ivf中dollar($)也可用于标识符中,且可以为首字符;$开头的变量一般为系统变量。
read和write语句至少包含两个参数,即通道号(unit)和格式(fmt):
20180908
运行项目
第一步,打开调试环境(按装后在开始中会有):
第二步,如果没有project 的话,新建一个project;
第三步,将已有的fortran文件放到project里
第四步,built(就是编译);
第五步,执行程序即可(运行编译后程序)。
build菜单下,编译(compile)、连接(build)
debug菜单下,run或start debugging就是运行
编译 -> 链接 -> 执行
LAPACK — Linear Algebra PACKage
2. F10
F11
3. mod
allocatetable
size
init 最接近的整数
20180908
赋初值的问题
主程序和子程序里面的变量都需要定义么?
(1) REAL :: A(N,N)=(/ 6.0,2.0,1.0,-1.0,2.0,4.0,1.0,0.0,1.0,1.0,4.0,
! -1.0,-1.0,0.0,-1.0,3.0/)
(2) real :: A(M,N)
DATA A /1.0 2.0 3.0 4.0/
主程序开始:program 程序名
主程序结束:end
子程序开始:subroutine 程序名()
子程序结束:end
注:子程序可置于主程序之前或之后,一般置后
例:subroutine xuanzhuyuanfa(a,b,n)
end
注:a,b,n的值由主程序中导入而来
外部函数开始:function 函数名()
外部函数结束:end function
注:外部函数可置于主程序之前或之后,一般置后
例: function y(x)
real*8 y,x
y=x**2
end function y
注:x的值由主程序中导入而来
输入输出格式: format
例:format(5f5.2) 前面的5表示一行输出5个数字,f表示输出结果类型为实型,5.2表示输出的数字长度(包括小数点)为5位,小数点后2位
format('a=',x) 如果输入的x的值为3.0,则输出结果为:a=3.0
format(1x,i2,2x) 表示首先输出一个空格,再输出一个长度为2的整型数字,最后再输出两个空格
implicit none 取消定义变量时的隐式声明规则。该规则为:在程序中,凡是变量名以字母
I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被默认为
实型变量。
parameter(变量=表达式) 例:parameter(pi=3.1415) 表示在程序中的所有pi的值都为3.1415
输入语句:read*,变量名 从键盘输入数据给该变量
read k,变量名 以k所限定的格式从键盘输入数据给该变量,k为任意数字 例:
read 10, a
10 format(f10.6) 表示以10所限定的格式输入数据到a中
read(*,*),变量名
例 open (1,file='wenjian.txt')
read(1,10),a
10 format(f10.6) 表示将wenjian.txt中的内容以10所限定的格式输入给a
输出语句:print*,变量名 输出该变量中的内容
print k,变量名 以k所限定的格式输出该变量中的内容,k为任意数字 例:
print 20, a
20 format(f5.3) 表示将a以20所限定的格式输出
write(*,*),变量名 格式输出,
例1 open (1,file='out.txt')
write(1,10),a
10 format(f10.6) 表示将a以10所限定的格式输出到名为out的文本文件中
例2 write(*,*),a 表示输出a到界面上,没有格式限制
常用变量的定义:
整型变量:integer(或integer*4,或integer(4)) 常用
integer*1(或integer(1)),integer*2(或integer(2)),integer*8(或integer(8))
例: integer i,j,k 定义整型变量i,j,k
实型变量:real(或real*4,或real(4)) 单精度,有效位数7位
real*8(或real(8)) 双精度,有效位数15位 常用
例: real*8 a,b,x(n),c(n,n) 定义双精度的实型变量a,b及一维数组x(n),二维数组c(n,n)
复型变量:complex(或complex*4,或complex(4)) 单精度
comple*8(或complex(8)) 双精度 常用
字符型变量:character*k(或character(k),或character(len=k)) k表示字符串的长度
character 定义长度为一的字符型变量
逻辑型变量:logical*4(或logical(4)) 常用
logical*1(或logical(1))
logical*2(或logical(2))
logical*8(或logical(8))
常用函数:
abs(x) 求x的绝对值
mod(x,y) 求x/y的余数
max(x1,x2,x3,...) 求x1,x2,x3,...中的最大值
min(x1,x2,x3,...) 求x1,x2,x3,...中的最小值
exp(x) 求e指数
sqrt(x) 求x的平方根,结果类型同x,x为实数
log(x) 求自然对数,结果类型同x,x为实数
log10(x) 求以10为底对数,x为实数,结果类型同x
sin(x),cos(x),tan(x) 求x的正弦,余弦,正切,x取值弧度,结果类型同x
sind(x),cosd(x),tand(x),cotan(x) 求x的正弦,余弦,正切,余切,x取值度,结果类型同x
sinh(x),cosh(x),tanh(x) 求x的双曲正弦,双曲余弦,双曲正切,结果类型同x
precision(x) 查询x的有效数字位数
len(s) 求字符串s的长度
len_trim(s) 求字符串s去掉尾部空格后的字符数
选择语句:
if (条件) then
语句
else
语句
end if
或
if (条件) then
语句
else if (条件) then
语句
else if (条件) then
语句
.
.
.
else
语句
end if
循环语句:
do 循环变量
语句
end do
强制性终止循环过程的语句:
exit 退出整个循环,转循环语句后的第一条语句执行,只能在do和do while循环语句内使用
cycle 终止本次循环,回到循环语句开始(do语句)继续执行
逻辑运算符的优先级:(高-低) .not.--.and.--.or.--.xor.--.eqv.--.neqv.
完整的程序举例: 将区间(0,1)等分100个节点(99段),计算每个节点的值存入数组x(n)中,然后根据y=5x的法则,计算与每个节点相应的y的值存入数组y(n)中
program main !main为程序名
implicit none !取消定义变量时的隐式声明规则
integer i,j,k,m,n !定义整型变量i,j,k,m,n
parameter(n=100) !给n赋值,以下程序中出现的n的值为100
real*8 a,b,h,x(n),f !定义实型变量a,b,h及数组x(n),y(n)及外部函数 f
a=0.d0 !给a赋值
b=1.d0 !给b赋值
h=(b-a)/(n-1) !根据a,b的值计算h
x(1)=a;x(n)=b !将a,b的值分别赋给x(1),x(n)
do i=2,n-1
x(i)=x(1)+(i-1)*h !计算数组x(n)中除两端点之外的其它点的值
end do
do i=1,n
y(i)=f(x(i)) ! 对应给定的一个坐标x(i),调外部函数f,计算出与该坐标相应的y(i)的值
end do
open(1,file='shuchu.txt') !新建一个名为shuchu的文本文档
do i=1,n
write(1,10) y(i) !将y的值以10所规定的格式输出到名为shuchu的文本文档中
end do
10 format(1f10.6) !一行输出一个值,每个数值的总长度为10位,小数点后为6位
close(1) !关闭文本文档shuchu
end
function f(x) !定义外部函数y,x由主程序中导入
implicit none
real*8 f,x
f=5.d0*x !函数y=5x
end function f
5 prop(16,1)
16个量的一维数组。 props(1 2 3 4)
两个子程序传递 prop,第一子程序比如是call abc(a,props(3))
subroutine(a,prop)
prop(1)=3 prop(2)=4
6. 彭国伦到第9章了。
20180911
最常用编辑符:A, I, F, G, X
(f8.4) 8-4要大于整数部分
real | Ew.d Dw.d | 指数形式,整数部分等于0 | 0.123E+03 0.123D+03 |
ESw.d | 科学计数法,整数部分只有1位 | 1.230E+02 | |
ENw.d | 工程计数法,首先满足整数部分取值1-999. | 123.000E+00 |
编辑符 | 描述 |
nX | 文件指针向右移动n个字符,等同TR |
[r]/ | 换行符,执行r次换行 |
\, $ | 续行符,仅用于输出,ivf扩展语法 |