VS下编译Fortran
VS安装及MKL数学库
参考博客
https://www.liangzl.com/get-article-detail-161716.html
完成Intel Parallel Studio XE 2020的安装,在这个环境下可以编译Fortran
如果需要用到数学库,记得勾选MKL,并在之后参考博客
http://www.guanjihuan.com/archives/3021
完成配置。
-
项目 → \rightarrow → ‘工程文件名’属性 → \rightarrow → 配置属性 → \rightarrow → Fortran → \rightarrow → Libraries → \rightarrow → Use Intel Math Kernal Library选中Parallel 或者 Sequential,以及Use Common Windows Libraries选中Yes
-
项目 → \rightarrow → ‘工程文件名’属性 → \rightarrow → 配置属性 → \rightarrow → Linker → \rightarrow → Input → \rightarrow → Additional Dependencies → \rightarrow → 填入 mkl_intel_c.lib mkl_intel_thread.lib mkl_lapack95.lib mkl_blas95.lib 因为找不到那些文件,我在这改成了:
mkl_intel_thread.lib mkl_lapack95_lp64.lib mkl_blas95_lp64.lib
其中lapack包就是处理线性方程组问题的包,可以参考lapack官方文档
BLAS(Basic Linear Algebra Subprograms)也是一个基本的数学包,里面涉及到的函数可以参考Intel MKL的网站
配置完之后应该是可以运行的,这里附上两段参考代码:
program gdemo1
use lapack95
implicit none
!geev
real*8 :: a(4,4)=(/ 1.0,3.2,5.0,7.9,2.,4.3,6.,8.,9.4,10.,11.,12.,2.,5.,6.,9. /)
real*8 :: wr(4),wi(4),vr(4,4),vl(4,4) ! wr和wi分别为特征值实部和虚部,vr和vl分别为右和左特征向量
call geev(a,wr,wi,vl,vr)
write(*,*) wr
write(*,*) wi
stop
end
program test_mkl
!USE mkl95_LAPACK, ONLY: GETRF, GETRS
USE lapack95
IMPLICIT NONE
REAL(KIND = 8), DIMENSION(3, 3) :: A
REAL(KIND = 8), DIMENSION(3) :: B
INTEGER, DIMENSION(3) :: IPIV
INTEGER :: INFO, I
DATA A/1,6,9,6,5,2,8,3,4/
DATA B/2,4,7/
PRINT '(3F5.1)', (A(I, :), I=1,3) ! 这个才能 输出真实的A的样子
PRINT '(F5.1)' , B ! 输出一个列向量
CALL GETRF(A, IPIV, INFO)
IF(INFO.NE.0) THEN
PRINT *, "THERE IS SOMETHING WRONG WITH THE MATRIX: ", INFO
ENDIF
CALL GETRS(A, IPIV, B, 'N', INFO)
IF(INFO.NE.0) THEN
PRINT *, "THERE IS SOMETHING WRONG: ", INFO
ENDIF
PRINT *, ""
PRINT '(3F6.2)', B
end
也可以参考网站
http://fcode.cn/guide-58-1.html
关于VS编译器的一些常用操作
内存不足
如果遇到编译器报错“insufficient virtual memory”可以参考网站,但是一般情况下是用不到的,没太大必要,最重要的还是查看自己程序里面有没有开辟过大内存的情况,比如allocate(a(BigNum)),当这个BigNum特别大的时候就会报错。
爆栈
也就是编译的时候报错“Stack Overflow”,这个一般比较好的处理方式就是用动态数组代替一般的数组,把那些长长的数组全部用allocate来代替,用完记得及时的释放deallocate。
当然还有一个方法就是扩大堆栈的容量,在VS编译器里选择:
项目
→
\rightarrow
→ ‘工程文件名’属性
→
\rightarrow
→ 配置属性
→
\rightarrow
→ Linker
→
\rightarrow
→ System
→
\rightarrow
→ Stack Reverse Size & Stack Commit Size给一个较大的数(上限是268435456)
这里给的数值的含义为:
1MB: 1048576 Byte
10MB: 10485760 Byte
64MB: 67108864 Byte
100MB: 104857600 Byte
128MB: 134217728 Byte
256MB: 268435456 Byte (MAX)