NAME
Physics::Lithography - Laser Direct Imprint Lithography simulation framework
VERSION
Version 0.02
SYNOPSIS
use Physics::Lithography;
my $litho = Physics::Lithography->new(verbose => 1);
# Characterise the laser source
my $laser = $litho->laser(
wavelength => 355e-9, # 355 nm (UV)
pulse_width => 10e-9, # 10 ns
fluence => 0.5, # J/cm^2
spot_size => 5e-6, # 5 um 1/e^2 radius
profile => 'gaussian',
temporal => 'gaussian',
);
# Solve 2D heat flow in a supported material
my $thermal = $litho->thermal(material => 'pmma');
$thermal->solve(laser => $laser, time => 100e-9);
printf "Peak temperature: %.0f K\n", $thermal->T_max;
# Predict ablation depth
my $abl = $litho->ablation(alpha => 1e5, F_threshold => 0.1);
printf "Ablation depth: %.0f nm\n", $abl->ablation_depth(fluence => 0.5) * 1e9;
DESCRIPTION
Physics::Lithography is a Perl toolkit for simulating Laser Direct Imprint Lithography (LDIL) and related laser-material processes. It provides compact physics-based models for beam/pulse characterisation, thermal transport, ablation, phase change, pattern-transfer fidelity, and Laser-Induced Forward Transfer (LIFT). Interface modules can write input files for OpenFOAM and LAMMPS when higher-fidelity CFD or molecular dynamics are required.
All quantities are in SI base units (metres, seconds, joules, kelvin, kg) with fluence customarily expressed in J/cm^2 for convenience.
FEATURES
Laser characterisation - Gaussian/flat-top/ring beam profiles, temporal pulse shapes, Beer-Lambert absorption, thermal confinement checks.
2D thermal solver - Explicit finite-difference in cylindrical (r,z) coordinates with built-in material data for PMMA, SU-8, polyimide, silicon, gold and copper.
Ablation modelling - Logarithmic blow-off model, multi-pulse incubation, crater geometry, volume removal rate and ablation efficiency.
Phase change - Melt pool analysis, resolidification time (Stefan number), heat-affected zone depth and enthalpy method.
Pattern transfer - Minimum feature size prediction, edge acuity, aspect-ratio limits, process window mapping and scan parameters.
LIFT - Vapour recoil pressure, jetting threshold, droplet diameter, transfer regime classification, Weber/Reynolds numbers.
Interface modules - OpenFOAM (interFoam for melt dynamics) and LAMMPS (TTM + MD for ultrafast ablation) input-file generation.
MAIN FACTORY METHODS
The Physics::Lithography class is a factory that returns specialised solver objects. Common options such as verbose are inherited by sub-modules unless overridden.
new(%opts)-
Constructor.
verboseenables informational messages. laser(%opts)-
Returns a Physics::Lithography::Laser object.
thermal(%opts)-
Returns a Physics::Lithography::Thermal object.
ablation(%opts)-
Returns a Physics::Lithography::Ablation object.
phase_change(%opts)-
Returns a Physics::Lithography::PhaseChange object.
pattern(%opts)-
Returns a Physics::Lithography::Pattern object.
lift(%opts)-
Returns a Physics::Lithography::LIFT object.
interface($name, %opts)-
Returns an interface object.
$namemay be'openfoam'or'lammps'. methods()-
Returns an array reference of the sub-module factory method names.
interfaces()-
Returns an array reference of the supported interface names.
LASER
my $laser = $litho->laser(
wavelength => 355e-9,
pulse_width => 10e-9,
fluence => 0.5, # J/cm^2
spot_size => 5e-6, # m
profile => 'gaussian', # gaussian | flat_top | ring
temporal => 'gaussian', # gaussian | square
rep_rate => 1000, # Hz
);
Public methods:
peak_intensity()-
Peak intensity in W/cm^2 for a Gaussian temporal pulse.
pulse_energy()-
Pulse energy in joules.
average_power()-
Average power in watts.
photon_energy_eV()-
Photon energy in electron-volts.
thermal_diffusion_length(%opts)-
Thermal diffusion length (m) for a given diffusivity.
spatial_profile($r)-
Normalised spatial intensity at radius
$r(m). temporal_profile($t)-
Normalised temporal intensity at time
$t(s). absorption_profile(%opts)-
Beer-Lambert volumetric heat source (W/m^3).
penetration_depth(%opts)-
Optical penetration depth (m).
is_thermal_confinement(%opts)-
True if the pulse is shorter than the thermal diffusion time for the material.
photon_flux()-
Photons per pulse per unit area (photons/m^2).
summary()-
Hash reference summarising laser parameters and derived values.
THERMAL
my $thermal = $litho->thermal(
material => 'pmma', # pmma | su8 | polyimide | silicon | gold | copper
n_r => 50,
n_z => 50,
domain_r => 20e-6,
domain_z => 10e-6,
);
Public methods:
solve(%opts)-
Run the explicit finite-difference heat equation. Requires
laser(aPhysics::Lithography::Laserobject) and eithertimeorsteps. temperature_at($r, $z)-
Interpolated temperature (K) at arbitrary coordinates.
surface_temperature()-
Array reference of surface temperatures T(r, z=0).
T_max()-
Maximum temperature reached (K).
melt_radius()-
Surface radius where temperature drops below the melt point (m), or
undef. melt_depth()-
Depth at the centre where temperature drops below the melt point (m), or
undef. decomposition_depth()-
Centre depth where the decomposition temperature is reached (m), for polymers.
field()-
Full 2D temperature field as an array reference
[nr][nz]. grid_info()-
Hash reference of grid parameters.
materials()-
Available material names.
material_info($name)-
Material properties for
$name.
ABLATION
my $abl = $litho->ablation(
alpha => 1e5, # 1/m effective absorption
F_threshold => 0.1, # J/cm^2
incubation_S => 0.85, # incubation coefficient (S < 1)
);
Public methods:
ablation_depth(%opts)-
Single-pulse ablation depth (m) from the logarithmic blow-off model.
multi_pulse_depth(%opts)-
Accumulated ablation depth (m) with multi-pulse incubation.
ablation_rate_curve(%opts)-
Array reference of
{fluence, depth_nm}pairs over a fluence sweep. calculate_threshold(%opts)-
Estimate threshold fluence (J/cm^2) from thermal properties.
crater_profile(%opts)-
Gaussian-beam crater radius/depth/profile hash reference.
volume_per_pulse(%opts)-
Removed volume per pulse (m^3).
efficiency(%opts)-
Mass removed per unit energy (kg/J).
threshold_with_incubation(%opts)-
Threshold fluence (J/cm^2) for N pulses.
stats()-
Hash reference of configured ablation parameters.
PHASE_CHANGE
my $pc = $litho->phase_change(
T_melt => 600, # K
L_fusion => 2.5e5, # J/kg
density => 1200,
cp => 1200,
);
Public methods:
analyze_melt_pool(%opts)-
Compute melt/vapour pool geometry from a temperature field.
resolidification_time(%opts)-
Estimate resolidification time (s) from the Stefan number.
cooling_rate(%opts)-
Cooling rate at the solidification front (K/s).
haz_depth(%opts)-
Heat-affected zone depth (m).
enthalpy($T)-
Enthalpy per unit volume (J/m^3) at temperature
$T. phase_at($T)-
Phase state string:
'solid','liquid'or'vapor'. melt_pool()-
Accessor returning the stored melt-pool hash reference.
PATTERN
my $pat = $litho->pattern();
Public methods:
minimum_feature_size(%opts)-
Minimum resolvable feature (nm) combining the optical spot and thermal diffusion limits.
edge_acuity(%opts)-
Edge width from thermal and optical absorption lengths (nm).
max_aspect_ratio(%opts)-
Achievable depth-to-width ratio.
process_window(%opts)-
Array reference of
{fluence, depth_nm, width_nm, quality}points. scan_parameters(%opts)-
Scan pitch, velocity, throughput and dwell time.
line_pattern(%opts)-
Predicted scanning line width and depth (nm).
resolution_comparison(%opts)-
Array reference comparing resolution for a set of pulse configurations.
LIFT
my $lift = $litho->lift(
film_thickness => 100e-9, # donor film (m)
density => 19300, # kg/m^3 (gold)
T_melt => 1337, # K
T_boil => 3129, # K
L_vaporize => 1.74e6, # J/kg
surface_tension => 1.14, # N/m
alpha => 7e7, # 1/m
reflectivity => 0.37,
gap => 50e-6, # donor-receiver gap (m)
);
Public methods:
transfer_threshold()-
Fluence threshold (J/cm^2) for forward transfer.
transfer_regime(%opts)-
Classification string:
no_transfer,sub_threshold,jetting,sprayorexplosive. recoil_pressure(%opts)-
Vapour recoil pressure (Pa) at the donor interface.
jet_velocity(%opts)-
Estimated jet velocity (m/s).
droplet_diameter(%opts)-
Predicted droplet diameter (m).
weber_number(%opts)/reynolds_number(%opts)-
Dimensionless jetting parameters.
flight_time(%opts)-
Donor-to-receiver flight time (s).
fluence_sweep(%opts)-
Array reference of regime, droplet size, velocity and pressure over a fluence sweep.
INTERFACE MODULES
# OpenFOAM case generation
my $of = $litho->interface('openfoam', case_dir => './melt_case');
$of->generate_case(dt => 1e-10, end_time => 1e-6);
# LAMMPS TTM-MD script generation
my $lmp = $litho->interface('lammps', output_dir => './laser_md');
$lmp->generate_script(material => 'gold', fluence => 0.5, pulse_fs => 100);
Supported interfaces are openfoam (Physics::Lithography::Interface::OpenFOAM) and lammps (Physics::Lithography::Interface::LAMMPS).
EXAMPLES
The distribution includes example scripts in the examples/ directory:
- examples/quick_start.pl
-
Short introductory script.
- examples/thermal_imprint.pl
-
Resolution analysis, thermal simulation, ablation depth vs fluence, multi-pulse incubation and scanning parameters.
- examples/lift_gold.pl
-
LIFT transfer regimes for a gold donor film, including threshold determination, fluence sweep and droplet sizing.
Run an example with:
perl -Ilib examples/thermal_imprint.pl
PHYSICS BACKGROUND
Logarithmic blow-off model
For a Beer-Lambert absorber the single-pulse ablation depth is
d = (1/alpha) * ln(F / F_th)
where alpha is the effective absorption coefficient, F is the incident fluence and F_th is the threshold fluence.
Multi-pulse incubation
The threshold fluence decreases with accumulated pulses:
F_th(N) = F_th(1) * N^(S - 1) S < 1
Thermal confinement
A pulse is thermally confined when its duration is shorter than the time required for heat to diffuse across the optical absorption depth:
tau << 1 / (alpha^2 * kappa)
Thermal confinement enables sharper, smaller features.
LIFT transfer regimes
Sub-threshold - incomplete film release
Jetting - clean single-droplet transfer (optimal)
Spray - multiple satellite droplets
Explosive - plasma-assisted, poor resolution
INSTALLATION
git clone https://github.com/jtrujil43/Physics-Lithography.git
cd Physics-Lithography
perl Makefile.PL
make
make test
Core dependencies (Carp, List::Util, File::Path) ship with Perl. OpenFOAM and LAMMPS are optional and only needed for the interface modules.
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Jovan Trujillo