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 
54  virtual mfem::Vector residual(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
55  const std::vector<ConstQuadratureFieldPtr>& quad_fields = {}) const = 0;
56 
67  virtual std::unique_ptr<mfem::HypreParMatrix> jacobian(
68  TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
69  const std::vector<double>& field_argument_tangents,
70  const std::vector<ConstQuadratureFieldPtr>& quad_fields = {}) const = 0;
71 
84  virtual void jvp(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
85  const std::vector<ConstQuadratureFieldPtr>& quad_fields, ConstFieldPtr v_shape_disp,
86  const std::vector<ConstFieldPtr>& v_fields,
87  const std::vector<ConstQuadratureFieldPtr>& v_quad_fields, DualFieldPtr jvp_reaction) const = 0;
88 
101  virtual void vjp(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector<ConstFieldPtr>& fields,
102  const std::vector<ConstQuadratureFieldPtr>& quad_fields, ConstFieldPtr v_field,
103  DualFieldPtr vjp_shape_disp_sensitivity, const std::vector<DualFieldPtr>& vjp_sensitivities,
104  const std::vector<QuadratureFieldPtr>& vjp_quadrature_sensivities) const = 0;
105 
107  std::string name() const { return name_; }
108 
109  private:
111  std::string name_;
112 };
113 
114 } // 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 std::unique_ptr< mfem::HypreParMatrix > jacobian(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< double > &field_argument_tangents, const std::vector< ConstQuadratureFieldPtr > &quad_fields={}) const =0
Derivative of the residual with respect to specified field arguments: sum_j d{r}/d{fields}_j * argume...
virtual void jvp(TimeInfo time_info, 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, DualFieldPtr jvp_reaction) 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 mfem::Vector residual(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< ConstQuadratureFieldPtr > &quad_fields={}) const =0
Virtual interface for computing the residual vector of a weak form.
virtual void vjp(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, const std::vector< ConstQuadratureFieldPtr > &quad_fields, ConstFieldPtr v_field, 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:107
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 const 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
struct storing time and timestep information
Definition: common.hpp:18