NEML2 1.4.0
|
Explicit exponential time integration for rotations. More...
Explicit exponential time integration for rotations.
#include <WR2ExplicitExponentialTimeIntegration.h>
Public Member Functions | |
WR2ExplicitExponentialTimeIntegration (const OptionSet &options) | |
virtual void | diagnose (std::vector< Diagnosis > &diagnoses) const override |
Check for common problems. | |
Public Member Functions inherited from Model | |
Model (const OptionSet &options) | |
Construct a new Model object. | |
void | diagnose_nl_sys (std::vector< Diagnosis > &diagnoses) const |
Additional diagnostics for a nonlinear system. | |
virtual bool | is_nonlinear_system () const |
Whether this model defines one or more nonlinear equations to be solved. | |
std::tuple< const Tensor &, const Tensor &, const Tensor &, const Tensor &, const Tensor & > | get_system_matrices () const |
Get assembled system. | |
virtual void | reinit (const Tensor &tensor, int deriv_order) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. See the other overload for detailed description. | |
virtual void | reinit (TensorShapeRef batch_shape={}, int deriv_order=0, const torch::Device &device=default_device(), const torch::Dtype &dtype=default_dtype()) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. | |
const std::vector< Model * > & | registered_models () const |
The models that may be used during the evaluation of this model. | |
Model * | registered_model (const std::string &name) const |
Get a registered model by its name. | |
virtual std::set< VariableName > | consumed_items () const override |
The variables that this model depends on. | |
virtual std::set< VariableName > | provided_items () const override |
The variables that this model defines as part of its output. | |
virtual bool | is_AD_enabled () const override |
Whether AD is enabled. | |
bool | using_AD_1st_derivative () const |
Whether this model is using AD to get 1st derivatives. | |
bool | using_AD_2nd_derivative () const |
Whether this model is using AD to get 2nd derivatives. | |
void | use_AD_derivatives (bool first=true, bool second=true) |
Tell this model to use AD to get derivatives. | |
void | prepare () |
Prepare for evaluation. | |
virtual void | value () |
Evalute the model. | |
virtual void | value_and_dvalue () |
Evalute the model and compute its derivative. | |
virtual void | dvalue () |
Evalute the derivative. | |
virtual void | value_and_dvalue_and_d2value () |
Evalute the model and compute its first and second derivatives. | |
virtual void | d2value () |
Evalute the second derivatives. | |
virtual void | dvalue_and_d2value () |
Evalute the first and second derivatives. | |
virtual LabeledVector | value (const LabeledVector &in) |
Convenient shortcut to construct and return the model value. | |
virtual std::tuple< LabeledVector, LabeledMatrix > | value_and_dvalue (const LabeledVector &in) |
Convenient shortcut to construct and return the model value and its derivative. | |
virtual LabeledMatrix | dvalue (const LabeledVector &in) |
Convenient shortcut to construct and return the derivative. | |
virtual std::tuple< LabeledVector, LabeledMatrix, LabeledTensor3D > | value_and_dvalue_and_d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's value, first and second derivative. | |
virtual LabeledTensor3D | d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's second derivative. | |
virtual std::tuple< LabeledMatrix, LabeledTensor3D > | dvalue_and_d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's first and second derivative. | |
Size | batch_dim () const |
TensorShapeRef | batch_sizes () const |
Storage batch shape. | |
const torch::TensorOptions & | options () const |
Storage tensor options. | |
torch::Dtype | scalar_type () const |
Storage scalar type. | |
torch::Device | device () const |
Storage device. | |
Public Member Functions inherited from Data | |
Data (const OptionSet &options) | |
Construct a new Data object. | |
const std::vector< Data * > & | registered_data () const |
All the registered data objects. | |
Public Member Functions inherited from NEML2Object | |
NEML2Object (const OptionSet &options) | |
Construct a new NEML2Object object. | |
virtual | ~NEML2Object ()=default |
const OptionSet & | input_options () const |
const std::string & | name () const |
A readonly reference to the object's name. | |
const std::string & | type () const |
A readonly reference to the object's type. | |
const std::string & | path () const |
A readonly reference to the object's path. | |
const std::string & | doc () const |
A readonly reference to the object's docstring. | |
template<typename T = NEML2Object> | |
const T * | host () const |
Get a readonly pointer to the host. | |
template<typename T = NEML2Object> | |
T * | host () |
Get a writable pointer to the host. | |
Public Member Functions inherited from BufferStore | |
BufferStore (const OptionSet &options, NEML2Object *object) | |
const Storage< std::string, TensorValueBase > & | named_buffers () const |
Storage< std::string, TensorValueBase > & | named_buffers () |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
TensorValue< T > & | get_buffer (const std::string &name) |
}@ | |
Public Member Functions inherited from ParameterStore | |
ParameterStore (const OptionSet &options, NEML2Object *object) | |
const Storage< std::string, TensorValueBase > & | named_parameters () const |
Storage< std::string, TensorValueBase > & | named_parameters () |
void | set_parameter (const std::string &, const Tensor &) |
}@ | |
void | set_parameters (const std::map< std::string, Tensor > &) |
Set values for parameters. | |
TensorValueBase & | get_parameter (const std::string &name) |
Get a writable reference of a parameter. | |
const TensorValueBase & | get_parameter (const std::string &name) const |
Get a read-only reference of a parameter. | |
bool | has_nl_param () const |
Whether this parameter store has any nonlinear parameter. | |
const VariableBase * | nl_param (const std::string &) const |
Query the existence of a nonlinear parameter. | |
virtual std::map< std::string, const VariableBase * > | named_nonlinear_parameters (bool recursive=false) const |
Get all nonlinear parameters. | |
virtual std::map< std::string, Model * > | named_nonlinear_parameter_models (bool recursive=false) const |
Get all nonlinear parameters' models. | |
Public Member Functions inherited from VariableStore | |
VariableStore (const OptionSet &options, Model *object) | |
LabeledAxis & | declare_axis (const std::string &name) |
virtual void | setup_layout () |
Setup the layouts of all the registered axes. | |
VariableBase * | input_variable (const VariableName &) |
Get the view of an input variable. | |
VariableBase * | output_variable (const VariableName &) |
Get the view of an output variable. | |
TensorType | input_type (const VariableName &) const |
Get the variable type of an input variable. | |
TensorType | output_type (const VariableName &) const |
Get the variable type of an output variable. | |
template<typename T = Tensor> | |
Variable< T > & | get_input_variable (const VariableName &name) |
template<typename T = Tensor> | |
const Variable< T > & | get_input_variable (const VariableName &name) const |
template<typename T = Tensor> | |
const Variable< T > & | get_output_variable (const VariableName &name) |
template<typename T = Tensor> | |
const Variable< T > & | get_output_variable (const VariableName &name) const |
LabeledAxis & | input_axis () |
const LabeledAxis & | input_axis () const |
LabeledAxis & | output_axis () |
const LabeledAxis & | output_axis () const |
Storage< VariableName, VariableBase > & | input_variables () |
const Storage< VariableName, VariableBase > & | input_variables () const |
Storage< VariableName, VariableBase > & | output_variables () |
const Storage< VariableName, VariableBase > & | output_variables () const |
LabeledVector & | input_storage () |
const LabeledVector & | input_storage () const |
LabeledVector & | output_storage () |
const LabeledVector & | output_storage () const |
LabeledMatrix & | derivative_storage () |
const LabeledMatrix & | derivative_storage () const |
LabeledTensor3D & | second_derivative_storage () |
const LabeledTensor3D & | second_derivative_storage () const |
Public Member Functions inherited from NonlinearSystem | |
NonlinearSystem (const OptionSet &options) | |
virtual void | init_scaling (const bool verbose=false) |
Compute algebraic Jacobian-based automatic scaling following https://cs.stanford.edu/people/paulliu/files/cs517-project.pdf. | |
Tensor | scale_residual (const Tensor &r) const |
Apply scaling to the residual. | |
Tensor | scale_Jacobian (const Tensor &J) const |
Apply scaling to the Jacobian. | |
Tensor | scale_direction (const Tensor &p) const |
Remove scaling from the search direction, i.e. \( J^{-1} r \). | |
virtual Tensor | solution () const |
Get the solution vector. | |
Tensor | residual (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system residual. | |
void | residual () |
Convenient shortcut to assemble and return the system residual. | |
Tensor | Jacobian (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system Jacobian. | |
void | Jacobian () |
Convenient shortcut to assemble and return the system Jacobian. | |
std::tuple< Tensor, Tensor > | residual_and_Jacobian (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system residual and Jacobian. | |
void | residual_and_Jacobian () |
Convenient shortcut to assemble and return the system residual and Jacobian. | |
const Tensor & | get_residual () const |
const Tensor & | get_Jacobian () const |
Tensor | residual_norm () const |
The residual norm. | |
virtual bool | is_AD_disabled () const final |
Whether AD is disabled. | |
Public Member Functions inherited from DiagnosticsInterface | |
DiagnosticsInterface (NEML2Object *object) | |
template<typename... Args> | |
void | diagnostic_assert (std::vector< Diagnosis > &diagnoses, bool assertion, Args &&... args) const |
void | diagnostic_assert_state (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_old_state (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_force (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_old_force (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_residual (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_check_input_variable (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_check_output_variable (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
Static Public Member Functions | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from Model | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from Data | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from NEML2Object | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from NonlinearSystem | |
static OptionSet | expected_options () |
static void | disable_automatic_scaling (OptionSet &options) |
static void | enable_automatic_scaling (OptionSet &options) |
Protected Member Functions | |
void | set_value (bool out, bool dout_din, bool d2out_din2) override |
Perform the time integration to update the variable value. | |
Protected Member Functions inherited from Model | |
virtual void | setup () override |
Setup this model. | |
virtual void | check_AD_limitation () const |
void | check_inplace_dbg () |
Check for potential in-place operation. | |
virtual void | check_input (const LabeledVector &in) const |
Check if the input has valid shape. | |
virtual LabeledVector | get_output () |
virtual LabeledMatrix | get_doutput_dinput () |
virtual LabeledTensor3D | get_d2output_dinput2 () |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<Model, T>>> | |
T & | register_model (const std::string &name, int extra_deriv_order=0, bool nonlinear=false, bool merge_input=true) |
Register a model that the current model may use during its evaluation. | |
virtual void | reinit (bool in, bool out) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. See the other overload for detailed description. | |
virtual void | cache (TensorShapeRef batch_shape, int deriv_order, const torch::Device &device, const torch::Dtype &dtype) |
bool | requires_grad () const |
Whether derivative has been requested for this model. | |
bool | requires_2nd_grad () const |
Whether 2nd derivative has been requested for this model. | |
virtual void | allocate_variables (bool in, bool out) |
Call VariableStore::allocate_variables recursively on all submodels. | |
virtual void | setup_input_views (VariableStore *host=nullptr) override |
Call VariableStore::setup_input_views recursively on all submodels. | |
virtual void | setup_submodel_input_views (VariableStore *host) |
virtual void | setup_output_views () |
virtual void | setup_submodel_output_views () |
virtual void | setup_nonlinear_system () |
virtual void | cache (TensorShapeRef batch_shape) |
Cache the variable's batch shape. | |
virtual void | allocate_variables (TensorShapeRef batch_shape, const torch::TensorOptions &options, bool in, bool out, bool dout_din, bool d2out_din2) |
Allocate variable storages given the batch shape and tensor options. | |
virtual void | setup_output_views (bool out, bool dout_din, bool d2out_din2) |
Call VariableStore::setup_output_views recursively on all submodels. | |
virtual void | zero () |
virtual void | set_input (const LabeledVector &in) |
Set in to be the input of this model. | |
virtual void | set_solution (const Tensor &x) override |
Set x as the current solution of the nonlinear system. | |
virtual void | assemble (bool residual, bool Jacobian) override |
Compute the residual and Jacobian. | |
virtual void | zero (bool dout_din, bool d2out_din2) |
Zero out derivative and second derivative storage. | |
Protected Member Functions inherited from Data | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<Data, T>>> | |
T & | register_data (const std::string &name) |
Protected Member Functions inherited from BufferStore | |
virtual void | send_buffers_to (const torch::TensorOptions &options) |
Send all buffers to options . | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_buffer (const std::string &name, const T &rawval) |
Declare a buffer. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_buffer (const std::string &name, const std::string &input_option_name) |
Declare a buffer. | |
Protected Member Functions inherited from ParameterStore | |
virtual void | send_parameters_to (const torch::TensorOptions &options) |
Send parameters to options. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_parameter (const std::string &name, const T &rawval) |
Declare a parameter. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_parameter (const std::string &name, const std::string &input_option_name, bool allow_nonlinear=false) |
Declare a parameter. | |
Protected Member Functions inherited from VariableStore | |
template<typename T , typename... S> | |
const Variable< T > & | declare_input_variable (S &&... name) |
Declare an input variable. | |
template<typename... S> | |
const Variable< Tensor > & | declare_input_variable (Size sz, TensorType t, S &&... name) |
Declare an input variable (with unknown base shape at compile time) | |
template<typename T , typename... S> | |
const Variable< Tensor > & | declare_input_variable_list (Size list_size, S &&... name) |
Declare an input variable that is a list of tensors of fixed size. | |
template<typename T , typename... S> | |
Variable< T > & | declare_output_variable (S &&... name) |
Declare an output variable. | |
template<typename... S> | |
Variable< Tensor > & | declare_output_variable (Size sz, TensorType t, S &&... name) |
Declare an input variable (with unknown base shape at compile time) | |
template<typename T , typename... S> | |
Variable< Tensor > & | declare_output_variable_list (Size list_size, S &&... name) |
Declare an output variable that is a list of tensors of fixed size. | |
template<typename T > | |
VariableName | declare_variable (LabeledAxis &axis, const VariableName &var) const |
Declare an item recursively on an axis. | |
VariableName | declare_variable (LabeledAxis &axis, const VariableName &var, Size sz) const |
Declare an item (with known storage size) recursively on an axis. | |
VariableName | declare_subaxis (LabeledAxis &axis, const VariableName &subaxis) const |
Declare a subaxis recursively on an axis. | |
Protected Attributes | |
Variable< Rot > & | _s |
Current value. | |
const Variable< Rot > & | _sn |
Previous value. | |
const Variable< WR2 > & | _s_dot |
Current variable spin rate. | |
const Variable< Scalar > & | _t |
Current time. | |
const Variable< Scalar > & | _tn |
Previous time. | |
Protected Attributes inherited from Model | |
std::vector< Model * > | _registered_models |
Models this model may use during its evaluation. | |
Protected Attributes inherited from Data | |
std::vector< Data * > | _registered_data |
Registered Data objects. | |
Protected Attributes inherited from ParameterStore | |
std::map< std::string, const VariableBase * > | _nl_params |
Map from nonlinear parameter names to their corresponding variable views. | |
std::map< std::string, Model * > | _nl_param_models |
Map from nonlinear parameter names to models which evaluate them. | |
Protected Attributes inherited from NonlinearSystem | |
Size | _ndof |
Number of degrees of freedom. | |
Tensor | _solution |
View for the solution of this nonlinear system. | |
Tensor | _residual |
View for the residual of this nonlinear system. | |
Tensor | _Jacobian |
View for the Jacobian of this nonlinear system. | |
Tensor | _scaled_residual |
Tensor | _scaled_Jacobian |
const bool | _autoscale |
If true, do automatic scaling. | |
const Real | _autoscale_tol |
Tolerance for convergence check of the iterative automatic scaling algorithm. | |
const unsigned int | _autoscale_miter |
Maximum number of iterations allowed for the iterative automatic scaling algorithm. | |
bool | _scaling_matrices_initialized |
Flag to indicate whether scaling matrices have been computed. | |
Tensor | _row_scaling |
Row scaling "matrix" – since it's a batched diagonal matrix, we are only storing its diagonals. | |
Tensor | _col_scaling |
Column scaling "matrix" – since it's a batched diagonal matrix, we are only storing its diagonals. | |
WR2ExplicitExponentialTimeIntegration | ( | const OptionSet & | options | ) |
Check for common problems.
This method serves as the entry point for diagnosing common problems in object setup. The idea behind this method is that while some errors could be detected at construction time, i.e., when the object's constructor is called, it doesn't hinder other objects' creation. We therefore would like to defer the detection of errors until after all objects have been created, collect all errors at once, and present the user with a complete understanding of all errors encountered.
Note, however, if an error could interfere with other objects' creation, it should be raised right away inside the constructor, instead of inside this method.
diagnoses | A vector of exceptions of type Diagnosis for each of the detected problem. |
Reimplemented from Model.
|
static |
Perform the time integration to update the variable value.
Implements Model.