C++

Header-only wrapper in include/palioxis.hpp. No build step required — add include/ to your include path and link against the Palioxis static library.

API coverage

C API (Lib_Palioxis_c.h)

C++ wrapper

Process configuration

palioxis::set_root(path)

palioxis::root()

Construction / destruction

Palioxis_ctor

MultipleDefectModel(xml_filename)

Palioxis_delete

destructor

Model metadata

getnGas

model.get_n_gas() / cached _n_gas

getnTrap

model.get_n_trap_types()

getnDofAfterConstraint

model.get_n_ne_traps()

getGas_name / gas_name_len

model.gas_names()

getTrap_name / trap_name_len

model.defect_names()

getDof_name / dof_name_len

model.trap_names()

getPalioxisVersion

MultipleDefectModel::version()

getBoltzmannConst

cached at construction

getMinMobileConc

MultipleDefectModel::get_min_mobile_conc()

self_consistent

model.self_consistent()

getMaxOccupancy

model.get_max_trap_occupancy(trap_index)

Diffusion

getDiffusionConstant

model.get_diffusion_constant(T)

getDiffusionConstantStress

model.get_diffusion_constant_stress(T, stress)

effectiveDiffusionCoefficientPrefactor

model.effective_diffusion_prefactor(mobile, defects, T)

effectiveDiffusionCoefficientPrefactorStress

model.effective_diffusion_prefactor_stress(mobile, defects, T, stress)

getRelaxationVolume

model.get_relaxation_volume()

getHeatOfTransport

getHeatOfTransportStress

Time integration

getTimeDerivative

model.get_time_derivative(mobile, trapped, T)

getMobileTimeDerivative

model.get_mobile_time_derivative(mobile, defects, trapped, T)

model.get_time_derivatives(mobile, defects, trapped, T) (both)

getTimeDerivativesJacobian

model.get_time_derivatives_jacobian(defects, mobile, trapped, T)TimeDerivativesJacobian

getMobileTimeDerivativeJacobianFromTrapped

model.get_mobile_time_derivative_jacobian_from_trapped(defects, trapped, T, dyc, ddyc_dx, ddyc_dyc)MobileTimeDerivativeJacobian

getTimeDerivativeskBTJacobian

model.get_time_derivatives_temperature_sensitivity(defects, mobile, trapped, T)TimeDerivativesTemperatureSensitivity

Initialisation

defect_density

model.get_defect_concentrations(z1, z2)

gas_fluence

model.set_fluence_source_rate(z1, z2)

setInitial_condition

model.set_initial_conditions(mobile, T)

gas_flux

model.apply_gas_flux(z1, z2)

model.get_ic_from_xml(location, z1, z2, T) (composite)

Bounds / validation

ensureBounds

model.ensure_bounds(mobile, defects, trapped)

inBounds

model.in_bounds(mobile, defects, trapped)

Surface

surfaceRate

model.get_surface_rate(location, mobile, T)

surfaceVoxSetDirichlet

model.set_surface_dirichlet(location, mobile, T)

Retention

retention

model.retention(mobile, defects, trapped, T, location, thickness)

retention_noneq

model.non_equilibrium_retention(defects, trapped, T)

retention_trapped_by_occupation

model.trapped_retention_by_occupation(trap_index, mobile, defects, trapped, T)

retention_trapped_by_trap

model.trapped_retention_by_trap(mobile, defects, trapped, T)

probability_of_occupation

model.probability_of_occupation(trap_index, mobile, trapped, T)

calculate_mobile_steady_state

model.calculate_mobile_steady_state(mobile, defects, T, trapped)

calculate_steady_state

model.calculate_steady_state(mobile, T, trapped, defects)

Diagnostics

report

model.report(verbose=false)

Lib_Palioxis_init_MPI

echo_message

Usage

#include "palioxis.hpp"

// Set the Palioxis data root once per process.
// XML input files cross-reference each other relative to this path.
palioxis::set_root("/path/to/palioxis");

// Construct a model from an XML configuration file.
palioxis::MultipleDefectModel m("input.xml");

// Inspect cached metadata.
std::cout << "n_gas = " << m.get_n_gas() << "\n";
for (const auto& name : m.gas_names())
    std::cout << "  gas: " << name << "\n";

// State vectors — sizes: mobile[n_gas], defects[n_trap_types], trapped[n_ne_traps]
palioxis::MobileConcentrations  mobile  = { /* ... */ };
palioxis::DefectConcentrations  defects = { /* ... */ };
palioxis::TrappedConcentrations trapped = { /* ... */ };
double T = 800.0;  // Kelvin

// Effective diffusion coefficient prefactor matrix (n_gas × n_gas).
palioxis::ShapedDoubleData D_eff = m.effective_diffusion_prefactor(mobile, defects, T);

// Both mobile and trapped time derivatives in a single call.
palioxis::TimeDerivatives dy = m.get_time_derivatives(mobile, defects, trapped, T);
// dy.mobile  — mobile rates  [n_gas]
// dy.trapped — trapped rates [n_ne_traps]