Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
DrugReleaseSystemModel/implant_model.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1929 lines (1552 sloc)
84.9 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ============================================================================= | |
# Import Libraries | |
# ============================================================================= | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import math as ma | |
from scipy.sparse import SparseEfficiencyWarning | |
from scipy.sparse.linalg import spsolve | |
from scipy import sparse | |
from scipy.integrate import odeint | |
import time | |
from time import process_time | |
import matplotlib.tri as tri | |
import warnings | |
# ============================================================================= | |
# Set Model Conditions | |
# ============================================================================= | |
warnings.simplefilter('ignore', SparseEfficiencyWarning) | |
# Set Model to in Vitro or in Vivo | |
# in Vivo requires a defined rb (smallest radius), pH, and Diff. of Tissue | |
# in Vivo considering setting Swell = 0 to turn off swelling | |
Model = 'in Vitro' # 'in Vivo' | |
MW = 29000 | |
Lt = 23#23 | |
pH_bath = 7.8#7.4 | |
# in vivo parameters | |
rb_inVivo = 2.285/1000 | |
pH_bath_inVivo = 7.4 | |
Diff_Tissue_Drug_inVivo = 1e-10 #m^2/day | |
# Toggles to set degredation, swelling, and drug diff. coef. opt. | |
Degr = 1 | |
Opt = 0 | |
ke1 = 0.0039#42 | |
ke2 = 6e-5#0 | |
kr1 = 1* 6.65e-5#4453125e-05 | |
kr2 = 0.075#17 | |
if Degr == 0: ke1 = ke2 = kr1 = kr2 = 0 | |
Beta = 8.1 | |
# ============================================================================= | |
# Material Properties | |
# ============================================================================= | |
rho_p = 1340 | |
rho_w = 997 | |
rho_s = 1030#854 | |
rho_d = 1600 | |
Mw_w = 18 | |
Mw_s = 99.133 #89.13 #NMP | |
Mw_d = 332.31 | |
Mw_col = (90.08 + 76.05 - 1.008*2)*4 | |
Mw_cm = (90.08 + 76.05 - 1.008*2) | |
CH0 = 1000*(10**(-pH_bath)) | |
M0 = 72; | |
m = 4; | |
Col0 = 0 | |
Cm0 = 0 | |
Pmass_rat = 0.4 | |
Smass_rat = 0.6 | |
Vol = 5.01507e-8 | |
Mass = Vol/(0.39/rho_p + 0.6/rho_s) | |
#rb0 = (Vol/4*3/np.pi)**(1/3) | |
Polymass = 0.39 * Mass | |
Solmass = 0.6 * Mass | |
DrugTotal = 0.01 * Mass | |
Pmass_rat = 0.4 | |
Smass_rat = 0.6 | |
Vol = 5e-8#5.01507e-8 | |
Mass = Vol/(0.39/rho_p + 0.6/rho_s + 0.01/rho_d) | |
rb0 = (Vol/4*3/np.pi)**(1/3) | |
Polymass = 0.39 * Mass | |
Solmass = 0.6 * Mass | |
DrugTotal = 0.01 * Mass | |
fDrug = 0 | |
MWpolyunit = (72.068 + 90.1008)/2 | |
MWcol = (MWpolyunit)*4 | |
mm = MW/(MWpolyunit) | |
SwellM = np.array([ | |
[0,1/3,1,2,3,4,5,6,7,8,9,10] | |
,[1.14,1.113839116,1.125772077,1.319071372,1.402670617,1.456901822,1.519157263,1.550285064,1.530332265,1.531844287,1.538057059,1.547226309] | |
,[1.03719,1.087972141,1.094369578,1.157885346,1.205755558,1.229106885,1.273335458,1.321601701,1.343241483,1.470949449,1.470949449,1.470949449] | |
,[0.96715,0.970342272,0.988546752,1.040669341,1.075871936,1.127231584,1.166579349,1.218221573,1.232711366,1.317084591,1.275656165,0.997112764] | |
,[1.0,1.123140564,1.126275839,1.209823608,1.27311905,1.331267788,1.36737552,1.427182005,1.482569932,1.531785663,1.519902324,1.4893521] | |
,[1.0,0.981655651,0.98410626,0.972763299,1.008192926,1.037573234,1.042276866,1.092698255,1.106364359,1.182551823,1.412915932,1.299325116] | |
,[1.0,1.040536374,1.051502505,1.069818144,1.094057022,1.134256645,1.135462148,1.206042205,1.197495562,1.22378213,1.303643527,1.327323056] | |
]) | |
expp = np.array([-13.9051,0.168151,0.0289776]) | |
def Diff(Mw_drug,Mw_poly): | |
return np.exp(expp[0] * Mw_drug**expp[1] * Mw_poly**expp[2]) | |
def StokeEin(Mw,rho): | |
Rad = ((3*Mw)/(4*np.pi*(6.022e23)*rho))**(1/3) | |
return (8.314*300)/((6e23)*3*np.pi*(1e-3)*Rad) | |
Dpolymer_H2O =(3e-10)*(24*3600) | |
Dpolymer_Sol = Diff(Mw_s,MW/1000) *60*60*24 | |
Dpolymer_Col = Diff(Mw_col,MW/1000) *60*60*24 | |
Dpolymer_Cm = Diff(Mw_cm,MW/1000) *60*60*24 | |
Dpolymer_Drug = Diff(Mw_d,MW/1000) *(24*3600) | |
if Opt == 1: | |
if MW == 53000: Dpolymer_Drug = (2.5e-18) *(24*3600) | |
if MW == 29000: Dpolymer_Drug = (3.5e-18) *(24*3600) | |
if MW == 15000: Dpolymer_Drug = (16e-18) *(24*3600) | |
Dpore_H2O = (2e-9)*(24*3600) | |
Dpore_Sol = StokeEin(Mw_s,rho_s) *(24*60*60) | |
Dpore_Col = StokeEin(Mw_col,rho_p) *(24*3600) | |
Dpore_Cm = StokeEin(Mw_cm,rho_p) *(24*3600) | |
Dpore_Drug = StokeEin(Mw_d,rho_d) *(24*3600) | |
Dpolymer_CH = Dpolymer_H2O | |
Dpore_CH = Dpore_H2O | |
Dpore_Drug_Tissue = Dpore_Drug | |
if Model == 'in Vitro': | |
if MW == 53000: | |
Si = 3 | |
Ti = 5 | |
rp = 0.019031/1000/2 | |
rs = 0.390/1000 | |
thick = 0.02/1000 | |
rps = 0.1*rs | |
rb = SwellM[Si,0]* 2.285/1000 | |
rb0 = SwellM[Si,0]* 2.285/1000 | |
Data = np.array([[0,0.000694444,0.020833333,0.041666667,0.083333333,0.166666667,0.25,0.333333333,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,21] | |
,[0,1.119142804,9.262339789,11.98741229,15.53883212,20.24333537,22.5071373,24.45746377,30.61285371,31.01585248,32.50954267,33.77538118,34.88172184,35.29867581,36.50942933,38.51772902,40.07357018,41.98452285,45.2975403,47.94281328,51.54607499,55.08537035,63.08351632,67.7997305,70.4767212] | |
,[0,0.133326478,0.967230761,0.93595068,1.083056477,1.95273396,2.077156874,1.555949026,2.307256901,3.807566178,1.811207162,1.663381142,1.482157325,1.420050663,0.9641997,1.719178327,1.960206207,2.456818305,3.308653552,5.374767878,5.308919469,6.23759649,6.897256065,6.502648253, 5.622977768]]) | |
DataMn = np.array([[1,3,7,10,14,17,21] | |
,[1,1.007763134,0.640007222,0.624480953,0.355569597,0.312908467,0.309044954] | |
,[0.017810236,0.144697465,0.060462983,0.053449922,0.010278687,0.060640608,0.150238972]]) | |
DataML = np.array([[1,3,5,7,8,10,12,14,16,18,21] | |
,[46.8134715,47.20207254,46.94300518,47.4611399,41.24352332,40.33678756,34.89637306,35.02590674,32.8238342,27.12435233,26.60621762] | |
,[1.683937824,1.295336788,1.943005181,1.813471503,2.720207254,1.424870466,1.554404145,1.03626943,1.424870466,1.813471503,2.461139896]]) | |
elif MW == 29000: | |
Si = 2 | |
Ti = 1 | |
rp = 0.010/1000/2 | |
rs =0.390/1000 | |
rps = 0.1*rs | |
thick = 0.01/1000 | |
rb = SwellM[Si,0]* 2.285/1000 | |
rb0 = SwellM[Si,0]* 2.285/1000 | |
Data = np.array([[0,0.000694444,0.020833333,0.041666667,0.083333333,0.166666667,0.25,0.333333333,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,21] | |
,[0,0.802561858,7.226856607,8.440377965,9.989583769,12.85666748,14.50869886,16.13060466,22.67370573,26.16872192,29.4456466,32.51134381,34.71584224,37.06137629,39.60130539,44.04048026,47.83582988,53.32927363,57.31533667,60.66826522,66.10551599,69.33759084,76.24546257,76.85323346,75.03531962] | |
,[0,0.455660094,0.853294764,0.994756217,1.2508843,1.429279326,1.421216848,1.559346725,2.864824775,1.550817231,1.345094475,0.716603102,1.185592383,1.695622715,2.514804205,4.716818952,5.798447622,6.724925016,7.176424076,9.078293132,7.139356076,6.451263526,4.1746822,6.425503411,6.870846248]]) | |
DataMn = np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]) | |
DataML = np.array([[1,3,5,7,8,10,12,14,16,18,21] | |
,[47.79220779,44.93506494,41.55844156,42.72727273,37.66233766,36.62337662,35.97402597,32.85714286,28.05194805,25.32467532,22.98701299] | |
,[0.909090909,1.558441558,1.948051948,2.857142857,2.727272727,1.558441558,2.337662338,1.038961039,0.909090909,0.779220779,2.467532468]]) | |
elif MW == 15000: | |
Si = 1 | |
Ti = 1 | |
rp = 0.1/1000/2 | |
rs = 0.147/1000 | |
rps = 0 | |
thick = 0.04/1000 | |
rb = SwellM[Si,0]* 2.285/1000 | |
rb0 = SwellM[Si,0]* 2.285/1000 | |
Data = np.array([[0,0.000694444,0.020833333,0.041666667,0.083333333,0.166666667,0.25,0.333333333,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,21] | |
,[0,0.462476336,5.123648484,7.433042562,10.02455512,13.51578389,15.74610437,17.48820752,24.79401366,31.76581687,36.68680098,43.08394241,48.22577652,53.4191935,58.2543482,62.43889017,66.95240196,73.19940025,78.12550524,81.06608078,83.23052045,83.60509647,81.03100642,79.59390574,79.76481325] | |
,[0,0.078657889,0.663636899,1.115984807,1.546849241,1.82003899,1.988922704,1.678892329,1.724597036,2.615812986,1.709123185,2.75052848,3.110626217,4.041749624,3.637894973,3.511931844,3.287644934,4.29795183,4.180872898,2.562052363,3.368844522,3.122991375,4.130334619,4.815340276,4.380351231]]) | |
DataMn = np.array([[1,3,7,10,14,17,21] | |
,[1,0.751796346,0.461691644,0.414268117,0.351221515,0.304342024,0.318723055] | |
,[0.054732257,0.06828421,0.004970172,0.007388712,0.033398182,0.016940949,0.090968699]]) | |
DataML = np.array([[1,3,5,7,8,10,12,14,16,18,21] | |
,[45.51813472,40.20725389,38.13471503,33.86010363,33.47150259,29.19689119,25.69948187,21.29533679,19.22279793,15.85492228,13.52331606] | |
,[2.202072539,1.683937824,2.07253886,1.683937824,1.813471503,0.647668394,2.720207254,1.813471503,0.777202073,0.647668394,0.777202073]]) | |
elif MW == 22000: | |
Si = 4 | |
Ti = 3 | |
rp = 0.1/1000/2 | |
rb = 2.21/1000 | |
rs = 0.285/1000 | |
thick = 0.04/1000 | |
rps = 0 | |
rb = 2.567/1000 | |
rb0 = 2.567/1000 | |
elif Model == 'in Vivo': | |
Si = 1 | |
Ti = 1 | |
rp = 0.1/1000/2 | |
rs = 0.147/1000 | |
rps = 0 | |
thick = 0.04/1000 | |
rb = SwellM[Si,0]* rb_inVivo | |
rb0 = rb_inVivo | |
pH_bath = pH_bath_inVivo | |
Dpore_Drug_Tissue = Diff_Tissue_Drug_inVivo | |
nx = 201 | |
nttt = 21 | |
ntt = 101 | |
Nt = 2 | |
Lx = 6/2/1000 | |
dx = Lx/nx | |
dx0 = Lx/nx | |
dt = dx**2/(1e-8) | |
Nt = 2 | |
LT = Lt | |
TitraM = np.array([ | |
[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] #%WaterContent | |
,[0.017202142,0.052222222,0.59832664,0.691097724,0.921659973,0.974431058,1.147215529,1.044431058,0.901659973,0.958875502] | |
,[0.005612,0.016823,0.08972,0.120561,0.072897,0.075708,0.145802,0.131775,0.120561,0.092523] | |
,[0.003262,0.215883,0.871488,1.028035,1.013547,1.032717,1.037855,1.014956,0.997656,1.042054] #3A | |
,[0.011212,0.056068,0.039252,0.056075,0.028038,0.028037,0.016822,0.025234,0.014018,0.019626] | |
,[0.014469,0.580369,0.882703,1.061687,1.033173,0.976636,0.987381,0.998126,0.989252,0.941112] #4A | |
,[0.011215,0.098131,0.047663,0.044867,0.019626,0.042057,0,0.036441,0.019626,0.019626] | |
,[0.008876,0.642051,1.011675,0.927108,1.094848,1.021481,0.964958,0.972892,1.025701,1.005605] #4.5A | |
,[0.005607,0.064486,0.095327,0.014019,0.058871,0.042049,0.019626,0.011215,0.030841,0.056075] | |
,[0.01168,0.54392,0.9556,0.991586,1.047192,1.052336,1.00421,0.992519,1.042523,1.033642] #7E | |
,[0.011215,0.064485,0.061682,0.022429,0.011215,0.044866,0.030841,0.100935,0.070093,0.036448]]) | |
Titr_fits = np.zeros((3,9)) | |
Titr_fits = np.array([[0,8,0,33,0,50,0,60,0,116], | |
[0, 0.17923357,0,0.140819,0,0.113849,0,0.118412,0,0.117123], | |
[0,4.85877588,0,8.15931,0,5.52442,0,43.8569,0,7.25775]]) | |
TitraMV = np.copy(TitraM) | |
TitraMV[0,:] = 0.6*TitraM[0,:] | |
WperV = np.linspace(0,0.6,1000) | |
TitraFV = np.zeros(len(WperV)) | |
TitraFV[:] = 1 + (0-1)/(1+np.power(WperV[:]/Titr_fits[1,Ti],Titr_fits[2,Ti])) | |
def TFunc(phi_W): | |
return 1 + (0-1)/(1+np.power(phi_W[:]/Titr_fits[1,Ti],Titr_fits[2,Ti])) | |
def TFunc8_33(phi_W,MW): | |
return (abs(33-MW/1000)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,1],Titr_fits[2,1]))) | |
+ abs(8-MW/1000)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,3],Titr_fits[2,3])))) | |
def TFunc33_50(phi_W,MW): | |
return (abs(50-MW/1000)/(50-33) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,3],Titr_fits[2,3]))) | |
+ abs(33-MW/1000)/(50-33) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,5],Titr_fits[2,5])))) | |
def TFunc50_60(phi_W,MW): | |
return (abs(60-MW/1000)/(60-50) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,5],Titr_fits[2,5]))) | |
+ abs(50-MW/1000)/(60-50) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,7],Titr_fits[2,7])))) | |
def TFunc15(phi_W): | |
return (abs(33-15)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,1],Titr_fits[2,1]))) | |
+ abs(8-15)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,3],Titr_fits[2,3])))) | |
def TFunc29(phi_W): | |
return (abs(33-29)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,1],Titr_fits[2,1]))) | |
+ abs(8-29)/(33-8) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,3],Titr_fits[2,3])))) | |
def TFunc53(phi_W): | |
return (abs(60-52)/(60-50) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,5],Titr_fits[2,5]))) | |
+ abs(50-52)/(60-50) * (1+(0-1)/(1+np.power(phi_W[:]/Titr_fits[1,7],Titr_fits[2,7])))) | |
def PlotW(): | |
plt.figure(14) | |
plt.plot(TitraM[0,:],TitraM[Ti,:],'ok',label='Experimental Data') | |
plt.plot(WperV/0.6,TFunc(WperV)) | |
Xext_1D = np.zeros((nx,Nt)) | |
Xc_1D = np.zeros((nx,Nt)) | |
Vc = 4.19e-24 | |
p = 1e-2 | |
etaA = 6.022e23 | |
lam = 1 | |
Xmax = 0.655 | |
Xc0 = 0 | |
#Estimating on and off rates | |
# ~10^7 M^-1s^-1 -- 10^8 M^-1s^-1 for a small molecule colliding with a protein | |
# ~10^6 M^-1s^-1 -- 10^7 M^-1s^-1 for protein-protein | |
# Kd * kon == koff | |
# 10^-6.4 * 10^7 = koff | |
# kon =10^7 | |
kon = 200 #1e7 # can be increased back to 1e7 | |
Kdpol = (1.4*10**-4)*(60*60*24) | |
Kdol = (1.4*10**-4)*(60*60*24) | |
Kdm = (1.4*10**-4)*(60*60*24) | |
Kddrug = (2.6*10**-4)*(60*60*24) | |
Kdw = (1*10**-14)*(60*60*24) | |
kondrug = kon | |
koffdrug = kondrug*Kddrug | |
konpol = kon | |
koffpol = konpol*Kdpol | |
konol = kon | |
koffol = konol*Kdol | |
konm = kon | |
koffm = konm*Kdm | |
konw = kon | |
koffw = konw*Kdw | |
Xcend_1D = np.zeros((nx,Nt)); Maskfit_1D = np.zeros((nx,Nt)); invMaskfit_1D = np.zeros((nx,Nt)) | |
X = np.zeros((nx));Y = np.zeros((nx));CH_1D = np.zeros((nx,Nt));CH2O_1D = np.zeros((nx,Nt)) | |
COH_1D = np.zeros((nx,Nt));Rs_1D = np.zeros((nx,Nt));Rrs_1D = np.zeros((nx,Nt));Res_1D = np.zeros((nx,Nt)) | |
Col_1D = np.zeros((nx,Nt));Colcoo_1D = np.zeros((nx,Nt));Cm_1D = np.zeros((nx,Nt));Cmcoo_1D = np.zeros((nx,Nt)); | |
Cpol_1D = np.zeros((nx,Nt));Cpolcoo_1D = np.zeros((nx,Nt));DDrug_1D = np.zeros((nx,Nt)); | |
DCH_1D = np.zeros((nx,Nt));DCol_1D = np.zeros((nx,Nt));DCm_1D = np.zeros((nx,Nt)); | |
Drug_1D = np.zeros((nx,Nt));Drugcoo_1D = np.zeros((nx,Nt)) | |
pinchCol_1D = np.zeros((nx,ntt));pinchColcoo_1D = np.zeros((nx,ntt));pinchCm_1D = np.zeros((nx,ntt)) | |
pinchCmcoo_1D = np.zeros((nx,ntt));pinchCpol_1D = np.zeros((nx,ntt));pinchCpolcoo_1D = np.zeros((nx,ntt)) | |
pinchDrug_1D = np.zeros((nx,ntt));pinchDrugcoo_1D = np.zeros((nx,ntt));pinchCH2O_1D = np.zeros((nx,ntt)) | |
pinchCOH_1D = np.zeros((nx,ntt));pinchCH_1D = np.zeros((nx,ntt)) | |
DrugRelease_1D = np.zeros((nx,Nt));VporeDrug_1D = np.zeros((nx,Nt));VporeCol_1D = np.zeros((nx,Nt)); | |
VporeCm_1D = np.zeros((nx,Nt));Vpore_1D = np.zeros((nx,Nt));Mn_1D = np.zeros((nx,Nt)); | |
Ce_1D = np.zeros((nx,Nt));Cend_1D = np.zeros((nx,Nt));Rol_1D = np.zeros((nx,Nt)); | |
Rm_1D = np.zeros((nx,Nt));ProfileDrug = np.zeros(Nt);ProfileXc = np.zeros(Nt);ProfileMn = np.zeros(Nt); | |
Mask_1D = np.ones(nx);invMask_1D = np.ones(nx);tisMask_1D = np.ones(nx);invtisMask_1D = np.ones(nx) | |
CH2O_1D = np.zeros((nx,Nt));DCH2O_1D = np.zeros((nx,Nt));CSol_1D = np.zeros((nx,Nt)) | |
DCSol_1D = np.zeros((nx,Nt));CeSwell_1D = np.ones(Nt);TimeT = np.zeros(Nt) | |
DegWeight = np.zeros((nx,Nt));DegWeightAcid = np.zeros(nx);DegWeightSciss = np.zeros(nx) | |
x = np.linspace(0,Lx,nx) | |
dX = np.zeros(Nt) | |
dX[:] = dx0 #*SwellM[Si,0] | |
phi_SM = np.zeros((nx,Nt)) | |
phi_PM = np.zeros((nx,Nt)) | |
phi_WM = np.zeros((nx,Nt)) | |
Rb = np.zeros(Nt) | |
dX = np.zeros(Nt) | |
Rb[:] = rb0 *SwellM[Si,0] | |
dX[:] = dx | |
TimeR = np.zeros(Nt) | |
TimeT = np.zeros(Nt) | |
Variables = ( | |
Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D,Maskfit_1D,invMaskfit_1D, | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cmcoo_1D,Cm_1D, | |
Ce_1D,Cend_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D, | |
Res_1D,Rrs_1D,Xc_1D,Xext_1D,Xcend_1D,Rol_1D,Rm_1D, | |
Mn_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,CSol_1D,dt,DegWeightSciss,DegWeightAcid,DegWeight,rb,dx,rb0,CeSwell_1D, | |
phi_SM,phi_PM,phi_WM,Rb,dX,TimeR,TimeT,DrugRelease_1D) | |
def ImplantModel(Variables): | |
# ============================================================================= | |
# Initialize Variables | |
# ============================================================================= | |
(Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D,Maskfit_1D,invMaskfit_1D, | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cmcoo_1D,Cm_1D, | |
Ce_1D,Cend_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D, | |
Res_1D,Rrs_1D,Xc_1D,Xext_1D,Xcend_1D,Rol_1D,Rm_1D, | |
Mn_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,CSol_1D,dt,DegWeightSciss,DegWeightAcid,DegWeight,rb,dx,rb0,CeSwell_1D, | |
phi_SM,phi_PM,phi_WM,Rb,dX,TimeR,TimeT,DrugRelease_1D) = Variables | |
# ============================================================================= | |
# Create Mask weighting function | |
# ============================================================================= | |
(Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D | |
) = Maskfunc( | |
rb,rp,rs,x,Lx,Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D,dx) | |
# ============================================================================= | |
# Initialize Functions | |
# ============================================================================= | |
(Drug_1D,Cpol_1D,Col_1D,Cm_1D,CH_1D,DDrug_1D,DCol_1D,DCm_1D,fDrug,Maskfit_1D,invMaskfit_1D,Cpol0,Ce0,CSol_1D,CH2O_1D,DCSol_1D,DCH2O_1D,Sol_conc,Ce0, phi_SM,phi_PM,phi_WM | |
)= Initialize( | |
Mask_1D,invMask_1D,Maskfit_1D,invMaskfit_1D,invtisMask_1D,tisMask_1D,CSol_1D,CH2O_1D,rb,dx, phi_SM,phi_PM,phi_WM) | |
A = np.zeros((nx,nx)) | |
TimeT_mem = np.copy(TimeT) | |
TimeR_mem = np.copy(TimeR) | |
Ce_1D_mem = np.copy(Ce_1D) | |
Cend_1D_mem = np.copy(Cend_1D) | |
Res_1D_mem = np.copy(Res_1D) | |
Rrs_1D_mem = np.copy(Rrs_1D) | |
Rol_1D_mem = np.copy(Rol_1D) | |
Rm_1D_mem = np.copy(Rm_1D) | |
Cm_1D_mem = np.copy(Cm_1D) | |
Cmcoo_1D_mem = np.copy(Cmcoo_1D) | |
Col_1D_mem = np.copy(Col_1D) | |
Colcoo_1D_mem = np.copy(Colcoo_1D) | |
Cpol_1D_mem = np.copy(Cpol_1D) | |
Cpolcoo_1D_mem = np.copy(Cpolcoo_1D) | |
Drug_1D_mem = np.copy(Drug_1D) | |
Drugcoo_1D_mem = np.copy(Drugcoo_1D) | |
CH_1D_mem = np.copy(CH_1D) | |
DDrug_1D_mem = np.copy(DDrug_1D) | |
DCSol_1D_mem = np.copy(DCSol_1D) | |
DCm_1D_mem = np.copy(DCm_1D) | |
DCol_1D_mem = np.copy(DCol_1D) | |
DCH2O_1D_mem = np.copy(DCH2O_1D) | |
DCH_1D_mem = np.copy(DCH_1D) | |
VporeCol_1D_mem = np.copy(VporeCol_1D) | |
VporeDrug_1D_mem = np.copy(VporeDrug_1D) | |
Vpore_1D_mem = np.copy(Vpore_1D) | |
Xc_1D_mem = np.copy(Xc_1D) | |
Xcend_1D_mem = np.copy(Xcend_1D) | |
Xext_1D_mem = np.copy(Xext_1D) | |
Maskfit_1D_mem = np.copy(Maskfit_1D) | |
invMaskfit_1D_mem = np.copy(invMaskfit_1D) | |
CH2O_1D_mem = np.copy(CH2O_1D) | |
COH_1D_mem = np.copy(COH_1D) | |
CSol_1D_mem = np.copy(CSol_1D) | |
DegWeight_mem = np.copy(DegWeight) | |
Mn_1D_mem = np.copy(Mn_1D) | |
phi_SM_mem = np.copy(phi_SM) | |
phi_WM_mem = np.copy(phi_WM) | |
phi_PM_mem = np.copy(phi_PM) | |
DrugRelease_1D_mem = np.copy(DrugRelease_1D) | |
# ============================================================================= | |
# ============================================================================= | |
# ============================================================================= | |
# # # Begin Time Iteration | |
# ============================================================================= | |
# # ============================================================================= | |
# ============================================================================= | |
skp = 1 | |
t = 0; n = 1; nstart = n#int(ntdeg/skpe) | |
cc = 0; c = 0 | |
DrugStart = np.sum(invtisMask_1D*(Drug_1D_mem[:,-1]+Drugcoo_1D_mem[:,-1])) | |
rb = SwellM[Si,cc] * rb0 | |
while TimeT[t] <= (Lt ): | |
drugleft = np.sum(invtisMask_1D*(Drug_1D[:,t]+Drugcoo_1D[:,t]))/DrugStart | |
if TimeT[t] > c: | |
print(f'Day = {int(TimeT[t]):<4} \tDrugLeft = {ma.trunc(drugleft*1000)/1000:0.3f}') | |
#print('Day =',int(TimeT[t]),'\tDrug Left =',ma.trunc(drugleft*1000)/1000) | |
c += 1 | |
dt = 0.5* dx**2 / (np.sum(Mask_1D*DDrug_1D[:,t])/np.sum(Mask_1D)) | |
if dt <= 1e-3: dt = 1e-3 | |
# if drugleft < 0.1: dt = 0.1 | |
count = n%skp | |
if count == 0: | |
TimeR_mem = np.append(TimeR_mem,TimeR[t+1]) | |
TimeT_mem = np.append(TimeT_mem,TimeT[t+1]) | |
Ce_1D_mem = np.append(Ce_1D_mem,Ce_1D[:,:t+1],axis=1) | |
Cend_1D_mem = np.append(Cend_1D_mem,Cend_1D[:,:t+1],axis=1) | |
Res_1D_mem = np.append(Res_1D_mem,Res_1D[:,:t+1],axis=1) | |
Rrs_1D_mem = np.append(Rrs_1D_mem,Rrs_1D[:,:t+1],axis=1) | |
Rol_1D_mem = np.append(Rol_1D_mem,Rol_1D[:,:t+1],axis=1) | |
Rm_1D_mem = np.append(Rm_1D_mem,Rm_1D[:,:t+1],axis=1) | |
Cm_1D_mem = np.append(Cm_1D_mem,Cm_1D[:,:t+1],axis=1) | |
Cmcoo_1D_mem = np.append(Cmcoo_1D_mem,Cmcoo_1D[:,:t+1],axis=1) | |
Col_1D_mem = np.append(Col_1D_mem,Col_1D[:,:t+1],axis=1) | |
Colcoo_1D_mem = np.append(Colcoo_1D_mem,Colcoo_1D[:,:t+1],axis=1) | |
Cpol_1D_mem = np.append(Cpol_1D_mem,Cpol_1D[:,:t+1],axis=1) | |
Cpolcoo_1D_mem = np.append(Cpolcoo_1D_mem,Cpolcoo_1D[:,:t+1],axis=1) | |
Drug_1D_mem = np.append(Drug_1D_mem,Drug_1D[:,:t+1],axis=1) | |
Drugcoo_1D_mem = np.append(Drugcoo_1D_mem,Drugcoo_1D[:,:t+1],axis=1) | |
CH_1D_mem = np.append(CH_1D_mem,CH_1D[:,:t+1],axis=1) | |
DDrug_1D_mem = np.append(DDrug_1D_mem,DDrug_1D[:,:t+1],axis=1) | |
DCSol_1D_mem = np.append(DCSol_1D_mem,DCSol_1D[:,:t+1],axis=1) | |
DCm_1D_mem = np.append(DCm_1D_mem,DCm_1D[:,:t+1],axis=1) | |
DCol_1D_mem = np.append(DCol_1D_mem,DCol_1D[:,:t+1],axis=1) | |
DCH2O_1D_mem = np.append(DCH2O_1D_mem,DCH2O_1D[:,:t+1],axis=1) | |
DCH_1D_mem = np.append(DCH_1D_mem,DCH_1D[:,:t+1],axis=1) | |
VporeCol_1D_mem = np.append(VporeCol_1D_mem,VporeCol_1D[:,:t+1],axis=1) | |
VporeDrug_1D_mem = np.append(VporeDrug_1D_mem,VporeDrug_1D[:,:t+1],axis=1) | |
Vpore_1D_mem = np.append(Vpore_1D_mem,Vpore_1D[:,:t+1],axis=1) | |
Xc_1D_mem = np.append(Xc_1D_mem,Xc_1D[:,:t+1],axis=1) | |
Xcend_1D_mem = np.append(Xcend_1D_mem,Xcend_1D[:,:t+1],axis=1) | |
Xext_1D_mem = np.append(Xext_1D_mem,Xext_1D[:,:t+1],axis=1) | |
Maskfit_1D_mem = np.append(Maskfit_1D_mem,Maskfit_1D[:,:t+1],axis=1) | |
invMaskfit_1D_mem = np.append(invMaskfit_1D_mem,invMaskfit_1D[:,:t+1],axis=1) | |
CH2O_1D_mem = np.append(CH2O_1D_mem,CH2O_1D[:,:t+1],axis=1) | |
COH_1D_mem = np.append(COH_1D_mem,COH_1D[:,:t+1],axis=1) | |
CSol_1D_mem = np.append(CSol_1D_mem,CSol_1D[:,:t+1],axis=1) | |
DegWeight_mem = np.append(DegWeight_mem,DegWeight[:,:t+1],axis=1) | |
Mn_1D_mem = np.append(Mn_1D_mem,Mn_1D[:,:t+1],axis=1) | |
phi_SM_mem = np.append(phi_SM_mem,phi_SM[:,:t+1],axis=1) | |
phi_WM_mem = np.append(phi_WM_mem,phi_WM[:,:t+1],axis=1) | |
phi_PM_mem = np.append(phi_PM_mem,phi_PM[:,:t+1],axis=1) | |
DrugRelease_1D_mem = np.append(DrugRelease_1D_mem,DrugRelease_1D[:,:t+1],axis=1) | |
# ============================================================================= | |
# What was old will be new again | |
# ============================================================================= | |
TimeT[t] = TimeT[t+1]; TimeT[t+1] = 0 | |
TimeR[t] = TimeR[t+1]; TimeR[t+1] = 0 | |
Ce_1D[:,t] = Ce_1D[:,t+1]; Ce_1D[:,t+1] = np.zeros(nx) | |
Cend_1D[:,t] = Cend_1D[:,t+1]; Cend_1D[:,t+1] = np.zeros(nx) | |
Res_1D[:,t] = Res_1D[:,t+1]; Res_1D[:,t+1] = np.zeros(nx) | |
Rrs_1D[:,t] = Rrs_1D[:,t+1]; Rrs_1D[:,t+1] = np.zeros(nx) | |
Rol_1D[:,t] = Rol_1D[:,t+1]; Rol_1D[:,t+1] = np.zeros(nx) | |
Rm_1D[:,t] = Rm_1D[:,t+1]; Rm_1D[:,t+1] = np.zeros(nx) | |
Cm_1D[:,t] = Cm_1D[:,t+1]; Cm_1D[:,t+1] = np.zeros(nx) | |
Cmcoo_1D[:,t] = Cmcoo_1D[:,t+1]; Cmcoo_1D[:,t+1] = np.zeros(nx) | |
Col_1D[:,t] = Col_1D[:,t+1]; Col_1D[:,t+1] = np.zeros(nx) | |
Colcoo_1D[:,t] = Colcoo_1D[:,t+1]; Colcoo_1D[:,t+1] = np.zeros(nx) | |
Cpol_1D[:,t] = Cpol_1D[:,t+1]; Cpol_1D[:,t+1] = np.zeros(nx) | |
Cpolcoo_1D[:,t] = Cpolcoo_1D[:,t+1]; Cpolcoo_1D[:,t+1] = np.zeros(nx) | |
Drug_1D[:,t] = Drug_1D[:,t+1]; Drug_1D[:,t+1] = np.zeros(nx) | |
Drugcoo_1D[:,t] = Drugcoo_1D[:,t+1]; Drugcoo_1D[:,t+1] = np.zeros(nx) | |
CH_1D[:,t] = CH_1D[:,t+1]; CH_1D[:,t+1] = np.zeros(nx) | |
DDrug_1D[:,t] = DDrug_1D[:,t+1]; DDrug_1D[:,t+1] = np.zeros(nx) | |
DCSol_1D[:,t] = DCSol_1D[:,t+1]; DCSol_1D[:,t+1] = np.zeros(nx) | |
DCm_1D[:,t] = DCm_1D[:,t+1]; DCm_1D[:,t+1] = np.zeros(nx) | |
DCol_1D[:,t] = DCol_1D[:,t+1]; DCol_1D[:,t+1] = np.zeros(nx) | |
DCH2O_1D[:,t] = DCH2O_1D[:,t+1]; DCH2O_1D[:,t+1] = np.zeros(nx) | |
DCH_1D[:,t] = DCH_1D[:,t+1]; DCH_1D[:,t+1] = np.zeros(nx) | |
VporeCol_1D[:,t] = VporeCol_1D[:,t+1]; VporeCol_1D[:,t+1] = np.zeros(nx) | |
VporeDrug_1D[:,t] = VporeDrug_1D[:,t+1]; VporeDrug_1D[:,t+1] = np.zeros(nx) | |
Vpore_1D[:,t] = Vpore_1D[:,t+1]; Vpore_1D[:,t+1] = np.zeros(nx) | |
Xc_1D[:,t] = Xc_1D[:,t+1]; Xc_1D[:,t+1] = np.zeros(nx) | |
Xcend_1D[:,t] = Xcend_1D[:,t+1]; Xcend_1D[:,t+1] = np.zeros(nx) | |
Xext_1D[:,t] = Xext_1D[:,t+1]; Xext_1D[:,t+1] = np.zeros(nx) | |
Maskfit_1D[:,t] = Maskfit_1D[:,t+1]; Maskfit_1D[:,t+1] = np.zeros(nx) | |
invMaskfit_1D[:,t] = invMaskfit_1D[:,t+1]; invMaskfit_1D[:,t+1] = np.zeros(nx) | |
CH2O_1D[:,t] = CH2O_1D[:,t+1]; CH2O_1D[:,t+1] = np.zeros(nx) | |
COH_1D[:,t] = COH_1D[:,t+1]; COH_1D[:,t+1] = np.zeros(nx) | |
CSol_1D[:,t] = CSol_1D[:,t+1]; CSol_1D[:,t+1] = np.zeros(nx) | |
DegWeight[:,t] = DegWeight[:,t+1]; DegWeight[:,t+1] = np.zeros(nx) | |
Mn_1D[:,t] = Mn_1D[:,t+1]; Mn_1D[:,t+1] = np.zeros(nx) | |
phi_SM[:,t] = phi_SM[:,t+1]; phi_SM[:,t+1] = np.zeros(nx) | |
phi_WM[:,t] = phi_WM[:,t+1]; phi_WM[:,t+1] = np.zeros(nx) | |
phi_PM[:,t] = phi_PM[:,t+1]; phi_PM[:,t+1] = np.zeros(nx) | |
DrugRelease_1D[:,t] = DrugRelease_1D[:,t+1]; DrugRelease_1D[:,t+1] = np.zeros(nx) | |
CeSwell_1D[t] = CeSwell_1D[t+1]; CeSwell_1D[t+1] = 0 | |
Rb[t] = Rb[t+1]; Rb[t+1] = 0 | |
dX[t] = dX[t+1]; dX[t+1] = 0 | |
TimeT[t+1] = TimeT[t] + dt | |
TimeR[t+1] = TimeR[t] + dt | |
CeSwell_1D[t+1] = CeSwell_1D[t] | |
if (TimeT[t+1]) <= SwellM[0,1]: | |
rb = SwellM[Si,0] * rb0 | |
CeSwell_1D[t+1] = ( (4/3*np.pi)* ((rb**3) - (rb - rs)**3) )/( (4/3*np.pi)* ((rb0**3) - (rb0-rs)**3) ) | |
if (TimeT[t+1]) >= SwellM[0,cc+1]: | |
if cc < 10: cc += 1 | |
rb = SwellM[Si,cc] * rb0 | |
CeSwell_1D[t+1] = ( (4/3*np.pi)*((rb**3) - (rb - rs)**3) ) /( (4/3*np.pi)*((rb0**3) - (rb0-rs)**3) ) | |
Rb[t] = rb | |
dX[t] = dx0 *(rb/rb0) | |
(Maskfit_1D,invMaskfit_1D,CSol_1D,CH2O_1D,COH_1D,DCSol_1D,DCH2O_1D,phi_SM,phi_PM,phi_WM | |
) = Solidification( | |
Maskfit_1D,invMaskfit_1D,CSol_1D,CH2O_1D,COH_1D,DCSol_1D,DCH2O_1D,Sol_conc,t,dt ,rb,dx ,Vpore_1D,phi_SM,phi_PM,phi_WM,Ce0,invtisMask_1D,CeSwell_1D,Cend_1D ) | |
# Solve for H+ concentration from acid dissociation | |
(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cm_1D,Cmcoo_1D | |
) = AcidDiss( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cm_1D,Cmcoo_1D,pinchDrug_1D,pinchDrugcoo_1D,pinchCol_1D,pinchColcoo_1D,pinchCH_1D,pinchCOH_1D,pinchCH2O_1D,pinchCpol_1D,pinchCpolcoo_1D,pinchCm_1D,pinchCmcoo_1D,t,dt,CSol_1D,Sol_conc ,Cend_1D) | |
# Solve for Res, Rrs, Ce, Cend, Xc, and Mn | |
(Ce_1D,Cend_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Col_1D,Cm_1D,Xc_1D,Xext_1D,Xcend_1D,Mn_1D,Mask_1D,invMask_1D,Cpol0,t,DegWeightSciss,omega | |
) = ScissionRate( | |
Ce_1D,Cend_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Col_1D,Cm_1D,Xc_1D,Xext_1D, Xcend_1D,Mn_1D,Mask_1D,invMask_1D,Cpol0,Ce0,t,dt ,CH2O_1D,CSol_1D,Sol_conc,DegWeightSciss,rb,dx ,CeSwell_1D,CH_1D ) | |
# Solve for diffusion of constituents | |
(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D,DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,A | |
) = Diffusion( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D,DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,dt,A ,rb,dx,Rol_1D,Rm_1D ) | |
# Solve for porosity of polymer | |
(Maskfit_1D,invMaskfit_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,Rol_1D,Rm_1D,Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Drug_1D,Drugcoo_1D,DCol_1D,DCm_1D,DDrug_1D,DCH_1D,t,fDrug | |
) = Porosity( | |
Maskfit_1D,invMaskfit_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,Rol_1D,Rm_1D,Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Drug_1D,Drugcoo_1D,DCol_1D,DCm_1D,DDrug_1D,DCH_1D,t,fDrug,Ce0,dt,rb,dx,CeSwell_1D,Mask_1D,Xc_1D,Xcend_1D,Xext_1D ) | |
# Update Diffusivity | |
(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D,DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t | |
) = UpdateDiffusion( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D,DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,dt ,rb,dx,invtisMask_1D,tisMask_1D,Rol_1D,Rm_1D ) | |
#Outputs | |
DrugRelease_1D[:,t] =invtisMask_1D[:] * (Drug_1D[:,t] +Drugcoo_1D[:,t]) | |
n+=1 | |
# ============================================================================= | |
# Output Variables | |
# ============================================================================= | |
# SumDrug = np.sum(DrugRelease_1D_mem*MWdrug*dx ,axis = 0) | |
# SumMn = np.sum(Mn_1D_mem,axis = 0) | |
# SumXc = np.sum(Xc_1D_mem,axis = 0) | |
# | |
# ProfileMn = np.zeros(len(Mn_1D_mem)) | |
# ProfileDrug = np.zeros(len(Drug_1D_mem)) | |
# ProfileXc = np.zeros(len(Xc_1D_mem)) | |
# | |
# ProfileMn[:-nstart] = (SumMn[(nstart):])/SumMn[nstart] | |
# ProfileDrug[:-nstart] =100* (SumDrug[nstart:])/SumDrug[nstart] | |
# ProfileXc[:-nstart] = (SumXc[nstart:])/SumXc[nstart] | |
nend = n | |
return(DDrug_1D_mem,Drug_1D_mem,Drugcoo_1D_mem,Maskfit_1D_mem,CSol_1D_mem,CH2O_1D_mem,DDrug_1D_mem,A, | |
omega,Ce0,invtisMask_1D,phi_SM_mem,phi_PM_mem,phi_WM_mem,CH_1D_mem,nstart,nend,Ce_1D_mem,Cend_1D_mem, | |
Xc_1D_mem,Rb,dX,TimeT_mem,TimeR_mem,DrugRelease_1D_mem,CeSwell_1D, | |
Rrs_1D_mem,Res_1D_mem,Vpore_1D_mem,Mn_1D_mem, invMaskfit_1D_mem, DCH_1D_mem, | |
Cpol_1D_mem, Cpolcoo_1D_mem, Col_1D_mem, Colcoo_1D_mem, Cm_1D_mem, Cmcoo_1D_mem, Rol_1D_mem,Rm_1D_mem) | |
Copy_Ce_1D=np.zeros(nx) | |
Copy_Col_1D=np.zeros(nx) | |
Copy_Colcoo_1D=np.zeros(nx) | |
Copy_Cm_1D=np.zeros(nx) | |
Copy_Cmcoo_1D=np.zeros(nx) | |
Copy_Cpol_1D=np.zeros(nx) | |
Copy_Cpolcoo_1D=np.zeros(nx) | |
Copy_Res_1D=np.zeros(nx) | |
Copy_Rrs_1D=np.zeros(nx) | |
Copy_Rol_1D=np.zeros(nx) | |
Copy_Rm_1D=np.zeros(nx) | |
Copy_Cend_1D=np.zeros(nx) | |
Copy_Drug_1D=np.zeros(nx) | |
Copy_Drugcoo_1D=np.zeros(nx) | |
Copy_CSol_1D=np.zeros(nx) | |
Copy_CH2O_1D=np.zeros(nx) | |
Copy_CH_1D=np.zeros(nx) | |
Copy_COH_1D=np.zeros(nx) | |
Copy_CSol_1D = np.zeros(nx) | |
OCopy_Ce_1D=np.zeros(nx) | |
OCopy_Col_1D=np.zeros(nx) | |
OCopy_Colcoo_1D=np.zeros(nx) | |
OCopy_Cm_1D=np.zeros(nx) | |
OCopy_Cmcoo_1D=np.zeros(nx) | |
OCopy_Cpol_1D=np.zeros(nx) | |
OCopy_Cpolcoo_1D=np.zeros(nx) | |
OCopy_Res_1D=np.zeros(nx) | |
OCopy_Rrs_1D=np.zeros(nx) | |
OCopy_Rol_1D=np.zeros(nx) | |
OCopy_Rm_1D=np.zeros(nx) | |
OCopy_Cend_1D=np.zeros(nx) | |
OCopy_Drug_1D=np.zeros(nx) | |
OCopy_Drugcoo_1D=np.zeros(nx) | |
OCopy_CSol_1D=np.zeros(nx) | |
OCopy_CH2O_1D=np.zeros(nx) | |
OCopy_CH_1D=np.zeros(nx) | |
OCopy_COH_1D=np.zeros(nx) | |
OCopy_CSol_1D = np.zeros(nx) | |
def Maskfunc( | |
rb,rp,rs,x,Lx,Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D,dx): | |
ns = 100; | |
shifty = thick + 2*rp | |
shiftx = 2*np.sqrt((shifty**2) - (0.5*shifty)**2) | |
start = 0 | |
# sy = np.linspace(start,ns-1+start,ns)*shifty | |
sx = np.linspace(start,ns-1+start,ns)*(shiftx) | |
I = 0; | |
while I < ns: | |
#Creates Interior Pores over entire Domain | |
tempA = ((x[:]-sx[I])**2) > (rp)**2 | |
Mask_1D[:] = Mask_1D[:] * tempA*1 | |
tempB = ((x[:]-sx[I]-0.5*shiftx)**2) > (rp)**2 | |
Mask_1D[:] = Mask_1D[:] * tempB*1 | |
#Removes everything except core region, where interior pores exist | |
tempc =((x[:]-0*0.5*Lx)**2) < (rb-rs)**2 | |
Mask_1D[:] = Mask_1D[:] * tempc*1 | |
#Adds everything outside of the interior core, sets up for making solid shell | |
tempc2 =((x[:]-0*0.5*Lx)**2) > (rb-rs)**2 | |
Mask_1D[:] = Mask_1D[:] + tempc2*1 | |
#Crops shell | |
tempd =((x[:]-0*0.5*Lx)**2) < (rb)**2 | |
Mask_1D[:] = Mask_1D[:] * tempd*1 | |
# ============================================================================= | |
#Shell pore Circle base | |
tempE = ((x[:]-0*0.5*Lx-((rb-rs)+0.5*rs))**2) > (rps)**2 | |
Mask_1D[:] = Mask_1D[:] * tempE*1 | |
# tempE = ((x[:]-0*0.5*Lx-0*((rb-rs)+0.5*rs))**2) > (4*rp)**2 | |
# Mask_1D[:] = Mask_1D[:] * tempE*1 | |
# tempE = ((x[:]-0*0.5*Lx+((rb-rs)+0.5*rs))**2) > (4*rp)**2 | |
# Mask_1D[:] = Mask_1D[:] * tempE*1 | |
# tempE = ((x[:]-0*0.5*Lx-0*((rb-rs)+0.5*rs))**2) > (4*rp)**2 | |
# Mask_1D[:] = Mask_1D[:] * tempE*1 | |
I+=1 | |
M = (Mask_1D[:] < 1) | |
invMask_1D = M*1 | |
tis = ((x[:]-0*0.5*Lx)**2) > (rb)**2 | |
tisMask_1D[:] = tis*1 | |
invtisMask_1D = 1-tisMask_1D | |
return(Mask_1D,invMask_1D,tisMask_1D,invtisMask_1D) | |
def Initialize( Mask_1D,invMask_1D,Maskfit_1D,invMaskfit_1D,invtisMask_1D,tisMask_1D,CSol_1D,CH2O_1D,rb,dx, phi_SM,phi_PM,phi_WM): | |
Vol = 5e-8#5.01507e-8 | |
Mass = Vol/(0.39/rho_p + 0.6/rho_s + 0.01/rho_d) | |
Polymass = 0.39 * Mass | |
Solmass = 0.6 * Mass | |
DrugTotal = 0.01 * Mass | |
DrugTotalmol = DrugTotal/Mw_d | |
# PoreV = (4/3*np.pi*(rb-rs)**3)*0.74048 * (rp)**3/(rp+0.5*thick)**3 | |
# PolymerV = (4/3*np.pi*(rb-rs)**3) - PoreV + 4/3*np.pi*(rb**3 - (rb-rs)**3) | |
Drug0 = (DrugTotalmol)/(Vol) | |
Drug_1D[:,0] = Drug0 * invtisMask_1D[:] | |
Drug_1D[:,1] = Drug0 * invtisMask_1D[:] | |
fDrug = 0 | |
############################################################################## | |
Ce0 = (1-Xc0)* 1000*(Polymass/MWpolyunit)/(Vol) #mol/m^3 | |
omega = Ce0 | |
Cpol0 = Ce0/mm | |
Mn_1D[:,0] = Mask_1D[:] * ((Ce0+omega*Xc0) * M0)/(Cpol0 + invMask_1D[:]) | |
Mn_1D[:,1] = Mask_1D[:] * ((Ce0+omega*Xc0) * M0)/(Cpol0 + invMask_1D[:]) | |
Sol_conc = 1000*(Solmass/99.133)/(Vol) | |
phi_S = invtisMask_1D*((Solmass/1/99.133)/(Vol) *Mw_s/rho_s) | |
phi_P =invtisMask_1D* (MW*(Polymass/MW/Vol)/rho_p) | |
phi_W = (1-phi_P-phi_S) | |
CH2O0 = phi_W * 1000*rho_w/Mw_w | |
CSol_1D[:,0] = 1000* phi_S*rho_s/Mw_s | |
CSol_1D[:,1] = 1000* phi_S*rho_s/Mw_s | |
phi_SM[:,1] = phi_S; phi_SM[:,0] = phi_S | |
phi_PM[:,1] = phi_P; phi_PM[:,0] = phi_P | |
phi_WM[:,1] = phi_W; phi_WM[:,0] = phi_W | |
############################################################################## | |
Ce_1D[:,0] = Ce0*Mask_1D[:] | |
Ce_1D[:,1] = Ce0*Mask_1D[:] | |
Cend_1D[:,0] = Mask_1D[:]* 2*Cpol0 | |
Cend_1D[:,1] = Mask_1D[:]* 2*Cpol0 | |
Cpol_1D[:,0] = Cpol0*Mask_1D[:] | |
Cpol_1D[:,1] = Cpol0*Mask_1D[:] | |
Col_1D[:,0] = Col0*Mask_1D[:] | |
Col_1D[:,1] = Col0*Mask_1D[:] | |
Cm_1D[:,0] = Cm0*Mask_1D[:] | |
Cm_1D[:,1] = Cm0*Mask_1D[:] | |
Rs_1D[:,0] = 0*Mask_1D[:] | |
CH_1D[:,0] = CH0 #0.1*(10**-7.4)*Mask[0:,0:] + (10**-7.4)*invMask[0:,0:]; | |
CH2O_1D[:,0] = CH2O0 | |
CH2O_1D[:,1] = CH2O0 | |
Maskfit_1D[:,0] = 0 * Mask_1D[:] | |
Maskfit_1D[:,1] = 0 * Mask_1D[:] | |
invMaskfit_1D[:,0] = 1 - Maskfit_1D[:,0] | |
invMaskfit_1D[:,1] = 1 - Maskfit_1D[:,1] | |
DCol_1D[:,0] = invMaskfit_1D[:,0]*Dpore_Col + Maskfit_1D[:,0]*(Dpolymer_Col) | |
DCm_1D[:,0] = invMaskfit_1D[:,0]*Dpore_Cm + Maskfit_1D[:,0]*(Dpolymer_Cm) | |
DDrug_1D[:,0] = invMaskfit_1D[:,0]*Dpore_Drug + Maskfit_1D[:,0]*(Dpolymer_Drug) | |
DCH_1D[:,0] = invMaskfit_1D[:,0]*Dpore_CH + Maskfit_1D[:,0]*(Dpolymer_CH) | |
DCol_1D[:,1] = invMaskfit_1D[:,1]*Dpore_Col + Maskfit_1D[:,1]*(Dpolymer_Col) | |
DCm_1D[:,1] = invMaskfit_1D[:,1]*Dpore_Cm + Maskfit_1D[:,1]*(Dpolymer_Cm) | |
DDrug_1D[:,1] = invMaskfit_1D[:,1]*Dpore_Drug + Maskfit_1D[:,1]*(Dpolymer_Drug) | |
DCH_1D[:,1] = invMaskfit_1D[:,1]*Dpore_CH + Maskfit_1D[:,1]*(Dpolymer_CH) | |
DCH2O_1D[0:,0] = invMaskfit_1D[:,0]*Dpore_H2O + Maskfit_1D[:,0]*(Dpolymer_H2O) | |
DCH2O_1D[0:,1] = invMaskfit_1D[:,1]*Dpore_H2O + Maskfit_1D[:,1]*(Dpolymer_H2O) | |
DCSol_1D[0:,0] = invMaskfit_1D[:,0]*Dpore_Sol + Maskfit_1D[:,0]*(Dpolymer_Sol) | |
DCSol_1D[0:,1] = invMaskfit_1D[:,1]*Dpore_Sol + Maskfit_1D[:,1]*(Dpolymer_Sol) | |
Drug_1D[-1,0] = 0 | |
Col_1D[-1,0] = 0 | |
Drugcoo_1D[-1,0] = 0 | |
Colcoo_1D[-1,0] = 0 | |
CH_1D[-1,0] = CH0 | |
COH_1D[-1,0] = 0 | |
CSol_1D[-1,0] = 0 | |
Cpol_1D[-1,0] = 0 | |
Cpolcoo_1D[-1,0] = 0 | |
Drug_1D[-1,1] = 0 | |
Col_1D[-1,1] = 0 | |
Drugcoo_1D[-1,1] = 0 | |
Colcoo_1D[-1,1] = 0 | |
CH_1D[-1,1] = 0 | |
COH_1D[-1,1] = 0 | |
CSol_1D[-1,1] = 0 | |
Cpol_1D[-1,1] = 0 | |
Cpolcoo_1D[-1,1] = 0 | |
Drug_1D[0,0] = Drug_1D[1,0] | |
Col_1D[0,0] = 0 | |
Drugcoo_1D[0,0] = 0 | |
Colcoo_1D[0,0] = 0 | |
CH_1D[0,0] = 0 | |
COH_1D[0,0] = 0 | |
CSol_1D[0,0] = 0 | |
Cpol_1D[0,0] = 0 | |
Cpolcoo_1D[0,0] = 0 | |
Drug_1D[0,1] = Drug_1D[1,0] | |
Col_1D[0,1] = 0 | |
Drugcoo_1D[0,1] = 0 | |
Colcoo_1D[0,1] = 0 | |
CH_1D[0,1] = CH0 | |
COH_1D[0,1] = 0 | |
CSol_1D[0,1] = 0 | |
Cpol_1D[0,1] = 0 | |
Cpolcoo_1D[0,1] = 0 | |
return(Drug_1D,Cpol_1D,Col_1D,Cm_1D,CH_1D,DDrug_1D,DCol_1D,DCm_1D,fDrug,Maskfit_1D,invMaskfit_1D,Cpol0,Ce0,CSol_1D,CH2O_1D,DCSol_1D,DCH2O_1D,Sol_conc,Ce0, phi_SM,phi_PM,phi_WM) | |
def Solidification(Maskfit_1D,invMaskfit_1D,CSol_1D,CH2O_1D,COH_1D,DCSol_1D,DCH2O_1D,Sol_conc,t,dt ,rb,dx,Vpore_1D,phi_SM,phi_PM,phi_WM ,Ce0,invtisMask_1D,CeSwell_1D,Cend_1D): | |
r = np.linspace(0,Lx,nx) | |
CH2O_1D[0,t] = CH2O_1D[1,t] | |
CH2O_1D[1:,t] = invtisMask_1D[1:]*CH2O_1D[1:,t] + (1-invtisMask_1D[1:]) *CH2O_1D[1:,0] | |
CSol_1D[0,t] = CSol_1D[1,t] | |
phi_SM[:,t] = invtisMask_1D*(Mw_s*CSol_1D[:,t] /1000/rho_s) | |
phi_PM[:,t] = invtisMask_1D* (MW*(Polymass/MW/(Vol*CeSwell_1D[t+1]))/rho_p)#(( Polymass/1/MWpolyunit)/(Vol*CeSwell_1D[t+1]) - Col0)/mm*MW/rho_p | |
phi_WM[:,t] = invtisMask_1D[:]*(1 - phi_SM[:,t] - phi_PM[:,t]) | |
phi_WM[phi_WM[:,t]<=0] = 0 | |
RT = 8.314*300 | |
a1 = Mw_w*RT/(Dpore_H2O*rho_w) | |
A1 = Mw_w*RT/(Dpolymer_H2O*rho_w) | |
b1 = rho_s*Mw_w/(rho_w*Mw_s) | |
a2 = Mw_s*RT/(Dpore_Sol*rho_s) | |
A2 = Mw_s*RT/(Dpolymer_Sol*rho_s) | |
b2 = rho_w*Mw_s/(rho_s*Mw_w) | |
from scipy.optimize import fsolve # Move this outside of the loop move variables into definitions | |
def equations(p): | |
x, y = p | |
with np.errstate(invalid='ignore'): | |
return (a1-b1*np.sqrt(x*y)-x, a2-b2*np.sqrt(x*y)-y) | |
def equations2(p): | |
x, y = p | |
with np.errstate(invalid='ignore'): | |
return (A1-b1*np.sqrt(x*y)-x, A2-b2*np.sqrt(x*y)-y) | |
D11Bar_theo, D22Bar_theo = fsolve(equations, (10000, 10000)) | |
D11Bar_poly_theo, D22Bar_poly_theo = fsolve(equations2, (10000, 10000)) | |
D12Bar_theo= np.sqrt(D11Bar_theo*D22Bar_theo) | |
D12Bar_poly_theo= np.sqrt(D11Bar_poly_theo*D22Bar_poly_theo) | |
D12Bar_poly_Swell = (1/D12Bar_poly_theo) * np.exp( -Beta*(1- (CeSwell_1D[t+1]))) #*(2e4) | |
D12bar = invMaskfit_1D[:,t]*1/D12Bar_theo + Maskfit_1D[:,t]*(D12Bar_poly_Swell+(1.3*Vpore_1D[:,t-1]**2-0.3*Vpore_1D[:,t-1]**3)*(1/D12Bar_theo-D12Bar_poly_Swell)) | |
w1 = 1#2/3 | |
w2 = 1#4/3 | |
w3 = 0#1/3 | |
r = np.linspace(0,Lx,nx)#/Lx | |
dr = r[1]-r[0] | |
I = np.linspace(1,nx,nx) | |
# Water Diffusion | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[2:nx]+D12bar[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+D12bar[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(D12bar[1:nx-1] + D12bar[2:nx]/2+ D12bar[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A5 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B5 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C5 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
# Solvent Diffusion | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[2:nx]+D12bar[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+D12bar[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(D12bar[1:nx-1] + D12bar[2:nx]/2+ D12bar[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A6 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B6 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C6 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
bh2o = (B5.dot(Mw_w/rho_w/1000 * CH2O_1D[:,t] + phi_PM[:,t]) ) | |
ch2o = (C5.dot(Mw_w/rho_w/1000 * CH2O_1D[:,t-1] + phi_PM[:,t-1]) ) | |
Bh2o = bh2o-ch2o | |
bsol = (B6.dot(Mw_s/rho_s/1000 * CSol_1D[:,t] ) ) | |
csol = (C6.dot(Mw_s/rho_s/1000 * CSol_1D[:,t-1] ) ) | |
Bsol = bsol-csol | |
temph = rho_w/Mw_w*1000* (spsolve(A5, Bh2o)- phi_PM[:,t]) | |
temps = rho_s/Mw_s*1000* spsolve(A6, Bsol) | |
CH2O_1D[:,t+1] = temph[:] | |
CSol_1D[:,t+1] = temps[:] | |
CH2O_1D[-1,t+1] = CH2O_1D[-1,0] | |
# ============================================================================= | |
# Solidification | |
# ============================================================================= | |
Maskfit_1D[:,t+1] = TFunc(phi_WM[:,t]) * Mask_1D[:] | |
# if MW == 15000: Maskfit_1D[:,t+1] = TFunc15(phi_WM[:,t]) * Mask_1D[:] | |
# if MW == 29000: Maskfit_1D[:,t+1] = TFunc29(phi_WM[:,t]) * Mask_1D[:] | |
# if MW == 53000: Maskfit_1D[:,t+1] = TFunc53(phi_WM[:,t]) * Mask_1D[:] | |
if MW <= 33000: Maskfit_1D[:,t+1] = TFunc8_33(phi_WM[:,t],MW) * Mask_1D[:] | |
elif MW >= 50000: Maskfit_1D[:,t+1] = TFunc50_60(phi_WM[:,t],MW) * Mask_1D[:] | |
else: Maskfit_1D[:,t+1] = TFunc33_50(phi_WM[:,t],MW) * Mask_1D[:] | |
# Maskfit_1D[(Maskfit_1D[:,t+1])>=1,t+1] = 1 | |
# Maskfit_1D[(Maskfit_1D[:,t+1])>=0.9999,t+1] = 1 | |
# Maskfit_1D[0,t+1] = Maskfit_1D[1,t+1] | |
invMaskfit_1D[:,t+1] = 1 - Maskfit_1D[:,t+1] | |
# ============================================================================= | |
# Update Diffusion | |
# ============================================================================= | |
D12Bar_poly_Swell = (1/D12Bar_poly_theo) * np.exp( -Beta*(1- (CeSwell_1D[t+1]))) | |
D12bar = invMaskfit_1D[:,t+1]*1/D12Bar_theo + Maskfit_1D[:,t+1]*(D12Bar_poly_Swell + (1.3*Vpore_1D[:,t]**2-0.3*Vpore_1D[:,t]**3)*(1/D12Bar_theo - D12Bar_poly_Swell))#Dpolymer_Sol_Swell)) | |
w1 = 1#2/3 | |
w2 = 1#4/3 | |
w3 = 0#1/3 | |
r = np.linspace(0,Lx,nx)#/Lx | |
dr = r[1]-r[0] | |
I = np.linspace(1,nx,nx) | |
# Water Diffusion | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[2:nx]+D12bar[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+D12bar[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(D12bar[1:nx-1] + D12bar[2:nx]/2+ D12bar[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A5 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B5 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C5 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
# Solvent Diffusion | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[2:nx]+D12bar[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(D12bar[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+D12bar[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(D12bar[1:nx-1] + D12bar[2:nx]/2+ D12bar[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A6 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B6 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C6 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
bh2o = (B5.dot(Mw_w/rho_w/1000 * CH2O_1D[:,t] + phi_PM[:,t]) ) | |
ch2o = (C5.dot(Mw_w/rho_w/1000 * CH2O_1D[:,t-1] + phi_PM[:,t-1]) ) | |
Bh2o = bh2o-ch2o | |
bsol = (B6.dot(Mw_s/rho_s/1000 * CSol_1D[:,t] ) ) | |
csol = (C6.dot(Mw_s/rho_s/1000 * CSol_1D[:,t-1] ) ) | |
Bsol = bsol-csol | |
temph = rho_w/Mw_w*1000* (spsolve(A5, Bh2o)- phi_PM[:,t]) | |
temps = rho_s/Mw_s*1000* spsolve(A6, Bsol) | |
CH2O_1D[:,t+1] = temph[:] | |
CSol_1D[:,t+1] = temps[:] | |
CH2O_1D[-1,t+1] = CH2O_1D[-1,0] | |
COH_1D[:,t+1] = COH_1D[:,t] | |
return Maskfit_1D,invMaskfit_1D,CSol_1D,CH2O_1D,COH_1D,DCSol_1D,DCH2O_1D,phi_SM,phi_PM,phi_WM | |
def RK(fCol,fColcoo,fCm,fCmcoo,fCpol,fCpolcoo,fDrug,fDrugcoo,fCH,Col0,Colcoo0,Cm0,Cmcoo0,Cpol0,Cpolcoo0,Drug0,Drugcoo0,CH0,dt,ntt,t): | |
col = np.zeros((nx,ntt + 1)) | |
colcoo = np.zeros((nx,ntt + 1)) | |
cm = np.zeros((nx,ntt + 1)) | |
cmcoo = np.zeros((nx,ntt + 1)) | |
cpol = np.zeros((nx,ntt + 1)) | |
cpolcoo = np.zeros((nx,ntt + 1)) | |
drug = np.zeros((nx,ntt + 1)) | |
drugcoo = np.zeros((nx,ntt + 1)) | |
ch = np.zeros((nx,ntt + 1)) | |
ut = np.zeros(ntt + 1) | |
h = (dt) / float(ntt) | |
col[:,0] = Col0 | |
colcoo[:,0] = Colcoo0 | |
cm[:,0] = Cm0 | |
cmcoo[:,0] = Cmcoo0 | |
cpol[:,0] = Cpol0 | |
cpolcoo[:,0] = Cpolcoo0 | |
drug[:,0] = Drug0 | |
drugcoo[:,0] = Drugcoo0 | |
ch[:,0] = CH0 | |
ut[0] = TimeT[t] | |
for i in range(0, ntt): | |
Col = col[:,i] | |
Colcoo = colcoo[:,i] | |
Cm = cm[:,i] | |
Cmcoo = cmcoo[:,i] | |
Cpol = cpol[:,i] | |
Cpolcoo = cpolcoo[:,i] | |
Drug = drug[:,i] | |
Drugcoo = drugcoo[:,i] | |
CH = ch[:,i] | |
Ut = ut[i] | |
k1 = h* fCol(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
l1 = h* fColcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
m1 = h* fCm(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
n1 = h* fCmcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
o1 = h* fCpol(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
p1 = h* fCpolcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
q1 = h* fDrug(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
r1 = h* fDrugcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
s1 = h* fCH(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH) | |
k2 = h* fCol(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
l2 = h* fColcoo(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
m2 = h* fCm(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
n2 = h* fCmcoo(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
o2 = h* fCpol(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
p2 = h* fCpolcoo(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
q2 = h* fDrug(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
r2 = h* fDrugcoo(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
s2 = h* fCH(Ut+0.5*h,Col+0.5*k1,Colcoo+0.5*l1,Cm+0.5*m1,Cmcoo+0.5*n1,Cpol+0.5*o1,Cpolcoo+0.5*p1,Drug+0.5*q1,Drugcoo+0.5*r1,CH+0.5*s1) | |
k3 = h* fCol(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
l3 = h* fColcoo(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
m3 = h* fCm(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
n3 = h* fCmcoo(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
o3 = h* fCpol(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
p3 = h* fCpolcoo(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
q3 = h* fDrug(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
r3 = h* fDrugcoo(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
s3 = h* fCH(Ut+0.5*h,Col+0.5*k2,Colcoo+0.5*l2,Cm+0.5*m2,Cmcoo+0.5*n2,Cpol+0.5*o2,Cpolcoo+0.5*p2,Drug+0.5*q2,Drugcoo+0.5*r2,CH+0.5*s2) | |
k4 = h* fCol(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
l4 = h* fColcoo(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
m4 = h* fCm(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
n4 = h* fCmcoo(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
o4 = h* fCpol(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
p4 = h* fCpolcoo(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
q4 = h* fDrug(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
r4 = h* fDrugcoo(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
s4 = h* fCH(Ut+ h,Col+ k3,Colcoo+ l3,Cm+ m3,Cmcoo+ n3,Cpol+ o3,Cpolcoo+ p3,Drug+ q3,Drugcoo+ r3,CH+ s3) | |
ut[i+1] = TimeT[t] + (i+1)*h | |
col[:,i+1] = col[:,i]+ (k1 + 2*k2 + 2*k3 + k4) / 6 | |
colcoo[:,i+1] = colcoo[:,i]+ (l1 + 2*l2 + 2*l3 + l4) / 6 | |
cm[:,i+1] = cm[:,i]+ (m1 + 2*m2 + 2*m3 + m4) / 6 | |
cmcoo[:,i+1] = cmcoo[:,i]+ (n1 + 2*n2 + 2*n3 + n4) / 6 | |
cpol[:,i+1] = cpol[:,i]+ (o1 + 2*o2 + 2*o3 + o4) / 6 | |
cpolcoo[:,i+1] = cpolcoo[:,i]+ (p1 + 2*p2 + 2*p3 + p4) / 6 | |
drug[:,i+1] = drug[:,i]+ (q1 + 2*q2 + 2*q3 + q4) / 6 | |
drugcoo[:,i+1] = drugcoo[:,i]+ (r1 + 2*r2 + 2*r3 + r4) / 6 | |
ch[:,i+1] = ch[:,i]+ (s1 + 2*s2 + 2*s3 + s4) / 6 | |
return ut,col,colcoo,cm,cmcoo,cpol,cpolcoo,drug,drugcoo,ch | |
def fCol(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (konol*Colcoo/m*CH - koffol*Col/m) | |
def fColcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (koffol*Col/m - konol*Colcoo/m*CH) | |
def fCm(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (konm*Cmcoo*CH - koffm*Cm) | |
def fCmcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (koffm*Cm - konm*Cmcoo*CH) | |
def fCpol(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (konpol*Cpolcoo*CH - koffpol*Cpol) | |
def fCpolcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (koffpol*Cpol - konpol*Cpolcoo*CH) | |
def fDrug(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (kondrug*Drugcoo*CH - koffdrug*Drug) | |
def fDrugcoo(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return (koffdrug*Drug - kondrug*Drugcoo*CH) | |
def fCH(Ut,Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH): | |
return ( | |
koffol*Col/m - konol*Colcoo/m*CH | |
+ koffm*Cm - konm*Cmcoo*CH | |
+ koffpol*Cpol - konpol*Cpolcoo*CH | |
+ koffdrug*Drug - kondrug*Drugcoo*CH | |
) | |
def ODEModel(Molecules,tt): | |
(Col,Colcoo,Cm,Cmcoo,Cpol,Cpolcoo,Drug,Drugcoo,CH)=Molecules | |
dColdt = (konol*Colcoo/m*CH - koffol*Col/m) | |
dColcoodt = (koffol*Col/m - konol*Colcoo/m*CH) | |
dCmdt = (konm*Cmcoo*CH - koffm*Cm) | |
dCmcoodt = (koffm*Cm - konm*Cmcoo*CH) | |
dCpoldt = (konpol*Cpolcoo*CH - koffpol*Cpol) | |
dCpolcoodt = (koffpol*Cpol - konpol*Cpolcoo*CH) | |
dDrugdt = (kondrug*Drugcoo*CH - koffdrug*Drug) | |
dDrugcoodt = (koffdrug*Drug - kondrug*Drugcoo*CH) | |
dCHdt = (koffol*Col/m - konol*Colcoo/m*CH | |
+ koffm*Cm - konm*Cmcoo*CH | |
+ koffpol*Cpol - konpol*Cpolcoo*CH | |
+ koffdrug*Drug - kondrug*Drugcoo*CH) | |
return dColdt,dColcoodt,dCmdt,dCmcoodt,dCpoldt,dCpolcoodt,dDrugdt,dDrugcoodt,dCHdt | |
def AcidDiss( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cm_1D,Cmcoo_1D, | |
pinchDrug_1D,pinchDrugcoo_1D,pinchCol_1D,pinchColcoo_1D,pinchCH_1D,pinchCOH_1D,pinchCH2O_1D, | |
pinchCpol_1D,pinchCpolcoo_1D,pinchCm_1D,pinchCmcoo_1D,t,dt,CSol_1D,Sol_conc,Cend_1D ): | |
pinchCol0 = Col_1D[:,t] | |
pinchColcoo0 = Colcoo_1D[:,t] | |
pinchCm0 = Cm_1D[:,t] | |
pinchCmcoo0 = Cmcoo_1D[:,t] | |
pinchCpol0 = 0.5* Cend_1D[:,t] | |
pinchCpolcoo0 = Cpolcoo_1D[:,t] | |
pinchDrug0 = Drug_1D[:,t] | |
pinchDrugcoo0 = Drugcoo_1D[:,t] | |
pinchCH0 = CH_1D[:,t] | |
tt = np.linspace(0,dt,ntt) | |
init_states = np.array([pinchCol0,pinchColcoo0,pinchCm0,pinchCmcoo0,pinchCpol0,pinchCpolcoo0,pinchDrug0,pinchDrugcoo0,pinchCH0]) | |
for i in range(0,nx): | |
init_state = init_states[:,i] | |
Molecules = odeint(ODEModel,init_state,tt) | |
pinchCol_1D[i,:] = Molecules[:,0] | |
pinchColcoo_1D[i,:] = Molecules[:,1] | |
pinchCm_1D[i,:] = Molecules[:,2] | |
pinchCmcoo_1D[i,:] = Molecules[:,3] | |
pinchCpol_1D[i,:] = Molecules[:,4] | |
pinchCpolcoo_1D[i,:] = Molecules[:,5] | |
pinchDrug_1D[i,:] = Molecules[:,6] | |
pinchDrugcoo_1D[i,:] = Molecules[:,7] | |
pinchCH_1D[i,:] = Molecules[:,8] | |
Col_1D[:,t] = pinchCol_1D[:,ntt-1] | |
Colcoo_1D[:,t] = pinchColcoo_1D[:,ntt-1] | |
Cm_1D[:,t] = pinchCm_1D[:,ntt-1] | |
Cmcoo_1D[:,t] = pinchCmcoo_1D[:,ntt-1] | |
Cpol_1D[:,t+1] = pinchCpol_1D[:,ntt-1] | |
Cpolcoo_1D[:,t+1] = pinchCpolcoo_1D[:,ntt-1] | |
Drug_1D[:,t] = pinchDrug_1D[:,ntt-1] | |
Drugcoo_1D[:,t] = pinchDrugcoo_1D[:,ntt-1] | |
CH_1D[:,t] = pinchCH_1D[:,ntt-1] | |
return(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cpol_1D,Cpolcoo_1D,Cm_1D,Cmcoo_1D) | |
def ScissionRate( | |
Ce_1D,Cend_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Col_1D,Cm_1D,Xc_1D,Xext_1D, | |
Xcend_1D,Mn_1D,Mask_1D,invMask_1D,Cpol0,Ce0,t,dt ,CH2O_1D,CSol_1D,Sol_conc,DegWeight ,rb,dx,CeSwell_1D,CH_1D): | |
# ============================================================================= | |
# Recalculate the rate of scission for new time step based on C_H+ | |
# ============================================================================= | |
Xext_1D[:,t+1] = Mask_1D[:]*(p*etaA*(Rrs_1D[:,t]+Res_1D[:,t])*Vc) | |
if lam == 1: | |
Xc_1D[:,t+1] = Mask_1D[:]*(Xmax - (Xmax - Xc0)*np.exp(-Xext_1D[:,t+1])) | |
else: | |
Xc_1D[:,t+1] = Mask_1D[:]*(Xmax - ((lam-1)*Xext_1D[:,t+1] + (Xmax-Xc0)**(1-lam))**(1/(1-lam))) | |
omega = Ce0 | |
# Ce_1D[:,t] = Mask_1D[:]*(Ce0 - Rol_1D[:,t] - Rm_1D[:,t] - omega*(Xc_1D[:,t]-Xc0) ) | |
for index in range(0,nx-1): | |
if Ce_1D[index,t] <= 0.5*Cend_1D[index,t]: | |
Xcend_1D[index,t] = (Xcend_1D[index,t] + Cend_1D[index,t]) | |
Cend_1D[index,t] = 0 | |
Ce_1D[index,t] = 0 | |
Cm_1D[index,t] = Cm_1D[index,t] + 2 *Mask_1D[index] | |
Rm_1D[index,t] = Rm_1D[index,t] + 2 *Mask_1D[index] | |
Mn_1D[index,t+1] = Mask_1D[index] *( M0 + omega*Xc_1D[index,t])/(Xcend_1D[index,t] + invMask_1D[index]) | |
else: | |
Cend_1D[index,t] = Mask_1D[index]* 2*( Cpol0 + (Rrs_1D[index,t] - Rol_1D[index,t]/m)) | |
Mn_1D[index,t+1] = Mask_1D[index] * ((Ce_1D[index,t]+omega*Xc_1D[index,t]) * M0)/(0.5*Cend_1D[index,t] + invMask_1D[index]) | |
for index in range(0,nx-1): | |
if np.isnan(Ce_1D[index,t])==1: Ce_1D[index,t] = 0 | |
if np.isnan(Cend_1D[index,t])==1: Cend_1D[index,t] = 0 | |
Rrs_temp = np.zeros((nx,nttt)) | |
Res_temp = np.zeros((nx,nttt)) | |
Ce_temp = np.zeros((nx,nttt)) | |
Cend_temp = np.zeros((nx,nttt)) | |
CH_temp = np.zeros((nx,nttt)) | |
Rrs_temp[:,0] = Rrs_1D[:,t] | |
Res_temp[:,0] = Res_1D[:,t] | |
Ce_temp[:,0] = Ce_1D[:,t] | |
Cend_temp[:,0] = Cend_1D[:,t] | |
CH_temp[:,0] = CH_1D[:,t] | |
DegWeightSciss[:] = Maskfit_1D[:,t] | |
for ttt in range(0,nttt-1): | |
dttt = dt/nttt | |
Rrs_temp[:,ttt+1] = Rrs_temp[:,ttt] + DegWeightSciss[:]*(dttt*(Ce_1D[:,t] * (kr1 + kr2*CH_1D[:,t]))) | |
Res_temp[:,ttt+1] = Res_temp[:,ttt] + DegWeightSciss[:]*(dttt*(Cend_1D[:,t]*(ke1 + ke2*CH_1D[:,t]))) | |
Rrs_1D[:,t+1] = Rrs_temp[:,-1] | |
Res_1D[:,t+1] = Res_temp[:,-1] | |
Roltemp = np.zeros(nx) | |
for M in range(1,9): | |
Roltemp[:] = Roltemp[:] + (Ce0*M*(Rrs_1D[:,t+1]/Ce0)**2*(1-(Rrs_1D[:,t+1]/Ce0))**(M-1) ) | |
Rol_1D[:,t+1] = Roltemp[:] | |
Rm_1D[:,t+1] = Res_1D[:,t+1] | |
Ce_1D[:,t+1] = Ce_1D[:,t] + dt*( | |
-m*(Rol_1D[:,t+1]-Rol_1D[:,t])/dt | |
-(Rm_1D[:,t+1]-Rm_1D[:,t])/dt | |
-(Ce_1D[:,t]/(1-Xc_1D[:,t+1]) * (Xc_1D[:,t+1]-Xc_1D[:,t])/dt ) | |
) | |
Col_1D[:,t+1] = Col_1D[:,t]+ dt*(Rol_1D[:,t+1]-Rol_1D[:,t])/dt | |
Cm_1D[:,t+1] = Cm_1D[:,t] + dt*(Rm_1D[:,t+1]-Rm_1D[:,t])/dt | |
return(Ce_1D,Cend_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Col_1D,Cm_1D,Xc_1D,Xext_1D, | |
Xcend_1D,Mn_1D,Mask_1D,invMask_1D,Cpol0,t,DegWeight,omega) | |
def Diffusion( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,dt ,A,rb,dx,Rol_1D,Rm_1D ): | |
r = np.linspace(0,Lx,nx) | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
rDCol_1D = np.zeros(nx) | |
rDDrug_1D = np.zeros(nx) | |
rDCH_1D = np.zeros(nx) | |
rDCm_1D = np.zeros(nx) | |
rDCol_1D[:] = DCol_1D[:,t] | |
rDDrug_1D[:] = DDrug_1D[:,t] | |
rDCH_1D[:] = DCH_1D[:,t] | |
rDCm_1D[:] = DCm_1D[:,t] | |
# ============================================================================= | |
# Diffusion | |
# ============================================================================= | |
w1 = 1#2/3 | |
w2 = 1#4/3 | |
w3 = 0#1/3 | |
r = np.linspace(0,Lx,nx)#/Lx | |
dr = r[1]-r[0] | |
I = np.linspace(1,nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCol_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCol_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1] + rDCol_1D[2:nx]/2+ rDCol_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A1 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B1 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C1 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDDrug_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDDrug_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1] + rDDrug_1D[2:nx]/2+ rDDrug_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A2 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B2 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C2 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCH_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCH_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1] + rDCH_1D[2:nx]/2+ rDCH_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A3 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B3 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C3 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCm_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCm_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1] + rDCm_1D[2:nx]/2+ rDCm_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A4 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B4 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C4 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
# ============================================================================= | |
# Solving The System of PDEs | |
# ============================================================================= | |
bdrug = (B2.dot(Drug_1D[:,t])) | |
cdrug = (C2.dot(Drug_1D[:,t-1])) | |
Bdrug = bdrug-cdrug | |
bcol = (B1.dot(Col_1D[:,t])) | |
ccol = (C1.dot(Col_1D[:,t-1])) | |
Bcol = bcol-ccol | |
bcm = (B4.dot(Cm_1D[:,t])) | |
ccm = (C4.dot(Cm_1D[:,t-1])) | |
Bcm = bcm-ccm | |
bdrugcoo = (B2.dot(Drugcoo_1D[:,t])) | |
cdrugcoo = (C2.dot(Drugcoo_1D[:,t-1])) | |
Bdrugcoo = bdrugcoo-cdrugcoo | |
bcolcoo = (B1.dot(Colcoo_1D[:,t])) | |
ccolcoo = (C1.dot(Colcoo_1D[:,t-1])) | |
Bcolcoo = bcolcoo-ccolcoo | |
bcmcoo = (B4.dot(Cmcoo_1D[:,t])) | |
ccmcoo = (C4.dot(Cmcoo_1D[:,t-1])) | |
Bcmcoo = bcmcoo-ccmcoo | |
bch = (B3.dot(CH_1D[:,t])) | |
cch = (C3.dot(CH_1D[:,t-1])) | |
Bch = bch-cch | |
bch2o = (B3.dot(CH2O_1D[:,t])) | |
cch2o = (C3.dot(CH2O_1D[:,t-1])) | |
Bch2o = bch2o - cch2o | |
bcoh = (B3.dot(COH_1D[:,t])) | |
ccoh = (C3.dot(COH_1D[:,t-1])) | |
Bcoh = bcoh - ccoh | |
# ============================================================================= | |
tempd= spsolve(A2, Bdrug) | |
tempc= spsolve(A1, Bcol) | |
tempm= spsolve(A4, Bcm) | |
tempD = spsolve(A2, Bdrugcoo) | |
tempC = spsolve(A1, Bcolcoo) | |
tempM = spsolve(A4, Bcmcoo) | |
temph= spsolve(A3, Bch) | |
tempH = spsolve(A3, Bcoh) | |
Drug_1D[:,t+1] = tempd[:] | |
Col_1D[:,t+1] = tempc[:] | |
Cm_1D[:,t+1] = tempm[:] | |
Drugcoo_1D[:,t+1] = tempD[:] | |
Colcoo_1D[:,t+1] = tempC[:] | |
Cmcoo_1D[:,t+1] = tempM[:] | |
CH_1D[:,t+1] = temph[:] | |
COH_1D[:,t+1] = tempH[:] | |
Col_1D[0,t+1] = Col_1D[1,t+1] | |
Cm_1D[0,t+1] = Cm_1D[1,t+1] | |
Drugcoo_1D[0,t+1] = Drugcoo_1D[1,t+1] | |
Colcoo_1D[0,t+1] = Colcoo_1D[1,t+1] | |
Cmcoo_1D[0,t+1] = Cmcoo_1D[1,t+1] | |
CH_1D[0,t+1] = CH_1D[1,t+1] | |
COH_1D[0,t+1] = COH_1D[1,t+1] | |
CH_1D[-1,t+1] = CH0 | |
return(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,A) | |
def Porosity( Maskfit_1D,invMaskfit_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,Rol_1D,Rm_1D, | |
Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Drug_1D,Drugcoo_1D,DCol_1D,DCm_1D,DDrug_1D, | |
DCH_1D,t,fDrug,Ce0,dt ,rb,dx ,CeSwell_1D,Mask_1D,Xc_1D,Xcend_1D,Xext_1D): | |
VporeCol_1D[:,t+1]= Maskfit_1D[:,t+1]*( | |
(( (Rol_1D[:,t+1]+Rm_1D[:,t+1])/Ce0) | |
- (Col_1D[:,t+1]+Colcoo_1D[:,t+1]-Col0 | |
+ Cm_1D[:,t+1]+Cmcoo_1D[:,t+1]-Cm0) /Ce0 ) | |
* (1-Xc0) + Xc_1D[:,t] ) | |
VporeDrug_1D[:,t+1]= Maskfit_1D[:,t+1]*( 1 - (Drug_1D[:,t+1]+Drugcoo_1D[:,t+1])/((Drug_1D[:,0]+Drugcoo_1D[:,0])+tisMask_1D[:])) | |
Vpore_1D[:,t+1]=(VporeCol_1D[:,t+1]) | |
Dpolymer_Col_Swell = Dpolymer_Col * np.exp( -Beta*(1- (CeSwell_1D[t+1]))) | |
Dpolymer_Drug_Swell= Dpolymer_Drug* np.exp( -Beta*(1- (CeSwell_1D[t+1]))) | |
Dpolymer_Cm_Swell = Dpolymer_Cm * np.exp( -Beta*(1- (CeSwell_1D[t+1]))) | |
Dpolymer_CH_Swell = Dpolymer_CH * np.exp( -Beta*(1- (CeSwell_1D[t+1]))) | |
if Dpolymer_Col_Swell > Dpore_Col: Dpolymer_Col_Swell = Dpore_Col | |
if Dpolymer_Drug_Swell > Dpore_Drug: Dpolymer_Drug_Swell = Dpore_Drug | |
if Dpolymer_Cm_Swell > Dpore_Cm: Dpolymer_Cm_Swell = Dpore_Cm | |
if Dpolymer_CH_Swell > Dpore_CH: Dpolymer_CH_Swell = Dpore_CH | |
DCol_1D[:,t+1] = invMaskfit_1D[:,t+1]*Dpore_Col + Maskfit_1D[:,t+1]*(Dpolymer_Col_Swell+(1.3*Vpore_1D[:,t+1]**2-0.3*Vpore_1D[:,t+1]**3)*(Dpore_Col-Dpolymer_Col_Swell)) | |
DCm_1D[:,t+1] = invMaskfit_1D[:,t+1]*Dpore_Cm + Maskfit_1D[:,t+1]*(Dpolymer_Cm_Swell+(1.3*Vpore_1D[:,t+1]**2-0.3*Vpore_1D[:,t+1]**3)*(Dpore_Cm-Dpolymer_Cm_Swell)) | |
DCH_1D[:,t+1] = invMaskfit_1D[:,t+1]*Dpore_CH + Maskfit_1D[:,t+1]*(Dpolymer_CH_Swell+(1.3*Vpore_1D[:,t+1]**2-0.3*Vpore_1D[:,t+1]**3)*(Dpore_CH-Dpolymer_CH_Swell)) | |
DDrug_1D[:,t+1] = invMaskfit_1D[:,t+1]*Dpore_Drug + Maskfit_1D[:,t+1]*(Dpolymer_Drug_Swell+(1.3*Vpore_1D[:,t+1]**2-0.3*Vpore_1D[:,t+1]**3)*(Dpore_Drug-Dpolymer_Drug_Swell)) | |
DDrug_1D[:,t+1] = np.copy(DDrug_1D[:,t+1])*(1-tisMask_1D) + Dpore_Drug_Tissue*(tisMask_1D) | |
return(Maskfit_1D,invMaskfit_1D,VporeCol_1D,VporeDrug_1D,Vpore_1D,Rol_1D,Rm_1D, | |
Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Drug_1D,Drugcoo_1D,DCol_1D,DCm_1D,DDrug_1D, | |
DCH_1D,t,fDrug) | |
def UpdateDiffusion( | |
Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t,dt,rb,dx,invtisMask_1D,tisMask_1D,Rol_1D,Rm_1D ): | |
r = np.linspace(0,Lx,nx) | |
sig_xRC = np.zeros(nx) | |
sig_xLC = np.zeros(nx) | |
sig_xyC = np.zeros(nx) | |
rDCol_1D = np.zeros(nx) | |
rDDrug_1D = np.zeros(nx) | |
rDCH_1D = np.zeros(nx) | |
rDCm_1D = np.zeros(nx) | |
rDCol_1D[:] = DCol_1D[:,t+1] | |
rDDrug_1D[:] = DDrug_1D[:,t+1] | |
rDCH_1D[:] = DCH_1D[:,t+1] | |
rDCm_1D[:] = DCm_1D[:,t+1] | |
# ============================================================================= | |
# Diffusion | |
# ============================================================================= | |
w1 = 1# 2/3 | |
w2 =1# 4/3 | |
w3 = 0# 1/3 | |
r = np.linspace(0,Lx,nx)#/Lx | |
dr = r[1]-r[0] | |
I = np.linspace(1,nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCol_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCol_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCol_1D[1:nx-1] + rDCol_1D[2:nx]/2+ rDCol_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A1 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B1 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C1 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDDrug_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDDrug_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDDrug_1D[1:nx-1] + rDDrug_1D[2:nx]/2+ rDDrug_1D[:nx-2]/2) | |
sig_xyC[0] = 1 + sig_xRC[2]#dt*(rDDrug_1D[0,t+1]+rDDrug_1D[1,t+1])/2*6*dt/dr**2 | |
sig_xRC[1] = -sig_xRC[2] #dt*(rDDrug_1D[0,t+1]+rDDrug_1D[1,t+1])/2*6*dt/dr**2 | |
sig_xyC[-1] = 1 | |
# if t ==1: A = np.diag(sig_xLC[:-1],-1)+np.diag(sig_xyC,0)+np.diag(sig_xRC[1:],1) | |
A2 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B2 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C2 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCH_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCH_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCH_1D[1:nx-1] + rDCH_1D[2:nx]/2+ rDCH_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A3 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B3 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C3 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
sig_xRC[2:nx] = -(w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1]/2/I[1:nx-1]*I[2:nx]+rDCm_1D[2:nx]/2 ) | |
sig_xLC[0:nx-2] = -(w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1]/2/I[1:nx-1]*I[:nx-2]+rDCm_1D[0:nx-2]/2 ) | |
sig_xyC[1:nx-1] = 1 + (w1)*(dt/(dr)**2)*(rDCm_1D[1:nx-1] + rDCm_1D[2:nx]/2+ rDCm_1D[:nx-2]/2) | |
sig_xyC[0] = sig_xyC[-1] = 1 | |
A4 = sparse.spdiags([sig_xyC[:],sig_xRC[:],sig_xLC[:]],[0,1,-1],nx,nx) | |
B4 = sparse.spdiags([(w2)*np.ones(nx)],[0],nx,nx) | |
C4 = sparse.spdiags([(w3)*np.ones(nx)],[0],nx,nx) | |
# ============================================================================= | |
# Solving The System of PDEs | |
# ============================================================================= | |
bdrug = (B2.dot(Drug_1D[:,t])) | |
cdrug = (C2.dot(Drug_1D[:,t-1])) | |
Bdrug = bdrug-cdrug | |
bcol = (B1.dot(Col_1D[:,t])) | |
ccol = (C1.dot(Col_1D[:,t-1])) | |
Bcol = bcol-ccol | |
bcm = (B4.dot(Cm_1D[:,t])) | |
ccm = (C4.dot(Cm_1D[:,t-1])) | |
Bcm = bcm-ccm | |
bdrugcoo = (B2.dot(Drugcoo_1D[:,t])) | |
cdrugcoo = (C2.dot(Drugcoo_1D[:,t-1])) | |
Bdrugcoo = bdrugcoo-cdrugcoo | |
bcolcoo = (B1.dot(Colcoo_1D[:,t])) | |
ccolcoo = (C1.dot(Colcoo_1D[:,t-1])) | |
Bcolcoo = bcolcoo-ccolcoo | |
bcmcoo = (B4.dot(Cmcoo_1D[:,t])) | |
ccmcoo = (C4.dot(Cmcoo_1D[:,t-1])) | |
Bcmcoo = bcmcoo-ccmcoo | |
bch = (B3.dot(CH_1D[:,t])) | |
cch = (C3.dot(CH_1D[:,t-1])) | |
Bch = bch-cch | |
bch2o = (B3.dot(CH2O_1D[:,t])) | |
cch2o = (C3.dot(CH2O_1D[:,t-1])) | |
Bch2o = bch2o - cch2o | |
bcoh = (B3.dot(COH_1D[:,t])) | |
ccoh = (C3.dot(COH_1D[:,t-1])) | |
Bcoh = bcoh - ccoh | |
# ============================================================================= | |
tempd= spsolve(A2, Bdrug) | |
tempc= spsolve(A1, Bcol) | |
tempm= spsolve(A4, Bcm) | |
tempD = spsolve(A2, Bdrugcoo) | |
tempC = spsolve(A1, Bcolcoo) | |
tempM = spsolve(A4, Bcmcoo) | |
temph= spsolve(A3, Bch) | |
tempH = spsolve(A3, Bcoh) | |
Drug_1D[:,t+1] = tempd[:] | |
Col_1D[:,t+1] = tempc[:] | |
Cm_1D[:,t+1] = tempm[:] | |
Drugcoo_1D[:,t+1] = tempD[:] | |
Colcoo_1D[:,t+1] = tempC[:] | |
Cmcoo_1D[:,t+1] = tempM[:] | |
COH_1D[:,t+1] = tempH[:] | |
Col_1D[0,t+1] = Col_1D[1,t+1] | |
Cm_1D[0,t+1] = Cm_1D[1,t+1] | |
Colcoo_1D[0,t+1] = Colcoo_1D[1,t+1] | |
Cmcoo_1D[0,t+1] = Cmcoo_1D[1,t+1] | |
COH_1D[0,t+1] = COH_1D[1,t+1] | |
CH_1D[:,t+1] = temph[:] # * invtisMask_1D[:] + CH0*tisMask_1D[:] | |
CH_1D[0,t+1] = CH_1D[1,t+1] | |
CH_1D[-1,t+1] = CH0 | |
return(Drug_1D,Drugcoo_1D,Col_1D,Colcoo_1D,CH_1D,COH_1D,CH2O_1D,Cmcoo_1D,Cm_1D, | |
DDrug_1D,DCol_1D,DCH_1D,DCm_1D,t) | |
def Redistribution(Ce_1D,Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Cpol_1D,Cpolcoo_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Cend_1D | |
,Drug_1D,Drugcoo_1D,CSol_1D,CH2O_1D,CH_1D,COH_1D,t,rb,rb0,Cpol0,Ce0,Rb,CeSwell_1D): | |
OCopy_Ce_1D[:] = np.copy(Ce_1D[:,t-1]); OCopy_Col_1D[:] = np.copy(Col_1D[:,t-1]); OCopy_Colcoo_1D[:] = np.copy(Colcoo_1D[:,t-1]) | |
OCopy_Cm_1D[:] = np.copy(Cm_1D[:,t-1]); OCopy_Cmcoo_1D[:] = np.copy(Cmcoo_1D[:,t-1]); OCopy_Cpol_1D[:] = np.copy(Cpol_1D[:,t-1]); OCopy_Cpolcoo_1D[:] = np.copy(Cpolcoo_1D[:,t-1]) | |
OCopy_Res_1D[:] = np.copy(Res_1D[:,t-1]); OCopy_Rrs_1D[:] = np.copy(Rrs_1D[:,t-1]); OCopy_Rol_1D[:] = np.copy(Rol_1D[:,t-1]); OCopy_Rm_1D[:] = np.copy(Rm_1D[:,t-1]) | |
OCopy_Cend_1D[:] = np.copy(Cend_1D[:,t-1]); OCopy_Drug_1D[:] = np.copy(Drug_1D[:,t-1]); OCopy_Drugcoo_1D[:] = np.copy(Drugcoo_1D[:,t-1]); OCopy_CSol_1D[:] = np.copy(CSol_1D[:,t-1]) | |
OCopy_CH2O_1D[:] = np.copy(CH2O_1D[:,t-1]); OCopy_CH_1D[:] = np.copy(CH_1D[:,t-1]); OCopy_COH_1D[:] = np.copy(COH_1D[:,t-1]); OCopy_CSol_1D[:] = np.copy(CSol_1D[:,t-1]) | |
Copy_Ce_1D[:] = np.copy(Ce_1D[:,t]); Copy_Col_1D[:] = np.copy(Col_1D[:,t]); Copy_Colcoo_1D[:] = np.copy(Colcoo_1D[:,t]); Copy_Cm_1D[:] = np.copy(Cm_1D[:,t]) | |
Copy_Cmcoo_1D[:] = np.copy(Cmcoo_1D[:,t]); Copy_Cpol_1D[:] = np.copy(Cpol_1D[:,t]); Copy_Cpolcoo_1D[:] = np.copy(Cpolcoo_1D[:,t]); Copy_Res_1D[:] = np.copy(Res_1D[:,t]) | |
Copy_Rrs_1D[:] = np.copy(Rrs_1D[:,t]); Copy_Rol_1D[:] = np.copy(Rol_1D[:,t]); Copy_Rm_1D[:] = np.copy(Rm_1D[:,t]); Copy_Cend_1D[:] = np.copy(Cend_1D[:,t]) | |
Copy_Drug_1D[:] = np.copy(Drug_1D[:,t]); Copy_Drugcoo_1D[:] = np.copy(Drugcoo_1D[:,t]); Copy_CSol_1D[:] = np.copy(CSol_1D[:,t]); Copy_CH2O_1D[:] = np.copy(CH2O_1D[:,t]) | |
Copy_CH_1D[:] = np.copy(CH_1D[:,t]); Copy_COH_1D[:] = np.copy(COH_1D[:,t]); Copy_CSol_1D[:] = np.copy(CSol_1D[:,t]) | |
rbp = Rb[t-1]; rb = Rb[t] | |
Vb = (4/3*np.pi*rb**3); Vbp = (4/3*np.pi*rbp**3) | |
Vsi = (4/3*np.pi)*((rb0**3) - (rb0-rs)**3); Vsf = (4/3*np.pi)*((rb**3) - (rb - rs)**3) | |
CeSwell_1D[t] = Vsf/Vsi | |
Ce_1D[:,t] = 1/CeSwell_1D[t] * Copy_Ce_1D[:]; Col_1D[:,t] = Vbp/Vb * Copy_Col_1D[:] | |
Colcoo_1D[:,t] = Vbp/Vb * Copy_Colcoo_1D[:]; Cm_1D[:,t] = Vbp/Vb * Copy_Cm_1D[:] | |
Cmcoo_1D[:,t] = Vbp/Vb * Copy_Cmcoo_1D[:]; Cpol_1D[:,t] = Vbp/Vb * Copy_Cpol_1D[:] | |
Cpolcoo_1D[:,t] = Vbp/Vb * Copy_Cpolcoo_1D[:]; Drug_1D[:,t] = Vbp/Vb * Copy_Drug_1D[:] | |
Drugcoo_1D[:,t] = Vbp/Vb * Copy_Drugcoo_1D[:]; CSol_1D[:,t] = Vbp/Vb * Copy_CSol_1D[:] | |
CH2O_1D[:,t] = Vbp/Vb * Copy_CH2O_1D[:]; CH_1D[:,t] = Vbp/Vb * Copy_CH_1D[:]; CSol_1D[:,t] = Vbp/Vb * Copy_CSol_1D[:] | |
Ce_1D[:,t-1] = 1/CeSwell_1D[t] * OCopy_Ce_1D[:]; Col_1D[:,t-1] = Vbp/Vb * OCopy_Col_1D[:] | |
Colcoo_1D[:,t-1] = Vbp/Vb * OCopy_Colcoo_1D[:]; Cm_1D[:,t-1] = Vbp/Vb * OCopy_Cm_1D[:] | |
Cmcoo_1D[:,t-1] = Vbp/Vb * OCopy_Cmcoo_1D[:]; Cpol_1D[:,t-1] = Vbp/Vb * OCopy_Cpol_1D[:] ;Cpolcoo_1D[:,t-1] = Vbp/Vb * OCopy_Cpolcoo_1D[:] | |
Drug_1D[:,t-1] = Vbp/Vb * OCopy_Drug_1D[:]; Drugcoo_1D[:,t-1] = Vbp/Vb * OCopy_Drugcoo_1D[:] | |
CSol_1D[:,t-1] = Vbp/Vb * OCopy_CSol_1D[:]; CH_1D[:,t-1] = Vbp/Vb * OCopy_CH_1D[:]; CSol_1D[:,t-1] = Vbp/Vb * OCopy_CSol_1D[:] | |
return(Ce_1D,Col_1D,Colcoo_1D,Cm_1D,Cmcoo_1D,Cpol_1D,Cpolcoo_1D,Res_1D,Rrs_1D,Rol_1D,Rm_1D,Cend_1D | |
,Drug_1D,Drugcoo_1D,CSol_1D,CH2O_1D,CH_1D,COH_1D,DrugRelease_1D) | |
(DDrug_1D,Drug_1D,Drugcoo_1D,Maskfit_1D, | |
CSol_1D,CH2O_1D,DDrug_1D,A,omega,Ce0,invtisMask_1D,phi_SM,phi_PM,phi_WM,CH_1D, | |
nstart,nend,Ce_1D,Cend_1D,Xc_1D ,Rb,dX, TimeR, TimeT, DrugRelease_1D,CeSwell_1D, | |
Rrs_1D,Res_1D,Vpore_1D,Mn_1D,invMaskfit_1D,DCH_1D, | |
Cpol_1D, Cpolcoo_1D, Col_1D, Colcoo_1D, Cm_1D, Cmcoo_1D, Rol_1D,Rm_1D | |
)= ImplantModel(Variables) | |
N = len(Drug_1D[0,:]) | |
DrugRel = np.zeros((nx,N)) | |
for n in range(0,N): | |
DrugRel[:,n] = (Drug_1D[:,n]*Mask_1D) + (Drugcoo_1D[:,n]*Mask_1D) | |
SumDrug = np.sum(DrugRel,axis=0) | |
ProfileDrug = 1-SumDrug/SumDrug[0] | |
ProfileMn = np.zeros(N) | |
# | |
#np.savetxt('Drug_1D.txt',Drug_1D) | |
#np.savetxt('Drugcoo_1D.txt',Drugcoo_1D) | |
#np.savetxt('CH_1D.txt',CH_1D) | |
#np.savetxt('Maskfit_1D.txt',Maskfit_1D) | |
#np.savetxt('TimeR.txt',TimeR) | |
#np.savetxt('TimeT.txt',TimeT) | |
#np.savetxt('ProfileDrug.txt',ProfileDrug) | |
# | |
def PlotDrugF(): | |
plt.figure(2,figsize=(8,6)) | |
if ((Degr == 1)): plt.plot(TimeR[1:-1],(ProfileDrug[1:-1]),color='navy',linestyle='-',linewidth=2.5) | |
if ((Degr == 0)): plt.plot(TimeR[1:-1],(ProfileDrug[1:-1]),color='grey',linestyle='--',linewidth=2.5) | |
plt.errorbar(Data[0,:],Data[1,:]/100,yerr=Data[2,:]/100,color='k',marker='o',linestyle='',capsize=3,ecolor='gray') | |
plt.xlim((-1,(Data[0,-1]+1))) | |
plt.ylim((0,1)) | |
plt.xlabel('Time (Days)',fontsize=20) | |
plt.ylabel('Drug Released (normalized)',fontsize=20) | |
def PlotDrug(): | |
plt.figure(1,figsize=(8,6)) | |
plt.plot(TimeR[1:],(ProfileDrug[:-1]),label='MW: %2.0f kDa' %(int(MW/1000))) #,color='royalblue',linestyle='--',linewidth=2.5) | |
# plt.plot(TimeR[1:],(ProfileDrug[:-1]))#,color='navy',linestyle='-',linewidth=2.5) | |
plt.errorbar(Data[0,:],Data[1,:]/100,yerr=Data[2,:]/100,color='k',marker='o',linestyle='',capsize=3,ecolor='gray') | |
#plt.legend(loc='best') | |
plt.xlim((-1,(Data[0,-1]+1))) | |
plt.ylim((0,1)) | |
plt.xlabel('Time (Days)',fontsize=20) | |
plt.ylabel('Drug Released (normalized)',fontsize=20) | |
PlotDrug() | |
for ij in range(0,5): | |
print('\007') | |
time.sleep(1) | |
nt = len(TimeR) | |
MassTotal = np.zeros((nx,nt)) | |
MassPoly = np.zeros((nx,nt)) | |
MassDrug = np.zeros((nx,nt)) | |
MassSol = np.zeros((nx,nt)) | |
MassTotalSum = np.zeros(nt) | |
MassTotalPoly = np.zeros(nt) | |
MassTotalDrug = np.zeros(nt) | |
MassTotalSol = np.zeros(nt) | |
Vimplant = (4/3*np.pi*rb0**3) | |
PoreV = (4/3*np.pi*(rb-rs)**3)*0.74048 * (rp)**3/(rp+0.5*thick)**3 | |
PolymerV = (4/3*np.pi*(rb-rs)**3) - PoreV + 4/3*np.pi*(rb**3 - (rb-rs)**3) | |
for n in range(0,nt): | |
MassPoly[:,n] = ( | |
invtisMask_1D[:]*0*( (Col_1D[:,n]+Colcoo_1D[:,n]) | |
+(Cm_1D[:,n]+Cmcoo_1D[:,n]) | |
)/(np.sum(invtisMask_1D[:]))*Vimplant*MWpolyunit | |
+ (Ce_1D[:,n] )/(np.sum(Mask_1D[:]))*(Vimplant*(PolymerV/(PolymerV+PoreV)))*MWpolyunit) | |
MassDrug[:,n] = invtisMask_1D[:]*((Drug_1D[:,n]+Drugcoo_1D[:,n]) | |
)/(np.sum(invtisMask_1D[:]))*Vimplant*Mw_d | |
MassSol[:,n] = invtisMask_1D[:]*(CSol_1D[:,n] | |
)/(np.sum(invtisMask_1D[:]))*Vimplant*Mw_s | |
MassTotal[:,n] = (MassPoly[:,n] + MassDrug[:,n] +MassSol[:,n] | |
) | |
MassTotalPoly = np.sum(MassPoly[:,:],axis=0) | |
MassTotalDrug = np.sum(MassDrug[:,:],axis=0) | |
MassTotalSol = np.sum(MassSol[:,:],axis=0) | |
MassTotalSum = (np.sum(MassTotal[:,:],axis=0))/np.sum(MassTotal[:,0],axis=0) | |
Times = [0,1,2.5,5,7.5,10,12.5,15,17.5,20,22.5]; Tim = 0 | |
if Lt >=30: Times = [0,1,2.5,5,7.5,10,12.5,15,17.5,20,22.5,25,27.5,30]; Tim = 0 | |
nd = len(Times) | |
Times_ind = np.zeros(nd) | |
for k in range(2,nt-1): | |
if (TimeR[k] >= Times[Tim]): | |
Times_ind[Tim] = k; Tim+=1 | |
if Tim > nd-1: break | |
a = np.zeros((nx,nd)); b = np.zeros((nx,nd)); c = np.zeros((nx,nd)) | |
for k in range(0, nd): | |
c[:,k] = phi_PM[:,int(Times_ind[k])] | |
a[:,k] = phi_SM[:,int(Times_ind[k])] | |
b[:,k] = phi_WM[:,int(Times_ind[k])] | |
Masks = np.zeros((nx,nd)) | |
for i in range(0,nd-1): | |
Masks[:,i] = Mask_1D[:] | |
avg_a = np.sum(a*Masks,axis=0)/np.sum(Mask_1D) | |
avg_b = np.sum(b*Masks,axis=0)/np.sum(Mask_1D) | |
avg_c = np.sum(c*Masks,axis=0)/np.sum(Mask_1D) | |
Times = [0,0.5,1,2,3,4,5]; Tim = 0 | |
nd = len(Times) | |
Times_ind = np.zeros(nd) | |
for k in range(2,nt-1): | |
if (TimeR[k] >= Times[Tim]): | |
Times_ind[Tim] = k; Tim+=1 | |
if Tim > nd-1: break | |
avg_a_ear = np.zeros((nx,nd)); avg_b_ear = np.zeros((nx,nd)); avg_c_ear = np.zeros((nx,nd)) | |
for k in range(0, nd): | |
avg_c_ear[:,k] = phi_PM[:,int(Times_ind[k])] | |
avg_a_ear[:,k] = phi_SM[:,int(Times_ind[k])] | |
avg_b_ear[:,k] = phi_WM[:,int(Times_ind[k])] | |
a = avg_a#avvg_a | |
b = avg_b#avg_b | |
c = avg_c#avg_c | |
# translate the data to cartesian corrds | |
with np.errstate(divide='ignore', invalid='ignore'): | |
x_deg = 0.5 * ( 2.*b+c ) / ( a+b+c ) | |
y_deg = 0.5*np.sqrt(3) * c / (a+b+c) | |
#T = tri.Triangulation(x,y) | |
Masks = np.zeros((nx,nd)) | |
for i in range(0,nd-1): | |
Masks[:,i] = Mask_1D[:] | |
a_ear = np.sum(avg_a_ear*Masks,axis=0)/np.sum(Mask_1D) | |
b_ear = np.sum(avg_b_ear*Masks,axis=0)/np.sum(Mask_1D) | |
c_ear = np.sum(avg_c_ear*Masks,axis=0)/np.sum(Mask_1D) | |
# translate the data to cartesian corrds | |
with np.errstate(divide='ignore', invalid='ignore'): | |
x_ear = 0.5 * ( 2.*b_ear + c_ear ) / ( a_ear+b_ear+c_ear ) | |
y_ear = 0.5*np.sqrt(3) * c_ear / (a_ear+b_ear+ c_ear) | |
#T = tri.Triangulation(x_ear,y_ear) | |
TerData1 = np.array([[0.215,0.325],[0.182,0.301],[0.165,0.206],[0.130,0.182],[0.0936,0.0862],[0.0878,0.0567],[0.0822,0.0634],[0.0776,0.0487],[0.064,0.022],[0.0662,0.00726],[0.08202,0.01389],[0.0764,0.0166]]) | |
TerData2 = np.array([[0.150,0.227],[0.131,0.20],[0.119,0.157],[0.0993,0.118],[0.0891,0.10],[0.078,0.077],[0.0641,0.0475],[0.0584,0.0354],[0.0482,0.0154],[0.0493,0.00734]]) | |
TerData3 = np.array([[0.043,0.0144],[0.0483,0.0287],[0.0499,0.0449],[0.0599,0.06018],[0.066,0.0754],[0.0737,0.0754],[0.09374,0.124]]) | |
ter4=np.array([[0.281720061, 0.017675118, 0.700604821],[0.316630745, 0.021686924, 0.661682331],[0.353163198, 0.027320502, 0.6195163],[0.386452111, 0.029710538, 0.583837351],[0.421362794, 0.033722345, 0.544914861],[0.456273478, 0.037734152, 0.505992371],[0.492588655, 0.040341464, 0.467069881],[0.520042314, 0.045323213, 0.434634472],[0.553331227, 0.04771325, 0.398955523],[0.585215646, 0.05150778, 0.363276574],[0.611047534, 0.054867759, 0.334084706],[0.648984483, 0.059096842, 0.291918675],[0.674816371, 0.062456821, 0.262726808],[0.705296295, 0.067655846, 0.227047859],[0.749503049, 0.075345746, 0.175151205],[0.783009238, 0.080762047, 0.136228715],[0.816949979, 0.092230878, 0.090819143],[0.839972879, 0.098399845, 0.061627276],[0.85251249, 0.105321479, 0.042166031],[0.859434124, 0.11786109, 0.022704786],[0.860303228, 0.129966149, 0.009730623]]) | |
tl = len(ter4[:,0]) | |
TerData4 = np.zeros((tl,2)) | |
TerData4[:,0] = 0.5 * ( 2.*ter4[:,1]+ter4[:,2] ) / ( ter4[:,0]+ter4[:,1]+ter4[:,2] ) | |
TerData4[:,1] = 0.5*np.sqrt(3) * ter4[:,2] / ( ter4[:,0]+ter4[:,1]+ter4[:,2] ) | |
TitraMV = np.copy(TitraM) | |
TitraMV[0,:] = 0.6*TitraM[0,:] | |
WperV = np.linspace(0,0.6,1000) | |
TitraFV = np.zeros(len(WperV)) | |
TitraFV[:] = 1 + (0-1)/(1+np.power(WperV[:]/Titr_fits[1,Ti],Titr_fits[2,Ti])) | |
for i in range(0,len(WperV)-1): | |
if TitraFV[i] >= 0.5: | |
break | |
Meta = WperV[i] | |
PolVal = np.zeros(1000) | |
WatVal = np.zeros(1000) | |
SolVal = np.zeros(1000) | |
PolVal = np.linspace(0,1,1000) | |
WatVal[:] = (1-PolVal)*Meta | |
SolVal = (1-PolVal) * (1-Meta) | |
test_data = np.zeros((1000,3)) | |
test_data[:,:] = np.transpose(np.array([SolVal,WatVal,PolVal]) ) | |
# barycentric coords: (a,b,c) | |
a=test_data[:,0] | |
b=test_data[:,1] | |
c=test_data[:,2] | |
# translate the data to cartesian corrds | |
xmeta = 0.5 * ( 2.*b+c ) / ( a+b+c ) | |
ymeta = 0.5*np.sqrt(3) * c / (a+b+c) | |
def PlotTer(): | |
# ============================================================================= | |
# | |
# ============================================================================= | |
plt.figure(6,figsize=(15,6)) | |
plt.subplot(121) | |
# ============================================================================= | |
# plt.tricontourf(x,y,T.triangles,v,cmap='Greys') | |
# ============================================================================= | |
# create the grid | |
corners = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3)*0.5]]) | |
triangle = tri.Triangulation(corners[:, 0], corners[:, 1]) | |
# creating the grid | |
refiner = tri.UniformTriRefiner(triangle) | |
trimesh = refiner.refine_triangulation(subdiv=3) | |
plt.triplot(trimesh,linestyle='-',color='lightgrey') | |
plt.title('Polymer',fontsize=14) | |
plt.xlabel('NMP H2O',fontsize=14) | |
plt.show() | |
if MW == 15000: | |
plt.plot(x_ear,y_ear,marker='o',linestyle='--',color='lightblue') | |
elif MW == 29000: | |
plt.plot(x_ear,y_ear,marker='o',linestyle='--',color='b') | |
elif MW == 53000: | |
plt.plot(x_ear,y_ear,marker='o',linestyle='--',color='darkblue') | |
##plt.plot(x,y,linestyle='--',color='b') | |
if MW == 53000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='53 kDa') | |
elif MW == 29000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='29 kDa') | |
elif MW == 15000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='15 kDa') | |
plt.subplot(122) | |
# ============================================================================= | |
# plt.tricontourf(x,y,T.triangles,v,cmap='Greys') | |
# ============================================================================= | |
# create the grid | |
corners = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3)*0.5]]) | |
triangle = tri.Triangulation(corners[:, 0], corners[:, 1]) | |
# creating the grid | |
refiner = tri.UniformTriRefiner(triangle) | |
trimesh = refiner.refine_triangulation(subdiv=3) | |
plt.triplot(trimesh,linestyle='-',color='lightgrey') | |
plt.title('Polymer',fontsize=14) | |
plt.xlabel('NMP H2O',fontsize=14) | |
plt.show() | |
if MW == 15000: | |
plt.plot(x_deg,y_deg,marker='o',linestyle='--',color='lightblue') | |
elif MW == 29000: | |
plt.plot(x_deg,y_deg,marker='o',linestyle='--',color='b') | |
elif MW == 53000: | |
plt.plot(x_deg,y_deg,marker='o',linestyle='--',color='darkblue') | |
#plt.plot(x,y,linestyle='--',color='b') | |
if MW == 53000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='53 kDa') | |
elif MW == 29000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='29 kDa') | |
elif MW == 15000: | |
plt.plot(xmeta,ymeta,color='k',linestyle='--',linewidth=2,label='15 kDa') | |
corners = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3)*0.5]]) | |
triangle = tri.Triangulation(corners[:, 0], corners[:, 1]) | |
refiner = tri.UniformTriRefiner(triangle) | |
trimesh = refiner.refine_triangulation(subdiv=3) | |
plt.triplot(trimesh,linestyle='-',color='lightgrey') | |
plt.title('Polymer') | |
plt.xlabel('NMP H2O',fontsize=14) | |
plt.show() |