Conceptual Learning
Fortran
Fortran(全称 Formula Translation,意为公式翻译)是一种用于数值计算和科学计算的编程语言。它于 1957 年首次发布,是世界上第一种广泛使用的高级编程语言。
主要特点:
- 擅长数值计算和矩阵操作:Fortran 的语法和功能非常适合科学和工程领域的大规模计算。
- 高效:Fortran 的编译器经过几十年的优化,能够生成非常高效的机器代码,尤其是在超级计算机和科学研究中。
- 支持并行计算:现代 Fortran 支持多线程(OpenMP)和分布式计算(MPI)。
Fortran 广泛应用于需要高性能计算的领域,例如:
- 科学模拟:模拟天气、气候、海洋流体等自然现象。
- 工程应用:分析结构力学、流体动力学、电磁学等。
- 计算化学:模拟分子动力学、量子化学等。
- 金融领域:用来进行复杂的数学建模和风险分析。
ifort
ifort 是 Intel Fortran 编译器,用于编译和链接标准 Fortran 程序。它是 Intel 编译器套件(Intel oneAPI 或 Intel Parallel Studio)中的一部分。适用于没有并行通信需求的 Fortran 应用程序。
功能和特点:
- 编译 Fortran 源代码(如 .f90 文件)。
- 支持高性能优化,专为 Intel 硬件进行优化。
- 用于常规的单机应用或不需要并行计算的 Fortran 程序。
mpifort
mpifort 是 MPI(Message Passing Interface)环境中用于 Fortran 程序的编译器包装器。它可以调用系统中默认的 Fortran 编译器(可能是 GNU Fortran,也可能是 Intel Fortran,如 ifort),并添加必要的 MPI 库和头文件。
功能和特点:
- 专门用于编译需要 MPI 支持的 Fortran 程序。
- 自动链接 MPI 的相关库,无需手动指定。
- 通常用于并行计算环境,例如分布式内存系统。
##mpiifort mpiifort 是 Intel MPI 库与 Intel Fortran 编译器(ifort)的结合版本,类似于 mpifort,但明确使用 Intel 的 Fortran 编译器和 MPI 实现。
功能和特点:
- 结合了 Intel Fortran 编译器(ifort)的优化性能和 Intel MPI 的高效通信。
- 用于在高性能计算环境中编译需要 MPI 支持的 Fortran 应用。
- 自动设置 Intel MPI 库的路径和链接。
名称 | 功能 | 用途 | 特点 |
---|---|---|---|
ifort | Intel Fortran 编译器 | 编译标准 Fortran 程序 | 高性能优化,适用于单机应用 |
mpifort | 通用 MPI 编译器包装器 | 编译支持 MPI 的 Fortran 程序 | 调用系统默认 Fortran 编译器 |
mpiifort | Intel Fortran + Intel MPI | 编译支持 MPI 的高性能 Fortran 程序 | 专用于 Intel 环境的 MPI 应用 |
代码解读
##### User configurable options #####
#Makefile used for Trip2.0 serial program
#set main program name for calculation(not include extended name):
MAIN_NAME = weno3d
#for set variable:
SHELL = /bin/sh
#for library and module path:
INCDIR = /home/XiYang/MAML_KiloNet/source/data/weno3dnew/include
LIBDIR = /home/XiYang/MAML_KiloNet/source/data/weno3dnew/lib
LIBNAME = xbfuc
F90 = mpiifort
F77 = mpiifort
CC = mpicc
#F90 = ifort
#F77 = ifort
#CC = icc
CFLAG =
#FFLAG = -static -r8 -I $(INCDIR)
# FFLAG:Fortran 编译器的选项,-r8 表示将所有实数变量提升为双精度(real(8)),-I $(INCDIR) 指定头文件目录。
FFLAG = -r8 -I $(INCDIR)
LDFLAGS =
#LKFLAGS = -static -L $(LIBDIR)
# LKFLAGS:指定链接库路径,-L $(LIBDIR) 表示链接库位于 LIBDIR 路径下。
LKFLAGS = -L $(LIBDIR)
#for Calculational program:
EXEC = main
OBJS = weno3d_mod.o weno3d_boundary.o weno3d_memory.o \
weno3d_sdrv.o $(MAIN_NAME).o
.SUFFIXES : .o .c .f .for .f90
### End User configurable options ###
all: $(EXEC)
#default: all
clean:
-rm -f *.o $(EXEC) *.mod
$(EXEC): $(OBJS)
$(F90) $(LKFLAGS) -o $@ $(OBJS) $(LDFLAGS) -l$(LIBNAME)
.c.o:
$(CC) $(CFLAG) -c $<
.f.o:
$(F90) $(FFLAG) -c $<
.for.o:
$(F90) $(FFLAG) -c $<
.f90.o:
$(F90) $(FFLAG) -c $<
目标 $(EXEC):
- 编译和链接目标文件($(OBJS))以生成可执行文件 main。
- $(F90) 表示使用 Fortran 编译器进行链接。
- -o $@ 指定生成的文件名。
- -l$(LIBNAME) 链接 xbfuc 库。
.nml
(base) [XiYang@localhost src]$ cat wctrol.nml
&ctrol
md = 3
mn = 5
mt = 3
nxNo = 80
nyNo = 80
nzNo = 80
XBLKNO = 1
YBLKNO = 1
ZBLKNO = 1
irest = 0
tend = 2.0
cfl = 0.5
ntot = 20000
cpumax = 1000000.
itype = 1
rkap = 7.
/