Source code for datastructures.config
"""Configuration and metadata data structures."""
from dataclasses import dataclass
[docs]
@dataclass
class Info:
"""Base solver metadata, config and convergence info.
Parameters
----------
Re : float
Reynolds number.
nx : int, optional
Number of grid points in x-direction. Default is 64.
ny : int, optional
Number of grid points in y-direction. Default is 64.
lid_velocity : float, optional
Velocity of the lid. Default is 1.
Lx : float, optional
Domain length in x-direction. Default is 1.
Ly : float, optional
Domain length in y-direction. Default is 1.
max_iterations : int, optional
Maximum number of iterations. Default is 500.
tolerance : float, optional
Convergence tolerance. Default is 1e-4.
method : str, optional
Solver method name. Default is None.
iterations : int, optional
Actual number of iterations performed. Default is None.
converged : bool, optional
Whether the solver converged. Default is False.
final_residual : float, optional
Final residual value. Default is None.
"""
# Physics parameters (required)
Re: float
# Grid parameters (with defaults)
nx: int = 64
ny: int = 64
# Physics parameters (with defaults)
lid_velocity: float = 1
Lx: float = 1
Ly: float = 1
# Solver config
max_iterations: int = 500
tolerance: float = 1e-4
method: str = None
# Convergence info
iterations: int = None
converged: bool = False
final_residual: float = None
[docs]
@dataclass
class FVinfo(Info):
"""FV-specific metadata with discretization parameters.
Inherits all parameters from Info and adds FV-specific parameters.
Parameters
----------
convection_scheme : str, optional
Convection scheme (e.g., 'Upwind', 'CDS'). Default is 'Upwind'.
limiter : str, optional
Flux limiter scheme. Default is 'MUSCL'.
alpha_uv : float, optional
Under-relaxation factor for velocity. Default is 0.6.
alpha_p : float, optional
Under-relaxation factor for pressure. Default is 0.4.
"""
convection_scheme: str = "Upwind"
limiter: str = "MUSCL"
alpha_uv: float = 0.6
alpha_p: float = 0.4
[docs]
@dataclass
class SpectralInfo(Info):
"""Spectral-specific metadata with discretization parameters.
Inherits all parameters from Info and adds spectral-specific parameters.
Parameters
----------
Nx : int, optional
Number of spectral grid points in x-direction. Default is 64.
Ny : int, optional
Number of spectral grid points in y-direction. Default is 64.
differentiation_method : str, optional
Differentiation method ('fft', 'chebyshev', 'matrix'). Default is 'fft'.
time_scheme : str, optional
Time integration scheme. Default is 'rk4'.
dt : float, optional
Time step size. Default is 0.001.
dealiasing : bool, optional
Whether to use dealiasing. Default is True.
multigrid : bool, optional
Whether to use multigrid acceleration. Default is False.
mg_levels : int, optional
Number of multigrid levels. Default is 3.
"""
Nx: int = 64
Ny: int = 64
differentiation_method: str = "fft" # 'fft', 'chebyshev', 'matrix'
time_scheme: str = "rk4"
dt: float = 0.001
dealiasing: bool = True
multigrid: bool = False
mg_levels: int = 3