Smith  0.1
Smith is an implicit thermal structural mechanics simulation code.
weak_form.hpp
Go to the documentation of this file.
1 // Copyright (c) Lawrence Livermore National Security, LLC and
2 // other Smith Project Developers. See the top-level LICENSE file for
3 // details.
4 //
5 // SPDX-License-Identifier: (BSD-3-Clause)
6 
13 #pragma once
14 
15 #include <vector>
16 #include <string>
17 #include <memory>
18 #include "smith/physics/common.hpp"
20 
21 namespace mfem {
22 class Vector;
23 class HypreParMatrix;
24 } // namespace mfem
25 
26 namespace smith {
27 
28 class FiniteElementState;
29 class FiniteElementDual;
30 
31 using QuadratureField = double;
32 using QuadratureFieldPtr = double*;
33 using ConstQuadratureFieldPtr = const double*;
34 
36 class WeakForm {
37  public:
41  WeakForm(std::string name) : name_(name) {}
42 
44  virtual ~WeakForm() {}
45 
56  virtual mfem::Vector residual(double time, double dt, ConstFieldPtr shape_disp,
57  const std::vector<ConstFieldPtr>& fields,
58  const std::vector<ConstQuadratureFieldPtr>& quad_fields = {},
59  int block_row = 0) const = 0;
60 
74  virtual std::unique_ptr<mfem::HypreParMatrix> jacobian(double time, double dt, ConstFieldPtr shape_disp,
75  const std::vector<ConstFieldPtr>& fields,
76  const std::vector<double>& field_argument_tangents,
77  const std::vector<ConstQuadratureFieldPtr>& quad_fields = {},
78  int block_row = 0) const = 0;
79 
93  virtual void jvp(double time, double dt, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
94  const std::vector<ConstQuadratureFieldPtr>& quad_fields, ConstFieldPtr v_shape_disp,
95  const std::vector<ConstFieldPtr>& v_fields,
96  const std::vector<ConstQuadratureFieldPtr>& v_quad_fields,
97  const std::vector<DualFieldPtr>& jvp_reactions) const = 0;
98 
112  virtual void vjp(double time, double dt, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
113  const std::vector<ConstQuadratureFieldPtr>& quad_fields, const std::vector<ConstFieldPtr>& v_fields,
114  DualFieldPtr vjp_shape_disp_sensitivity, const std::vector<DualFieldPtr>& vjp_sensitivities,
115  const std::vector<QuadratureFieldPtr>& vjp_quadrature_sensivities) const = 0;
116 
118  std::string name() const { return name_; }
119 
120  private:
122  std::string name_;
123 };
124 
125 } // namespace smith
Class for encapsulating the dual vector space of a finite element space (i.e. the space of linear for...
Abstract WeakForm class.
Definition: weak_form.hpp:36
virtual void jvp(double time, double dt, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< ConstQuadratureFieldPtr > &quad_fields, ConstFieldPtr v_shape_disp, const std::vector< ConstFieldPtr > &v_fields, const std::vector< ConstQuadratureFieldPtr > &v_quad_fields, const std::vector< DualFieldPtr > &jvp_reactions) const =0
Jacobian-vector product, will overwrite any existing values in jvp_reactions.
WeakForm(std::string name)
base constructor takes the name of the physics
Definition: weak_form.hpp:41
virtual std::unique_ptr< mfem::HypreParMatrix > jacobian(double time, double dt, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< double > &field_argument_tangents, const std::vector< ConstQuadratureFieldPtr > &quad_fields={}, int block_row=0) const =0
Derivative of the residual with respect to specified field arguments: sum_j d{r}_i/d{fields}_j * argu...
virtual void vjp(double time, double dt, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< ConstQuadratureFieldPtr > &quad_fields, const std::vector< ConstFieldPtr > &v_fields, DualFieldPtr vjp_shape_disp_sensitivity, const std::vector< DualFieldPtr > &vjp_sensitivities, const std::vector< QuadratureFieldPtr > &vjp_quadrature_sensivities) const =0
Vector-Jacobian product, will += into existing values in vjpFields.
std::string name() const
name
Definition: weak_form.hpp:118
virtual mfem::Vector residual(double time, double dt, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< ConstQuadratureFieldPtr > &quad_fields={}, int block_row=0) const =0
Virtual interface for computing the residual vector of a weak form.
virtual ~WeakForm()
destructor
Definition: weak_form.hpp:44
A file defining some enums and structs that are used by the different physics modules.
Defines common types and helper functions for using the residual and scalar_objective classes.
Accelerator functionality.
Definition: smith.cpp:36
const double * ConstQuadratureFieldPtr
This is a placeholder for quadrature field pointers.
Definition: weak_form.hpp:33
double * QuadratureFieldPtr
This is a placeholder for quadrature field pointers.
Definition: weak_form.hpp:32
double QuadratureField
This is a placeholder for quadrature fields.
Definition: weak_form.hpp:31
FiniteElementState const * ConstFieldPtr
using
Definition: field_types.hpp:36