Dust evolution in protoplanetary disks
The main Simulation class that manages dust coagulation and disk evolution simulations. This class inherits from simframe.Frame and provides the primary interface for setting up, running, and analyzing dust evolution in protoplanetary disks.
The core class for running dust coagulation simulations, managing the complete simulation state including grids, physical quantities, and integration schemes.
class Simulation:
def __init__(self, **kwargs):
"""
Initialize a new DustPy simulation.
Parameters:
- kwargs: Additional arguments passed to simframe.Frame
"""
def makegrids(self):
"""
Create radial and mass grids for the simulation.
Sets up the computational grids based on initial conditions:
- Radial grid from inner to outer disk radius
- Logarithmic mass grid for dust size distribution
"""
def initialize(self):
"""
Initialize the simulation frame with standard values.
Sets up all physical quantities, boundary conditions, and
prepares the simulation for execution using the standard
functions from dustpy.std modules.
"""
def run(self):
"""
Run the simulation with mass conservation checks.
Executes the main simulation loop, advancing the system
through time while monitoring mass conservation and
applying the selected integration schemes.
"""
def checkmassconservation(self):
"""
Check and print mass conservation errors.
Analyzes the simulation state to verify that mass is
conserved within acceptable tolerances and reports
any significant violations.
"""
def setdustintegrator(self, scheme="explicit", method="cash-karp"):
"""
Set the dust integrator scheme and method.
Parameters:
- scheme: Integration scheme ("explicit" or "implicit")
- method: Integration method (e.g., "cash-karp", "euler")
"""Key properties accessible on simulation instances for configuration and data access.
# Initial conditions parameter namespace
sim.ini: SimpleNamespace
# Dust initial conditions
sim.ini.dust.aIniMax: float # Maximum initial grain size [cm]
sim.ini.dust.allowDriftingParticles: bool # Allow particles to drift
sim.ini.dust.erosionMassRatio: float # Erosion mass ratio
sim.ini.dust.d2gRatio: float # Initial dust-to-gas ratio
sim.ini.dust.distExp: float # Size distribution exponent
sim.ini.dust.excavatedMass: float # Excavated mass parameter
sim.ini.dust.fragmentDistribution: float # Fragment distribution slope
sim.ini.dust.rhoMonomer: float # Monomer density [g/cm³]
sim.ini.dust.vFrag: float # Fragmentation velocity [cm/s]
# Gas initial conditions
sim.ini.gas.Mdisk: float # Disk mass [g]
sim.ini.gas.SigmaRc: float # Characteristic radius [cm]
sim.ini.gas.SigmaExp: float # Surface density radial exponent
sim.ini.gas.alpha: float # Turbulent alpha parameter
sim.ini.gas.mu: float # Mean molecular weight [g]
# Grid initial conditions
sim.ini.grid.mmax: float # Maximum particle mass [g]
sim.ini.grid.mmin: float # Minimum particle mass [g]
sim.ini.grid.Nmbpd: int # Number of mass bins per decade
sim.ini.grid.Nr: int # Number of radial grid points
sim.ini.grid.rmax: float # Outer disk radius [cm]
sim.ini.grid.rmin: float # Inner disk radius [cm]
# Star initial conditions
sim.ini.star.M: float # Stellar mass [g]
sim.ini.star.R: float # Stellar radius [cm]
sim.ini.star.T: float # Stellar temperature [K]
# Physical quantity groups
sim.dust: Group # Dust quantities
sim.gas: Group # Gas quantities
sim.grid: Group # Grid quantities
sim.star: Group # Stellar quantities
# Integration variables
sim.t: IntVar # Time integration variable
sim.integrator: Integrator # Integration scheme object
sim.writer: callable # Output writer objectProperties within the dust group that represent the dust component state.
# Primary dust quantities
sim.dust.Sigma: Field # Surface density per mass bin [g/cm²]
sim.dust.a: Field # Particle size [cm]
sim.dust.St: Field # Stokes number
sim.dust.rho: Field # Midplane mass density [g/cm³]
sim.dust.eps: Field # Dust-to-gas ratio
# Velocity components
sim.dust.v.rad: Field # Radial velocity [cm/s]
sim.dust.v.rel: Field # Relative velocity components [cm/s]
# Transport properties
sim.dust.D: Field # Diffusivity [cm²/s]
sim.dust.H: Field # Scale heights [cm]
# Coagulation properties
sim.dust.kernel: Field # Collision kernel [cm²/s]
sim.dust.p.stick: Field # Sticking probability
sim.dust.p.frag: Field # Fragmentation probability
# Source terms
sim.dust.S.coag: Field # Coagulation source terms [g/cm²/s]
sim.dust.S.hyd: Field # Hydrodynamic source terms [g/cm²/s]
sim.dust.S.ext: Field # External source terms [g/cm²/s]
sim.dust.S.tot: Field # Total source terms [g/cm²/s]
# Fluxes
sim.dust.Fi.adv: Field # Advective flux [g/cm/s]
sim.dust.Fi.diff: Field # Diffusive flux [g/cm/s]
sim.dust.Fi.tot: Field # Total flux [g/cm/s]
# Boundary conditions
sim.dust.boundary.inner: Boundary # Inner boundary condition
sim.dust.boundary.outer: Boundary # Outer boundary condition
# Back reaction effects
sim.dust.backreaction: Field # Back reaction coefficientsProperties within the gas group that represent the gas component state.
# Primary gas quantities
sim.gas.Sigma: Field # Surface density [g/cm²]
sim.gas.T: Field # Temperature [K]
sim.gas.cs: Field # Sound speed [cm/s]
sim.gas.rho: Field # Midplane mass density [g/cm³]
sim.gas.P: Field # Midplane pressure [g/cm/s²]
# Velocity components
sim.gas.v.rad: Field # Radial velocity [cm/s]
sim.gas.v.visc: Field # Viscous velocity [cm/s]
# Transport properties
sim.gas.alpha: Field # Turbulent alpha parameter
sim.gas.mu: Field # Mean molecular weight [g]
sim.gas.nu: Field # Kinematic viscosity [cm²/s]
sim.gas.eta: Field # Pressure gradient parameter
# Source terms and fluxes
sim.gas.S.hyd: Field # Hydrodynamic source terms [g/cm²/s]
sim.gas.S.ext: Field # External source terms [g/cm²/s]
sim.gas.S.tot: Field # Total source terms [g/cm²/s]
sim.gas.Fi: Field # Mass flux through interfaces [g/cm/s]
# Boundary conditions
sim.gas.boundary.inner: Boundary # Inner boundary condition
sim.gas.boundary.outer: Boundary # Outer boundary conditionProperties within the grid group that define the computational mesh.
# Radial grid
sim.grid.r: Field # Radial grid cell centers [cm]
sim.grid.ri: Field # Radial grid cell interfaces [cm]
sim.grid.Nr: IntVar # Number of radial grid cells
sim.grid.A: Field # Radial grid annulus area [cm²]
# Mass grid
sim.grid.m: Field # Mass grid [g]
sim.grid.Nm: IntVar # Number of mass bins
# Derived grid quantities
sim.grid.OmegaK: Field # Keplerian frequency [1/s]Properties within the stellar group that define the central star.
sim.star.M: Field # Stellar mass [g]
sim.star.R: Field # Stellar radius [cm]
sim.star.T: Field # Effective temperature [K]
sim.star.L: Field # Luminosity [erg/s]from dustpy import Simulation
import dustpy.constants as c
# Create simulation
sim = Simulation()
# Configure initial conditions
sim.ini.gas.Mdisk = 0.05 * c.M_sun # 0.05 solar masses
sim.ini.gas.SigmaRc = 10 * c.au # 10 AU characteristic radius
sim.ini.dust.aIniMax = 0.0001 # 100 micron max initial size
# Set grid parameters
sim.ini.grid.Nr = 100 # 100 radial points
sim.ini.grid.Nm = 50 # 50 mass bins
sim.ini.grid.rmin = 0.1 * c.au # Inner radius
sim.ini.grid.rmax = 500 * c.au # Outer radius
# Create grids and initialize
sim.makegrids()
sim.initialize()# Set implicit integration for dust
sim.setdustintegrator(scheme="implicit", method="cash-karp")
# Set custom time stepping
sim.t.snapshots = [0.0, 1.e3*c.year, 1.e4*c.year, 1.e5*c.year]
# Run simulation
sim.run()# Check mass conservation
sim.checkmassconservation()
# Access physical quantities
radial_grid = sim.grid.r # [cm]
dust_sizes = sim.dust.a # [cm]
gas_density = sim.gas.Sigma # [g/cm²]
dust_density = sim.dust.Sigma # [g/cm²]
stokes_numbers = sim.dust.St
# Get time evolution data
times = sim.t.snapshots # Times where data was savedInstall with Tessl CLI
npx tessl i tessl/pypi-dustpy