https://mooseframework.inl.gov
NEML2ModelExecutor.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "NEML2ModelInterface.h"
13 #include "GeneralUserObject.h"
15 
16 class MOOSEToNEML2;
17 
23 class NEML2ModelExecutor : public NEML2ModelInterface<GeneralUserObject>
24 {
25 public:
28 
30 
31  NEML2ModelExecutor(const InputParameters & params);
32 
33 #ifndef NEML2_ENABLED
34  void initialize() override {}
35  void execute() override {}
36  void finalize() override {}
37 #else
38  void initialize() override;
39  void meshChanged() override;
40  void execute() override;
41  void finalize() override;
42 
43  void initialSetup() override;
44 
46  std::size_t getBatchIndex(dof_id_type elem_id) const;
47 
49  const neml2::Tensor & getOutput(const neml2::VariableName & output_name) const;
50 
52  const neml2::Tensor & getOutputDerivative(const neml2::VariableName & output_name,
53  const neml2::VariableName & input_name) const;
54 
56  const neml2::Tensor & getOutputParameterDerivative(const neml2::VariableName & output_name,
57  const std::string & parameter_name) const;
58 
60  bool outputReady() const { return _output_ready; }
61 
62 protected:
64  virtual void addGatheredVariable(const UserObjectName &, const neml2::VariableName &);
65 
67  virtual void addGatheredParameter(const UserObjectName &, const std::string &);
68 
70  virtual void checkExecutionStage() const final;
71 
73  virtual void fillInputs();
74 
76  virtual void applyPredictor();
77 
79  virtual bool solve();
80 
82  virtual void extractOutputs();
83 
85  virtual void expandInputs();
86 
89 
92 
94  std::map<std::string, neml2::Tensor> _model_params;
95 
97  neml2::ValueMap _in;
98 
100  neml2::ValueMap _out;
101 
103  neml2::DerivMap _dout_din;
104 
105  // set of variables to skip
106  std::set<neml2::VariableName> _skip_vars;
107 
108  // set of gathered NEML2 input variables
109  std::set<neml2::VariableName> _gathered_variable_names;
110 
111  // set of gathered NEML2 model parameters
113 
115  std::vector<const MOOSEToNEML2 *> _gatherers;
116 
118  mutable neml2::ValueMap _retrieved_outputs;
119 
121  mutable neml2::DerivMap _retrieved_derivatives;
122 
124  mutable std::map<neml2::VariableName, std::map<std::string, neml2::Tensor>>
126 
127 private:
129  bool _error;
132 #endif
133 };
virtual void addGatheredVariable(const UserObjectName &, const neml2::VariableName &)
Register a NEML2 input variable gathered by a gatherer.
bool outputReady() const
check if the output is fully computed and ready to be fetched
std::vector< const MOOSEToNEML2 * > _gatherers
MOOSE data gathering user objects.
void execute() override
Execute method.
neml2::DerivMap _retrieved_derivatives
set of derivatives that were retrieved (by other objects)
Interface class to provide common input parameters, members, and methods for MOOSEObjects that use NE...
virtual bool solve()
Perform the material update.
bool _error
Whether an error was encountered.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::set< neml2::VariableName > _gathered_variable_names
neml2::ValueMap _out
The output variables of the material model.
virtual void extractOutputs()
Extract output derivatives with respect to input variables and model parameters.
std::set< std::string > _gathered_parameter_names
void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job...
const NEML2BatchIndexGenerator & _batch_index_generator
The NEML2BatchIndexGenerator used to generate the element-to-batch-index map.
const neml2::Tensor & getOutputDerivative(const neml2::VariableName &output_name, const neml2::VariableName &input_name) const
Get a reference(!) to the requested output derivative view.
std::string _error_message
Error message.
std::set< neml2::VariableName > _skip_vars
std::map< neml2::VariableName, std::map< std::string, neml2::Tensor > > _retrieved_parameter_derivatives
set of parameter derivatives that were retrieved (by other objects)
virtual void fillInputs()
Fill input variables and model parameters using the gatherers.
void initialize() override
Called before execute() is ever called so that data can be cleared.
virtual void checkExecutionStage() const final
Prevent output and derivative retrieval after construction.
virtual void applyPredictor()
Apply the predictor to set current trial state.
static InputParameters actionParams()
Parameters that can be specified under the NEML2Action common area.
const neml2::Tensor & getOutput(const neml2::VariableName &output_name) const
Get a reference(!) to the requested output view.
std::map< std::string, neml2::Tensor > _model_params
The model parameters to update (gathered from MOOSE)
NEML2ModelExecutor executes a NEML2 model.
bool _output_ready
flag that indicates if output data has been fully computed
NumberTensorValue Tensor
neml2::DerivMap _dout_din
The derivative of the output variables w.r.t. the input variables.
virtual void addGatheredParameter(const UserObjectName &, const std::string &)
Register a NEML2 model parameter gathered by a gatherer.
void meshChanged() override
Called on this object when the mesh changes.
static InputParameters validParams()
const neml2::Tensor & getOutputParameterDerivative(const neml2::VariableName &output_name, const std::string &parameter_name) const
Get a reference(!) to the requested output parameter derivative view.
Common interface for inserting gathered MOOSE data into the NEML2 material model. ...
Definition: MOOSEToNEML2.h:28
void finalize() override
Finalize.
virtual void expandInputs()
Expand tensor shapes if necessary to conformal sizes.
std::size_t getBatchIndex(dof_id_type elem_id) const
Get the batch index for the given element ID.
neml2::ValueMap _in
The input variables of the material model.
neml2::ValueMap _retrieved_outputs
set of output variables that were retrieved (by other objects)
NEML2ModelExecutor(const InputParameters &params)
uint8_t dof_id_type
NEML2BatchIndexGenerator iterates over the mesh and generates a map from element ID to batch index wh...