Model#

class Model#

Aerosol/Cloud Model.

Model is a collection of representations that collectively define an aerosol and/or cloud system. Model is compatible with the micm::ExternalModelSystem and micm::ExternalModelProcessSet interfaces.

Public Types

using RepresentationVariant = std::variant<SingleMomentMode, TwoMomentMode, UniformSection>#
using ProcessVariant = std::variant<DissolvedReaction, DissolvedReversibleReaction, HenryLawPhaseTransfer>#
using ConstraintVariant = std::variant<DissolvedEquilibriumConstraint, HenryLawEquilibriumConstraint, LinearConstraint>#

Public Functions

inline std::tuple<std::size_t, std::size_t> StateSize() const#

Returns the total state size (number of variables, number of parameters)

inline std::set<std::string> StateVariableNames() const#

Returns unique names for all state variables.

inline std::set<std::string> StateParameterNames() const#

Returns unique names for all state parameters.

inline std::set<std::string> SpeciesUsed() const#

Returns names of all species used in the model’s processes and constraints.

template<typename ProcessType>
inline void AddProcesses(const std::vector<ProcessType> &new_processes)#

Add processes to the model.

Accepts a vector of any process type stored in ProcessVariant. Each process is copied with a new UUID to ensure uniqueness across models.

template<typename ProcessType>
inline void AddProcesses(std::initializer_list<ProcessType> new_processes)#

Add processes to the model from an initializer list.

template<typename ...ProcessTypes>
inline void AddProcesses(ProcessTypes&&... processes)#

Add processes to the model (variadic form for mixed types)

template<typename ConstraintType>
inline void AddConstraints(const std::vector<ConstraintType> &new_constraints)#

Add constraints to the model.

template<typename ConstraintType>
inline void AddConstraints(std::initializer_list<ConstraintType> new_constraints)#

Add constraints to the model from an initializer list.

template<typename ...ConstraintTypes>
inline void AddConstraints(ConstraintTypes&&... constraints)#

Add constraints to the model (variadic form for mixed types)

inline std::set<std::pair<std::size_t, std::size_t>> NonZeroJacobianElements(const std::unordered_map<std::string, std::size_t> &state_indices) const#

Returns non-zero Jacobian element positions.

template<typename DenseMatrixPolicy>
inline std::function<void(const std::vector<micm::Conditions>&, DenseMatrixPolicy&)> UpdateStateParametersFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices) const#

Returns a function that updates state parameters.

template<typename DenseMatrixPolicy>
inline std::function<void(const DenseMatrixPolicy&, const DenseMatrixPolicy&, DenseMatrixPolicy&)> ForcingFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices, const std::unordered_map<std::string, std::size_t> &state_variable_indices) const#

Returns a function that calculates forcing terms.

template<typename DenseMatrixPolicy, typename SparseMatrixPolicy>
inline std::function<void(const DenseMatrixPolicy&, const DenseMatrixPolicy&, SparseMatrixPolicy&)> JacobianFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices, const std::unordered_map<std::string, std::size_t> &state_variable_indices, const SparseMatrixPolicy &jacobian) const#

Returns a function that calculates Jacobian contributions.

inline std::set<std::string> ConstraintStateParameterNames() const#

Returns unique names for constraint-specific state parameters Includes parameters for diagnosed constants (mass conservation totals)

inline std::set<std::string> InitializeConstraintParameterNames() const#

Returns parameter names that need initialization from state variables.

template<typename DenseMatrixPolicy>
inline std::function<void(const DenseMatrixPolicy&, DenseMatrixPolicy&)> InitializeConstraintParametersFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices, const std::unordered_map<std::string, std::size_t> &state_variable_indices) const#

Returns a function that diagnoses constraint parameters from current state.

template<typename DenseMatrixPolicy>
inline std::function<void(const std::vector<micm::Conditions>&, DenseMatrixPolicy&)> ConstraintUpdateStateParametersFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices) const#

Returns a function that updates constraint parameters based on conditions.

inline std::set<std::string> ConstraintAlgebraicVariableNames() const#

Returns names of all algebraic variables across all constraints.

inline std::set<std::string> ConstraintSpeciesDependencies() const#

Returns all species that constraints depend on.

inline std::set<std::pair<std::size_t, std::size_t>> NonZeroConstraintJacobianElements(const std::unordered_map<std::string, std::size_t> &state_indices) const#

Returns non-zero constraint Jacobian element positions.

template<typename DenseMatrixPolicy>
inline std::function<void(const DenseMatrixPolicy&, const DenseMatrixPolicy&, DenseMatrixPolicy&)> ConstraintResidualFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices, const std::unordered_map<std::string, std::size_t> &state_variable_indices) const#

Returns combined constraint residual function G(y) = 0.

template<typename DenseMatrixPolicy, typename SparseMatrixPolicy>
inline std::function<void(const DenseMatrixPolicy&, const DenseMatrixPolicy&, SparseMatrixPolicy&)> ConstraintJacobianFunction(const std::unordered_map<std::string, std::size_t> &state_parameter_indices, const std::unordered_map<std::string, std::size_t> &state_variable_indices, const SparseMatrixPolicy &jacobian) const#

Returns combined constraint Jacobian function (subtracts dG/dy)

Public Members

std::string name_#
std::vector<RepresentationVariant> representations_#
std::vector<ProcessVariant> processes_ = {}#
std::vector<ConstraintVariant> constraints_ = {}#