26 #ifndef GRINS_QOI_BASE_H 
   27 #define GRINS_QOI_BASE_H 
   33 #include "libmesh/diff_qoi.h" 
   45   class MultiphysicsSystem;
 
   46   class AssemblyContext;
 
   52     QoIBase( 
const std::string& qoi_name );
 
   75     virtual void init( 
const GetPot& input,
 
   77                        unsigned int qoi_num );
 
   84                               const unsigned int qoi_index );
 
   89                                          const unsigned int qoi_index );
 
   98                                       const unsigned int qoi_index );
 
  104     virtual void parallel_op( 
const libMesh::Parallel::Communicator& communicator,
 
  105                               libMesh::Number& sys_qoi,
 
  106                               libMesh::Number& local_qoi );
 
  112     virtual void thread_join( libMesh::Number& qoi, 
const libMesh::Number& other_qoi );
 
  117     virtual void output_qoi( std::ostream& out ) 
const;
 
  120     libMesh::Number 
value() 
const;
 
  123     const std::string& 
name() 
const;
 
  145 #endif // GRINS_QOI_BASE_H 
const std::string & name() const 
Returns the name of this QoI. 
libMesh::Number _qoi_value
virtual void element_qoi_derivative(AssemblyContext &context, const unsigned int qoi_index)
Compute the qoi derivative with respect to the solution on element interiors. 
virtual bool assemble_on_sides() const  =0
Does the QoI need a domain boundary assembly loop? 
virtual void init(const GetPot &input, const MultiphysicsSystem &system, unsigned int qoi_num)
Method to allow QoI to cache any system information needed for QoI calculation, for example...
QoIBase(const std::string &qoi_name)
virtual void init_context(AssemblyContext &context)
virtual QoIBase * clone() const  =0
Clone this QoI. 
virtual void side_qoi_derivative(AssemblyContext &context, const unsigned int qoi_index)
Compute the qoi derivative with respect to the solution on the domain boundary. 
ParameterUser base class. Utility methods for subclasses. 
virtual bool assemble_on_interior() const  =0
Does the QoI need an element interior assembly loop? 
Interface with libMesh for solving Multiphysics problems. 
virtual void element_qoi(AssemblyContext &context, const unsigned int qoi_index)
Compute the qoi value for element interiors. 
libMesh::Number value() const 
Returns the current QoI value. 
virtual void output_qoi(std::ostream &out) const 
Basic output for computed QoI's. 
virtual void side_qoi(AssemblyContext &context, const unsigned int qoi_index)
Compute the qoi value on the domain boundary. 
virtual void thread_join(libMesh::Number &qoi, const libMesh::Number &other_qoi)
Call the operation to accumulate this QoI from multiple threads. 
virtual void parallel_op(const libMesh::Parallel::Communicator &communicator, libMesh::Number &sys_qoi, libMesh::Number &local_qoi)
Call the parallel operation for this QoI and cache the value.