Fortran Code Generation
Generate Fortran 90+ simulation code for HPC and numerical computing.
Features
Multiple precisions:
real(4)(single),real(8)(double),real(16)(quad)RK4 and adaptive RK45: Built-in Dormand-Prince integrator
OpenMP support: Optional parallel parameter sweeps
MPI support: Optional distributed computing
Module structure: Clean Fortran 90 modules with
containsEnergy conservation: Built-in energy tracking and drift reporting
Basic Usage
from mechanics_dsl.codegen.fortran import FortranGenerator
import sympy as sp
theta, g, l = sp.symbols('theta g l')
gen = FortranGenerator(
system_name="pendulum",
coordinates=["theta"],
parameters={"g": 9.81, "l": 1.0},
initial_conditions={"theta": 0.5, "theta_dot": 0.0},
equations={"theta_ddot": -g/l * sp.sin(theta)},
precision=8,
use_openmp=False
)
gen.generate("pendulum.f90")
Parameters
precision: Fortrankindparameter —4(single),8(double),16(quad). Default:8use_openmp: Enable OpenMP parallelization (default:False)use_mpi: Enable MPI distributed computing (default:False)
Generated Code Structure
The generated Fortran program has two units:
Module ({system_name}_physics):
Working precision constant:
WPparameter for consistent typingPhysical parameters: Module-level
parameterconstants``equations_of_motion``: Subroutine computing state derivatives
``rk4_step``: Fixed-step RK4 integrator
``rk45_step``: Adaptive Dormand-Prince integrator with error control
``compute_energy``: Energy computation function
Main program ({system_name}_simulation):
Initial conditions and simulation parameters
CSV output with energy column
Energy drift reporting
Compilation
# Double precision (default)
gfortran -O3 -o pendulum pendulum.f90
# With OpenMP
gfortran -O3 -fopenmp -o pendulum pendulum.f90
# Quad precision
gfortran -O3 -fdefault-real-16 -o pendulum pendulum.f90
# Intel Fortran
ifx -O3 -o pendulum pendulum.f90
Precision Guide
Kind |
Precision |
Use Case |
|---|---|---|
|
~7 digits |
Fast prototyping, embedded |
|
~15 digits |
General simulations (default) |
|
~33 digits |
High-precision celestial mechanics |
See Also
C++ Code Generation - C++ code generation
OpenMP Code Generation - OpenMP-parallel C++
Code Generation Overview - All code generation targets