20 #ifndef __mast_libmesh_stress_assembly_h__ 21 #define __mast_libmesh_stress_assembly_h__ 31 #include <libmesh/nonlinear_implicit_system.h> 32 #include <libmesh/dof_map.h> 37 namespace libMeshWrapper {
39 template <
typename ScalarType,
46 "Scalar type of assembly and element operations must be same");
56 template <
typename VecType,
57 typename IndexingType,
62 const IndexingType &index,
63 StorageType &stress) {
68 sol_accessor(*c.sys, X);
70 libMesh::MeshBase::const_element_iterator
71 el = c.mesh->active_local_elements_begin(),
72 end_el = c.mesh->active_local_elements_end();
74 for ( ; el != end_el; ++el) {
79 sol_accessor.
init(*c.elem);
82 _e_ops->compute(c, sol_accessor, index, stress);
87 template <
typename VecType,
88 typename IndexingType,
91 typename ScalarFieldType>
93 const ScalarFieldType &f,
96 const IndexingType &index,
97 StorageType &dstress) {
102 sol_accessor(*c.sys, X),
103 dsol_accessor(*c.sys, dX);
105 libMesh::MeshBase::const_element_iterator
106 el = c.mesh->active_local_elements_begin(),
107 end_el = c.mesh->active_local_elements_end();
109 for ( ; el != end_el; ++el) {
114 sol_accessor.init(*c.elem);
115 dsol_accessor.
init(*c.elem);
118 _e_ops->derivative(c, f, sol_accessor, dsol_accessor, index, dstress);
133 #endif // __mast_libmesh_stress_assembly_h__ void assemble(ContextType &c, const VecType &X, const IndexingType &index, StorageType &stress)
void init(const libMesh::Elem &e)
void set_elem_ops(ElemOpsType &e_ops)
void sensitivity_assemble(ContextType &c, const ScalarFieldType &f, const VecType &X, const VecType &dX, const IndexingType &index, StorageType &dstress)
std::enable_if< Dim< 3, ScalarType >::typesource_load_multiplier(const SourceLoadFieldType *f, const SectionAreaType *s, ContextType &c) { Assert0(f, "Invalid pointer");Assert0(s, "Invalid pointer");return f-> value(c) *s -> value(c)
virtual ~StressAssembly()