Reference Concentrations in CADET and CADET-Process

Hello CADET community,
I made an interesting observartion comparing results for SMA modeling from CADET to CADET-Process: Despite choosing the same model with all identical parameters (including reference concentrations) I got vastly different results using both programs, even though CADET-Process calls CADET for the calculation. This seems to be linked to the adsorption and desorption rates ka and kd. Together with the reference concentrations and the characteristic charge, ka and kd can be transformed into ka,ref (ka~) and kd,ref (kd~), see
It seems that CADET takes the parameters ka,ref and kd,ref, while CADET-Process takes the parameter ka and kd and then transforms these parameters into ka,ref and kd,ref before calling CADET. Thus, in CADET-Process the parameters are independent from the chosen reference concentrations, while in CADET they are dependent from it. This needs to be taken into account when transferring parameters from CADET to CADET-Process or vice versa.


Hey Thomas,

thanks for your input! Admittedly, reference concentration are not quite clean yet in CADET-Process.

Background is that when a reference concentration is used in CADET-Core, you’re not really using k_a, but rather k_a~. However, in the interface, the parameter SMA_KA is used for both. I don’t think this is good because k_a~ has a different unit than k_a.

Therefore, adsorption_rate in CADET-Process always refers to the “real” k_a. In addition, there is an adsorption_rate_transformed that automatically makes the transformation, which is then passed to CADET-Core. So no transformation required by the user. This also makes it easier to adapt the value to other reference concentrations or adsorption models (that, for example, have no c_ref).

This should be better documented. Also, if you really want to use the k_a~, currently there still is an issue with the setter. We have an open PR which we hope to merge in the coming weeks. Feel free to test and give feedback!

Also, maybe we should consider improving the interface in CADET-Core!? It should, however, be backward compatible, so I’m not entirely sure how that would look like. Any ideas @lieres /@s.leweke/@ronald.jaepel ?

I would aim at making the interfaces as consistent as possible. Different units are not really a concern, as the models coincide for a reference concentration of 1, which would still have a unit. The resulting units of k_a and k_d are actually much simpler and easier to interpret.

1 Like

After internal discussions, @ronald.jaepel and I decided that this behavior will be deprecated in CADET-Process v0.8.0 which will be released shortly.

We understand that this introduces a breaking change which is not ideal, but we believe that keeping consistency with CADET-Core is more important at this point.

I am still personally of the opinion that the way the parameters are handled in CADET-Core is not ideal. As a user, I want to be able to change the reference concentration (i.e. numerical “hack”) independently from the value of the adsorption isotherm (thermodynamic information) s.t. parameters can be transferred from one model to another.
Ideally, this would even be automated by CADET-Core, e.g. with a flag (normalize_concentration). But that’s an issue for future discussions!

In summary, from CADET-Process v0.8.0 onward, adsorption_rate and desorption_rate in the SMA model (and similar models) will directly map to ka/kd of CADET-Core and consequently correspond to the transformed parameters. Should you want to use the “real” parameter values (e.g. when transferring parameters), you can get and set adsorption_rate_untransformed and desorption_rate_untransformed respectively from the CADET-Process binding model classes’ attributes.

Thanks to @ronald.jaepel for implementation and testing.

If you have any more questions, please let us know!

Once again, we’re sorry for any inconveniences this might have caused.