from Virgin and Recycled Materials
Olivier Vitrac, PhD | Generative Simulation Initiative 🌱🌿🌳🍃🍂
This document introduces a tiered framework (M0–M3) for the safe design of food, cosmetic, and pharmaceutical packaging. The framework progresses from simple conservative balances to complex scenarios integrating diffusion, functional barriers, and recycled materials. It relies on: (i) explicit indicators (severity, criticity, release potential); (ii) constraint-based optimization rules; (iii) open databases (PubChem, ToxTree); and (iv) Python tools (SFPPy) to automate calculations and scenarios, including coupling with generative AI (RAG) for reasoning and traceability. The goal is design-for-compliance: build intrinsically safe, conformant packaging upstream, not only verify ex-post.
See the overview of tiers in Section 6, thermodynamic principles in Section 3, and SFPPy examples in Section 9.
Note
A glossary of key terms and expressions, as well as a table of acronyms, notations, and symbols used throughout the article, is provided at the end.
The safe design of food packaging consists in integrating health and safety constraints from the very beginning. The objective is to ensure that migrating substances from materials remain below regulatory toxicological thresholds, regardless of the complexity of structures or the origin of materials, including recycled ones. This proactive approach is decisive, as it steers formulation and design before market release, in a context where European, American, and Chinese regulations strictly frame compliance requirements.
The proposed method rests on a clear doctrine: translate the safety problem into explainable and verifiable design constraints that can be tested by humans, AI agents and both. It is structured around four complementary principles.
Formalization of the regulatory constraint, linking the specific migration of each substance to a toxicological reference value.
Conservative modeling of migration: a generic thermodynamic model provides robust upper bounds, applicable to any material and any contact condition.
Introduction of risk indicators, condensing information on substances and components into severities (individual) and criticities (cumulative), facilitating ranking, optimization, and justification of technical choices.
A tiered approximation method: a system of “tiers” ranging from the most conservative scenario to refined evaluations by substance and material.
This approach is designed to be operational at multiple scales. It can be implemented simply in a spreadsheet for punctual evaluations, but it is also compatible with automated environments and reasoning chains driven by Artificial Intelligence (AI). It is integrated in the open-source tools FMECAengine (Vitrac 2025) and SFPPy / SFPPyLite (Vitrac, 2025a; Vitrac, 2025b). These tools utilize PubChem (Kim et al., 2024) as a molecular structure engine and ToxTree (Patlewicz et al., 2008) for toxicological classification in a fully automated manner. This dual usage — manual or automated — is deliberate: it aims to foster transparency and auditability, both essential in a regulated domain, while anticipating the industrialization of repetitive calculations and multicriteria explorations, beyond the substances explicitly listed in regulations. In this sense, this article illustrates a philosophy of “design for compliance”: the objective is no longer to demonstrate a posteriori that a packaging is safe, but to build intrinsically compliant and safe solutions from the outset.
This article focuses on the objective construction of health safety indicators and their integration in a design logic (optimization of components, formulation, and uses), treated as an engineering mathematical problem. Readers interested in the physics of transfers and their resolution techniques are referred to Zhu et al.( 2019). Finally, the approaches presented here constitute an important update compared to the last European guide (Brandsch et al., 2015), to which one of us contributed.
Because this is a design approach, it takes place before experimental testing. The proposed indicators can accommodate calculated or partial data (composition, decontamination rates, intermediate migration results). They cover:
All materials: while tiers 2 and 3 are particularly suited to thermoplastics and elastomers, an extension is foreseen for paper and board.
Virgin and recycled materials, without distinction of recycling technology.
Single-use and repeated-use contexts, accounting for forming steps that modify substance distribution.
All sensitive contact applications: primarily food, but also pharmaceuticals, cosmetics, medical devices, and household products.
In contrast, this article does not provide a ranking of materials or recommendations on processes/materials. The application of indicators depends on the intended use, without privileging virgin versus recycled plastics or paper. The indicators are generic: they can be combined, if necessary, with other criteria such as economic costs or environmental impacts.
Tip
Readers wishing to explore the concepts while maintaining control over calculation steps may use the SFPP3 platform (Vitrac, 2025c), which relies on the same computational engine (Nguyen et al., 2013) as SFPPy / SFPPyLite. Prerequisites for a good understanding of this article can be acquired through the FitNESS platform (Vitrac et al., 2024).
“It would be ideal if the migration of each additive and monomer into the packed foodstuff could be determined when the package has been filled and stored under normal conditions of practice. This would ensure that no physiologically objectionable plastics material would be admitted and, on the other hand, that no suitable plastics material would be rejected because of a hypercritical assessment.”
— Figge (1980) (Figge 1980)
Designing safe packaging remains a challenge because the distinction between hazard and risk is not always intuitive for designers. Hazard refers to the intrinsic toxicity of substances, whereas risk depends on the quantities actually ingested by the consumer. Two emblematic publications, published more than half a century apart in the prestigious journals Science and Nature, illustrate the persistence of this problem: Jaeger and Rubin (1970), which highlights migration of major constituents such as monomers and plasticizers, and Monclús et al. (2025), which reveals the migration of hundreds of minor substances.
The difficulty is therefore not removed but shifted: on the one hand, from controlling a few well-characterized additives to assessing multiple contaminants with uncertain profiles; on the other, from an analytical approach focused on known substances to an integrated approach capable of setting priorities and ranking risks.
In Europe, assessment rests on a clear distinction between hazard and risk. Substances are assessed individually when their structures differ sufficiently. For homogeneous families (isomers, substituted molecules), they are grouped by aggregation. This logic extends to substances sharing a common toxicological mode of action such as phthalates or benzophenones.
Certain effects, however, are excluded from the regulatory scope. Synergistic effects, often called “cocktail effects,” are not considered. Cumulative exposures to genotoxic or carcinogenic substances are likewise not considered. Thus, the presence of several carcinogens at low levels may be deemed acceptable as long as none individually exceeds its alert threshold.
Note
These rules may evolve, but they do not challenge the safe design method presented in this article. The core of the approach—translating the toxicological constraint into a design constraint—remains valid regardless of the criteria adopted.
Exposure calculation relies on a conservative, simplified hypothesis. It assumes the daily ingestion of
For a substance
Note
A package is deemed safe if, for every substance
where
This approach ignores cumulative exposure but requires aggregation for substances with a common toxicological target. A direct consequence is that a recycled material, although richer in contaminants, can be considered as safe as a virgin material as soon as condition
Note
Here,
Conversely, exposure limits are expressed per ingested mass of food. The ratio
When a substance appears on a positive list, as in Regulation (EU) No 10/2011, the regulatory value of
Here,
TTC thresholds (Munro et al., 2008) to be applied to non-evaluated substances—and thus usable for unknown substances—were set by the European Food Safety Authority (EFSA) (EFSA, 2016) and are recalled in Table 1.
| Toxicological class | TTC ( |
|---|---|
| Possible genotoxicity (conservative) | 0.0025 |
| Cramer class III (high concern) | 1.5 |
| Cramer class II (intermediate toxicity) | 9 |
| Cramer class I (low toxicity) | 30 |
Tip
TTC values can be predicted for arbitrary molecules using ToxTree (Patlewicz 2008) or its ports in open-source projects such as SFPPy (Vitrac 2025).
Body weight (
| Age group | Source | ||
|---|---|---|---|
| Newborns (0–16 weeks) | 5 | 0.75 | EFSA 2017 |
| Infants (0–6 months) | 5–6 | 0.75–1.0 | EFSA 2017 |
| Young children (1–3 years) | 12 | 1.0 | EFSA 2012 |
| Children (4–9 years) | 20 | 1.0–1.5 | EFSA 2012 |
| Adults (≥ 15 years) | 60–70 | 1.0 | EU 10/2011 |
The exact calculation of
(i) Robust overestimation property:
(ii) An explainable and fast calculation of
Property
where
Note
Initial concentrations
For porous materials,
The same criterion
Toxicology axis (T): sets
Transfer axis (M): sets
This
| T0 — worst case — genotoxic TTC | T1 — TTC — Cramer classes | T2 — published TDI/SML | |
|---|---|---|---|
| M0 — total transfer | |||
| M1 — unit partition | |||
| M2 — realistic partitions (solubility, polarity, crystallinity) | |||
| M3 — dynamic diffusion (time, temperature) |
The horizontal axis (
Estimators derived from the M-tiers must be constructed to satisfy monotonicity properties on concentration scales in food and in materials:
Note
In a multilayer design, each component can be a source of the same substance: process residues, recycling impurities, ink/adhesive constituents, environmental pickup. The calculation of
For unknown substances, substitution rules are provided: material limits of detection (
For a given tier pair
and deduce simple constraints
Note
In this article, a script denotes a light program that automates calculations for a given tier pair
RAG (Retrieval-Augmented Generation) denotes an AI approach that combines knowledge-base retrieval with the automatic generation of scripts or explanations, used here to document and secure sizing calculations. Finally, the article is written so that it can be directly exploited by large language models (LLMs).
We replace the exact calculation of
The tiers decouple toxicology (
Tip
The next section (“General model for
The estimators
All models share a common set of assumptions:
the total system volume (food + packaging) is additive;
the system is closed to the outside: no losses, no chemical decomposition, no secondary production;
use conditions are maximized to reflect the longest contact durations and highest foreseeable temperatures.
The temporal component is the most complex to handle because it depends on:
geometry (thickness, contact surface),
use conditions (duration, temperature, type of contact),
transport and thermodynamic properties of materials.
We introduce a thermodynamic equilibrium concentration
Note
For a monolayer material,
At thermodynamic equilibrium, the partial pressures
Henry’s law gives:
where
Mass conservation imposes:
Thus, the equilibrium concentration in food is:
In the general case, contaminants may come from all packaging components (plastic, adhesive, ink, paper/board), independently of regulations that usually handle substances by material type. It is useful to distinguish the contribution from any initial food contamination (before contact) and that from non-food components.
We separate the food contribution (
In a conservative approximation, concentrations are replaced by upper bounds (denoted with a hat, including
This introduces no bias when the initial food contamination is zero, since then
Specializations by tier (axis M):
M0 (total transfer).
All substances present in packaging fully migrate to food:
M1 (unit partition).
All phases are assumed to have the same affinity as food, i.e.
The expression simplifies to a volume-weighted mean:
M2 (realistic partitions).
Ratios of Henry’s constants
For prudence, minimum plausible values of
Note
If the food has an initial contamination
where
If the substance originates from a single component
where the static migration rate
satisfies
Note
In recycled materials, it is preferable to adopt a cautious assumption: consider multiple potential sources of
The conservative concentration in food at time
This formalism introduces two release potentials:
dynamic
static
whose product
The food volume, denoted
In porous foods (e.g. bread), since contamination accumulates in condensed phases, the calculated concentration in food will be lower than the concentration measured in the solid phase alone (crumb and crust) by extraction. The two measures reconcile if we note that the concentration in the solid phase is:
where
The general model expresses the final concentration in food as the sum of four components:
initial contamination,
a time factor,
a static migration rate,
and the total mobilizable amount.
This formulation preserves thermodynamic rigor while remaining usable in a spreadsheet. It prepares the introduction of release potentials and ranking metrics.
Tip
The next section develops the concept of partial release potentials, essential for analyzing process sequences and introducing the concept of a functional barrier.
Within a sequence of steps in a package’s life, we aim to assign an explainable share of the total release of substance
Examples of “mobilizing” mechanisms without food contact:
thermoforming that thins a layer and increases the specific surface area;
thermoforming or any step in which temperature rise changes the internal distribution, notably by bringing substances closer to the exchange surface;
bringing internal and external surfaces into contact by stacking or roll storage (e.g., contact with printed surfaces);
folding that puts the packaging into contact with an overwrap;
sealing or printing that creates active interfaces;
contamination of contact layers by transfer during storage of components (e.g., cross-contamination with or without physical contact).
Tip
Key point. The concept of a partial release potential is independent of the detailed transfer physics and relies on a material balance between a reservoir of contaminants and a receiving phase (e.g., food or simulant). It is useful to trace the causes and sources of food contamination.
We define the partial potential of step
where
The definition remains valid even if step
Partial release potentials are computed iteratively using the omission rule.
Define the actual sequence of steps and their conditions (time, temperature, geometry).
Evaluate (by model or data)
For each
Compute
Check consistency for a sequence of independent steps:
| Step | Control : | Comment (mobilizing/contact/purge) | ||
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| … | ||||
| N |
Mechanisms associated with each step are identified as:
"mobilizing": step which redistributes or put closer the susbtances (e.g. heating, thinning, storage);
"contact": step where the packaging material is in contact with food or a food simulant and transfer mobilized subsances;
"purge": step contribution to the removal os substances from the packaging system (e.g. desorption, washing, outgasing).
Note
Repeated use is a special case where
Consider a simple situation with a package undergoing two distinct steps; the corresponding release potentials can be obtained experimentally or by simulation:
Step 1: storage of the package at 40 °C for 30 days;
Step 2: an “accelerated” food contact of 10 days at 40 °C.
The full sequence
This elementary example confirms that non-contact storage can have a significant effect on the final transfer potential and, by extension, on the risk-assessment outcome.
Now suppose we wish to isolate the effect of one additional month of non-contact storage. The description becomes three steps
Tip
Interpretation.
The value
There is no paradox in observing
Calculation check. One extra month induces a relative increase:
Partial potentials
Different, complementary metrics are possible:
Absolute indicators. In practice, an additive (log-complement) score is convenient,
Relative scores and elasticities. A relative score normalizes
Elasticities identify the most sensitive parameters for mastering release:
where
Order-invariant indicators. When steps are strongly coupled (e.g., storage + heating), attributing a unique
summing over all permutations
These metrics (absolute, relative, elasticities, Shapley) can be combined with health, economic, or environmental weights to obtain a multi-criteria ranking of steps—directly usable to guide safe design and justify decisions to authorities.
Note
Key point. Ranking metrics translate partial potentials into decision tools. Absolute metrics support quick and intuitive analysis; relative metrics and elasticities give a comparative/parametric view; Shapley values and multi-criteria indicators enable robust analysis in complex or strongly coupled systems.
When steps are independent, their total contribution to release does not depend on order, even though each step’s specific contribution may vary with its position. In contrast, introducing dependent steps breaks commutativity: steps occurring before or after a dependent step see their contributions modified.
Dependent steps correspond to situations where contaminants are redistributed, consumed, or produced inside the material, not necessarily transferred to food. This symmetry breaking is the very origin of dependence.
A sequence’s degree of dependence can be quantified by the deviation:
Any value significantly different from zero indicates a history effect:
Positive dependence: the theoretical transfer (estimated from individual partial potentials) is higher than observed for the full sequence. This reflects an effective decrease in transfers to food, e.g., back-flux, crust formation (plasticizer depletion or induced crystallization), or consumption of substances via chemical reactions.
Negative dependence: the effective transfer is higher than anticipated from individual contributions. This corresponds to bringing substances closer to the food interface, accelerating transfers (plasticization or thermal activation), or generating new substances by chemical reactions.
The discrete formalism of release potentials can be extended to a continuous description by introducing an instantaneous release rate
This approach interpolates a sequence of discontinuous steps (successive times/temperatures) into a continuous profile and evaluates the effect of extended contact. The function
Tip
Piecewise approximation. The piecewise-constant approximation
From discrete to continuous. Let
Consider a continuous process parameter
Then, as
Compact differential form.
i.e., survival
Exact link to discrete partial potentials. On an interval
Tip
If
Useful parameterizations. The form of
Independent pieces (parallel mechanisms).
Dependence on process conditions.
Piecewise-constant (calibrated on step data).
Link with mass-transfer models. If release kinetics are aggregated as an effective first-order law
For Fickian diffusion (planar slab, perfect sink), the non-released fraction admits the classical series
The corresponding instantaneous hazard is
which decreases with
Partial potentials decompose total release into step contributions. They can be non-zero without food contact, because they measure mobilization (preparation for transfer) as well as transfer itself. For independent steps, the “with vs without” definition guarantees the composition
Partial potentials
Tip
The next section introduces the functional barrier concept, which formalizes how a component reduces release. It integrates naturally with partial potentials (barriers in series, cumulative effects, prioritization) and their metrics.
The functional barrier (FB) concept is central in U.S. (FDA) and EU (Regulation (EU) No 10/2011) frameworks. It enables derogations: a recycled material or a debated additive may be used provided that a demonstrated functional barrier keeps the effective release below regulatory thresholds.
There is no formal, official definition beyond the idea of “a layer preventing migration”. We propose two operational definitions based on total (
where the superscript
These conditions allow the effect to be limited to a single step. The barrier is neither absolute (perfectly tight layer) nor permanent: its effect is temporary and of variable intensity.
Traditionally seen as a pure diffusion barrier, a functional barrier may actually combine several mechanisms:
Reservoir effect:
Retention effect:
Diffusive effect: combination of a lag time
Note
Because the proposed definition is expressed with release potentials (
Warning
Key point. Poor FB sizing can have opposite consequences:
Undersized ⇒ potential health risk due to uncontrolled transfer from recycled constituents.
Oversized ⇒ unnecessary drag on circularity (lower recycled content, needless decontamination, poorer recyclability of FB-containing materials).
FB performance is quantified via additive gains
Choice of dimensioning molecules is critical (e.g., toluene as a reference).
For homologous series, lag times scale with molar mass squared (rubbery polymers) or follow power laws (glassy polymers).
Note
Worked example. If an FB reduces
The FB concept covers interlayers between content and contaminants, but may also include additives, micro-/nanoparticles modifying chemical affinity and/or mobility of potential migrants. Purge steps and, more generally, FB assembly steps are included insofar as they affect
Classical diffusive barriers
Principle: slow the flux via low diffusivity or large thickness.
Example: virgin PET interlayers between a recycled layer and the food.
Indicator: progressive reduction in
Limit:
Trapping barriers
Principle: chemical/physical fixation of contaminants.
Example: scavenger additives, sorptive mineral fillers.
Indicator: sharp but selective drop in certain
Limit: efficiency limited to substances with affinity for the trap.
Dilution / redistribution barriers
Principle: disperse the initial contamination within a mass of virgin material.
Example: a virgin polyethylene ply between recycled board and food.
Indicator: reduction in
Limit: reversible; contaminants remain and may migrate later.
Dynamic or temporal barriers
Principle: introduce a delay shifting transfers to longer times.
Example: saturable absorbent layers, slowly swelling polymers.
Indicator: low
Limit: efficiency tied to use duration (single-use vs. long storage).
Purge steps
Principle: remove part of contaminants before use.
Example: thermal degassing of a recycled film; aqueous washing of fibers.
Indicator: irreversible decrease in
Limit: depends on industrial reproducibility.
Originally, FBs were proposed to enable recycled materials with little or no decontamination. For a fixed use duration
where
The left-hand side is the minimum reduction factor required from the barrier (dynamic × static). Example: relaxing from
Tip
Key point. Misestimation of release rates
Points of attention
Link to recycling. FBs are often invoked to include recyclates. Poor sizing leads to either (i) under-protection (underestimated release, health risk) or (ii) over-protection (unrealistic requirements, blocked streams).
Measurability. Effectiveness must be shown via measurable indicators (tests, validated simulations), not material assumptions alone.
Selectivity. An FB protects some substances better than others—analyze per substance or via dimensioning migrants.
Identification. FB-equipped materials should be identifiable to route recycling streams; otherwise, risk of cross-contamination if non-authorized recyclates are reintroduced into direct-contact loops.
Recommendations
Favor FBs implemented cold and as close to the content as possible to avoid pre-contamination.
An FB may be removable (sachet, inner film, gel) provided it is not confused with the content.
Typology: diffusive barriers, reservoirs, trapping, or hybrids.
An FB can justify less-decontaminated recyclates if it ensures sufficient reduction of the static × dynamic potential
FBs are ephemeral: sizing must include all prior steps (forming, storage, elevated temperatures) that may erode their real effectiveness.
Functional barriers are a core instrument of safe-by-design: beyond classical diffusion layers, they include trapping, dilution/redistribution, dynamic delay, and purge mechanisms. Evaluation must target effective reductions of partial or global
Tip
The next section will integrate FBs into tier M3 (dynamic tiers), where diffusion dynamics are modeled explicitly, showing how differential-equation-based
The notions of severity and criticality, rooted in FMECA (Failure Mode Effects and Criticality Analysis) and generalized to mass transfer (see Nguyen 2013), yield intensive quantities (severities) and their cumulants (criticalities) to compare substances, components, and packages—pinpointing what carries the highest risk for consumers.
Define the (estimated) severity for substance
Factor 100 flags severe or catastrophic cases (
It is an estimate (hats) and depends on the tier (approximation level).
PR language:
With
Note
(additivity—tier M3). This rigorous definition uses the additivity of transfers (see tier M3). Establish realistic orders of magnitude for
If substance
For a mechanically recycled component
Note
Example (mechanical rPET). Commonly
Criticality aggregates severities across substances (and optionally components). It is not intensive; it is a cumulant used to rank components, packages, or designs.
From conditional severities:
where
Note
Inheritance. Since
Double sum over substances × components:
Note
Comparability. Always compare criticalities at the same tier. If a refinement changes criticality significantly, moving up a tier is justified; otherwise it may be deferred.
To link FMECA with process sequences, define a marginal step criticality
Note
If steps are coupled, replace
A full development is given at tier 3 (boundary conditions, kinetics).
Warning
Points of attention
Count detected substances to estimate criticality for non-identified ones at/above LOD.
Reasonable working assumption: same distribution of Cramer classes for identified and non-identified substances ⇒ a hierarchy of
Cases with
Always link
It is generally acceptable to aggregate severities from different toxicology tiers (T0–T2) provided the same transfer tiers (M0–M3) were used.
Document methods and maintain prudence regarding criticality calculations.
Cross
Severity is a dimensionless, intensive indicator, additive across components and incorporating acceptable exposure; it naturally expresses via
Criticalities are cumulants to rank components, packages, and designs by exposure risk. They may include both identified and suspected substances and decompose along two axes: components and use cycles.
Up to this point, the proposed approach has not introduced any simplifying assumptions about package geometry, composition, transfer mechanisms, or interactions among substances.
Only the thermodynamic description of transfers has been linearized so that concentrations can be used as transfer potentials instead of chemical potentials.
In addition, the equilibrium description was adjusted in the case of pre-existing food contamination: contaminations are strictly additive across steps—put simply, the package never acts to decontaminate the food.
Assigning values to the parameters
The tiers (levels of approximation) therefore aim to identify the substances and components that most influence the final safety outcome, before optimizing them via design, formulation, or use conditions.
The construction of tiers for transfer physics (M0 to M3) is artificial and follows a logic of decreasing severities and criticalities: tier 0 provides a very conservative upper bound; subsequent tiers progressively introduce refinements.
Figure 1 presents the available Tx/Mx options based on what is known about migrants:
T0–M0 if the substance is unknown/not detected,
T1–M0 or T1–M1 if the substance is identified but no material data are available,
T2–M1 or T2–M2 if material properties are available,
T2–M3 if a dynamic description is required.
The decision tree illustrates the progression from conservative scenarios toward detailed kinetic models by systematically combining a toxicology tier (Tx) with a transfer-modeling tier (Mx).
Table 5 provides a concise, progressive view of how assumptions evolve across Mx scenarios. The four transfer-modeling levels (M0–M3) are compared by their required inputs and expected outputs.
| Tier | Minimal inputs | Condensed calculation procedure | Equations (overview) | Outputs | Notes & conservatism |
|---|---|---|---|---|---|
| M0 — Total transfer | (1) Set | Applies to unknown/undetected substances. Very conservative ( | |||
| M1 — Unit partition | (1) | Less conservative if | |||
| M2 — Realistic partitions | (1) Evaluate | Effective Henry: Partition: Mobile: Equilibrium: | Realistic; supports optimization of material choice and multilayer architecture. | ||
| M3 — Dynamic transfers | M2 data + | (1) Solve Fick’s equations per layer. — (2) Enforce interfacial jumps to reproduce partition at all times. — (3) Compute | Fickian kinetics (1D): Global transfer: | Time courses | Richest tier: introduces time scale and true use conditions (heating, storage). Sensitive to diffusion parameters; requires experimental validation. |
The T0/M0 combination is the most conservative. The
Thus
| Age group | BW (kg) | DI (kg/day) | SML (kg·m |
|---|---|---|---|
| Newborns (0–16 weeks) | 5 | 0.75 | 9.375 |
| Infants (0–6 months) | 5 | 1 | 12.5 |
| Young children (1–3 y) | 12 | 1 | 30 |
| Children (4–9 y) | 20 | 1.5 | 75 |
| Adults (≥15 y) | 60 | 1 | 150 |
The interest of the coupled T0 and M0 tiers is to deliver a per-material concentration threshold that applies to any substance, detected or not, evaluated or not:
Note
Tier T0–M0 in practice. A per-material threshold valid for any substance under total-transfer and maximalist toxicology assumptions. Simple, fast, and safe—but it ignores real material properties and fine geometry.
Strengths
Per-material threshold, applicable to any substance (known or unknown).
Total transfer + maximal toxicology scenario.
Simple and fast computation.
Useful for screening substances/projects without data.
Tip
Moving to tier M1 incorporates volume partitioning between food and packaging to obtain more realistic yet broadly conservative thresholds.
Tier 1 keeps the equilibrium assumption
This amounts to assuming a homogeneous partition proportional to volumes:
Tiers 0 and 1 yield similar results as long as the food volume dominates over the packaging components.
Note
Tier M1 in practice. Introduces global geometry (relative volumes) and a unit partition between phases, refining thresholds according to the actual configuration. Still conservative because it does not discriminate materials by physicochemical properties.
Strengths
Introduces global geometry (relative volumes).
Still conservative, but less severe than M0.
Does not yet discriminate materials by chemistry.
Prepares tier M2, which introduces polarity, solubility, and barrier effects.
Tip
Tier M2 will enrich the calculation with realistic partition coefficients derived from solubilities, polarities, and material structures—opening the way to optimization via retention layers or barriers.
Tiers M2 (see § M2) and M3 (see § M3) explicitly introduce sorption and diffusion properties into the transfer-risk evaluation. These properties are directly tied to the identity of the considered substances (migrants/contaminants, polymers, simulants or food components).
To keep the assessment exhaustive, property-estimation methods should apply equally to:
identified contaminants,
probable substances inferred from mass-spectral and/or retention-time matches,
unknown compounds represented by typical, well-characterized physicochemical proxies.
This framework justifies using coarse estimators correlated with diffusion/sorption properties and available from public databases or easily computable: molar mass,
| Required data | Use | Target properties |
|---|---|---|
| Molar mass | Molar volume | |
Optimized 3D geometry (.sdf,.mol,.pdb) | van der Waals volume | |
| Polarity index |
Important
The approach is not limited to known monomers and additives; it extends to emerging contaminants and potential migrants from recycled inputs. Descriptors are purposely simplified to allow rapid, automatable calculations across hundreds of substances. Macroscopic effects (porosity, crystallinity, plasticization, trapping) must also be considered.
M0 and M1 are simple tiers, easy to implement in a spreadsheet. Coupled with T0, they allow decisions on risks from identified and non-evaluated substances.
For identified substances, they help shortlist those that must be analyzed with detailed transfer scenarios, accounting for material nature, substance identity, and use conditions.
M2 and M3 progressively add realistic partitions and dynamic diffusion, enabling design optimization (materials, multilayers, barriers) and supporting regulatory justification with quantified severities and criticalities.
The goal of Tier M2 is to provide a realistic yet conservative estimate of equilibrium contamination by introducing physicochemical rules on affinities (Henry-type notations) and immobile fractions, without requiring the partial differential equations of Tier M3.
M2 primarily informs the static release potential
The assumptions are aligned with those already used in the literature (Nguyen et al., 2016; Zhu et al., 2019a; Vitrac et al., 2022) to describe transfers between packaging/polymer materials and foods/liquids. See Zhu et al., 2019a for a comprehensive review.
Framework: multi-source, multi-layer, multi-material systems (plastics, adhesives, inks, papers/boards, elastomers), virgin and recycled, single-use and repeated-use.
Purpose of M2: discriminate food ↔ material affinities and weight the mobile mass by component, to obtain an
Principle of conservatism: select minimally plausible affinity ratios (Henry ratios) from the perspective of transfer toward food so as to maximize the final concentration in food.
Separation of scales: microstructural/supramolecular effects (crystallinity, trapping) are treated by homogenization separately from molecular mean-field effects.
Simplified molecular framework: molecular theory provides parameterization of
Notations (recall):
Linearized equilibrium with multiple sources and immobile fractions:
Partition coefficients between compartments
approximate more complex thermodynamic equilibria (non-linear sorption isotherms, elastic energy in constrained polymers). They emerge from equality of partial vapor pressures between
Extrapolating Henry’s law up to saturation:
where
Thus the partition coefficient between food and layer
Food-favoring migration occurs if solubility in food is greater than in the material. With volume ratios included:
and is significantly constrained only if:
Unit partition coefficient (M1) does not allow optimizing designs with retention layers or solubility barriers. Table 8 contrasts the two strategies.
| Strategy (source layer | Condition | Interpretation | Limitation | Example |
|---|---|---|---|---|
| Source layer | Layer | Strong/persistent if | Hydrophobic polymer for hydrophobic contaminants | |
| Upstream layer | Substances accumulate opposite to food side | Temporary (depends on diffusion time) | Waxy external coating | |
| Downstream layer | Interposed layer reduces driving force | Temporary (diffusion time across | Dense polar film, or air gap |
Partition coefficients apply only to exchangeable fractions. Substances co-crystallized, trapped in pigments, or embedded in nanoparticles are excluded and described by an immobile fraction
Transferable mass is:
Proof of immobilization (
Fraction
where
Table 9 gives a spreadsheet framework to compute equilibrium concentrations
| Col. | Content | Example formula |
|---|---|---|
| A | Layer | 0,1,2,… |
| B | Volume | thickness × area |
| C | Init. conc. | input |
| D | Immobile fraction | 0–1 |
| E | Mobile mass | =B*(1-D)*C |
| F | Affinity | proxy/score |
| G | Ratio | =k0H/kjH |
| H | Num. term | =B*(1-D)*C |
| I | Den. term | =IF(j=0;B;G*B*(1-D)) |
| J | Sum num. | =SUM(H[j≥1]) |
| K | Sum den. | =V0+SUM(G*B*(1-D)[j≥1]) |
| L | =C_F0+J/K |
This section explains how molecular effects are translated into Henry-type partition coefficients ki,jH \,k_{i,j}^H\,ki,jH from physico-chemical data available in public databases such as PubChem (see Kim et al., 2024) or its aggregated version PubChemLite (see Schymanski et al., 2025). The approach relies on well-known techniques from the scientific literature (see Gillet et al., 2009, Gillet et al., 2010, Vitrac and Gillet, 2010, Nguyen et al., 2016, Nguyen et al., 2017, Vitrac et al., 2022), but is deliberately simplified and automatable, so it can be applied to hundreds or even thousands of substances using a spreadsheet or an online query.
The method has been implemented in SFPPy (see Vitrac 2025a) and SFPPyLite (see Vitrac 2025b) and integrated into AI agents built on top of them. It provides an operational framework (for risk assessment and regulatory modeling) while retaining a solid theoretical foundation that supports updates, extensions to new families of compounds, and generalization to other migration and material–content interaction domains.
The coefficients
The free-energy difference between the mixture
We therefore apply a simplified, robust Flory–Huggins formulation based on data accessible in public databases (PubChem, PubChemLite), interoperable with substance identification. The formal link between
where
At infinite dilution, the Flory–Huggins theory generalized to compressible mixtures allows estimation of
Parameterization of entropic effects (volume and reorganization)
For polymers much larger than the solute,
For solutes, food simulants, or solid ink solvents, we use Miller’s empirical approximation for molar volume:
where
For large, flexible solutes (
This correction reflects that bulky solutes occupy an effective space smaller than their geometric volume thanks to flexibility and possible rearrangements in the surrounding matrix.
Parameterization of enthalpic effects (interactions)
Enthalpic effects associated with specific interactions between solute
where
Eq. \ref{eq:chi_delta} essentially expresses differences in the energy needed to create a sorption volume
Along these lines, we introduce polarity estimators
Snyder’s scale (see Snyder, 1974) defines polarity indices
Reference values used for calibration are given in Table 10. The lower bound (0) corresponds to n-hexane, and the upper bound (10.2) to water (neutral molecules). Ionic species or metal solvates can exceed this bound.
| Solvent | Polarity index | logP | Miller molar volume |
|---|---|---|---|
| n-hexane | 0.0 | 3.90 | 98.2 |
| toluene | 1.8 | 2.73 | 105.2 |
| dichloromethane | 3.1 | 1.25 | 96.7 |
| acetone | 5.6 | −0.21 | 65.4 |
| ethanol | 6.0 | −0.24 | 51.5 |
| acetonitrile | 6.8 | −0.22 | 45.8 |
| methanol | 8.1 | −0.77 | 35.4 |
| water | 10.2 | −1.38 | 19.6 |
To avoid bias in estimating
which expands to:
with fitted constants
A linear regression on the data in Table 10 validates the model, with
Because the linear model assumes uniform compressibility and a single scaling law across the polarity range, we add a quadratic component to better separate very hydrophobic solutes (strong van der Waals interactions,
with a calibration on the eight reference solvents and the
Note
Calibration update.
A recalibration of
Polymers are not soluble and thus lack usable
| Polymer | Monomer | Substitute / analogue | Remark | ||
|---|---|---|---|---|---|
| LDPE / HDPE / LLDPE | ethylene | 4.7 | n-hexane (LD/HD), iso-pentane (LLD) | 0.2 / 1.8 | Saturated, apolar chains (linear vs. slightly branched) |
| PP (isotactic) | propylene | 3.9 | iso-pentane (tert-butyl-like branching) | 1.8 | Reflects branching of PP |
| PS | styrene | 0.9 | ethylbenzene (saturated styrylic motif) | 0.7 | Faithful proxy of phenyl-alkyl group |
| HIPS | styrene | 0.9 | ethylbenzene (matrix) + butadiene (rubber) | 0.7 / 2.8 | Bicontinuous (PS + PB) |
| SBS | styrene | 0.9 | ethylbenzene (PS) + iso-pentane (PB) | 0.7 / 1.8 | PS/PB blocks |
| PMMA | methyl methacrylate | 2.8 | isobutyl acetate (compact ester) | 2.0 | Represents pendant ester function |
| PVC | vinyl chloride | 3.3 | 1-chlorobutane (chlorinated alkane) | 1.5 | Increased polarity due to chlorine |
| PVAc | vinyl acetate | 3.9 | ethyl acetate (acetate ester) | 3.9 | Same functional family |
| PET | ethylene terephthalate | 0.0 | dimethyl terephthalate (DMT) | 0.4 | Aromatic ester proxy (DMT) |
| PBT | butylene terephthalate | 0.1 | dibutyl terephthalate | 0.0 | DMT usable as lower bound |
| PEN | ethylene naphthalate | 0.0 | dimethyl 2,6-naphthalene dicarboxylate | 0.0 | Faithful proxy of naphthalene-ester motif |
| PA6 | caprolactam | 4.5 | n-hexanamide | 2.6 | Linear amide, realistic local proxy |
| PA66 | hexamethylenediamine + adipic acid | 0.7–3.6 | adipamide (amide motif) | 5.5 | Di-functional amide, highly polar |
Note
Usage notes
Proxies are not the actual monomers but local solvation homologues/proxies to approximate
Using proxies better discriminates apolar polymers (PE, PP) from polar ones (PA, PVAc, PMMA), especially in multilayer systems.
The choice of solutes/solvents and reference values aims to deliberately overestimate
Robustness was tested on 35 independent substances relevant to recyclates (see Figure 2). The calibration shows that this setting overestimates the expected value in over 80% of cases (tolerance
Note
PubChem error on water
| Col. | Content | Example cell (pseudo-Excel/Calc) |
|---|---|---|
| A | Substance | "limonene" |
| B | input (PubChem) | |
| C | input (Miller or DB) | |
| D | Phase | "amorphous PET", "PP (c=0.30)", "ethanol", "water" |
| E | input (monomer/analogue proxy) | |
| F | =C/E | |
| G | =IF(F>=3, F/3-1, 0) | |
| H | =LN(10)*B + (r_i,w - r_i,o) | |
| I | =(-B - SQRT(B^2 - 4*A*(C - H)))/(2*A) bounded to [0; 10.2] | |
| J | input (proxy for phase | |
| K | =0.163*(I-J)^2 | |
| L | =K+1-(F-G) | |
| M | =EXP(L) | |
| N | input (0–1) | |
| O | =M*V_i/((1-c_j)*(1-epsilon_j)) (use | |
| P | same with | |
| Q | =O/P | |
| R | =P/O | |
| S | Justification | source, version, assumptions |
Computation steps
Estimate
from via the octanol/water calibration (constant parameters provided). Compute
(simplified Flory–Huggins, infinite dilution). Derive
including and . Obtain
.
Calibration constants
Scale parameter:
Quadratic form for
: , , Bounds:
(gives ); (gives )
Implementation notes
Gas phases: implement
. Condensed phases only: using
is consistent (thermodynamic equilibrium without a vapor phase). Semi-crystalline polymers and porous media (paper/board): crystallinity
and porosity reduce the available phase: the amorphous/solid fraction hosts the migrating substance and affects via . Ionizable substances: out of the M2 domain (or
for aqueous contact); document separately.
| Case | Pair (j/F) | |||
|---|---|---|---|---|
| 1 | PET ( | 0.845 | 3.612 | 0.234 |
| 2 | PET ( | 0.845 | 5.805 | 0.146 |
| 3 | PP ( | 1.351 | 3.612 | 0.374 |
| 4 | PP ( | 1.351 | 5.805 | 0.233 |
Note
M2 reading. Limonene shows stronger affinity for PET than for ethanol or water (
At Tier M2 (thermodynamic control), transfers between two condensed phases
| Situation | Expected effect |
|---|---|
| Two endothermic mixtures (common case) | Compensation of thermal effects; |
| Specific interaction with one phase only | Increasing |
| Presence of a gas layer |
Tier M2 enables:
Incorporation of solubility, polarity, crystallinity, porosity, immobile fractions.
Differentiation of partition coefficients between layers.
Evaluation of barrier/retention layers, supporting recycled/multilayer design.
Routine application via spreadsheets or automated agents.
But: limitations include handling of ions/zwitterions, non-linear sorption, poorly characterized immobile fractions, multiphase tie-layers, food matrix effects, multi-solute competition, and recycled material variability.
Table M2-4 summarizes the main limitations and best practices.
Fast, explainable partition values come with limits that must be documented. They are summarized in Table 1.
Tip
Operational recommendations
Use the molecular substitutes listed above to parameterize polymer
Apply conservative rules: take the minimal plausible
Document immobilized fractions
Check consistency by cross-referencing criticities
| Aspect | Limit | Consequence / Good practice |
|---|---|---|
| Valid for neutral migrants. Out of scope for ions, zwitterions, siloxanes, heavy halogenated species, etc. | Document the source (PubChem/XLOGP3). If anomalies arise (e.g., water), retain the more solvating phase. | |
| Henry’s law | Assumes a linear isotherm. Ignored: dual-mode sorption, plasticization, swelling. | Keep the unfavorable slope. Move to M3 when strong non-linearities are present. |
| Immobilized fractions | Hard to estimate (DSC, extraction, NMR). Strong dependence on thermal history. | Accept |
| Multiphase systems & interphases | Tie-layers, micro-domains, actual porosity not explicit. | Add an interphase compartment or bias toward the more solvating phase. |
| Real matrices vs simulants | pH, proteins, co-solvency not captured. | Adjust |
| Multi-solute competition | Additivity simplified. Ignored: competition, co-solvency, complexation. | Use the most mobile migrant for screening. Switch to M3/experiments for critical cases. |
| Recycled materials | Variability, NIAS, pre-contamination. | Choose conservative |
| Temperature and time | Static M2. Thermal cycles and headspace change | Move to M3 for long storage, pasteurization, or temperature cycling. |
| Adhesives, inks, varnishes | Oligomers, residual solvents, pigments. | Distinguish slow diffusion/trapping. Keep |
| Extensive quantities | Risk of mass/volume confusion, A/V, heterogeneous thicknesses. | Always reduce to |
| Uncertainties | Poorly quantified. Risk of over- or under-estimation. | Report ranges (low, central, high). Separate screening (M0–M2) from validation (M3). |
| Switch to M3 | Justified when: barriers, low-diffusivity substances, uncertain | Couple M2+M3 for higher accuracy. |
†LOD: limit of detection. A value of
Tier M2 enriches M1 by incorporating material/solute-specific properties (solubility, polarity, crystallinity, porosity, immobile fractions).
Partition coefficients become differentiated per layer and included in a filtered mass balance, enabling the evaluation of barrier or retention layers.
M2 and M3 are complementary: M2 addresses thermodynamic sharing, while M3 adds dynamics (
M2 is suitable for screening and design justification, while M3 refines results under real usage conditions (time, temperature, cycling).
Note
M1 gives you a mass balance; M2 adds realistic equilibrium partitioning; M3 adds time. It brings in diffusion kinetics via
Tier M3 extends M1 and M2. While M1 provides a global mass balance and M2 refines it with thermodynamic partitioning at equilibrium, M3 explicitly introduces transfer kinetics. It couples equilibrium quantities with diffusive phenomena and ties real contact conditions (duration, temperature, sequences) to the effective migration.
M3 is never used alone: its results only make sense when combined with M1/M2, which supply thermodynamic framing and mass-balance coherence. It is indicated when:
contact time is short or variable (transport, forming, thermal treatments);
temperature varies strongly (processing, storage, use);
the effectiveness of one or more barrier layers must be demonstrated;
contamination is governed by diffusion kinetics rather than equilibria;
polymer plasticization, swelling, or aging affects diffusion;
recycled/aged materials make kinetics critical.
M3 introduces the cumulative transfer fraction
This section develops: molecular bases, invariance and additivity properties, models for
Important
Key idea.
Because diffusion laws are linear in time, two key properties follow: (i) temporal commutativity, letting you replace a succession of isothermal or thermally varying steps by a single equivalent step defined by a cumulative Fourier number
Note
A diffusive transport description is also assumed applicable to paper and board in a mean-field sense, though the microscopic picture involves diffusion plus sorption/desorption at fiber surfaces.
In earlier tiers, kinetics was ignored: results were identical whether contact was brief or prolonged. At equilibrium, microscopic fluxes between compartments
The same mechanisms operate at the molecular scale (barring secondary effects such as plasticization, swelling, aging). Diffusion arises from random walks of solutes
the ratio of molecular volumes (solute vs rigid segment),
the renewal rate of free volume, linked to
the fraction of free volume, linked to polymer density.
Important
Thermal activation stems from polymer volumetric expansion: in rubbery matrices (
Diffusion laws with constant
For
Define the cumulative Fourier number:
Note.
The cumulative contamination after
The relative severity of step
By linearity, total contamination in M3 decomposes into elementary contributions of each layer
where
This comes from the linear Fick equation and its convolution solution. The final concentration in
with
Each layer/component behaves as an independent source; contributions add without artificial interaction as long as the tracer diffusion assumption holds (properties independent of concentration).
Important
Practical note.
Superposition is valid only if all else is unchanged (number of layers, properties, boundary conditions). Only the initial contamination conditions may vary. This property applies to any source arrangement—1D, 2D or 3D; in series, in parallel, or any combination.
The diffusivity
The average
In condensed phases, three regimes are distinguished:
(i) tracer diffusion (infinite dilution,
(ii) mutual diffusion (high concentration/co-solutes,
(iii) self-diffusion (pure medium,
Beyond molecular times, several theories describe
Important
We restrict to concentration-independent
Three operational models are proposed—Piringer, Welle, hFV (hole Free-Volume)—with the following conservative hierarchy:
A usage comparison is given in Table 16.
Note
Model precedence (as in SFPPy; see Vitrac 2025a, Vitrac 2025b):
– hFV whenever the toluene/polymer couple is covered;
– Welle where polymer-specific parameters exist;
– Piringer as the universal envelope elsewhere.
Using hFV with toluene is preferred to qualify functional barrier effectiveness, notably for recycled/aged materials.
| Model / effect | |||
|---|---|---|---|
| Principle | Empirical envelope ( | Correlation | Physical model (free volume, |
| Parameters | |||
| Accounts for | No | Via parameter sets | Yes (continuous) |
| Plasticization | No | No | Yes (tracer |
| Polymers covered | Broad (universal) | PET, PS/HIPS | PE, polyesters, PA, PV, etc. |
| Solutes covered | Organics | Organics | Rigid/linear solutes |
| Pros | Simplicity, upper bound | Tuned for glassy polymers | High realism, |
| Limits | Variable over-prediction; not conservative for very small solutes in glassy polymers | Spherical solutes; no plasticization | More complex; needs fine parametrization |
| SFPPy status | complete | complete | partial (toluene) |
The Piringer model (Begley 2005) is simple: it uses solute molar mass
with
Parameters
Note
Use vs limits.
Use: broad coverage, robust upper envelope when specifics are missing.
Limit: may be non-conservative for very small molecules in glassy polymers. Applicability to paper/board is limited.
| Key† | className† | material† | ||
|---|---|---|---|---|
| HDPE | HDPE | high-density polyethylene | 14.5 | 1577 |
| LDPE | LDPE | low-density polyethylene | 11.5 | 0 |
| LLDPE | LLDPE | linear low-density polyethylene | 11.5 | 0 |
| PP | PP | isotactic polypropylene | 13.1 | 1577 |
| aPP | PPrubber | atactic polypropylene | 11.5 | 0 |
| oPP | oPP | bioriented polypropylene | 13.1 | 1577 |
| pPVC | plasticizedPVC | plasticized PVC | 14.6 | 0 |
| PVC | rigidPVC | rigid PVC | –1.0 | 0 |
| HIPS | HIPS | high-impact polystyrene | 1.0 | 0 |
| PBS | PBS | styrene-based polymer PBS | 10.5 | 0 |
| PS | PS | polystyrene | –1.0 | 0 |
| PBT | PBT | polybutylene terephthalate | 6.5 | 1577 |
| PEN | PEN | polyethylene naphthalate | 5.0 | 1577 |
| PET | gPET | glassy PET (below | 3.1 | 1577 |
| rPET | rPET | rubbery PET (above | 6.4 | 1577 |
| wPET | wPET | (duplicate of rPET) | 6.4 | 1577 |
| PA6 | PA6 | polyamide 6 | 0.0 | 0 |
| PA6,6 | PA66 | polyamide 6,6 | 2.0 | 0 |
| Acryl | AdhesiveAcrylate | acrylate adhesive | 4.5 | 83 |
| EVA | AdhesiveEVA | EVA adhesive | 6.6 | –1270 |
| rubber | AdhesiveNaturalRubber | natural rubber adhesive | 11.3 | –421 |
| PU | AdhesivePU | polyurethane adhesive | 4.0 | 250 |
| PVAc | AdhesivePVAC | PVAc adhesive | 6.6 | –1270 |
| sRubber | AdhesiveSyntheticRubber | synthetic rubber adhesive | 11.3 | –421 |
| VAE | AdhesiveVAE | VAE adhesive | 6.6 | –1270 |
| board_polar | Cardboard | cardboard (polar migrants) | 4.0 | –1511 |
| board_apol | Cardboard | cardboard (apolar variant) | 7.4 | –1511 |
| paper | Paper | paper | 6.6 | –1900 |
| gas | air | ideal gas | – | – |
† SFPPy nomenclature: material key, class name, material.
The Welle model (Ewender and Welle, 2022) corrects over-estimation in glassy polymers (notably PET). It replaces molar mass with van-der-Waals volume
where
Note
Use vs limits.
Use: validated accuracy for PET and PS/HIPS; uses true 3D size.
Limit: needs rigorous
| Polymer key† | ||||
|---|---|---|---|---|
| gPET | 11.1 | |||
| PS | 55.71 | |||
| rPS | 25.51 | |||
| HIPS | 73.28 | |||
| rHIPS | 45.00 |
† SFPPy nomenclature: polymer key.
The reformulated free-volume theory (Fang et al., 2013; Zhu et al., 2019b) includes a smoothed glass transition and a scaling law for linear probes (rigid blobs). It is parameterized here for toluene on several polymers.
Smoothed transition around
Thermal dilations:
Mixture:
Free-volume measure:
Diffusivity:
Note
Use vs limits.
Use: good accuracy over many conditions (polar/apolar solutes; glassy/rubbery polymers).
Limit: more complex; needs careful parameterization for arbitrary solutes.
| Polymer key† | |||||||
|---|---|---|---|---|---|---|---|
| LDPE | 148.15 | 0.6150 | 144 | 40 | 0 | 0.5000 | |
| PMMA | 381.15 | 0.5600 | 252 | 65 | 0 | 0.5000 | |
| PS | 373.15 | 0.5840 | 144 | 40 | 0 | 0.5000 | |
| PVAc | 305.15 | 0.8600 | 142 | 40 | 0 | 0.5000 | |
| gPET | 349.15 | 0.6761 | 252 | 65 | 0 | 0.6153 | |
| wPET | 316.15 | 0.6761 | 252 | 65 | 0 | 0.2777 |
† SFPPy nomenclature: polymer key.
Using M3 entails numerical solutions of diffusion equations, which lack closed forms once more than two layers are present. You need initial distributions and values of
Thanks to tools such as FMECAengine or SFPPy (built for this compute load), a function
Do not switch to M3 if all substances satisfy
the final decision depends on the limiting value of
transfer mechanisms require explicit kinetics;
multiple layers function as barriers and need dynamic coupling.
Blue box — What to remember.
M3 enriches M2 by introducing diffusion kinetics, indispensable when time, temperature, or barrier performance governs migration. Three model families are available: Piringer (universal envelope, conservative), Welle (PET/PS/HIPS-specific correlations, more realistic), and hFV (free-volume physics, accurate but more complex).
Tip
Their hierarchical combination, already implemented in SFPPy (Vitrac 2025a, Vitrac 2025b), yields explainable, consistent predictions for both screening and in-depth evaluation of recycled materials, with uncertainties appropriately framed.
Risks arise from formulation (substances, concentrations), use (food, duration, temperature), and design (materials, stack-up, geometry). Some parameters are tunable, others imposed. Constrained optimization aims, for each substance
Contamination from multiple sources is common (layers of the same material, multiple printings, multi-function additives such as benzophenones, use of recyclates). It requires linked decisions across components.
Note
Operational note. Optimization is applied substance by substance, targeting the most critical compounds due to quantity, toxicity, or propensity to migrate. An equivalent approach minimizes risk for surrogate/proxy molecules representative of the critical substances (similar orders of magnitude for
An article/package is rarely designed for a single product/use. Conception should therefore remain robust across several use cases.
A large-scale example (multi-criteria, multiple constraints and parameters) for a bottle-type packaging can be found in Zhu 2019.
Two indicators help rank layers/components to target first, assuming the food is not pre-contaminated:
the current relative contribution of layer
the propensity to transfer of layer
Total contamination and the associated severity are:
The general optimization constraint is:
Two levers (marginal sensitivities) follow:
Note
Reading the levers.
For a single source, options are straightforward:
avoidance: substitute the substance or remove the source;
mitigation: reduce content, add a barrier, adapt use conditions.
With multiple sources, it is essential to distinguish:
The joint reading is illustrated in Table 20.
| Configuration | Interpretation | Comment |
|---|---|---|
| large | Priority layer | Already contributes and transfers strongly |
| large | Contribution due to high content | Content reduction is effective |
| small | “Hot” layer with latent risk | Act on transfer (barrier, reduce |
| small | Low priority | Marginal contribution |
Note
On the indicators.
The simplest rule reduces concentrations uniformly across all layers/components. With
Practical note (recyclates). This closed-form, auditable rule may be hard to apply where certain substances cannot be reduced in specific components or suppliers refuse changes. For recyclates, it maps directly to the contamination level. The updated decontamination rate
is: where
is the initial decontamination rate.
Rank components/layers by decreasing
If a cost
Iterate mitigation until
Ranking solely by
| Indicator | Interpretation | Properties |
|---|---|---|
| Priority to layers that already contribute and transfer strongly | Bounded, monotone in | |
| Tunable weighting ( | ||
| Cost-effectiveness index | Impact per euro invested |
Note
Coupling content & design. Costs
When content reduction is limited, act on
reduce
change partition
insert/optimize a barrier to enforce
increase
Caution
Focusing on
Introducing a cost
Safe design becomes a cost-minimization problem with a health-safety constraint. The cost may include raw material, package mass, recycling, etc. Compactly:
A variant includes variables that reduce
The optimization framework formalizes risk reduction through targeted actions: content reduction, barriers, and use conditions. Indicators
This section illustrates how to operationalize the concepts of tiers M1–M3 with SFPPy (Vitrac 2025a, 2025b) and Python, through five progressive examples. Code snippets follow the idioms in example1.py–example5.py and the project README. They cover the full chain: (i) defining migrants and layers, (ii) M2 partitioning, (iii) M3 dynamics (time/temperature sequences), (iv) visualization, and (v) automation (fitting, optimization, AI integration).
Note
The SFPPy project (Safe Food Packaging Portal in Python) is an open-source initiative that implements the principles presented in this article as Python scripts and notebooks. Based on a finite-volume solver (Patankar method, see Nguyen et al., 2013) and interfaced with public databases (PubChem Kim et al., 2024, ToxTree Patlewicz et al., 2008, EU/US/CN regulations), SFPPy bridges theory and operational simulation in a few lines of code — or without local installation via online notebooks (e.g., Google Collab) or browser-based WebAssembly builds (Vitrac 2025b).
Table 21 summarizes the studied configurations.
| Properties | Values |
|---|---|
| Film | LDPE, |
| Food (simulant) | Cylindrical shape (Ø=19 cm, L=19 cm), ethanol 95% |
| Migrant | Irganox 1076 (CAS 2082-79-3), properties from public DBs |
| Outputs |
xxxxxxxxxx921# Listing 1 — Simulation of transfers between LDPE film and a sandwich2
3# ==========================================================================4# ////////////////////// Minimalist version //////////////////////5# ==========================================================================6# Inspired by example1.py (SFPPy distribution)7from patankar.layer import LDPE8from patankar.loadpubchem import migrant9from patankar.geometry import Packaging3D10import patankar.food as food11
12# Geometry: cylinder (h=19 cm, r=30 mm)13internal_volume, surface_area = Packaging3D(14 "Cylinder", length=(19, "cm"), radius=(30, "mm")15).get_volume_and_area()16
17# Migrant + film18m = migrant("irganox 1076")19film = LDPE(migrant=m, l=(100, "um"))20
21# Food proxy: fatty semi-solid sandwich22class Sandwich(food.realfood, food.semisolid, food.fat): name = "sandwich"23F = Sandwich(volume=internal_volume, surfacearea=surface_area,24 contacttime=(10,"days"), contacttemperature=(7,"C"),25 substance=m, simulant="ethanol")26
27# Tier M2 — partition28K_F_over_P = film.k / F.k029
30# Tier M3 — kinetics31kin = F.migration(film)32CF = kin.CFtarget33s = 100 * CF / m.SML34
35# ==========================================================================36# ////////////////////// Detailed version //////////////////////37# ==========================================================================38# --- Imports -------------------------------------------------------------39from patankar.layer import LDPE # LDPE model40from patankar.loadpubchem import migrant # PubChem + props41from patankar.geometry import Packaging3D# 3D geometry42import patankar.food as food # food/simulants43
44# --- 1) Geometry: cylinder (height x radius) -----------------------------45# Units as tuples (value, "unit"), handled by SFPPy.46internal_volume, surface_area = Packaging3D(47 "Cylinder",length=(19, "cm"), # height = 19 cm48 radius=(30, "mm") # radius = 30 mm (diam = 60 mm)49 ).get_volume_and_area()50print(f"[Geometry] V = {internal_volume.item():.6g} m^3")51print(f"[Geometry] A = {surface_area.item():.6g} m^2")52
53# --- 2) Migrant + LDPE film ---------------------------------------------54# Example: Irganox 1076 (phenolic AO) from public DBs.55m = migrant("irganox 1076")56film = LDPE(migrant=m, l=(100, "um")) # 100 um57print(f"[Migrant] {m.compound} | CAS={m.CAS} | "58 f"M={m.M} g/mol | logP={m.logP}")59
60# --- 3) Food proxy: semi-solid, fatty sandwich ---------------------------61class Sandwich(food.realfood,food.semisolid,food.fat):name = "sandwich"62F = Sandwich(volume=internal_volume, surfacearea=surface_area,63 contacttime=(10, "days"), contacttemperature=(7, "C"),64 substance=m, simulant="ethanol") # fatty matrix proxy65
66# --- 4) Equilibrium partition (Tier M2) ----------------------------------67# K_{F/P} = k_P / k_F68K_F_over_P = film.k / F.k069print(f"[M2] K_(F/LDPE) = {K_F_over_P.item():.4g} "70 "(<1: stronger LDPE affinity)")71
72# --- 5) Kinetics (Tier M3): 10 d @ 7 C -----------------------------------73# SFPPy couples partition + diffusion with T,t.74kin = F.migration(film)75CF = kin.CFtarget76s = 100 * CF / m.SML77print(78 f"[M3] 10 d @ 7 C: C_F = {CF.item():.6g} mg/kg, "79 f"severity = {s.item():.2f}"80 )81# Optional plots: time course + layer profiles82kin.plotCF() # kinetics83kin.plotCx() # concentration profiles84
85# --- 6) Step 2: +4 h @ 25 C (warming before use) -------------------------86F2 = F.copy().update( contacttime=(4, "hours"),contacttemperature=(25, "C"))87kin2 = kin >> F2 # simulation chaining with ">>"88s2 = 100 * kin2.CFtarget / m.SML # updated severity89print(f"[M3] +4 h @ 25 C: C_F = {kin2.CFtarget.item():.6g} mg/kg, "90 f"severity = {s2.item():.2f}")91# Cumulative kinetics over both steps92(kin + kin2).plotCF()Typical outputs (Listing 2):
xxxxxxxxxx61[Geometry] V = 0.000537212 m^32[Geometry] A = 0.041469 m^23[Migrant] irganox 1076 | CAS=['2082-79-3'] | M=530.9 g/mol | logP=[13.8]4[M2] K_(F/LDPE) = 6.741 (<1: stronger LDPE affinity)5[M3] 10 d @ 7 C: C_F = 5.22691 mg/kg, severity = 87.126[M3] +4 h @ 25 C: C_F = 5.56426 mg/kg, severity = 92.74Takeaway. This example shows the SFPPy syntax and basic M2/M3 calculations from just the compound’s name. Severities are computed automatically. While 4 h at 25 °C breaks cold chain for microbiological risk, it has minor impact on chemical risk.
Table 22 gives the setup; Listing 3 shows the script.
| Properties | Values |
|---|---|
| Geometry | Bottle, |
| Migrant | Toluene (CAS 108-88-3), typical NIAS proxy |
| Wall | rPP, |
| Barrier | PET FB, base case 30 µm, variants 2–60 µm |
| Food | Fatty liquid, 450 d @ 20 °C |
| Outputs |
example2.py)xxxxxxxxxx841# Listing 2 — Optimizing FB thickness for a PP bottle (SFPPy, example2.py)2# ==========================================================================3# ////////////////////// Minimalist version //////////////////////4# ==========================================================================5from patankar.loadpubchem import migrant6from patankar.geometry import Packaging3D7import patankar.food as food8import patankar.layer as polymer9from patankar.migration import senspatankar, CFSimulationContainer10
11# Bottle geometry (1 L)12bottle = Packaging3D("bottle",13 body_radius=(40,"mm"), body_height=(0.2,"m"),14 neck_radius=(1.8,"cm"), neck_height=0.05)15Vint, Acontact = bottle.get_volume_and_area()16
17# Migrant + rPP wall18tol = migrant("toluene")19PP = polymer.PP(l=(300,"um"), substance=tol, C0=10, T=(20,"C"))20
21# Food proxy22class FattyLiquid(food.realfood, food.liquid, food.fat): name="fattyFood"23F = FattyLiquid(volume=Vint, surfacearea=Acontact,24 contacttime=(450,"days"), contacttemperature=(20,"C"))25
26# Simulation without FB27ref = senspatankar(PP, F)28
29# Add 30 µm PET FB30PETfb = polymer.wPET(l=(30,"um"), substance=tol, C0=0, T=(20,"C"))31walls_FB = PETfb + PP32fb = senspatankar(walls_FB, F)33
34# ==========================================================================35# ////////////////////// Detailed version //////////////////////36# ==========================================================================37# --- Imports -------------------------------------------------------------38from patankar.loadpubchem import migrant # migrants (PubChem)39from patankar.geometry import Packaging3D # 3D bottle geometry40import patankar.food as food # food/simulants41import patankar.layer as polymer # polymer layers42from patankar.migration import senspatankar # solver43from patankar.migration import CFSimulationContainer as store44from patankar.layer import _toSI45
46# --- 1) Bottle geometry (1 L) -------------------------------------------47bottle = Packaging3D("bottle",48 body_radius=(40,"mm"), body_height=(0.2,"m"),49 neck_radius=(1.8,"cm"), neck_height=0.05)50Vint, Acontact = bottle.get_volume_and_area()51print(f"[Geometry] V={Vint.item():.3e} m3, A={Acontact.item():.3e} m2")52
53# --- 2) Migrant + rPP wall ----------------------------------------------54tol = migrant("toluene")55PP = polymer.PP(l=(300,"um"), substance=tol, C0=10, T=(20,"C"))56
57# --- 3) Food proxy -------------------------------------------------------58class FattyLiquid(food.realfood,food.liquid,food.fat): name="fattyFood"59F = FattyLiquid(volume=Vint, surfacearea=Acontact,60 contacttime=(450,"days"), contacttemperature=(20,"C"))61
62# --- 4) Simulation without FB -------------------------------------------63ref = senspatankar(PP, F, name="rPP_bottle")64ref.plotCF(); ref.plotCx()65
66# --- 5) Add PET functional barrier (30 um) -------------------------------67PETfb = polymer.wPET(l=(30,"um"), substance=tol, C0=0, T=(20,"C"))68walls_FB = PETfb + PP69fb = senspatankar(walls_FB, F, name="rPP_bottle_FB")70fb.plotCF(); fb.plotCx()71
72# --- 6) Compare with/without FB ------------------------------------------73comp = store(name="bottles")74comp.add(ref, "without FB","b"); comp.add(fb,"with PET FB","m")75comp.plotCF()76
77# --- 7) Systematic study: FB thickness (2-60 um) ------------------------78study = store(name="FBthickness")79study.add(ref,"without FB","k")80for lfb in range(2,61,4):81 walls_FB.l[0] = _toSI((lfb,"um")).item()82 sim = senspatankar(walls_FB,F,name=f"FB{lfb}um")83 study.add(sim, f"PET {lfb} um")84study.plotCF()Results. Figure 6 shows kinetic profiles for varying PET FB thickness. Key points:
rapid contamination without FB (reference),
drastic reduction with 30 µm PET (even plasticized “wPET”),
only moderate pure lag effect (weeks).
Tip
Takeaway. SFPPy models functional barriers (FB) without extra equations: same M2/M3 solvers apply. Thickness sweeps directly size the FB needed for compliance. Full script: example2.py.
Table 23 summarizes the studied configurations.
| Properties | Values |
|---|---|
| Geometry | Open box 19×10×8 cm (rectangular prism) |
| Migrant | Limonene, |
| Structure | ABA: PET 20 µm / rPP 500 µm / PET 20 µm |
| Steps | (1) 4 mo @ 20 °C, (2) hot fill 90 °C, (3) 6 mo @ 30 °C |
| Outputs | Concentration profiles, cumulative kinetics, variant comparisons |
Key findings (Figure 6):
PET 20 µm stabilizes contamination (steady permeability regime),
toluene (v1) migrates more (higher mobility),
thinner PET (v2) worsens migration,
v3 is worst case.
example3.py)xxxxxxxxxx501# Listing 3 — Multilayer structure and sequential scenarios2# Imports3from patankar.loadpubchem import migrant4from patankar.layer import gPET,wPET,PP5from patankar.geometry import Packaging3D6from patankar.food import setoff,ambient,hotfilled,realfood,liquid,fat7from patankar.migration import CFSimulationContainer as store8
9# --- 1) Geometry ----------------------------------------------------------10box = Packaging3D("box_container", length=(19,"cm"),11 width=(10,"cm"), height=(8,"cm"))12Vint, Acontact = box.get_volume_and_area()13
14# --- 2) Migrant and layers ------------------------------------------------15m = migrant("limonene")16A1 = wPET(l=(30,"um"), migrant=m, C0=0)17B = PP(l=(0.5,"mm"), migrant=m, CP0=200) # CP0 or C0 are aliases18A2 = gPET(l=(30,"um"), migrant=m, C0=0)19ABA = A1 + B + A2 # trilayer structure20
21# --- 3) Contact conditions ------------------------------------------------22class Step1(setoff,ambient): contacttime=(4,"months"); contacttemperature=(20,"C")23class Step2(hotfilled,realfood,liquid,fat): pass24class Step3(ambient,realfood,liquid,fat): contacttime=(6,"months"); contacttemperature=(30,"C")25F1,F2,F3 = Step1(), Step2(), Step3()26box >> F1 >> F2 >> F3 # propagate geometry27
28# --- 4) Chained simulation (>> operator) ----------------------------------29F1 >> ABA >> F1 >> F2 >> F330sol_ref = F1.lastsimulation + F2.lastsimulation + F3.lastsimulation31
32# --- 5) Variants ----------------------------------------------------------33# operator % is used to inject substances34m2 = migrant("toluene")35m2 % F1 >> ABA >> F1 >> F2 >> F336sol_v1 = F1.lastsimulation + F2.lastsimulation + F3.lastsimulation37m % F1 >> ABA.copy(l=[10e-6,0.5e-3,10e-6],migrant=m) >> F1>>F2>>F338sol_v2 = F1.lastsimulation + F2.lastsimulation + F3.lastsimulation39m2 % F1 @ ABA.copy(l=[10e-6,0.5e-3,10e-6],migrant=m2) >> F1>>F2>>F340sol_v3 = F1.lastsimulation + F2.lastsimulation + F3.lastsimulation41
42
43# --- 6) Compare all cases -------------------------------------------------44comp = store(name="ABA study")45comp.add(sol_ref, "Limonene with 20 um thick FB (ref)", "Teal", linewidth=3, linestyle='--')46comp.add(sol_v1, "Toluene with 20 um thick FB (v1)", "Crimson", linewidth=3)47comp.add(sol_v2, "Limonene with 10 um thick FB (v2)", "deepskyblue", linewidth=2, linestyle='--')48comp.add(sol_v3, "Toluene-FB with 10 um thick FB (v3)", "tomato", linewidth=2)49hfig = comp.plotCF()50hfig.print('cmp_pltCF_container_with_FB',destinationfolder="tmp/",overwrite=True)!Note]
Takeaway. SFPPy’s symbolic operators:
+(layer assembly/sum),>>(step chaining),%(migrant substitution),@(thermal reinit). Applicable at M3 for kinetics and release potentials.
The extension proposed in Listing \ref{lst:Ex3multilayerPR} computes the intrinsic potential releases per step
xxxxxxxxxx571# %% Example 3 - Extension (1/2) - Potential Release (PR)2# ---------------------------------------------------------3"""4Analysis at the scale of the full packaging (the initial distribution of contaminants is preserved)5 PR = PRE * PRT6
7PR : ndarray of shape (n_steps,)8 Array of intrinsic potential release values for each step in the9 current sequence of transfer (e.g. storage, hot fill, long-term storage).10"""11import numpy as np12
13# effective potential release of steps 1+2+3, 2+3, 1+214# Fj @ ABA or Fj >> ABA = thermalize15# ABA >> Fj >> Fj+1 propagates migration from ABA to Fj and then Fj+116sim123 = m2 % F1 >> ABA >> F1 >> F2 >> F317PRall123 = np.array([m.lastsimulation.PR.PRtarget_effective for m in [F1,F2,F3]])18F2 @ ABA >> F2 >> F3 # step 1 omitted19PRall23 = np.array([m.lastsimulation.PR.PRtarget_effective for m in [F2,F3]])20F1 @ ABA >> F1 >> F3 # step 2 omitted21PRall13 = np.array([m.lastsimulation.PR.PRtarget_effective for m in [F1,F3]])22
23# intrinsic potential release for steps: 1=1+2+3\2+3, 2=1+2+3\1+3, 3=1+2+3\1+224PR = np.zeros((len(PRall123),), dtype=float)25PRN = PRall123[-1,0] # potential release with all steps26PR[0] = 1.0 - (1.0-PRN)/(1.0-PRall23[1,0])27PR[1] = 1.0 - (1.0-PRN)/(1.0-PRall13[1,0])28PR[2] = 1.0 - (1.0-PRN)/(1.0-PRall123[1,0])29print("PR =", PR)30print("PRT =", PR/F3.lastsimulation.PR.PRE_effective)31print("score = PR/PRN =", PR/PRN)32# compute dependency error on intrinsic PR33PRNcontrol = (1-np.prod(1-PR))34print(f"PR dependency ~ {(PRNcontrol/PRN - 1).item()*100:0.3f} %")35
36
37# %% Example 3 - Extension (2/2) - layer-based Potential Release (PR)38# --------------------------------------------------------------------39"""40Analysis at the scale of each layer (j=1,2,3).41
42PR_layers : ndarray of shape (n_steps, n_layers)43 Array of intrinsic potential release values per step and per layer44 in a multilayer system, reconstructed by comparison of full and45 step-omitted sequences.46"""47R123 = F1.potentialRelease(ABA) >> F2 >> F348R23 = F2.potentialRelease(ABA) >> F349R13 = F1.potentialRelease(ABA) >> F350
51# intrinsic layer-based potential release52PR_layers = np.zeros((len(R123), len(ABA)), dtype=float) # nsteps x nlayers53PRN_layers = R123.PR[2,:]54PR_layers[0,:] = 1.0 - (1.0-PRN_layers)/(1.0-R23.PR[1,:])55PR_layers[1,:] = 1.0 - (1.0-PRN_layers)/(1.0-R13.PR[1,:])56PR_layers[2,:] = 1.0 - (1.0-PRN_layers)/(1.0-R123.PR[1,:])57PRN_layers_control = 1 - np.prod(1-PR_layers, axis=0)The computed release potentials for the ABA tray are summarized in Table 24.
The value PRN ≈ 0.338 indicates that roughly one third of the initial toluene mass ends up in the food phase during the complete sequence score[2]), while score[1]) and
The dependency check (Eq. \ref{eq:PRdependence}) shows a positive deviation of 4.29 % between the migration reconstructed from the
↓ Variable / index o → | 0 | 1 | 2 | Interpretation |
|---|---|---|---|---|
PRall123[o] | 0 | 0.0154 | PRN = 0.3375 | |
PRall23[o] | 2.887 × 10⁻⁶ | 0.3134 | – | |
PRall13[o] | 0 | 0.3361 | – | |
PR[o] | 0.0350 | 0.0020 | 0.3271 | |
PRT[o] | 0.0362 | 0.0020 | 0.3381 | |
score[o] | 0.1039 | 0.0059 | 0.9692 |
† In Python, the index o = k – 1 (step index). Variables PRall123, PRall23, and PRall13 capture cumulative effects up to step k. PR, PRT, and score are intrinsic to each step k.
The computation of PR_layers) follows the same logic by introducing the contaminant (m2) successively into PR_layers[:,1] (PR (the real source).
Values for PR_layers[0,0] is strongly negative: storage without contact causes a backflow toward
Note
Practical note: this analysis yields a component-wise release indicator, highly useful for recycled materials. It identifies the parts that are structurally prone to releasing the most (for a given content) and thus where to install or optimize barriers. When a layer is protected, the barrier imposes its resistance on the global transfer; conversely, a reservoir layer behaves almost neutral and contributes little to the total release.
PR_layers[o,p] values per step (o) and per layer (p) (script extension 2/2).↓ Index o / Index p → | A₁ (p = 0) | B₂ (p = 1) | A₃ (p = 2) |
|---|---|---|---|
| F₁ (o = 0) | −0.89269 | 0.03505 | 0.00293 |
| F₂ (o = 1) | 0.00195 | 0.00198 | 0.00699 |
| F₃ (o = 2) | 0.32807 | 0.32706 | 0.02125 |
† Python indices start at 0 → o = k – 1 (step) and p = j – 1 (layer). The smallest index corresponds to the layer in contact with the food.
Table 6 details the case; Listing 4 shows the script.
| Properties | Values |
|---|---|
| Layer | Monolayer |
| Medium | Food simulant |
| Data | Noisy |
| Outputs | Nonlinear fit of |
Note
Result Overview. Despite noise, fitted
example4.py)xxxxxxxxxx381# Listing — Script to identify D and k from experimental data (adapted from example4.py)2
3# --- Imports --------------------------------------------------------------4from patankar.layer import layer, layerLink5from patankar.food import foodlayer6
7# --- 1) Define layer P and food F ----------------------------------------8P = layer(l=(100,"um"), D=(1e-10,"cm**2/s"), C0=1000, k=0.1)9F = foodlayer(contacttime=(10,"days"), volume=(1,"L"),10 surfacearea=(6,"dm**2"), h=(1e-6,"m/s"), CF0=0, k=1)11
12# --- 2) Link parameters (D,k) for external control -----------------------13Dref, kref = P.D, P.k14P.Dlink = layerLink("D", indices=0, values=Dref)15P.klink = layerLink("k", indices=0, values=kref)16
17# --- 3) Baseline simulation + pseudo-experiment --------------------------18R = F.migration(P) # reference kinetics19E = R.pseudoexperiment(npoints=30, std_relative=0.01) # noisy data20
21# --- 4) Sensitivity scan (optional visual check) -------------------------22R.comparison.update(0, label="**Reference**", color="black")23for _ in range(10):24 P.Dlink[0] /= 1.1 # decrease D25 P.klink[0] *= 1.1 # increase k26 R.rerun(name=f"{P.Dlatex()[0]}, {P.klatex()[0]}",27 color=R.comparison.jet(10)[_])28R.comparison.add(E, label="Pseudo Experiment", discrete=True)29R.comparison.plotCF()30
31# --- 5) Fit D and k on the experimental kinetics -------------------------32d2 = R - E # squared-distance callable33print("Before fit:", d2())34res = R.fit(E) # non-linear optimization of D and k35print("After fit:", d2())36print("Fitted D:", P.Dlink.values, "| True:", Dref)37print("Fitted k:", P.klink.values, "| True:", kref)38R.comparison.plotCF() # show fitted curve vs. dataKey result. Despite added noise, the method recovers
Tip
Real data. The procedure works identically with experimental series (E = R.from_csv(...) or by creating an equivalent “experiment” object). The layerLink mechanism binds any targeted parameter (here
Note
Takeaway. The layerLink mechanism links targeted parameters (here from_csv). Domain validity: tracer regime (concentration-independent properties, see §8).
Automating calculations and verifying regulatory thresholds with AI becomes possible by integrating local document bases (Retrieval-Augmented Generation, RAG) and Python scripts. The whole stack can run offline, with confidentiality and auditability—key conditions for safe-by-design workflows.
LlamaIndex/Ollama with a mistral model.
A minimal setup can be built from open tools and modest hardware (an 8–16 GB VRAM GPU is recommended). Components are summarized in Table 27.
Table 7 shows minimal setup; Listing 5 demonstrates.
| Properties | Values |
|---|---|
| KB (source) | Markdown files under ./docs/KB |
| Index | Persistent VectorStoreIndex (Chroma) |
| Embeddings | BAAI/bge-small-en-v1.5 (HuggingFace) |
| LLM | mistral via ollama |
| I/O | User question → synthetic answer + cited sources |
Outputs. Table 8 compares EU vs. US definitions of “functional barrier.” SFPPy models them by low
example5.py)xxxxxxxxxx221# Listing — Minimal RAG configuration (adapted from example5.py)2
3from llama_index.core import SimpleDirectoryReader, VectorStoreIndex4from llama_index.embeddings.huggingface import HuggingFaceEmbedding5from llama_index.llms.ollama import Ollama6
7# 1) Load the Markdown/Python KB (recursive)8documents = SimpleDirectoryReader(input_dir="./docs/KB", recursive=True).load_data()9
10# 2) Embeddings (HuggingFace) then vector index11embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")12index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)13
14# 3) Declare the local LLM (Ollama)15llm = Ollama(model="mistral") # other models may be installed16
17# 4) Query (RAG) with source citations18query_engine = index.as_query_engine(llm=llm, similarity_top_k=3)19response = query_engine.query("What is the definition of a functional barrier in EU 10/2011?")20print(response.response)21for src in response.source_nodes:22 print(" -", src.metadata.get("file_path","unknown"))Note
Good practices.
Store regulatory excerpts and Python scripts in ./docs/KB, rebuild the persistent index, and preserve source citations. The SFPPy–RAG coupling enables hybrid agents where the LLM’s answer directly steers physical simulation and design choices.
| Question (EU) | Question (US) |
|---|---|
| What is the definition of a functional barrier in EU 10/2011? | What is the definition of a functional barrier in the US? |
| RAG answer | RAG answer |
Definition in EU Regulation 10/2011 (Art. 3): “Functional barrier means a layer which prevents migration of substances from behind that barrier into food.” Implications: (i) very low nofood() or setoff() boundaries in SFPPy. | In the US, “functional barrier” is not legally defined, but FDA recognizes the concept in FCS Notifications. Informal definition: a layer that prevents or significantly reduces migration so that exposure is below levels of safety concern. Key points: migration |
In SFPPy. Model a functional barrier by setting (i) very low
Extension request (to the RAG agent). “Generate a simulation example with a functional barrier applied in a multilayer system, justify your choice.”
The RAG system can combine example strategies and known documentation to generate new simulations. Listing 7 is auto-generated and can be executed in the SFPPy environment to produce Figure 8 and the interpretation summarized in Table 28.
The selections (migrant = toluene; recycled PP as the source layer; glassy PET as the barrier; simulant = ethanol) are consistent with SFPPy recommendations. Ethanol is intentionally chosen as a fatty-food simulant: it provides a severe and reproducible stress, although other options like oliveoil are available. Keep in mind these are numerical calculations: ethanol does not interact with glassy PET (“gPET”) as it might experimentally.
Value for SMEs. Such auto-generations provide concrete technical support—both executable scripts and expert interpretations. They do not replace regulatory evaluation, but they speed up preparation of credible, well-argued scenarios. Limitations remain: for instance, the agent proposes an un-plasticized PET barrier without discussing plasticization risk (see Example 2, Section 10.2) or polymer-compatibility issues.
xxxxxxxxxx511"""2SFPPy demo - Multilayer with a Functional Barrier3-------------------------------------------------4Scenario: Toluene in a recycled PP core, with/without a PET functional barrier5Contact: ethanol, 60 days @ 40oC6Outputs: CF(t) curves, snapshots, and a small thickness study for the FB7"""8# --- Imports ---9from patankar.loadpubchem import migrant10from patankar.layer import PP, gPET11from patankar.food import ethanol12from patankar.migration import senspatankar, CFSimulationContainer13import matplotlib.pyplot as plt14
15# --- Define Migrant (Toluene) ---16tol = migrant("toluene")17
18# --- Define Layers ---19PPcore = PP(l=500e-6, C0=200, substance=tol) # 500 um PP with 200 mg/kg toluene20PETbarrier = gPET(l=30e-6, C0=0, substance=tol) # 30 um PET barrier, initially no migrant21
22# --- Build Multilayer Systems ---23multilayer_with_FB = PETbarrier + PPcore # PET on food side24multilayer_no_FB = PPcore # no barrier25
26# --- Define Food (Ethanol, 40oC, 10 days) ---27food_contact = ethanol(contacttime=(60, "days"), contacttemperature=(40, "degC"))28
29# --- Run Simulations ---30result_no_FB = senspatankar(multilayer_no_FB, food_contact, name="No Barrier")31result_with_FB = senspatankar(multilayer_with_FB, food_contact, name="With 30 um PET FB")32
33# --- Plot & Compare ---34result_no_FB.plotCF()35result_with_FB.plotCF()36comparison = CFSimulationContainer(37 name="Toluene Migration into Fatty Food (Ethanol)",38 SML=0.15e-3, SMLunit="mg/kg")39comparison.add(result_no_FB, label="No Barrier", color='red')40comparison.add(result_with_FB, label="With 30 um PET FB", color='blue')41comparison.plotCF()42plt.yscale("log") # log-scale for better visibility43plt.ylim(1e-10,10) # concentration range (mg/kg)44plt.axhline(0.5e-3, color='black', linestyle='--', label="FDA ToR (0.5 ug/kg)")45plt.title("Toluene Migration into Fatty Food")46plt.ylabel("C_F (mg/kg)")47plt.xlabel("Time (days)")48plt.legend()49plt.grid(True)50plt.tight_layout()51plt.show()| Question | Answer |
|---|---|
| Why these inputs. | (i) rPP core (500 µm) as a realistic volatile reservoir; (ii) PET 30 µm FB (low |
| How to read the figure. | The blue curve (30 µm PET FB) lies orders of magnitude below red (no barrier): clear functional-barrier effect (lag + reduced flux). On the log scale: staying below both SML and ToR at 60 days meets both criteria; between the lines meets ToR but fails SML; above ToR fails both. |
| Is 60 days sufficient? | Depends on intended use. Simulate the full profile (hot-fill → cooling → storage). If life exceeds 60 days, extend duration or increase PET thickness. Align simulant choice to the actual food (e.g., ethanol95() or a real-fat model as needed). |
SFPPy Vitrac 2025a is an AI-ready open-source project already integrating molecular-modeling modules, a dynamic PubChem client (Kim et al., 2024), EU/US/CN regulatory bases, and a ToxTree port (Patlewicz et al., 2008). It is compatible with Vitrac 2025b, dedicated to predicting oxidation products and their kinetics under controlled thermo-oxidative conditions—thus enabling realistic migrant scenarios from degradation processes (oxidative scission, more polar low-MW products).
The Vitrac 2025c project—aimed at recycled-material management—leverages chemical fingerprints to recognize/classify contaminants from chromatograms or spectroscopic signals. These tools pave the way to an integrated approach that combines modeling, automated recognition, and release scenarios.
More broadly, SFPPy sits within a rich ecosystem of complementary tools (Table 30) orchestrable in Python. This ecosystem is now usable by large language models (LLMs), which can directly operate these software bricks to answer targeted questions. Coupled with RAG techniques, these capabilities enable repeatable, traceable answers grounded in vetted internal guides and examples.
| Tool / Library | Primary role | Use with SFPPy |
|---|---|---|
| sig2dna | Analytical-signal interpretation; chemical fingerprints | Map GC/LC–MS peaks to likely chemical families; feed SFPPy with “migrant/NIAS” candidates. |
| radigen | Neo-formed product generation (oxidation, thermolysis) | Enumerate plausible oxidation products in polymer or food at arbitrary |
| OpenChrom* | GC/LC(/MS) data management & processing | Import, filter, integrate chromatograms; export peak lists to SFPPy (CSV). |
| pymzML, pyteomics | MS data I/O (mzML, mzXML) | Python pipeline for intensities and m/z; couple to sig2dna/matchms, then SFPPy. |
| matchms | Spectral matching | Rapid candidate annotation (public libs); prioritize migrants to simulate. |
| RDKit | Cheminformatics (structures, 3D, descriptors) | Generate 3D structures, |
| Open Babel | Chemical-format conversion/optimization | Normalize .sdf/.mol/.pdb; complement geometric properties for diffusion (Welle/hFV). |
| PubChemPy | Programmatic PubChem access | Retrieve formulas, masses, IDs, logP; auto-complete SFPPy “migrant” sheets. |
| SciPy (optimize) | Deterministic optimization (LS, simple constraints) | Fit |
| Pyomo, cvxpy | Mathematical programming (LP, QP, MIP) | Cast “safe design” as LP/MILP (costs |
| scikit-optimize, DEAP/pymoo | Bayesian / evolutionary optimization | Multi-objective search (migration, cost, mass); explore complex, gradient-free surfaces. |
| SALib | Global sensitivity analysis (Sobol, Morris) | Rank parameters ( |
| PyMC | Bayesian inference & uncertainty | Fit |
| pandas, DuckDB | Tables, joins, analytics | Aggregate M2/M3 outputs; build dashboards across trials/variants; fast local queries. |
| Matplotlib, Plotly/Dash, Streamlit | Visualization / light apps | CF curves, |
| Dask, joblib | Parallelization, batch | Sweep hundreds of substances/designs; accelerate Monte-Carlo/sensitivity. |
| Prefect, Snakemake | Workflow orchestration | Reproducible studies (data ETL → M2/M3 → optimization → report). |
| pint | Robust units handling | Secure I/O ( |
| LlamaIndex, LangChain + Ollama | Local RAG/LLMs | Regulatory Q/A, study generation; hybrid agents (code + regulation) around SFPPy (cf. Ex. 5). |
| unstructured, pdfplumber | PDF/HTML ingestion | Extract tables/normative excerpts for RAG; build parameter sets. |
* OpenChrom (like ToxTree) is a Java application; integration is via CSV/Mass-List export and command-line calls.
The five examples show that M2–M3 simulations, continuous with T0–T2, can be automated and coupled to AI agents in Python. Key properties (
This article proposes the main ingredients of a safe-by-design approach, progressing from the simplest indicators to complex scenarios where formulation, design, and use interact. These two levels are not opposed: one helps prioritize when not everything can be controlled, the other integrates all real constraints (geometry, format, presence of contaminants).
Safe design can be framed as a constrained optimization problem, high-dimensional (
The proposed formulation is thus suited to managing recycled feedstock and usage diversity. It paves the way for environments where the paper itself can serve as a RAG (Retrieval-Augmented Generation) knowledge base, building scenarios and optimizations in natural language. Relying on open and interoperable tools and databases, the proposed ecosystem (SFPPy, Python, PubChem, ToxTree…) enables rapid adoption without prior modeling expertise and lends itself to the development of hybrid agents combining physical simulation, regulatory bases, and artificial intelligence.
Hence, this approach provides a robust and extensible foundation for research, industry, and regulation—combining scientific rigor, operational requirements, and openness to digital innovation.
| Symbol | Definition (FR; *EN*) | Units |
|---|---|---|
| Index de la substance / soluté | — | |
| Index de phase (0: référence, | — | |
| Index d’une couche / composant d’emballage; layer index. | — | |
| Surface de contact; contact area. | m | |
| Épaisseur de la couche | m | |
| Volume de l’aliment / d’une couche; food/layer volume. | m | |
| Densité de la phase | kg·m | |
| Concentration de | mol·m | |
| Concentration prédite dans l’aliment (itération | mol·m | |
| Poids/fraction mobilisée de la source | — | |
| Diffusivité de | m | |
| Pré-exponentielle et énergie d’activation (Arrhenius); pre-exponential, activation energy. | m | |
| Coefficient de Henry apparent (réf. | — | |
| Coefficient de partage aliment/phase | — | |
| Coefficient d’activité et activité; activity coefficient & activity. | — | |
| Paramètre d’interaction de Flory–Huggins; Flory–Huggins interaction. | — | |
| Paramètre de solubilité (Hildebrand/Hansen); solubility parameter. | (MPa) | |
| Indice de polarité dérivé de | — | |
| Partage octanol/eau (base 10); octanol/water partition. | — | |
| Nombre de Fourier | — | |
| Nombre de Biot de masse; coeff. de transfert convectif; mass Biot number; mass transfer coeff. | —; m·s | |
| Nombres de Sherwood et de Péclet; Sherwood, Péclet. | — | |
| Masse cumulée migrée dans l’aliment; cumulative migrated mass. | mol or mg | |
| Masse initiale disponible dans la source; initial available mass. | mol or mg | |
| Sévérité maximale visée (critère d’optimisation); target maximal severity. | — | |
| Limites de migration spécifique / globale; SML / OML. | mg·kg | |
| Teneur autorisée dans le polymère; quantity in material. | mg·kg | |
| Constante des gaz et température absolue; gas constant, temperature. | J·mol | |
| Temps de contact; contact time. | s, h, d | |
| Paramètres polymère (corrélation de Piringer : diffusivité et facteur thermique); Piringer polymer/thermal parameters. | —; K | |
| Volume (molaire) de la molécule | m | |
| Porosité et tortuosité effectives; porosity, tortuosity. | — | |
| Potentiels de relargage dynamique/statique; durée de service de la barrière fonctionnelle; dynamic/static release potentials; FB service life. | —; —; s |
| Index/Exponent | Meaning (FR; *EN*) |
|---|---|
| Substance/soluté; solute. | |
| Phase (0: référence; | |
| Couche/composant d’emballage; layer/component. | |
| Aliment (ou simulant); food (or simulant). | |
| Référence thermodynamique (air/eau ou phase de référence); reference phase. | |
| Valeur initiale; initial value. | |
| Itération / ordre d’approximation; iteration/order. | |
| Barrière fonctionnelle; functional barrier. | |
| Équilibre thermodynamique; thermodynamic equilibrium. | |
| Référence (condition/état de référence); reference. |
[1] Vitrac, O.. FMECAengine: FMECA software developed in the framework of the project SafeFoodPack Design (version v0.45). GitHub repository. Last commit: 2019 (commit 3a9f417); available at: https://github.com/ovitrac/Fmecaengine. (2019). URL.
[2] Vitrac, O.. SFPPy: Python Framework for Food Contact Compliance and Risk Assessment (version v1.42). GitHub repository. Last commit circa mid-2025; available at https://github.com/ovitrac/SFPPy (accessed on July 27, 2025). (2025). URL.
[3] Vitrac, O.. SFPPyLite: lightweight browser-based version of SFPPy (version v1.42). GitHub repository. Lightweight browser-based version of SFPPy. Last commit circa mid-2025; available at https://github.com/ovitrac/SFPPylite (accessed on July 27, 2025).. (2025). URL
[4] Kim, S.; Chen J.; Cheng, T.; Gindulyte, A.; He, J.; He, S.; Li, Q.; Shoemaker, B.; Thiessen, P.; Yu, B.; Zaslavsky, L.; Zhang, J.; Bolton, E.. – Pubchem 2025 update. Nucleic Acids Research, 53(D1) :D1516–D1525 (Nov 2024). doi
[5] Patlewicz, G.; Jeliazkova, N.; Safford, R.; Worth, A.; Aleksiev, B. An evaluation of the implementation of the cramer classification scheme in the
toxtree software. SAR and QSAR in Environmental Research, 19(5–6) :495–524 July
2008 ;doi, available at URL (accessed on July 27, 2025).
[6] Zhu, Y.; Nguyen, P.; Vitrac, O.. Risk assessment of migration from packaging materials into food. Elsevier. (2019). doi.
[7] Brandsch, Rainer; Dequatre, Claude; Mercea, Peter; Milana, Maria Rosaria; Stoermer, Angela; Trier, Xenia; Vitrac, Olivier; Schaefer, Annette; Simoneau, C. Practical guidelines on the application of migration modelling for the estimation of specific migration.. JRC Report JRC98028, Publications Office, LU. (2015). doi.
[8] Vitrac, O.. SFPP3: Safe Food Packaging Portal – migration simulation and decision framework (version 1.28). Web-based platform. Access: https://sfpp3-simulation.contactalimentaire.fr/; default login credentials: user: demouser, password: inramig. Platform hosted by LNE (accessed on July 27, 2025).. (2016). URL.
[9] Nguyen, P.; Goujon, A.; Sauvegrain, P.; Vitrac, O.. A computer‐aided methodology to design safe food packaging and related systems. AIChE Journal, 59(4): 1183–1212. (mar 2013). doi.
[10] Vitrac, O.; Ouadi, S.; Hayert, M.; Domenek, S.; Cornuau, G.; Nguyen, P. FitNESS an E-learning platform to design safe and responsible food packaging. Journal of Chemical Education, 101(8): 3179–3192. (aug 2024). doi. URL.
[11] Figge, K.. Migration of components from plastics-packaging materials into packed goods — test methods and diffusion models. Progress in Polymer Science, 6(4): 187–252. (jan 1980). doi.
[12] Jaeger, R. J.; Rubin, R. J.. Plasticizers from plastic devices: extraction, metabolism, and accumulation by biological systems. Science, 170(3956): 460–462. (oct 1970). doi.
[13] Monclús, L.; Arp, H. P. H.; Groh, K. J.; Faltynkova, A.; Løseth, M. E.; Muncke, J.; Wang, Z.; Wolf, R.; Zimmermann, L.; Wagner, M.. Mapping the chemical complexity of plastics. Nature, 643(8071): 349–355. (jul 2025). doi.
[14] Munro, I.; Renwick, A.; Danielewska-Nikiel, B.. The Threshold of Toxicological Concern (TTC) in risk assessment. Toxicology Letters, 180(2): 151–156. (aug 2008). doi.
[15] Authority, E. F. S.; Organization, W. H.. Review of the Threshold of Toxicological Concern (TTC) approach and development of new TTC decision tree. EFSA Supporting Publications, 13(3). (Mar 2016). doi.
[16] Patlewicz, G.; Jeliazkova, N.; Safford, R.; Worth, A.; Aleksiev, B.. An evaluation of the implementation of the Cramer classification scheme in the Toxtree software. SAR and QSAR in Environmental Research, 19(5–6): 495–524. (jul 2008). doi. URL.
[17] Committee, E. S.; Hardy, A.; Benford, D.; Halldorsson, T.; Jeger, M. J.; Knutsen, H. K.; More, S.; Naegeli, H.; Noteborn, H.; Ockleford, C.; Ricci, A.; Rychen, G.; Schlatter, J. R.; Silano, V.; Solecki, R.; Turck, D.; Bresson, J.; Dusemund, B.; Gundert‐Remy, U.; Kersting, M.; Lambré, C.; Penninks, A.; Tritscher, A.; Waalkens‐Berendsen, I.; Woutersen, R.; Arcella, D.; Court Marques, D.; Dorne, J.; Kass, G. E.; Mortensen, A.. Guidance on the risk assessment of substances present in food intended for infants below 16 weeks of age. EFSA Journal, 15(5). (May 2017). doi.
[18] Committee, E. S.. Guidance on selected default values to be used by the EFSA Scientific Committee, Scientific Panels and Units in the absence of actual measured data. EFSA Journal, 10(3). (Mar 2012). doi. [19] Commission. Commission Regulation (EU) No 10/2011 of 14 January 2011 on plastic materials and articles intended to come into contact with food. Official Journal of the European Union, L 12: 1–89. (2011). URL.
[20] Vitrac, O.; Hayert, M.. Risk assessment of migration from packaging materials into foodstuffs. AIChE Journal, 51(4): 1080–1095. (feb 2005). doi.
[21] Vitrac, O.; Hayert, M.. Identification of Diffusion Transport Properties from Desorption/Sorption Kinetics: An Analysis Based on a New Approximation of Fick Equation during Solid-Liquid Contact. Industrial & Engineering Chemistry Research, 45(23): 7941–7956. (oct 2006). doi.
[22] Landrum, G.; Tosco, P.; Kelley, B.; Ric; Sriniker; Gedeck; Vianello, R.; NadineSchneider; Kawashima, E.; Dalke, A.; N, D.; Cosgrove, D.; Cole, B.; Swain, M.; Turk, S.; AlexanderSavelyev; Jones, G.; Vaucher, A.; Wójcikowski, M.; Take; Probst, D.; Ujihara, K.; Scalfani, V. F.; Godin, G.; Pahl, A.; Berenger; JLVarjo; Strets123; JP; DoliathGavid. rdkit/rdkit: 2022_03_1b1 (Q1 2022) Release. Zenodo. ; available at https://www.rdkit.org/ (accessed July 27, 2025).. (2022). doi. URL.
[23] O'Boyle, N. M.; Banck, M.; James, C. A.; Morley, C.; Vandermeersch, T.; Hutchison, G. R.. Open Babel: An open chemical toolbox. Journal of Cheminformatics, 3(1). (oct 2011). doi. URL.
[24] Nguyen, P.; Guiga, W.; Vitrac, O.. Molecular thermodynamics for food science and engineering. Food Research International, 88: 91–104. (oct 2016). doi.
[25] Vitrac, O.; Nguyen, P.; Hayert, M.. In silico prediction of food properties: a multiscale perspective. Frontiers in Chemical Engineering, 3. (jan 2022). doi.
[26] Kim, S.; Chen, J.; Cheng, T.; Gindulyte, A.; He, J.; He, S.; Li, Q.; Shoemaker, B. A.; Thiessen, P. A.; Yu, B.; Zaslavsky, L.; Zhang, J.; Bolton, E. E.. PubChem 2025 update. Nucleic Acids Research, 53(D1): D1516–D1525. (nov 2024). doi. URL.
[27] Schymanski, E.; Kondic, T.; Elapavalore, A.; Bolton, E.; Thiessen, P.; Zhang, J.; Kim, S.; Krinsky, A. M.; Ross, D. H.; Xu, L.. PubChemLite for Exposomics + predicted CCS from CCSbase - 2 August 2025. Zenodo. (2025). doi.
[28] Gillet, G.; Vitrac, O.; Desobry, S.. Prediction of solute partition coefficients between polyolefins and alcohols using a generalized Flory-Huggins approach. Industrial & Engineering Chemistry Research, 48(11): 5285–5301. (may 2009). doi.
[29] Gillet, G.; Vitrac, O.; Desobry, S.. Prediction of partition coefficients of plastic additives between packaging materials and food simulants. Industrial & Engineering Chemistry Research, 49(16): 7263–7280. (jul 2010). doi.
[30] Vitrac, O.; Gillet, G.. An off-lattice flory-huggins approach of the partitioning of bulky solutes between polymers and interacting liquids. International Journal of Chemical Reactor Engineering, 8(1). (jan 2010). doi.
[31] Nguyen, P.; Guiga, W.; Dkhissi, A.; Vitrac, O.. Off-lattice Flory–Huggins approximations for the tailored calculation of activity coefficients of organic solutes in random and block copolymers. Industrial & Engineering Chemistry Research, 56(3): 774–787. (jan 2017). doi.
[32] Snyder, L.. Classification of the solvent properties of common liquids. Journal of Chromatography A, 92(2): 223–230. (may 1974). doi.
[33] Rohrschneider, L.. Solvent characterization by gas-liquid partition coefficients of selected solutes. Analytical Chemistry, 45(7): 1241–1247. (jun 1973). doi.
[34] Cheng, T.; Zhao, Y.; Li, X.; Lin, F.; Xu, Y.; Zhang, X.; Li, Y.; Wang, R.; Lai, L.. Computation of octanol-water partition coefficients by guiding an additive model with knowledge. Journal of Chemical Information and Modeling, 47(6): 2140–2148. (nov 2007). doi.
[35] Fang, X.; Vitrac, O.. Predicting diffusion coefficients of chemicals in and through packaging materials. Critical Reviews in Food Science and Nutrition, 57(2): 275–312. (apr 2015). doi.
[36] Begley, T.; Castle, L.; Feigenbaum, A.; Franz, R.; Hinrichs, K.; Lickly, T.; Mercea, P.; Milana, M.; O’Brien, A.; Rebre, S.; Rijk, R.; Piringer, O.. Evaluation of migration models that might be used in support of regulations for food-contact plastics. Food Additives and Contaminants, 22(1): 73–90. (jan 2005). doi.
[37] Ewender, J.; Welle, F.. A new method for the prediction of diffusion coefficients in poly(ethylene terephthalate)—Validation data. Packaging Technology and Science, 35(5): 405–413. (jan 2022). doi.
[38] Fang, X.; Domenek, S.; Ducruet, V.; Réfrégiers, M.; Vitrac, O.. Diffusion of aromatic solutes in aliphatic polymers above glass transition temperature. Macromolecules, 46(3): 874–888. (jan 2013). doi.
[39] Zhu, Y.; Welle, F.; Vitrac, O.. A blob model to parameterize polymer hole free volumes and solute diffusion. Soft Matter, 15(43): 8912–8932. (2019). doi.
[40] Zhu, Y.; Guillemat, B.; Vitrac, O.. Rational design of packaging: toward safer and ecodesigned food packaging systems. Frontiers in Chemistry, 7. (may 2019). doi.
[41] Vitrac, O.. radigen: Python-based chemical kernel for simulating oxidation reactions from prompts. GitHub repository. Available at https://github.com/ovitrac/radigen (accessed on on July 27, 2025). (2025). URL.