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::UniquePtr<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( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  102     AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
 
  104     for( std::vector<QoIBase*>::iterator qoi = 
_qois.begin();
 
  105          qoi != 
_qois.end(); ++qoi )
 
  107         (*qoi)->init_context(c);
 
  114     ( 
const std::string & param_name,
 
  118     for( 
unsigned int q = 0; q < _qois.size(); q++ )
 
  119       (*_qois[q]).register_parameter(param_name, param_pointer);
 
  123                                   const libMesh::QoISet&  )
 
  125     AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
 
  127     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  136                                              const libMesh::QoISet&  )
 
  138     AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
 
  140     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  149                                const libMesh::QoISet&  )
 
  151     AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
 
  153     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  162                                           const libMesh::QoISet&  )
 
  164     AssemblyContext& c = libMesh::libmesh_cast_ref<AssemblyContext&>(context);
 
  166     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  175                                   std::vector<libMesh::Number>& sys_qoi,
 
  176                                   std::vector<libMesh::Number>& local_qoi,
 
  177                                   const libMesh::QoISet&  )
 
  179     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  188                                   const std::vector<libMesh::Number>& other_qoi,
 
  189                                   const libMesh::QoISet&  )
 
  191     for( 
unsigned int q = 0; q < 
_qois.size(); q++ )
 
  201     for( std::vector<QoIBase*>::const_iterator qoi = 
_qois.begin();
 
  202          qoi != 
_qois.end(); ++qoi )
 
  204         (*qoi)->output_qoi(out);
 
  212     return (*
_qois[qoi_index]).value();
 
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 bool assemble_on_sides() const  =0
Does the QoI need a domain boundary assembly loop? 
 
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 
 
void register_parameter(const std::string ¶m_name, libMesh::ParameterMultiAccessor< libMesh::Number > ¶m_pointer) const 
Each QoI will register its copy(s) of an independent variable. 
 
virtual libMesh::UniquePtr< libMesh::DifferentiableQoI > clone()
Required to provide clone for adding QoI object to libMesh objects. 
 
virtual QoIBase * clone() const  =0
Clone this QoI. 
 
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 bool assemble_on_interior() const  =0
Does the QoI need an element interior assembly loop? 
 
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. 
 
libMesh::Number get_qoi_value(unsigned int qoi_index) const 
Accessor for value of QoI for given qoi_index. 
 
unsigned int n_qois() const