Transform

CADET-Match has many variable transforms available. The most common ones will be covered first. There are a few additional ones available in the code that are retained for backwards compatibility that will not be covered and their usage is not recomended.

Each parameter for parameter estimation or error modeling must be listed in the parameters list and a transform selected.

{
    "parameters": [
        {
        },
        {
        }
    ],
}

Indexing

An index is used when you want to directly index into the arrays to modify, this is very rarely used and mostly comes up with the MultiState SMA rates between states. All transforms use the same method for indexing.

You either need to specific component and bound or specify index. Indexing starts at 0. A value of -1 is used to indicate a value that is not component specific (i.e. a scalar).

Scalar value:index=-1 Index at position n: index=n

Component 0 Bound state 0 would be component=0 bound=0.

Component 1 but independent of bound state would be component=0 bound=-1.

Independent of component or bound state would be component=-1 bound=-1.

Auto

Auto is the most common transform. This transform will convert from the upper and lower boundary to a range of 0 to 1 for the search algorithm. It will automatically switch between a linear and a log transform as needed for search performance.

Key

Values

Default

Required

Description

min

Float

None

Yes

minimum allowed value

max

Float

None

Yes

maximum allowed value

location

String

None

Yes

path inside the simulation to the variable

maxFactor

Float

1000

No

if max/min > maxFactor a log transform is used.

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
    "transform": "auto",
    "component": 2,
    "bound": 0,
    "location": "/input/model/unit_001/adsorption/SMA_NU",
    "min": 1,
    "max": 50
}

Auto Inverse

Auto-inverse works like auto except it transforms used 1/variable. This transform was designed to deal with coupling of film diffusion and pore diffusion and improves optimization.

Key

Values

Default

Required

Description

min

Float

None

Yes

minimum allowed value

max

Float

None

Yes

maximum allowed value

location

String

None

Yes

path inside the simulation to the variable

maxFactor

Float

1000

No

if max/min > maxFactor a log transform is used.

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
    "transform": "auto_inverse",
    "component": -1,
    "bound": -1,
    "location": "/input/model/unit_001/FILM_DIFFUSION",
    "min": 1e-9,
    "max": 1e-5
}

Auto kEQ

This transforms convert from kA and kD to kA and kEQ with all the other properties of auto. In reality kA and kD are coupled and this allows the search algorithm to see the coupling. There are also some fits where kA and kD are fast enough that a system is effectively in rapid equilibrium. Without this transform a large number of kA and kD values will be found with equally good results. With this transform kEQ will have a definite value and there will be a large range of kA values which provides more understanding for the problem.

Key

Values

Default

Required

Description

minKA

Float

None

Yes

minimum allowed value

maxKA

Float

None

Yes

maximum allowed value

minKEQ

Float

None

Yes

minimum allowed value

maxKEQ

Float

None

Yes

maximum allowed value

location

String

None

Yes

paths inside the simulation kA and kD

maxFactor

Float

1000

No

if max/min > maxFactor a log transform is used.

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
    "transform": "auto_keq",
    "component": 0,
    "bound": 0,
    "location": [
        "/input/model/unit_001/adsorption/LIN_KA",
        "/input/model/unit_001/adsorption/LIN_KD"
    ],
    "minKA": 1e-8,
    "maxKA": 1e8,
    "minKEQ": 1e-4,
    "maxKEQ": 1e4
}

Norm Add

This transform allows another parameter to be read and a fixed or variable value added to it and assigned to a second variable. For example if you are optimizing the charge nu for SMA with a few different charge variants you may not know all the charge variants but you know they are all close together and so you can estimate one and then use norm_add for the others to require they are close.

Key

Values

Default

Required

Description

min

Float

None

Yes

minimum allowed value

max

Float

None

Yes

maximum allowed value

locationFrom

String

None

Yes

paths inside the simulation kA and kD

componentFrom

Integer

None

Yes*

Index of the component used (starts at 0)

boundFrom

Integer

None

Yes*

Index of the bound state (starts at 0)

indexFrom

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

locationTo

String

None

Yes

paths inside the simulation kA and kD

componentTo

Integer

None

Yes*

Index of the component used (starts at 0)

boundTo

Integer

None

Yes*

Index of the bound state (starts at 0)

indexTo

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
    "transform": "norm_add",
    "locationFrom": "/input/model/unit_001/COL_POROSITY",
    "componentFrom": -1,
    "boundFrom": -1,
    "locationTo": "/input/model/unit_001/PAR_POROSITY",
    "componentTo": -1,
    "boundTo": -1,
    "min": -0.1,
    "max": 0.1
}

Norm Mult

This transform allows another parameter to be read and a fixed or variable value multiplied to it and assigned to a second variable. For instance if you are estimating the shielding factor sigma for a monomer and also need to estimate it for a dimer you can estimated sigma for the monomer normally and then specify that the dimer is approximately twice as large.

Key

Values

Default

Required

Description

min

Float

None

Yes

minimum allowed value

max

Float

None

Yes

maximum allowed value

locationFrom

String

None

Yes

paths inside the simulation kA and kD

componentFrom

Integer

None

Yes*

Index of the component used (starts at 0)

boundFrom

Integer

None

Yes*

Index of the bound state (starts at 0)

indexFrom

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

locationTo

String

None

Yes

paths inside the simulation kA and kD

componentTo

Integer

None

Yes*

Index of the component used (starts at 0)

boundTo

Integer

None

Yes*

Index of the bound state (starts at 0)

indexTo

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "norm_add",
        "locationFrom": "/input/model/unit_001/COL_POROSITY",
        "componentFrom": -1,
        "boundFrom": -1,
        "locationTo": "/input/model/unit_001/PAR_POROSITY",
        "componentTo": -1,
        "boundTo": -1,
        "min": 0.8,
        "max": 1.5
}

Set Value

This transform copies a value from another estimated value. One of the common usage cases is when estimating the axial dispersion of the tubing. It can be a good assumption that the axial dispersion is the same in the tubing leading to the column and the tubing leaving it so with this one of them is estimated and the value copied to the other one so fewer values need to be estimated.

Key

Values

Default

Required

Description

locationFrom

String

None

Yes

paths inside the simulation kA and kD

componentFrom

Integer

None

Yes*

Index of the component used (starts at 0)

boundFrom

Integer

None

Yes*

Index of the bound state (starts at 0)

indexFrom

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

locationTo

String

None

Yes

paths inside the simulation kA and kD

componentTo

Integer

None

Yes*

Index of the component used (starts at 0)

boundTo

Integer

None

Yes*

Index of the bound state (starts at 0)

indexTo

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "set_value",
        "locationFrom": "/input/model/unit_000/sec_000/CONST_COEFF",
        "componentFrom": 0,
        "boundFrom": 0,
        "locationTo": "/input/model/unit_000/sec_000/CONST_COEFF",
        "componentTo": 1,
        "boundTo": 0
}

Sum

This transform reads two values and assigns it to a 3rd value. This was created for a situation where the volume of two CSTRs where estimated and a 3rd CSTR needed to have a volume equal to the sum of the first two.

Key

Values

Default

Required

Description

location1

String

None

Yes

paths inside the simulation kA and kD

component1

Integer

None

Yes*

Index of the component used (starts at 0)

bound1

Integer

None

Yes*

Index of the bound state (starts at 0)

index1

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

location2

String

None

Yes

paths inside the simulation kA and kD

component2

Integer

None

Yes*

Index of the component used (starts at 0)

bound2

Integer

None

Yes*

Index of the bound state (starts at 0)

index2

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

locationSum

String

None

Yes

paths inside the simulation kA and kD

componentSum

Integer

None

Yes*

Index of the component used (starts at 0)

boundSum

Integer

None

Yes*

Index of the bound state (starts at 0)

indexSum

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "sum",
        "location1": "/input/model/unit_001/INIT_VOLUME",
        "component1": -1,
        "bound1": -1,
        "location2": "/input/model/unit_003/INIT_VOLUME",
        "component2": -1,
        "bound2": -1,
        "locationSum": "/input/model/unit_004/INIT_VOLUME",
        "componentSum": -1,
        "boundSum": -1
}

Norm Diameter

CADET uses the cross sectional area of the column and tubing and measuring this precisely can be difficult. It is often much simpler to measure the diameter and provide a small search range and then allow this transform to convert that to the area. This assumes circular tubing and uses Area = pi*d^2/4.

Key

Values

Default

Required

Description

min

Float

None

Yes

minimum allowed value

max

Float

None

Yes

maximum allowed value

location

String

None

Yes

paths inside the simulation kA and kD

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "norm_diameter",
        "location": "/input/model/unit_001/CROSS_SECTION_AREA",
        "min": 0.001,
        "max": 0.1,
        "component": -1,
        "bound": -1
}

Norm Volume Length

When estimating the size of a Disperive Plug Flow Reactor needed to model a piece of tubing it is normal to estimate the dispersion, area and length. This works but can be problematic to estimate and get a realistic estimate due to the degrees of freedom. Finding the volume of the tube and the length of the tube is much easier to do accurately and this makes it a much better transform to work with.

Key

Values

Default

Required

Description

area_location

String

None

Yes

path to cross_section_area

length_location

String

None

Yes

path to col_length

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

minVolume

Float

None

Yes

minimum allowed value

maxVolume

Float

None

Yes

minimum allowed value

minLength

Float

None

Yes

minimum allowed value

maxLength

Float

None

Yes

minimum allowed value

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "norm_volume_length",
        "area_location": "/input/model/unit_001/CROSS_SECTION_AREA",
        "length_location": "/input/model/unit_001/COL_LENGTH",
        "minVolume": 1e-06,
        "maxVolume": 0.0001,
        "minLength": 0.1,
        "maxLength": 0.3,
        "component": -1,
        "bound": -1
}

Norm Volume Area

This transform works like the volume length transform except it uses volume an area and should only be used if it is easier to estimate the cross sectional area of the tubing than its length.

Key

Values

Default

Required

Description

area_location

String

None

Yes

path to cross_section_area

length_location

String

None

Yes

path to col_length

component

Integer

None

Yes*

Index of the component used (starts at 0)

bound

Integer

None

Yes*

Index of the bound state (starts at 0)

index

Integer

None

Yes*

Index into the location (starts at 0) Either component + bound or index must be specificed not both.

minVolume

Float

None

Yes

minimum allowed value

maxVolume

Float

None

Yes

minimum allowed value

minArea

Float

None

Yes

minimum allowed value

maxArea

Float

None

Yes

minimum allowed value

experiments

String

None

No

If provided this variable is only used for the named experiments

{
        "transform": "norm_volume_area",
        "area_location": "/input/model/unit_001/CROSS_SECTION_AREA",
        "length_location": "/input/model/unit_001/COL_LENGTH",
        "minVolume": 1e-06,
        "maxVolume": 0.0001,
        "minArea": 1e-05,
        "maxArea": 0.001,
        "component": -1,
        "bound": -1
}