1. Data en invoer
De app haalt molecuuldata live op uit PubChem: molecuulmassa, XLogP, TPSA, formule, SMILES en CID. De gebruiker vult polymeer, simulant, tijd, temperatuur, dikte, contactoppervlak, simulantvolume, dichtheid, startconcentratie C0 en partitiescenario in.
T_K = T_C + 273.15
A_cm2 = A_dm2 * 100
L_cm = dikte_mm / 10
m_polymer_g = A_cm2 * L_cm * rho_polymer_g_cm3
M0_ug = C0_ug_g * m_polymer_g
2. Diffusie
De nominale diffusie start met de JRC/Piringer schatting. AP' en tau komen uit de gekozen polymeertabel; voor PET kiest de app een AP'-scenario op basis van temperatuur en molecuulmassa.
D_base_cm2_s =
1e4 * exp(AP' - 0.1351 * Mr^(2/3) + 0.003 * Mr
- (10454 + tau) / T_K)
Daarna past de app een simulantfactor toe voor screening van solventinteractie, zwelling of plasticisatie. Als een meetpunt is gefit, overschrijft de gefitte D deze modelwaarde.
D_model = D_base * f_simulant(polymer, simulant)
D_used = D_fit als Fit D gebruikt is, anders D_model
3. Laag, nominaal en hoog D
De drie curves zijn een gevoeligheidsband rond dezelfde berekening. Zonder meetfit gebruikt de app een brede factor 10; met meetfit wordt de band factor 3.
zonder Fit D: D_low = D_used / 10, D_nom = D_used, D_high = D_used * 10
met Fit D: D_low = D_used / 3, D_nom = D_used, D_high = D_used * 3
4. Fick-slab release
De kinetische fractie komt uit een 1D vlakke-plaat oplossing. Bij tweezijdig contact is de diffusielengte de halve dikte; bij eenzijdig contact de volledige dikte.
l_cm = L_cm / 2 voor twee zijden
l_cm = L_cm voor een zijde
t_s = tijd_h * 3600
alpha = D_used * t_s / (4 * l_cm^2)
als alpha < 0.02:
F = (4 / sqrt(pi)) * sqrt(alpha)
anders:
F = 1 - (8 / pi^2) *
sum(n=0..79) exp(-(2n+1)^2 * pi^2 * alpha) / (2n+1)^2
F wordt begrensd tussen 0 en 1. Daardoor kan de kinetiek nooit meer massa vrijgeven dan het beschikbare evenwicht of de totale beginmassa.
5. Partitie en massabalans
K is de operationele polymeer/simulant partitie in deze app. Worst-case gebruikt K=1; XLogP screening schat K uit lipofiliciteit en simulantklasse; Eigen K gebruikt de ingevoerde waarde.
Ceq_ug_ml = M0_ug / (K * m_polymer_g + V_ml)
M_eq_ug = min(Ceq_ug_ml * V_ml, M0_ug)
Cmax_M0_V_ug_L = (M0_ug / V_ml) * 1000
Cinf_ug_L = (M_eq_ug / V_ml) * 1000
C_limit_ug_L = min(Cmax_M0_V_ug_L, Cinf_ug_L)
M_raw_ug = M_eq_ug * F
C_raw_ug_L = (M_raw_ug / V_ml) * 1000
Csim_ug_L = min(max(C_raw_ug_L, 0), C_limit_ug_L)
M_migrated_ug = (Csim_ug_L * V_ml) / 1000
6. Output en regulatory eenheden
Specifieke migratie voor SML-screening blijft in mg/kg voedsel/simulant. Extractability wordt ook op contactoppervlak gerapporteerd.
Csim_mg_kg = (Csim_ug_L / 1000) / rho_simulant_kg_L
migrated_percent = 100 * M_migrated_ug / M0_ug
EU_SML_ug_L = SML_mg_kg * rho_simulant_kg_L * 1000
extractability_ug_cm2 = M_migrated_ug / A_cm2
extractability_mg_dm2 = extractability_ug_cm2 * 0.1
EU 10/2011 gebruikt SML in mg/kg. De grafiek toont de EU/SML-lijn op basis van de ingevoerde SML/limiet; de app haalt de stofspecifieke Annex I-limiet niet automatisch op. Overall migration wordt normaal uitgedrukt als mg/dm2, met 10 mg/dm2 als algemene OML voor plastic food-contact materialen.
7. Ranking, fit en waarschuwingen
ratio = Csim_mg_kg / SML_mg_kg
ratio < 0.1 => Laag
ratio <= 1 => Middel
ratio > 1 => Hoog
Fit D zoekt de diffusie tussen 1e-30 en 1e-3 cm2/s die het ingevoerde meetpunt reproduceert. Een fit wordt geweigerd als het meetpunt boven de massa- of partitiegrens ligt. Waarschuwingen verschijnen wanneer invoer buiten modelranges valt, PA/azijnzuur gevoelig is voor zwelling, of K/D uit screeningsaannames komt.