Output.h file
Extensible extraction mechanism for constitutive evaluation.
An Output is the dual of Input: where an Input populates a ConstitutivePoint with auxiliary data before the constitutive law is evaluated, an Output reads the prepared law at each quadrature point afterwards. This is the extraction site for quantities derived from the evaluation – committed internal variables, recovered stresses, strain energy, diagnostics – without hard-coding them into the integrator or the constitutive law, and without recomputing the kinematics at the call site.
An Output receives a const prepared law, so it is written against a specific law. The ConstitutivePoint carries Tags::CellIndex and Tags::QuadraturePointIndex, so an Output and an Input driven by the same pass address the same quadrature point.
Usage with CRTP
struct MyOutput : Solid::Output<MyOutput> { MyOutput() = default; template <class Law> void extract(const Solid::ConstitutivePoint& cp, const Law& law) const { // e.g., commit an internal variable state[cp.get<Solid::Tags::CellIndex>()] [cp.get<Solid::Tags::QuadraturePointIndex>()] = law.getActiveExtension(); } }; ivw.setOutput([output = MyOutput{}](const Solid::ConstitutivePoint& cp, const auto& law) { const Solid::Output<MyOutput>& base = output; base.extract(cp, law); });
Usage with lambda / std::function
ivw.setOutput([&](const Solid::ConstitutivePoint& cp, const auto& law) { energy += law.getStrainEnergyDensity(); }); ivw.commit();
Namespaces
- namespace Rodin
- The Rodin library for finite element methods and shape optimization.
- namespace Rodin::Solid
- Constitutive laws, kinematics, and solid-mechanics integration.
Classes
-
template<class Derived>class Rodin::Solid::Output
- CRTP base class for outputs.