Skip to content

Commit

Permalink
fixed some conversion funcs, added new ones
Browse files Browse the repository at this point in the history
  • Loading branch information
Will Box authored and Will Box committed Feb 17, 2024
1 parent 13efc1b commit 836ab30
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 8 deletions.
42 changes: 34 additions & 8 deletions src/HelperFunctions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -372,22 +372,48 @@ function density_to_molar_volume(density_g_cm3, mole_fractions, molecular_weight
return molar_volume # L / mol
end

# todo verify this
"Convert `CC(STP)/CC(polymer)`` to `g(penetrant)/g(polymer)`"
function ccpen_per_ccpol_to_gpen_per_gpol(cc_per_cc, polymer_density_g_cm3, penetrant_molecular_weight)
return cc_per_cc / CC_PER_MOL_STP * penetrant_molecular_weight / polymer_density_g_cm3
end

"Convert polymer phase mass fractions to `g(penetrant)/g(polymer)`. Assumes that the polymer is the first item in the vector."
function polymer_phase_mass_fractions_to_gpen_per_gpol(mass_fractions)
return mass_fractions[2:end] ./ mass_fractions[1]
end

"Convert polymer phase mass fraction to CC(STP)/CC(polymer)."
"Convert polymer phase mass fraction to CC(STP)/CC(polymer). Assumes that the polymer is the first item in the vector."
function polymer_phase_mass_fractions_to_ccpen_per_ccpol(mass_fractions, polymer_density_g_cm3, penetrant_molecular_weights)
# mass fractions includes the polymer
g_per_g = polymer_phase_mass_fractions_to_gpen_per_gpol(mass_fractions)
return g_per_g * CC_PER_MOL_STP * polymer_density_g_cm3 ./ penetrant_molecular_weights
end

# todo verify this
"Convert `CC(STP)/CC(polymer)`` to `g(penetrant)/g(polymer)`"
function ccpen_per_ccpol_to_gpen_per_gpol(cc_per_cc, polymer_density_g_cm3, penetrant_molecular_weight)
return cc_per_cc / CC_PER_MOL_STP * penetrant_molecular_weight / polymer_density_g_cm3
mass_pol = mass_fractions[1]
mass_pens = mass_fractions[2:end]

vol_pol = mass_pol / polymer_density_g_cm3 # cm3
mol_pens = mass_pens ./ penetrant_molecular_weights # g / (g/mol) = mol

cc_pens = mol_pens .* CC_PER_MOL_STP # mol * cc(STP) /mol = cc(STP)
concs = cc_pens ./ vol_pol # CC/CC
return concs

# g_per_g = polymer_phase_mass_fractions_to_gpen_per_gpol(mass_fractions)
# return g_per_g * CC_PER_MOL_STP * polymer_density_g_cm3 ./ penetrant_molecular_weights
end

"Convert concentrations in CC(STP)/CC(polymer) to polymer phase mass fractions. The first index will be the polymer."
function ccpen_per_ccpol_to_mass_fractions(cc_per_cc, polymer_density_g_cm3, penetrant_molecular_weights)
@assert length(cc_per_cc) == length(penetrant_molecular_weights)
# assume that x cc/cc is x CC STP per 1 cm3 of polymer
mol_pens = cc_per_cc ./ CC_PER_MOL_STP # cm3(stp) / (cm3(STP)/mol) = mol
mass_pens = mol_pens .* penetrant_molecular_weights # mol * g/mol = g
mass_poly = 1 * polymer_density_g_cm3
mass_system = sum(mass_pens) + mass_poly
mfracs = [mass_poly/mass_system; mass_pens ./ mass_system]
return mfracs

# mfrac_i = cc_per_cc .* penetrant_molecular_weights ./ (CC_PER_MOL_STP .* polymer_density_g_cm3)
# return [1-sum(mfrac_i); mfrac_i]
end

"Convert polymer density to specific volume, optionally with dilation."
Expand Down
1 change: 1 addition & 0 deletions src/MembraneBase.jl
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ module MembraneBase
export density_to_molar_volume
export polymer_phase_mass_fractions_to_gpen_per_gpol
export polymer_phase_mass_fractions_to_ccpen_per_ccpol
export ccpen_per_ccpol_to_mass_fractions
export polymer_specific_volume

# isotherm methods
Expand Down
13 changes: 13 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,19 @@ using TaylorSeries
recovered_mole_fractions = mass_fractions_to_mole_fractions(mass_fractions, molecular_weights)
@test mole_fractions recovered_mole_fractions

rho = 1.1
mw = [11, 12, 13, 14, 15]
ccs_1 = [1, 2, 3, 4, 5]

mfracs = MembraneBase.ccpen_per_ccpol_to_mass_fractions(ccs_1, rho, mw)
recovered_concs = polymer_phase_mass_fractions_to_ccpen_per_ccpol(mfracs, rho, mw)
@test recovered_concs ccs_1

ccs_2 = 4
mfrac = MembraneBase.ccpen_per_ccpol_to_mass_fractions(ccs_2, rho, mw[4])
recovered_conc = polymer_phase_mass_fractions_to_ccpen_per_ccpol(mfrac, rho, mw[4])
@test ccs_2 recovered_conc[1]

molar_volume = 0.228 # L/mol
density = molar_volume_to_density(molar_volume, mole_fractions, molecular_weights)
recovered_molar_volume = density_to_molar_volume(density, mole_fractions, molecular_weights)
Expand Down

0 comments on commit 836ab30

Please sign in to comment.