Physics::CVD — Chemical Vapor Deposition Simulation Framework

A Perl library for simulating Chemical Vapor Deposition (CVD) processes, including gas-phase chemistry, surface kinetics, mass transport, and film growth modeling.

Features

Installation

cd Physics-CVD
perl Makefile.PL
make
make test
make install    # optional, installs system-wide

Optional Dependencies

| Package | Purpose | Install | |---------|---------|---------| | OpenFOAM | Reactor-scale CFD | sudo apt install openfoam | | LAMMPS | Surface reaction MD | sudo apt install lammps | | Cantera | Detailed chemistry | pip install cantera | | PDL | Numerical arrays | cpanm PDL | | PDL::Graphics::Gnuplot | Plotting | cpanm PDL::Graphics::Gnuplot |

Quick Start

use Physics::CVD;

my $cvd = Physics::CVD->new(
    temperature => 953,    # K (680°C)
    pressure    => 40,     # Pa
);

# Gas-phase chemistry
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,
);

# Surface growth simulation
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);

# Analysis
my $film = $kmc->get_film;
printf "Thickness: %.2f nm\n", $film->thickness;
printf "Roughness: %.3f nm\n", $film->roughness;

API Reference

Physics::CVD (main module)

| Method | Description | |--------|-------------| | new(%opts) | Create CVD simulation (temperature, pressure, verbose) | | chemistry(%opts) | Create Chemistry engine | | kmc(%opts) | Create surface KMC engine | | reactor(%opts) | Create Reactor model | | transport(%opts) | Create Transport model | | film(%opts) | Create Film analysis object | | interface($name, %opts) | Load interface (openfoam, lammps, cantera) |

Physics::CVD::Chemistry

| Method | Description | |--------|-------------| | add_species(%spec) | Add gas/surface species (name, mass, concentration) | | add_gas_reaction(%rxn) | Add gas-phase reaction (Arrhenius: A, Ea) | | add_surface_reaction(%rxn) | Add surface reaction (LH or ER mechanism) | | rate_constant(%opts) | Compute k = A×exp(-Ea/kT) | | gas_rates() | Compute all gas-phase reaction rates | | surface_rates(%opts) | Compute surface reaction rates given coverages | | impingement_flux(%opts) | Hertz-Knudsen flux (molecules/cm²/s) | | sticking_coefficient(%opts) | Temperature-dependent S(T) | | evolve(%opts) | Integrate chemistry over time (Euler) | | growth_rate(%opts) | Estimate deposition rate (nm/min) |

Physics::CVD::KMC

| Method | Description | |--------|-------------| | new(%opts) | Create KMC engine (lattice_size, lattice_const, temperature) | | add_species(%spec) | Add depositing species (sticking, barriers, pressure) | | add_surface_reaction(%rxn) | Add co-adsorbed species reaction | | deposit(%opts) | Run deposition (steps or time) | | run(%opts) | Run KMC steps directly | | get_film() | Extract Film object from lattice | | coverage() | Fraction of surface sites occupied | | stats() | Simulation statistics |

Physics::CVD::Reactor

| Method | Description | |--------|-------------| | new(%opts) | Create reactor (type, geometry, flow) | | gas_velocity() | Mean gas velocity (m/s) | | residence_time() | Gas residence time (s) | | reynolds_number() | Re for flow characterization | | knudsen_number() | Kn for flow regime | | mean_free_path() | λ in meters | | diffusivity(%opts) | Binary Chapman-Enskog D₁₂ (cm²/s) | | damkohler_number(%opts) | Da = reaction/transport rate ratio | | step_coverage(%opts) | Conformality from Thiele modulus |

Physics::CVD::Transport

| Method | Description | |--------|-------------| | new(%opts) | Create transport model (feature geometry) | | knudsen_diffusivity(%opts) | D_Kn in features (cm²/s) | | effective_diffusivity(%opts) | Bosanquet D_eff (cm²/s) | | step_coverage(%opts) | Bottom/top rate ratio | | conformality_profile(%opts) | Flux vs depth in feature | | boundary_layer_thickness(%opts) | δ (cm) | | mass_transfer_coeff(%opts) | h_m (cm/s) | | wafer_uniformity(%opts) | Radial rate profile | | regime(%opts) | Reaction-limited vs transport-limited |

Physics::CVD::Film

| Method | Description | |--------|-------------| | thickness() | Average film thickness (nm) | | roughness() | RMS roughness (nm) | | density() | Fraction of occupied sites | | porosity() | 1 - density | | composition() | Species counts and fractions | | composition_profile(%opts) | Depth-resolved composition | | stoichiometry($A, $B) | Atomic ratio A:B | | export_xyz($file) | Export to XYZ format | | export_lammps_data($file) | Export to LAMMPS data |

Physics::CVD::Interface::OpenFOAM

| Method | Description | |--------|-------------| | generate_case(%opts) | Create full OpenFOAM case directory | | run(%opts) | Execute OpenFOAM solver |

Physics::CVD::Interface::LAMMPS

| Method | Description | |--------|-------------| | generate_surface_reaction(%opts) | ReaxFF CVD reaction script | | generate_stress_analysis(%opts) | Film stress calculation script | | run(%opts) | Execute LAMMPS | | parse_log($file) | Parse thermo output |

Physics::CVD::Interface::Cantera

| Method | Description | |--------|-------------| | generate_sio2_mechanism() | TEOS/O₂ → SiO₂ YAML | | generate_si3n4_mechanism() | DCS/NH₃ → Si₃N₄ YAML | | generate_reactor_script(%opts) | Python Cantera reactor script |

Examples

cd examples/
perl -I../lib sio2_teos.pl       # TEOS CVD SiO₂
perl -I../lib si3n4_lpcvd.pl     # DCS+NH₃ LPCVD Si₃N₄

Physical Models

Gas-Phase Chemistry

Surface Kinetics

Mass Transport

Reactor Physics

CVD Process Reference

| Process | Precursors | T (°C) | P (Pa) | Rate (nm/min) | |---------|-----------|--------|--------|----------------| | TEOS SiO₂ | TEOS + O₂ | 680 | 40 | 10-30 | | PE-SiO₂ | SiH₄ + N₂O | 350 | 300 | 50-200 | | LP-Si₃N₄ | DCS + NH₃ | 780 | 25 | 3-5 | | PE-SiNₓ | SiH₄ + NH₃ | 350 | 200 | 10-50 | | Poly-Si | SiH₄ | 620 | 30 | 10-20 | | W-CVD | WF₆ + SiH₄ | 400 | 5000 | 100-300 |

License

This module is free software; you can redistribute it under the same terms as Perl itself.