HI All,
I saw an error when I was trying to simulate affinity chrom with two components.
It says "CompletedProcess(args=['c:/cadet/bin/cadet-cli.exe', 'model.h5'], returncode=1, stdout=b'', stderr=b'ERROR: The required parameter "PAR_TYPE_VOLFRAC" was not found\r\n')
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_34100\2242269908.py in <module>
9 else:
10 print(data)
---> 11 raise Exception("Simulation failed")
Exception: Simulation failed".
I read the instruction. I think PAR_TYPE_VOLFRAC is between 0 and 1 and it is optional.
If you can explain PAR_TYPE_VOLFRAC and give me some hints, it will be greatly appricaited!
Thanks.
Here is my code:
import numpy as np
import matplotlib.pyplot as plt
from cadet import Cadet
Cadet.cadet_path = 'c:/cadet/bin/cadet-cli.exe'
model = Cadet()
n_comp = 2
n_unit = 3
model.root.input.model.nunits = n_unit
# inlet
model.root.input.model.unit_000.unit_type = 'INLET'
model.root.input.model.unit_000.ncomp = n_comp
model.root.input.model.unit_000.inlet_type = 'PIECEWISE_CUBIC_POLY'
model.root.input.model.unit_001.unit_type = 'LUMPED_RATE_MODEL_WITH_PORES'
model.root.input.model.unit_001.ncomp = 1
## Geometry
model.root.input.model.unit_001.col_length = 0.6 # m
model.root.input.model.unit_001.cross_section_area = 0.0001 # m
model.root.input.model.unit_001.col_porosity = 0.37 # -
model.root.input.model.unit_001.par_porosity = 0.63 # -
model.root.input.model.unit_001.par_radius = 4.5e-5 # m
## Transport
model.root.input.model.unit_001.col_dispersion = 2e-6 # m^2 / s (interstitial volume)
model.root.input.model.unit_001.film_diffusion = [1e-4, 1e-4] # m / s
# model.root.input.model.unit_001.par_diffusion = [1e-10,] # m^2 / s (mobile phase)
# model.root.input.model.unit_001.par_surfdiffusion = [0.0,] # m^2 / s (solid phase)
model.root.input.model.unit_001.adsorption_model = 'MULTI_COMPONENT_LANGMUIR'
model.root.input.model.unit_001.adsorption.is_kinetic = False
model.root.input.model.unit_001.adsorption.mcl_ka = [2, 3]
model.root.input.model.unit_001.adsorption.mcl_kd = [1, 1]
model.root.input.model.unit_001.adsorption.mcl_qmax = [1, 1]
model.root.input.model.unit_001.init_c = [0.0,]
model.root.input.model.unit_001.init_q = [0.0,]
### Grid cells
model.root.input.model.unit_001.discretization.ncol = 100
model.root.input.model.unit_001.discretization.npar = 5
### Bound states
model.root.input.model.unit_001.discretization.nbound = n_comp*[1]
### Other options
model.root.input.model.unit_001.discretization.par_disc_type = 'EQUIDISTANT_PAR'
model.root.input.model.unit_001.discretization.use_analytic_jacobian = 1
model.root.input.model.unit_001.discretization.reconstruction = 'WENO'
model.root.input.model.unit_001.discretization.gs_type = 1
model.root.input.model.unit_001.discretization.max_krylov = 0
model.root.input.model.unit_001.discretization.max_restarts = 10
model.root.input.model.unit_001.discretization.schur_safety = 1.0e-8
model.root.input.model.unit_001.discretization.weno.boundary_model = 0
model.root.input.model.unit_001.discretization.weno.weno_eps = 1e-10
model.root.input.model.unit_001.discretization.weno.weno_order = 3
## OUTLET
model.root.input.model.unit_002.unit_type = 'OUTLET'
model.root.input.model.unit_002.ncomp = n_comp
# Sections and connections
model.root.input.solver.sections.nsec = 2
model.root.input.solver.sections.section_times = [0.0, 50.0, 1200.0]
model.root.input.solver.sections.section_continuity = n_comp*[0,]
## Inlet Profile
model.root.input.model.unit_000.sec_000.const_coeff = n_comp*[1.0,]
model.root.input.model.unit_000.sec_001.const_coeff = n_comp*[0.0,]
## Switches
model.root.input.model.connections.nswitches = 1
model.root.input.model.connections.switch_000.section = 0
model.root.input.model.connections.switch_000.connections = [
0, 1, -1, -1, 1e-7,
1, 2, -1, -1, 1e-7
]
#set the times that the simulator writes out data for
model.root.input.solver.user_solution_times = np.linspace(0, 1200, 601)
model.root.input.model.solver.gs_type = 1
model.root.input.model.solver.max_krylov = 0
model.root.input.model.solver.max_restarts = 10
model.root.input.model.solver.schur_safety = 1e-8
# Number of cores for parallel simulation
model.root.input.solver.nthreads = 1
# Tolerances for the time integrator
model.root.input.solver.time_integrator.abstol = 1e-6
model.root.input.solver.time_integrator.algtol = 1e-10
model.root.input.solver.time_integrator.reltol = 1e-6
model.root.input.solver.time_integrator.init_step_size = 1e-6
model.root.input.solver.time_integrator.max_steps = 1000000
# Return data
model.root.input['return'].split_components_data = 0
model.root.input['return'].split_ports_data = 0
model.root.input['return'].unit_000.write_solution_bulk = 1
model.root.input['return'].unit_000.write_solution_inlet = 1
model.root.input['return'].unit_000.write_solution_outlet = 1
# Copy settings to the other unit operations
model.root.input['return'].unit_001 = model.root.input['return'].unit_000
model.root.input['return'].unit_002 = model.root.input['return'].unit_000
model.filename = 'model.h5'
model.save()
data = model.run()
if data.returncode == 0:
print("Simulation completed successfully")
model.load()
else:
print(data)
raise Exception("Simulation failed")