33 #include "libmesh/diff_context.h"
41 assemble_qoi_sides =
false;
42 assemble_qoi_elements =
false;
49 for( std::vector<QoIBase*>::iterator qoi =
_qois.begin();
50 qoi !=
_qois.end(); ++qoi )
62 for(
unsigned int q = 0; q < this->
n_qois(); q++ )
67 return libMesh::AutoPtr<libMesh::DifferentiableQoI>(
clone);
76 this->assemble_qoi_elements =
true;
81 this->assemble_qoi_sides =
true;
89 sys_qoi.resize(
_qois.size(), 0.0);
96 for( std::vector<QoIBase*>::iterator qoi =
_qois.begin();
97 qoi !=
_qois.end(); ++qoi )
99 (*qoi)->init(input,system);
107 AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
109 for( std::vector<QoIBase*>::iterator qoi =
_qois.begin();
110 qoi !=
_qois.end(); ++qoi )
112 (*qoi)->init_context(c);
119 (
const std::string & param_name,
123 for(
unsigned int q = 0; q < _qois.size(); q++ )
124 (*_qois[q]).register_parameter(param_name, param_pointer);
128 const libMesh::QoISet& )
130 AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
132 for(
unsigned int q = 0; q <
_qois.size(); q++ )
141 const libMesh::QoISet& )
143 AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
145 for(
unsigned int q = 0; q <
_qois.size(); q++ )
154 const libMesh::QoISet& )
156 AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
158 for(
unsigned int q = 0; q <
_qois.size(); q++ )
167 const libMesh::QoISet& )
169 AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
171 for(
unsigned int q = 0; q <
_qois.size(); q++ )
180 std::vector<libMesh::Number>& sys_qoi,
181 std::vector<libMesh::Number>& local_qoi,
182 const libMesh::QoISet& )
184 for(
unsigned int q = 0; q <
_qois.size(); q++ )
193 const std::vector<libMesh::Number>& other_qoi,
194 const libMesh::QoISet& )
196 for(
unsigned int q = 0; q <
_qois.size(); q++ )
206 for( std::vector<QoIBase*>::const_iterator qoi =
_qois.begin();
207 qoi !=
_qois.end(); ++qoi )
209 (*qoi)->output_qoi(out);
217 return (*
_qois[qoi_index]).value();
virtual bool assemble_on_interior() const =0
Does the QoI need an element interior assembly loop?
virtual void thread_join(std::vector< libMesh::Number > &qoi, const std::vector< libMesh::Number > &other_qoi, const libMesh::QoISet &qoi_indices)
Operation to accumulate the QoI from multiple MPI processes.
std::vector< QoIBase * > _qois
virtual void init_context(libMesh::DiffContext &context)
virtual void side_qoi_derivative(libMesh::DiffContext &context, const libMesh::QoISet &qois)
Compute the qoi derivative with respect to the solution on the domain boundary.
const QoIBase & get_qoi(unsigned int qoi_index) const
virtual bool assemble_on_sides() const =0
Does the QoI need a domain boundary assembly loop?
void register_parameter(const std::string ¶m_name, libMesh::ParameterMultiPointer< libMesh::Number > ¶m_pointer) const
Each QoI will register its copy(s) of an independent variable.
virtual void side_qoi(libMesh::DiffContext &context, const libMesh::QoISet &qoi_indices)
Compute the qoi value on the domain boundary.
virtual void element_qoi(libMesh::DiffContext &context, const libMesh::QoISet &qoi_indices)
Compute the qoi value for element interiors.
virtual void init_qoi(std::vector< libMesh::Number > &sys_qoi)
Method to allow QoI to resize libMesh::System storage of QoI computations.
virtual void parallel_op(const libMesh::Parallel::Communicator &communicator, std::vector< libMesh::Number > &sys_qoi, std::vector< libMesh::Number > &local_qoi, const libMesh::QoISet &qoi_indices)
Operation to accumulate the QoI from multiple MPI processes.
Interface with libMesh for solving Multiphysics problems.
virtual void add_qoi(const QoIBase &qoi)
void output_qoi(std::ostream &out) const
Basic output for computed QoI's.
virtual void init(const GetPot &input, const MultiphysicsSystem &system)
Method to allow QoI to cache any system information needed for QoI calculation, for example...
virtual void element_qoi_derivative(libMesh::DiffContext &context, const libMesh::QoISet &qoi_indices)
Compute the qoi derivative with respect to the solution on element interiors.
virtual libMesh::AutoPtr< libMesh::DifferentiableQoI > clone()
Required to provide clone for adding QoI object to libMesh objects.
virtual QoIBase * clone() const =0
Clone this QoI.
libMesh::Number get_qoi_value(unsigned int qoi_index) const
Accessor for value of QoI for given qoi_index.
unsigned int n_qois() const