Robert Elder commited on
Commit ·
3b782bc
1
Parent(s): 7b9c3c4
quantity module: added number of extraction iterations as an input
Browse files
quantity_module/functions.py
CHANGED
|
@@ -330,7 +330,14 @@ def get_D_dists_new(w,T,Polymer_Tg,Solvent_Name,Solvent_MW,Solute_MW,Solute_Vabc
|
|
| 330 |
else:
|
| 331 |
return D_dist_noswell, D_dist_swell
|
| 332 |
|
| 333 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
### works with scalar- or vector-valued M0 and D
|
| 335 |
L = PolymerVolume/SurfaceArea #effective length scale of the component
|
| 336 |
#alpha = SolventVolume/PolymerVolume/K
|
|
@@ -348,7 +355,7 @@ def PlaneSheetFiniteBathMass(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,Extr
|
|
| 348 |
result = Minfty*result
|
| 349 |
return result
|
| 350 |
|
| 351 |
-
def
|
| 352 |
### works with scalar- or vector-valued M0 and D
|
| 353 |
L = PolymerVolume/SurfaceArea #effective length scale of the component
|
| 354 |
alpha = (SolventVolume-PolymerVolume*(Qv-1))/(Qv*PolymerVolume*K)
|
|
@@ -369,14 +376,79 @@ def PlaneSheetFiniteBathMassApprox(M0,D,K,PolymerVolume,SurfaceArea,SolventVolum
|
|
| 369 |
result = Minfty*result
|
| 370 |
return result
|
| 371 |
|
| 372 |
-
def
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 377 |
return result
|
| 378 |
|
| 379 |
-
def
|
| 380 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
M0_pred = M_expt/M_M0
|
| 382 |
return M0_pred
|
|
|
|
|
|
| 330 |
else:
|
| 331 |
return D_dist_noswell, D_dist_swell
|
| 332 |
|
| 333 |
+
def PlaneSheetAnalytical_old(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,ExtractionTime,nterms=5,Qv=1):
|
| 334 |
+
L = PolymerVolume/SurfaceArea #effective length scale of the component
|
| 335 |
+
T = D*ExtractionTime/L**2.
|
| 336 |
+
result = (T>0.05) * PlaneSheetFiniteBathMass(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,ExtractionTime,nterms,Qv=Qv) + \
|
| 337 |
+
(T<=0.05) * PlaneSheetFiniteBathMassApprox(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,ExtractionTime,Qv=Qv)
|
| 338 |
+
return result
|
| 339 |
+
|
| 340 |
+
def PlaneSheetFiniteBathMass_old(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,ExtractionTime,nterms,Qv=1):
|
| 341 |
### works with scalar- or vector-valued M0 and D
|
| 342 |
L = PolymerVolume/SurfaceArea #effective length scale of the component
|
| 343 |
#alpha = SolventVolume/PolymerVolume/K
|
|
|
|
| 355 |
result = Minfty*result
|
| 356 |
return result
|
| 357 |
|
| 358 |
+
def PlaneSheetFiniteBathMassApprox_old(M0,D,K,PolymerVolume,SurfaceArea,SolventVolume,ExtractionTime,Qv=1):
|
| 359 |
### works with scalar- or vector-valued M0 and D
|
| 360 |
L = PolymerVolume/SurfaceArea #effective length scale of the component
|
| 361 |
alpha = (SolventVolume-PolymerVolume*(Qv-1))/(Qv*PolymerVolume*K)
|
|
|
|
| 376 |
result = Minfty*result
|
| 377 |
return result
|
| 378 |
|
| 379 |
+
def PlaneSheetFiniteBathMass(tau,alpha,nterms=5):
|
| 380 |
+
### works with scalar- or vector-valued tau
|
| 381 |
+
Minfty = 1.0/(1.+1./(alpha))
|
| 382 |
+
eps = 1e-12
|
| 383 |
+
f = lambda x: np.tan(x)+alpha*x
|
| 384 |
+
qn = np.zeros((nterms))
|
| 385 |
+
for j in range(nterms):
|
| 386 |
+
rts = bisect(f,np.pi/2.+j*np.pi+eps, np.pi*(1.+j)-eps)
|
| 387 |
+
qn[j] = rts
|
| 388 |
+
result = 1.
|
| 389 |
+
for j in range(nterms):
|
| 390 |
+
result = result - (2.*alpha*(1.+alpha))*np.exp(-tau*qn[j]**2.)/(1.+alpha+alpha**2.*qn[j]**2.)
|
| 391 |
+
result = Minfty*result
|
| 392 |
+
return result
|
| 393 |
+
|
| 394 |
+
def PlaneSheetFiniteBathMassApprox(tau,alpha):
|
| 395 |
+
### works with scalar- or vector-valued tau
|
| 396 |
+
Minfty = 1/(1.+1./(alpha))
|
| 397 |
+
# if exp will blow up, use asymptotic expansion instead
|
| 398 |
+
if not np.ndim(tau):
|
| 399 |
+
if(tau/alpha**2.<100.):
|
| 400 |
+
result = (1.+alpha)*(1.-np.exp(tau/alpha**2.)*sp.special.erfc(np.sqrt(tau)/alpha))
|
| 401 |
+
else:
|
| 402 |
+
result = (1.+alpha)*(1.-alpha/(np.sqrt(np.pi)*np.sqrt(tau))+alpha**3./(2.*np.sqrt(np.pi)*(tau)**1.5)-3.*alpha**5./(4.*np.sqrt(np.pi)*(tau)**2.5))
|
| 403 |
+
else:
|
| 404 |
+
result = np.zeros(len(tau))
|
| 405 |
+
m = tau/alpha**2.<100.
|
| 406 |
+
result[m] = (1.+alpha)*(1.-np.exp(tau[m]/alpha**2.)*sp.special.erfc(np.sqrt(tau[m])/alpha))
|
| 407 |
+
m = tau/alpha**2.>=100.
|
| 408 |
+
result[m] = (1.+alpha)*(1.-alpha/(np.sqrt(np.pi)*np.sqrt(tau[m]))+alpha**3./(2.*np.sqrt(np.pi)*(tau[m])**1.5)-3.*alpha**5./(4.*np.sqrt(np.pi)*(tau[m])**2.5))
|
| 409 |
+
result = Minfty*result
|
| 410 |
+
return result
|
| 411 |
+
|
| 412 |
+
def PlaneSheetAnalytical(tau,alpha,nterms=5):
|
| 413 |
+
result = (tau>0.05) * PlaneSheetFiniteBathMass(tau,alpha,nterms) + \
|
| 414 |
+
(tau<=0.05) * PlaneSheetFiniteBathMassApprox(tau,alpha)
|
| 415 |
return result
|
| 416 |
|
| 417 |
+
def Conservative(tau):
|
| 418 |
+
release = (tau <= 0.2) * 2. * np.sqrt(tau / np.pi) + \
|
| 419 |
+
(tau > 0.2) * (1. - (8. / (np.pi ** 2.)) * np.exp(-tau * np.pi ** 2. / 4.))
|
| 420 |
+
return release
|
| 421 |
+
|
| 422 |
+
## XXX work out different alphas
|
| 423 |
+
def multiEquilSwell(alpha, Kps, swell, iterations):
|
| 424 |
+
# alpha is initial before swelling
|
| 425 |
+
result = 1.-(Kps*(swell+alpha)/(Kps*(swell+alpha)+swell-1.))*(swell/(swell+alpha))**iterations
|
| 426 |
+
return result
|
| 427 |
+
|
| 428 |
+
def multiELSwell(tau, alpha, Kps, swell, iterations):
|
| 429 |
+
resultEq = multiEquilSwell(alpha, Kps, swell, iterations)
|
| 430 |
+
resultKinetic = Conservative(tau*iterations)
|
| 431 |
+
result = (resultEq < resultKinetic) * resultEq + (resultEq >= resultKinetic) * resultKinetic
|
| 432 |
+
return result
|
| 433 |
+
|
| 434 |
+
def Extraction(tau, alpha, Kps, swell, iterations):
|
| 435 |
+
tauSpec = tau*iterations
|
| 436 |
+
alphaSpec = (alpha*iterations/swell)-(swell-1)/swell/Kps # for a single iteration
|
| 437 |
+
result = (tauSpec > 1.) * multiELSwell(tau, alpha, Kps, swell, iterations) + (tauSpec <= 1.) * PlaneSheetAnalytical(tauSpec,alphaSpec)
|
| 438 |
+
return result
|
| 439 |
+
|
| 440 |
+
def get_M_dist(D_dist, M_expt, PolymerVolume, SurfaceArea, SolventVolume, ExtractionTime, K_expt=10, Qv=1, iterations=1):
|
| 441 |
+
L = PolymerVolume/SurfaceArea
|
| 442 |
+
tau = D_dist*ExtractionTime/L**2.
|
| 443 |
+
if 1:
|
| 444 |
+
alpha = (SolventVolume)/(PolymerVolume*K_expt) # without swelling; swelling is dealt with downstream
|
| 445 |
+
M_M0 = Extraction(tau, alpha, Kps=K_expt, swell=Qv, iterations=iterations)
|
| 446 |
+
#print('ITERATION TEST') # similar to PlaneSheetAnalytical for 1 iteration
|
| 447 |
+
#print(np.quantile(M_M0, [0.05,0.25,0.5,0.75,0.95]))
|
| 448 |
+
if 0:
|
| 449 |
+
alpha = (SolventVolume-PolymerVolume*(Qv-1))/(Qv*PolymerVolume*K_expt) # with swelling
|
| 450 |
+
M_M0 = PlaneSheetAnalytical(tau, alpha, nterms=5)
|
| 451 |
+
#M_M0 = PlaneSheetAnalytical_old(1.0, D_dist, K_expt, PolymerVolume, SurfaceArea, SolventVolume, ExtractionTime, nterms=5, Qv=Qv) # much faster and indistinguishable distribution from Mfunc_film
|
| 452 |
M0_pred = M_expt/M_M0
|
| 453 |
return M0_pred
|
| 454 |
+
|
quantity_module/quantity.py
CHANGED
|
@@ -99,6 +99,7 @@ def exp_post():
|
|
| 99 |
Swelling_percent = float(request.form['swelling'])
|
| 100 |
Swelling_wtfrac = Swelling_percent/100
|
| 101 |
Extraction_Time = float(request.form['time'])
|
|
|
|
| 102 |
K_expt = float(request.form['K'])
|
| 103 |
Solvent_MW = Solvent_MWs[Solvent_Name]
|
| 104 |
Solvent_Density = Solvent_Densities[Solvent_Name]
|
|
@@ -140,11 +141,11 @@ def exp_post():
|
|
| 140 |
# outside training domain, default to Wilke-Chang
|
| 141 |
method = 'qrf/wc'
|
| 142 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, 'G2', return_DCs=False, N=N_sample)
|
| 143 |
-
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv)
|
| 144 |
else:
|
| 145 |
method = 'qrf'
|
| 146 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, CHRIS_category, return_DCs=False, N=N_sample, input_Ds=diff)
|
| 147 |
-
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv)
|
| 148 |
else:
|
| 149 |
## use categories
|
| 150 |
CHRIS_category = categories[pIndex]
|
|
@@ -154,7 +155,7 @@ def exp_post():
|
|
| 154 |
CHRIS_flag = 'wc'
|
| 155 |
CHRIS_category = 'G2'
|
| 156 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, CHRIS_category, return_DCs=False, N=N_sample, input_Ds=None)
|
| 157 |
-
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv)
|
| 158 |
if CHRIS_flag is None:
|
| 159 |
method = 'category'
|
| 160 |
else:
|
|
@@ -184,14 +185,14 @@ def exp_post():
|
|
| 184 |
styles = [dict(selector="th", props=[("padding", "0 0.5em")]), dict(selector="td", props=[("padding", "0 0.5em")]),]
|
| 185 |
table = df_table.style.set_table_styles(styles).set_properties(subset=[r'\( D \) (cm<sup>2</sup>/s)', r'\( M/M_0 \)', f'\( M_0 \) ({units})', r'\( M_0 \) (% median)'], **{'text-align': 'right'}).set_table_attributes('border="2"').hide(axis='index').to_html(index=False, escape=False, justify='center')
|
| 186 |
|
| 187 |
-
tau = np.nanquantile(D_dist_swell,0.5) * (Extraction_Time*3600) / (Polymer_Volume/Surface_Area)**2
|
| 188 |
|
| 189 |
M0_out = SigFigs(np.nanquantile(M0_pred,0.5),6)
|
| 190 |
tau_out = SigFigs(tau,6)
|
| 191 |
mass_units = SigFigs(mass_units,6)
|
| 192 |
|
| 193 |
return render_template('quantity_report.html', show_properties=show_properties, polymers=polymers, pIndex=pIndex,
|
| 194 |
-
area=Surface_Area, vol=Polymer_Volume, units=units, M=M_expt, M0=M0_out, time=Extraction_Time,
|
| 195 |
solventvol=Solvent_Volume, solventname=Solvent_Name, swelling=Swelling_percent, K=K_expt, T=T, tau=tau_out,
|
| 196 |
chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage, table=table,
|
| 197 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin, ceramic=is_ceramic, methods=[method,round(Polymer_Tg-273.15),Polymer_Density],
|
|
|
|
| 99 |
Swelling_percent = float(request.form['swelling'])
|
| 100 |
Swelling_wtfrac = Swelling_percent/100
|
| 101 |
Extraction_Time = float(request.form['time'])
|
| 102 |
+
iterations = float(request.form['iterations'])
|
| 103 |
K_expt = float(request.form['K'])
|
| 104 |
Solvent_MW = Solvent_MWs[Solvent_Name]
|
| 105 |
Solvent_Density = Solvent_Densities[Solvent_Name]
|
|
|
|
| 141 |
# outside training domain, default to Wilke-Chang
|
| 142 |
method = 'qrf/wc'
|
| 143 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, 'G2', return_DCs=False, N=N_sample)
|
| 144 |
+
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv, iterations=iterations)
|
| 145 |
else:
|
| 146 |
method = 'qrf'
|
| 147 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, CHRIS_category, return_DCs=False, N=N_sample, input_Ds=diff)
|
| 148 |
+
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv, iterations=iterations)
|
| 149 |
else:
|
| 150 |
## use categories
|
| 151 |
CHRIS_category = categories[pIndex]
|
|
|
|
| 155 |
CHRIS_flag = 'wc'
|
| 156 |
CHRIS_category = 'G2'
|
| 157 |
D_dist_noswell, D_dist_swell = get_D_dists_new(Swelling_wtfrac, T, Polymer_Tg, Solvent_Name, Solvent_MW, Solute_MW, Solute_Vabc, CHRIS_category, return_DCs=False, N=N_sample, input_Ds=None)
|
| 158 |
+
M0_pred = get_M_dist(D_dist_swell, M_expt, Polymer_Volume, Surface_Area, Solvent_Volume, Extraction_Time*3600, K_expt=K_expt, Qv=Qv, iterations=iterations)
|
| 159 |
if CHRIS_flag is None:
|
| 160 |
method = 'category'
|
| 161 |
else:
|
|
|
|
| 185 |
styles = [dict(selector="th", props=[("padding", "0 0.5em")]), dict(selector="td", props=[("padding", "0 0.5em")]),]
|
| 186 |
table = df_table.style.set_table_styles(styles).set_properties(subset=[r'\( D \) (cm<sup>2</sup>/s)', r'\( M/M_0 \)', f'\( M_0 \) ({units})', r'\( M_0 \) (% median)'], **{'text-align': 'right'}).set_table_attributes('border="2"').hide(axis='index').to_html(index=False, escape=False, justify='center')
|
| 187 |
|
| 188 |
+
tau = np.nanquantile(D_dist_swell,0.5) * (Extraction_Time*3600) / (Polymer_Volume/Surface_Area)**2 * iterations
|
| 189 |
|
| 190 |
M0_out = SigFigs(np.nanquantile(M0_pred,0.5),6)
|
| 191 |
tau_out = SigFigs(tau,6)
|
| 192 |
mass_units = SigFigs(mass_units,6)
|
| 193 |
|
| 194 |
return render_template('quantity_report.html', show_properties=show_properties, polymers=polymers, pIndex=pIndex,
|
| 195 |
+
area=Surface_Area, vol=Polymer_Volume, units=units, M=M_expt, M0=M0_out, time=Extraction_Time, iterations=iterations,
|
| 196 |
solventvol=Solvent_Volume, solventname=Solvent_Name, swelling=Swelling_percent, K=K_expt, T=T, tau=tau_out,
|
| 197 |
chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage, table=table,
|
| 198 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin, ceramic=is_ceramic, methods=[method,round(Polymer_Tg-273.15),Polymer_Density],
|
quantity_module/templates/quantity_index.html
CHANGED
|
@@ -152,6 +152,7 @@ please see the <a href="{{url_for('.static', filename='RST.html')}}"> RST inform
|
|
| 152 |
<tr><td colspan="2"><h4> Extraction parameters <button type=button class="Info_btn" data-toggle="modal" data-target="#ExtractionModal">ⓘ</button></td></tr> </h4>
|
| 153 |
<tr><th>Device surface area (cm<sup>2</sup>)</th><td> <input name="area" id="area" step="any" value="5.0" min="0.001" type="number" required></td></tr>
|
| 154 |
<tr><th>Duration (hours)</th><td> <input name="time" id="time" step="any" value="24.0" min="0.001" type="number" required></td></tr>
|
|
|
|
| 155 |
<tr><th>Temperature (°C)</th><td> <input name="T" id="T" step="any" value="50.0" min="25" max="75" type="number" required></td></tr>
|
| 156 |
<tr><th>Solvent</th>
|
| 157 |
<td> <select name="solventname" id="solventname">
|
|
@@ -177,6 +178,7 @@ please see the <a href="{{url_for('.static', filename='RST.html')}}"> RST inform
|
|
| 177 |
<div class="modal-body">
|
| 178 |
<p><em>Device surface area</em> - Enter the solvent-contacting surface area of the component being evaluated in square centimeters.
|
| 179 |
<p><em>Duration</em> - Enter the duration of the extraction experiment in hours.
|
|
|
|
| 180 |
<p><em>Temperature</em> - Enter the temperature of the extraction experiment in degrees Celsius.
|
| 181 |
<p><em>Solvent</em> - Select the extraction solvent from the list.
|
| 182 |
<p><em>Solvent volume</em> - Enter the volume of solvent used for extraction.
|
|
|
|
| 152 |
<tr><td colspan="2"><h4> Extraction parameters <button type=button class="Info_btn" data-toggle="modal" data-target="#ExtractionModal">ⓘ</button></td></tr> </h4>
|
| 153 |
<tr><th>Device surface area (cm<sup>2</sup>)</th><td> <input name="area" id="area" step="any" value="5.0" min="0.001" type="number" required></td></tr>
|
| 154 |
<tr><th>Duration (hours)</th><td> <input name="time" id="time" step="any" value="24.0" min="0.001" type="number" required></td></tr>
|
| 155 |
+
<tr><th>Iterations</th><td> <input name="iterations" id="iterations" step="1" value="1" min="1" type="number" required></td></tr>
|
| 156 |
<tr><th>Temperature (°C)</th><td> <input name="T" id="T" step="any" value="50.0" min="25" max="75" type="number" required></td></tr>
|
| 157 |
<tr><th>Solvent</th>
|
| 158 |
<td> <select name="solventname" id="solventname">
|
|
|
|
| 178 |
<div class="modal-body">
|
| 179 |
<p><em>Device surface area</em> - Enter the solvent-contacting surface area of the component being evaluated in square centimeters.
|
| 180 |
<p><em>Duration</em> - Enter the duration of the extraction experiment in hours.
|
| 181 |
+
<p><em>Iterations</em> - Enter the number of iterations (i.e., number of extraction cycles).
|
| 182 |
<p><em>Temperature</em> - Enter the temperature of the extraction experiment in degrees Celsius.
|
| 183 |
<p><em>Solvent</em> - Select the extraction solvent from the list.
|
| 184 |
<p><em>Solvent volume</em> - Enter the volume of solvent used for extraction.
|
quantity_module/templates/quantity_report.html
CHANGED
|
@@ -96,13 +96,14 @@ This estimate was derived using the solutions to the conservative plane sheet mo
|
|
| 96 |
\end{array} \right.
|
| 97 |
\]
|
| 98 |
|
| 99 |
-
where \( \tau= D t A^2 / V_p^2 \), \( A \) and \( V_p \) are the surface area and volume of the polymer matrix, respectively, \( D \) is an estimated distribution of the diffusion coefficient of the extractable within the swollen polymer matrix, and \( t \) is time. The quantity \( \Psi = V_s/V_p K \), where \( V_s \) is the solvent volume and \( K \) is the polymer-solvent partition coefficient for the extractable. \( q_n \) are the roots of \( \tan x + \Psi x = 0 \). \( M_0 \) is total quantity initially contained in the polymer.
|
| 100 |
</p>
|
| 101 |
|
| 102 |
<p>
|
| 103 |
Extracted amount \( M \) = {{M}} {{units}} <br>
|
| 104 |
Surface area \( A \) = {{area}} cm<sup>2</sup> <br>
|
| 105 |
Duration \( t \) = {{time}} h <br>
|
|
|
|
| 106 |
Temperature = {{T}} °C <br>
|
| 107 |
Solvent = {{solventname}} <br>
|
| 108 |
Solvent volume \( V_s \) = {{solventvol}} cm<sup>3</sup> <br>
|
|
@@ -120,7 +121,7 @@ Swelling = {{swelling}} wt% (used to estimate \( D \))<br>
|
|
| 120 |
<!-- <p>The progress of the extraction can be expressed through the dimensionless time \( \tau \). For your extraction, \( \tau \) = {{tau}}. Extractions with \( \tau \geq 0.1 \) result in more accurate estimates of the total quantity. When \( \tau \geq 1.0 \), the extracted amount may be used directly as the total quantity if the extraction is diffusion-controlled (i.e., \( \Psi \) is sufficiently large). For example, if \( \Psi > 10 \) and \( \tau \geq 1.0 \) less than 10% of the extractable will remain in the test article, consistent with exhaustive extraction. The total quantity from this tool may be used in the CHRIS exposure modules to estimate clinical exposure.</p> --!>
|
| 121 |
<h3> Notes </h3>
|
| 122 |
<ul>
|
| 123 |
-
<li>The progress of the extraction can be expressed through the dimensionless time \( \tau \). For your extraction, \( \tau \) = {{tau}}. Extractions with \( \tau \geq 0.1 \) result in more accurate estimates of the total quantity.</li>
|
| 124 |
<li>If the median \( M / M_0 > 0.9 \), the extraction can be considered exhaustive, and the extracted amount may be used directly as the total quantity.</li>
|
| 125 |
<li>The total quantity predicted with this tool can be used in the CHRIS exposure modules to estimate clinical exposure.</li>
|
| 126 |
</ul>
|
|
|
|
| 96 |
\end{array} \right.
|
| 97 |
\]
|
| 98 |
|
| 99 |
+
where \( \tau= D t A^2 / V_p^2 \), \( A \) and \( V_p \) are the surface area and volume of the polymer matrix, respectively, \( D \) is an estimated distribution of the diffusion coefficient of the extractable within the swollen polymer matrix, and \( t \) is time. The quantity \( \Psi = V_s/V_p K \), where \( V_s \) is the solvent volume and \( K \) is the polymer-solvent partition coefficient for the extractable. \( q_n \) are the roots of \( \tan x + \Psi x = 0 \). \( M_0 \) is total quantity initially contained in the polymer. The amount of swelling and number of iterations \( N \) are used to adjust \( \tau \) and \( \Psi \). Based on the input provided, the calculation used the following values:
|
| 100 |
</p>
|
| 101 |
|
| 102 |
<p>
|
| 103 |
Extracted amount \( M \) = {{M}} {{units}} <br>
|
| 104 |
Surface area \( A \) = {{area}} cm<sup>2</sup> <br>
|
| 105 |
Duration \( t \) = {{time}} h <br>
|
| 106 |
+
Iterations \( N \) = {{iterations}} <br>
|
| 107 |
Temperature = {{T}} °C <br>
|
| 108 |
Solvent = {{solventname}} <br>
|
| 109 |
Solvent volume \( V_s \) = {{solventvol}} cm<sup>3</sup> <br>
|
|
|
|
| 121 |
<!-- <p>The progress of the extraction can be expressed through the dimensionless time \( \tau \). For your extraction, \( \tau \) = {{tau}}. Extractions with \( \tau \geq 0.1 \) result in more accurate estimates of the total quantity. When \( \tau \geq 1.0 \), the extracted amount may be used directly as the total quantity if the extraction is diffusion-controlled (i.e., \( \Psi \) is sufficiently large). For example, if \( \Psi > 10 \) and \( \tau \geq 1.0 \) less than 10% of the extractable will remain in the test article, consistent with exhaustive extraction. The total quantity from this tool may be used in the CHRIS exposure modules to estimate clinical exposure.</p> --!>
|
| 122 |
<h3> Notes </h3>
|
| 123 |
<ul>
|
| 124 |
+
<li>The progress of the extraction can be expressed through the dimensionless time \( \tau \). For your extraction, the median \( \tau \) = {{tau}}. Extractions with \( \tau \geq 0.1 \) result in more accurate estimates of the total quantity.</li>
|
| 125 |
<li>If the median \( M / M_0 > 0.9 \), the extraction can be considered exhaustive, and the extracted amount may be used directly as the total quantity.</li>
|
| 126 |
<li>The total quantity predicted with this tool can be used in the CHRIS exposure modules to estimate clinical exposure.</li>
|
| 127 |
</ul>
|