在 Debian 上进行 Fortran 科学计算的快速指南
一 环境准备与基础编译
sudo apt update && sudo apt install gfortrangfortran --versionprogram hello
print *, "Hello, Fortran on Debian"
end program hello
gfortran hello.f90 -o hello
./hello
program matrix_ops
implicit none
integer, parameter :: n=3
real(8) :: A(n,n), B(n,n), C(n,n), i, j, k
A = reshape([(i, i=1,n*n)], [n,n])
B = reshape([(n*n - i + 1, i=1,n*n)], [n,n])
C = A + B
print *, "A+B(1,1)=", C(1,1)
C = 0.0d0
do i=1,n
do j=1,n
do k=1,n
C(i,j) = C(i,j) + A(i,k)*B(k,j)
end do
end do
end do
print *, "A*B(1,1)=", C(1,1)
end program matrix_ops
gfortran matrix_ops.f90 -o matrix_ops
./matrix_ops
上述流程适用于所有基于 Debian 的系统,适合作为科学计算项目的起点。
二 线性代数与高性能数值库
sudo apt install libopenblas-base libopenblas-dev liblapack-dev liblapacke-dev
program test_lapack
implicit none
integer, parameter :: n=3, nrhs=1
real(8) :: A(n,n), b(n)
integer :: ipiv(n), info
A = reshape([2.0d0, 0.0d0, 0.0d0, &
0.0d0, 3.0d0, 0.0d0, &
0.0d0, 0.0d0, 4.0d0], [n,n])
b = [998.0d0, 999.0d0, 1000.0d0]
call dgesv(n, nrhs, A, n, ipiv, b, n, info)
print *, "Solution x =", b
print *, "INFO =", info
end program test_lapack
gfortran test_lapack.f90 -llapack -lopenblas -o test_lapack
./test_lapack
三 并行计算 OpenMP 与 MPI
sudo apt install gfortran libomp-dev
sudo apt install openmpi-bin libopenmpi-dev # 或 mpich libmpich-dev
program omp_sum
use omp_lib
implicit none
integer, parameter :: n=1000
real(8) :: s = 0.0d0
integer :: i
!$omp parallel do reduction(+:s)
do i=1,n
s = s + sin(dble(i))
end do
!$omp end parallel do
print *, "Sum =", s
end program omp_sum
gfortran -fopenmp omp_sum.f90 -o omp_sum
./omp_sum
program mpi_hello
use mpi_f08
implicit none
integer :: ierr, rank, size
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)
print *, "Hello from rank", rank, "of", size
call MPI_Finalize(ierr)
end program mpi_hello
mpif90 mpi_hello.f90 -o mpi_hello
mpirun -np 4 ./mpi_hello
四 构建管理 调试与性能优化
# 安装 FPM(可用脚本或包管理器)
# 参考:https://fpm.fortran-lang.org
fpm new myapp && cd myapp
fpm build
fpm run
gdb ./myapp),配合编译选项 -g -O0 获取更友好的调试信息。