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. verbose enables 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. $name may 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 (a Physics::Lithography::Laser object) and either time or steps.

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, spray or explosive.

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