Samuel,
Thanks for your response!
I put my script here/below, in case if I did something wrong.
It crashes on last model.save(). I tried to do new .h5 file before but it does not help.
K
import numpy as np
from cadet import Cadet
Cadet.cadet_path = 'C:\\Users\\konstanting\\Anaconda3\\pkgs\\cadet-4.3.0-hbe28382_2\\bin'
import utils
total_time =300*60 # s
time_frame = 1000
col_length = 0.01 # m
cross_section_area = 0.1 # m2
col_porosity = 0.996168582
par_porosity = 0.44 # see
par_radius = 3.25E-04 #m
col_dispersion = 3.789E-6 #m2/s
film_diffusion = [6.034E-02] #m/s
par_diffusion = [(1.62E-09),] # m2/s
par_surfdiffusion = [5e-13,] # m^2 / s (solid phase)
k_factor = 1
mcl_ka = [10.58735191/k_factor,]
mcl_kd = [1/k_factor,] # was just 1
mcl_qmax = [22471.33561/(mcl_ka[0]*k_factor),] #mol / m^3
is_kinetic = False
concentration_ini = 1.96E-03 #initial concentration in the solution mol/m3
init_q = 0 #initial concentration in solids mol/m3
const_coeff = [concentration_ini,] # concentration mol/m3
Q = 0 # Flow rate in m^3*s^-1
#Model
model = Cadet()
model.root.input.model.nunits = 3
#Inlet Model
model.root.input.model.unit_000.unit_type = 'INLET'
model.root.input.model.unit_000.ncomp = 1
model.root.input.model.unit_000.inlet_type = 'PIECEWISE_CUBIC_POLY'
#General Rate Model
model.root.input.model.unit_001.unit_type = 'GENERAL_RATE_MODEL'
model.root.input.model.unit_001.ncomp = 1
## Geometry
model.root.input.model.unit_001.col_length = col_length # m,
model.root.input.model.unit_001.cross_section_area = cross_section_area # m^2,
model.root.input.model.unit_001.col_porosity = col_porosity # -
model.root.input.model.unit_001.par_porosity = par_porosity # -
model.root.input.model.unit_001.par_radius = par_radius # m
## Transport
model.root.input.model.unit_001.col_dispersion = col_dispersion # m^2 / s (interstitial volume)
model.root.input.model.unit_001.film_diffusion = film_diffusion # m / s
model.root.input.model.unit_001.par_diffusion = par_diffusion # m^2 / s (mobile phase)
model.root.input.model.unit_001.par_surfdiffusion = par_surfdiffusion # m^2 / s (solid phase)
# # Adsorption Model
#model.root.input.model.unit_001.adsorption_model = 'NONE'
model.root.input.model.unit_001.adsorption_model = 'MULTI_COMPONENT_LANGMUIR'
model.root.input.model.unit_001.adsorption.is_kinetic = is_kinetic # not the Kinetic binding
model.root.input.model.unit_001.adsorption.mcl_ka = mcl_ka # m^3 / (mol * s) (mobile phase)
model.root.input.model.unit_001.adsorption.mcl_kd = mcl_kd # 1 / s (desorption)
model.root.input.model.unit_001.adsorption.mcl_qmax = mcl_qmax # mol / m^3 (solid phase)
# Initial Conditions
model.root.input.model.unit_001.init_c = [concentration_ini,]
model.root.input.model.unit_001.init_q = [init_q,]
#Setting up the Discretization
### Grid cells
model.root.input.model.unit_001.discretization.ncol = 1
model.root.input.model.unit_001.discretization.npar = 500
### Bound states
model.root.input.model.unit_001.discretization.nbound = [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
model.root.input.model.unit_002.unit_type = 'OUTLET'
model.root.input.model.unit_002.ncomp = 1
#Time Sections
model.root.input.solver.sections.nsec = 1
model.root.input.solver.sections.section_times = [0.0,total_time,] # s
model.root.input.solver.sections.section_continuity = []
model.root.input.model.unit_000.sec_000.const_coeff = const_coeff # mol / m^3
model.root.input.model.unit_000.sec_000.lin_coeff = [0.0,]
model.root.input.model.unit_000.sec_000.quad_coeff = [0.0,]
model.root.input.model.unit_000.sec_000.cube_coeff = [0.0,]
#System Connectivity
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, Q, # [unit_000, unit_001, all components, all components, Q/ m^3*s^-1
1, 2, -1, -1, Q] # [unit_001, unit_002, all components, all components, Q/ m^3*s^-1
#Setting Up the Simulator and Running the Simulation
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
model.root.input['return'].unit_000.write_coordinates = 1
model.root.input['return'].unit_000.write_solution_solid = 1
model.root.input['return'].unit_000.write_solution_particle =1
model.root.input['return'].unit_000.write_solution_volume = 1
model.root.input['return'].unit_000.WRITE_SOLUTION_LAST_UNIT = 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_001
# Solution times
model.root.input.solver.user_solution_times = np.linspace(0, total_time, 1001)
model.filename = 'C:\\Users\\konstanting\\modelA.h5'
model.save()
# Simulation A
data = model.run()
model.load()
stateAfterA = model.root.output.solution.unit_001.last_state_y
# Simulation B
new_balk_concentration = [2.103E-02,]
stateAfterA[:len(new_balk_concentration)] = new_balk_concentration # inject new_balk_solution in index 1
model.root.input.model.unit_001.INIT_STATE = stateAfterA
model.filename = 'C:\\Users\\konstanting\\modelB.h5'
model.save()
data = model.run()
model.load()
stateAfterB = model.root.output.solution.unit_001.last_state_y
c_out = model.root.output.solution.unit_001.solution_outlet
solidConcentration = model.root.output.solution.unit_001.solution_solid[-1, 0, :, 0]
# Simulation C
new_balk_concentration = [1.769E-01,]
stateAfterB[:len(new_balk_concentration)] = new_balk_concentration # inject new_balk_solution in index 1
model.root.input.model.unit_001.INIT_STATE = stateAfterB
model.filename = 'C:\\Users\\konstanting\\modelC1.h5'
model.save() # Crashes here!!!, gives "OSError: Unable to create link (name already exists)"
data = model.run()
model.load()