Ubuntu 上常用的 Fortran 科学计算库
基础线性代数
- BLAS(Basic Linear Algebra Subprograms):向量/矩阵的基本运算(如加减、数乘、点积、矩阵-向量/矩阵-矩阵乘)。常见实现有OpenBLAS、ATLAS、以及厂商实现如Intel MKL。
- LAPACK:基于 BLAS 的高层线性代数(如线性方程组求解、特征值/奇异值分解、矩阵分解)。
- BLAS/LAPACK 的 C 接口:CBLAS、LAPACKE,便于 C/C++ 调用,也可在 Fortran 中以 C 互操作方式使用。
- 典型用途:稠密矩阵计算、最小二乘、特征值问题等。
- Ubuntu 安装示例:sudo apt install libblas-dev liblapack-dev libopenblas-dev;如需 MKL:sudo apt install intel-mkl 或 libmkl-dev。
快速傅里叶变换与谱方法
- FFTW3(Fastest Fourier Transform in the West):一维/二维/三维以及多维 FFT,支持单/双精度与线程优化,广泛用于信号与图像处理、谱方法求解 PDE。
- Ubuntu 安装示例:sudo apt install libfftw3-dev。
- 典型用途:频域分析、卷积、谱方法(如流体与电磁仿真)。
专用领域与高阶库
- SHTOOLS:球谐函数与球面信号处理(球面谐波变换、旋转、位场建模等),依赖 FFTW3、BLAS、LAPACK。
- Netlib 集合:提供大量经典数值例程与参考实现(如 MINPACK 用于非线性最小二乘),常作为许多科学计算软件的底层依赖。
- 典型用途:地球物理/行星科学(SHTOOLS)、非线性方程求解与优化(MINPACK)。
并行与性能优化生态
- OpenMP(随 GCC/GFortran 提供):共享内存并行,适合在单节点多核上加速循环与 BLAS/LAPACK 调用。
- MPI(如 OpenMPI、MPICH):分布式内存并行,适合多节点 HPC 应用。
- MKL 线程与并行:Intel MKL 内置多线程与优化内核,可结合 OpenMP 使用。
- 实践要点:优先选择优化实现(如 OpenBLAS/MKL),并结合 OpenMP 或 MPI 扩展到多核/多节点。
快速开始与编译链接示例
- 安装编译器与常用库:sudo apt update && sudo apt install gfortran libblas-dev liblapack-dev libfftw3-dev。
- 编译与链接示例:
- 仅用系统 BLAS/LAPACK:gfortran mycode.f90 -o mycode -lblas -llapack
- 使用 OpenBLAS:gfortran mycode.f90 -o mycode -lopenblas
- 使用 MKL(示例,按实际环境调整库顺序与接口层):gfortran mycode.f90 -o mycode -lmkl_lapack95_lp64 -lmkl_blas95_lp64 -lmkl -lpthread -lm
- 说明:库的顺序和是否需要 95 接口层(-lblas95/-llapack95 或 MKL 的 95 层)取决于你的代码与库版本;MKL 的链接方式在不同系统/安装方式下可能不同,建议参考 MKL 链接指南或采用环境模块/脚本配置。