NAME
Physics::CVD - Chemical Vapor Deposition simulation framework in Perl
SYNOPSIS
use Physics::CVD;
my $cvd = Physics::CVD->new(
temperature => 700, # K
pressure => 66.5, # Pa (500 mTorr)
);
my $chem = $cvd->chemistry;
$chem->add_species(name => 'TEOS', mass => 208, concentration => 1e16);
$chem->add_gas_reaction(
reactants => ['TEOS'], products => ['SiO2_g'],
A => 1e15, Ea => 2.9,
);
my $kmc = $cvd->kmc(lattice_size => [30, 30, 15]);
$kmc->add_species(
name => 'Si', sticking_coeff => 0.04,
partial_pressure => 4.0, diffusion_barrier => 0.8,
);
$kmc->deposit(steps => 1000);
my $film = $kmc->get_film;
printf "Thickness: %.2f nm\n", $film->thickness;
printf "Roughness: %.3f nm\n", $film->roughness;
DESCRIPTION
Physics::CVD is a Perl library for simulating Chemical Vapor Deposition (CVD) processes. It ties together gas-phase chemistry, surface Kinetic Monte Carlo (KMC) growth, reactor-scale transport, mass-transport models, film analysis, and interfaces to external simulation tools.
The intended workflow is:
- 1. Create a
Physics::CVDinstance with reactor conditions. - 2. Build a chemistry network with
chemistry(). - 3. Model reactor flow and transport with
reactor()andtransport(). - 4. Run atomistic film growth with
kmc()and analyze withget_film(). - 5. Export cases to OpenFOAM, LAMMPS, or Cantera via
interface().
FEATURES
Gas-phase chemistry — Arrhenius kinetics, reaction networks, precursor decomposition.
Surface KMC — Multi-species, deposition-centric Kinetic Monte Carlo for film growth.
Reactor modeling — LPCVD/PECVD/MOCVD geometry, flow, Reynolds/Knudsen numbers.
Mass transport — Boundary layer, Knudsen diffusion, feature-scale step coverage.
Film analysis — Thickness, roughness, density, composition profiles, stoichiometry.
Interfaces — OpenFOAM (reactingFoam cases), LAMMPS (ReaxFF/Tersoff), Cantera (YAML mechanisms and Python reactors).
CONSTRUCTOR
new(%opts)
Create a new CVD simulation object. The temperature and pressure are propagated to the factory methods unless overridden.
Options:
temperature-
Process temperature in Kelvin (default: 700 K).
pressure-
Process pressure in Pascals (default: 100 Pa, typical of LPCVD).
verbose-
Verbosity level 0/1 (default: 0).
FACTORY METHODS
chemistry(%opts)
Return a Physics::CVD::Chemistry engine. Inherits temperature, pressure, and verbose from the main object.
kmc(%opts)
Return a Physics::CVD::KMC surface-growth engine. Inherits temperature, pressure, and verbose. Common options: lattice_size, lattice_const, attempt_freq.
reactor(%opts)
Return a Physics::CVD::Reactor model. Inherits temperature, pressure, and verbose. Common options: type, length, diameter, gap, wafer_diameter, total_flow, carrier_gas, gases.
transport(%opts)
Return a Physics::CVD::Transport model. Inherits temperature, pressure, and verbose. Common options: feature_type, aspect_ratio, feature_width.
film(%opts)
Return a standalone Physics::CVD::Film analysis object.
interface($name, %opts)
Load an external-tool interface. $name must be one of:
openfoam— Physics::CVD::Interface::OpenFOAMlammps— Physics::CVD::Interface::LAMMPScantera— Physics::CVD::Interface::Cantera
methods()
Return an arrayref of factory method names: reactor, chemistry, transport, kmc, film.
interfaces()
Return an arrayref of available interface names: openfoam, lammps, cantera.
API REFERENCE
Physics::CVD::Chemistry
Chemical kinetics engine for gas-phase and surface reactions.
add_species(%spec)-
Register a species with keys such as
name,mass,formula,type, andconcentration. add_gas_reaction(%rxn)-
Add an Arrhenius gas reaction. Keys:
name,reactants,products,A,Ea,order. add_surface_reaction(%rxn)-
Add a surface reaction (Langmuir-Hinshelwood or Eley-Rideal). Keys include
mechanism,sticking_coeff,Ea,A. rate_constant(%opts)-
Compute
k = A exp(-Ea / kT). gas_rates()-
Compute gas-phase rates from current concentrations.
surface_rates(%opts)-
Compute surface reaction rates for supplied coverages.
impingement_flux(%opts)-
Hertz-Knudsen flux in molecules/cm2/s.
sticking_coefficient(%opts)-
Temperature-dependent sticking coefficient.
evolve(%opts)-
Integrate gas chemistry forward in time with simple Euler integration.
growth_rate(%opts)-
Estimate deposition rate in nm/min from impingement flux, sticking coefficient, and film density.
set_concentration($species, $conc)/get_concentration($species)/concentrations()-
Concentration accessors.
stats()-
Return counts of species and reactions plus current state.
Physics::CVD::KMC
Deposition-centric Kinetic Monte Carlo engine.
new(%opts)-
Constructor options include
lattice_size(default[30,30,20]),lattice_const(default 3.0 Å),attempt_freq(default 1e13 s-1),temperature,pressure, andverbose. add_species(%spec)-
Register a depositing species with
sticking_coeff, diffusion/desorption/ decomposition barriers,partial_pressure, and flags such asis_precursor. add_surface_reaction(%rxn)-
Add a co-adsorbed surface reaction between species.
deposit(%opts)-
Estimate deposition steps from impingement flux and run the KMC.
run(%opts)-
Execute the deposition-centric BKL loop (adsorption, diffusion, decomposition, reaction).
get_film()-
Return a Physics::CVD::Film object built from the lattice state.
coverage()-
Fraction of surface sites currently occupied.
stats()-
Return simulation time, steps, deposited atoms, coverage, and event counts.
Physics::CVD::Reactor
Reactor-scale flow and transport diagnostics.
new(%opts)-
Constructor options:
type(defaultlpcvd_tube),length,diameter,gap,wafer_diameter,total_flow,carrier_gas,gases, plustemperature,pressure, andverbose. gas_velocity()-
Mean gas velocity in m/s.
residence_time()-
Gas residence time in seconds.
reynolds_number()-
Reynolds number based on carrier-gas properties.
gas_density()/gas_viscosity()-
Ideal-gas density and Sutherland viscosity.
mean_free_path()-
Gas mean free path in meters.
knudsen_number()-
lambda / characteristic_length. damkohler_number(%opts)-
Da = surface_rate * L / D, the reaction-to-transport ratio. diffusivity(%opts)-
Chapman-Enskog binary diffusivity in cm2/s.
thiele_modulus(%opts)/step_coverage(%opts)-
Feature-scale Thiele modulus and trench step coverage.
summary()-
Hash of reactor flow/transport diagnostics.
Physics::CVD::Transport
Feature-scale mass-transport model.
new(%opts)-
Options:
feature_type(defaulttrench),aspect_ratio,feature_width, plustemperature,pressure,verbose. knudsen_diffusivity(%opts)-
Knudsen diffusivity inside a feature in cm2/s.
effective_diffusivity(%opts)-
Bosanquet interpolation:
1/D_eff = 1/D_bulk + 1/D_Kn. step_coverage(%opts)-
Analytical step coverage estimate from sticking coefficient and aspect ratio.
conformality_profile(%opts)-
Relative flux versus depth inside a feature.
boundary_layer_thickness(%opts)-
Stagnation-flow boundary-layer thickness in cm.
mass_transfer_coeff(%opts)-
h_m = D / deltain cm/s. wafer_uniformity(%opts)-
Normalized radial deposition-rate profile across a wafer.
regime(%opts)-
Classify the regime as reaction-limited, transport-limited, or mixed.
stats()-
Return feature parameters plus computed Knudsen diffusivity and step coverage.
Physics::CVD::Film
Analysis object for a deposited film.
thickness()-
Average film thickness in nm.
roughness()-
RMS surface roughness in nm.
density()/porosity()-
Fraction of occupied sites and
1 - density. composition()-
Species counts and fractions over the whole film.
composition_profile(%opts)-
Depth-resolved composition bins.
stoichiometry($A, $B)-
Atomic ratio
A:B. export_xyz($file)-
Export film to XYZ format; returns atom count.
export_lammps_data($file)-
Export film to LAMMPS data format; returns atom count.
Interfaces
Physics::CVD::Interface::OpenFOAM
generate_case(%opts)-
Create a complete reactingFoam case directory.
run(%opts)-
Run
blockMeshand the selected solver, serial or MPI.
Physics::CVD::Interface::LAMMPS
generate_surface_reaction(%opts)-
Write a ReaxFF CVD deposition input script.
generate_stress_analysis(%opts)-
Write a Tersoff NPT stress-relaxation script.
run(%opts)-
Execute LAMMPS serial or MPI run.
parse_log($file)-
Parse thermodynamic output rows into an array of hashes.
Physics::CVD::Interface::Cantera
generate_sio2_mechanism(%opts)-
Write
sio2_cvd.yamlfor TEOS/O2 to SiO2. generate_si3n4_mechanism(%opts)-
Write
si3n4_cvd.yamlfor DCS+NH3 LPCVD Si3N4. generate_reactor_script(%opts)-
Write an executable Python/Cantera reactor script.
PHYSICAL MODELS
Gas-Phase Chemistry
- Arrhenius kinetics:
k = A exp(-Ea / kT) - Hertz-Knudsen impingement:
Phi = P / sqrt(2 pi m kT) - Binary diffusion: Chapman-Enskog with collision integrals
Surface Kinetics
- Langmuir-Hinshelwood: rate proportional to
theta_A theta_B k(T) - Eley-Rideal: rate proportional to
P_gas theta_surface S(T) - Sticking coefficient:
S(T) = S0 exp(-Ea / kT)
Mass Transport
- Knudsen diffusion:
D_Kn = (w / 3) sqrt(8 kT / pi m) - Bosanquet interpolation:
1 / D_eff = 1 / D_bulk + 1 / D_Kn - Step coverage:
SC = 1 / (1 + phi^2 / 6)wherephi = AR sqrt(S / (2 - S)) - Boundary layer:
delta = sqrt(D L / v)
Reactor Physics
- Reynolds number:
Re = rho v D / mu - Knudsen number:
Kn = lambda / L - Damköhler number:
Da = k_s L / D(reaction vs transport) - Thiele modulus:
phi = L sqrt(k_s / D)
CVD PROCESS REFERENCE
Typical process windows used by the built-in examples:
Process Precursors T (C) P (Pa) Rate (nm/min)
--------------------------------------------------------------
TEOS SiO2 TEOS + O2 680 40 10-30
PE-SiO2 SiH4 + N2O 350 300 50-200
LP-Si3N4 DCS + NH3 780 25 3-5
PE-SiNx SiH4 + NH3 350 200 10-50
Poly-Si SiH4 620 30 10-20
W-CVD WF6 + SiH4 400 5000 100-300
EXAMPLES
Run the bundled examples from the examples/ directory:
cd examples
perl -I../lib sio2_teos.pl # TEOS CVD SiO2
perl -I../lib si3n4_lpcvd.pl # DCS + NH3 LPCVD Si3N4
INSTALLATION
cd Physics-CVD
perl Makefile.PL
make
make test
make install # optional, installs system-wide
Optional dependencies:
OpenFOAM -> sudo apt install openfoam
LAMMPS -> sudo apt install lammps
Cantera -> pip install cantera
PDL -> cpanm PDL
PDL::Graphics::Gnuplot -> cpanm PDL::Graphics::Gnuplot
LICENSE
This module is free software; you can redistribute it under the same terms as Perl itself.
SEE ALSO
Physics::CVD::ChemistryPhysics::CVD::KMCPhysics::CVD::ReactorPhysics::CVD::TransportPhysics::CVD::FilmPhysics::CVD::Interface::OpenFOAMPhysics::CVD::Interface::LAMMPSPhysics::CVD::Interface::Cantera
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 145:
Non-ASCII character seen before =encoding in '—'. Assuming UTF-8