3.8 KiB
3.8 KiB
Simulation Workflow
Standard Workflow
Follow these steps to run a fluidsim simulation:
1. Import Solver
from fluidsim.solvers.ns2d.solver import Simul
# Or use dynamic import
import fluidsim
Simul = fluidsim.import_simul_class_from_key("ns2d")
2. Create Default Parameters
params = Simul.create_default_params()
This returns a hierarchical Parameters object containing all simulation settings.
3. Configure Parameters
Modify parameters as needed. The Parameters object prevents typos by raising AttributeError for non-existent parameters:
# Domain and resolution
params.oper.nx = 256 # grid points in x
params.oper.ny = 256 # grid points in y
params.oper.Lx = 2 * pi # domain size x
params.oper.Ly = 2 * pi # domain size y
# Physical parameters
params.nu_2 = 1e-3 # viscosity (negative Laplacian)
# Time stepping
params.time_stepping.t_end = 10.0 # end time
params.time_stepping.deltat0 = 0.01 # initial time step
params.time_stepping.USE_CFL = True # adaptive time step
# Initial conditions
params.init_fields.type = "noise" # or "dipole", "vortex", etc.
# Output settings
params.output.periods_save.phys_fields = 1.0 # save every 1.0 time units
params.output.periods_save.spectra = 0.5
params.output.periods_save.spatial_means = 0.1
4. Instantiate Simulation
sim = Simul(params)
This initializes:
- Operators (FFT, differential operators)
- State variables (velocity, vorticity, etc.)
- Output handlers
- Time stepping scheme
5. Run Simulation
sim.time_stepping.start()
The simulation runs until t_end or specified number of iterations.
6. Analyze Results During/After Simulation
# Plot physical fields
sim.output.phys_fields.plot()
sim.output.phys_fields.plot("vorticity")
sim.output.phys_fields.plot("div")
# Plot spatial means
sim.output.spatial_means.plot()
# Plot spectra
sim.output.spectra.plot1d()
sim.output.spectra.plot2d()
Loading Previous Simulations
Quick Loading (For Plotting Only)
from fluidsim import load_sim_for_plot
sim = load_sim_for_plot("path/to/simulation")
sim.output.phys_fields.plot()
sim.output.spatial_means.plot()
Fast loading without full state initialization. Use for post-processing.
Full State Loading (For Restarting)
from fluidsim import load_state_phys_file
sim = load_state_phys_file("path/to/state_file.h5")
sim.time_stepping.start() # continue simulation
Loads complete state for continuing simulations.
Restarting Simulations
To restart from a saved state:
params = Simul.create_default_params()
params.init_fields.type = "from_file"
params.init_fields.from_file.path = "path/to/state_file.h5"
# Optionally modify parameters for the continuation
params.time_stepping.t_end = 20.0 # extend simulation
sim = Simul(params)
sim.time_stepping.start()
Running on Clusters
FluidSim integrates with cluster submission systems:
from fluiddyn.clusters.legi import Calcul8 as Cluster
# Configure cluster job
cluster = Cluster()
cluster.submit_script(
"my_simulation.py",
name_run="my_job",
nb_nodes=4,
nb_cores_per_node=24,
walltime="24:00:00"
)
Script should contain standard workflow steps (import, configure, run).
Complete Example
from fluidsim.solvers.ns2d.solver import Simul
from math import pi
# Create and configure parameters
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 256
params.oper.Lx = params.oper.Ly = 2 * pi
params.nu_2 = 1e-3
params.time_stepping.t_end = 10.0
params.init_fields.type = "dipole"
params.output.periods_save.phys_fields = 1.0
# Run simulation
sim = Simul(params)
sim.time_stepping.start()
# Analyze results
sim.output.phys_fields.plot("vorticity")
sim.output.spatial_means.plot()