ExactSolution Class Reference

#include <exact_solution.h>

List of all members.

Public Member Functions

 ExactSolution (const EquationSystems &es)
 ~ExactSolution ()
void attach_reference_solution (const EquationSystems *es_fine)
void attach_exact_value (Number fptr(const Point &p, const Parameters &Parameters, const std::string &sys_name, const std::string &unknown_name))
void attach_exact_deriv (Gradient fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name))
void attach_exact_hessian (Tensor fptr(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name))
void extra_quadrature_order (const int extraorder)
void compute_error (const std::string &sys_name, const std::string &unknown_name)
Real l2_error (const std::string &sys_name, const std::string &unknown_name)
Real l1_error (const std::string &sys_name, const std::string &unknown_name)
Real l_inf_error (const std::string &sys_name, const std::string &unknown_name)
Real h1_error (const std::string &sys_name, const std::string &unknown_name)
Real h2_error (const std::string &sys_name, const std::string &unknown_name)
Real error_norm (const std::string &sys_name, const std::string &unknown_name, const FEMNormType &norm)

Private Types

typedef std::map< std::string,
std::vector< Real > > 
SystemErrorMap

Private Member Functions

void _compute_error (const std::string &sys_name, const std::string &unknown_name, std::vector< Real > &error_vals)
std::vector< Real > & _check_inputs (const std::string &sys_name, const std::string &unknown_name)

Private Attributes

Number(* _exact_value )(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name)
Gradient(* _exact_deriv )(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name)
Tensor(* _exact_hessian )(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name)
std::map< std::string,
SystemErrorMap
_errors
const EquationSystems_equation_systems
const EquationSystems_equation_systems_fine
int _extra_order


Detailed Description

This class handles the computation of the L2 and/or H1 error for the Systems in the EquationSystems object which is passed to it. Note that for it to be useful, the user must attach at least one, and possibly two functions which can compute the exact solution and its derivative for any component of any system. These are the exact_value and exact_deriv functions below.

Author:
Benjamin S. Kirk w/ modifications for libmesh by John W. Peterson

Definition at line 62 of file exact_solution.h.


Member Typedef Documentation

typedef std::map<std::string, std::vector<Real> > ExactSolution::SystemErrorMap [private]

Data structure which stores the errors: ||e|| = ||u - u_h|| ||grad(e)|| = ||grad(u) - grad(u_h)|| for each unknown in a single system. The name of the unknown is the key for the map.

Definition at line 245 of file exact_solution.h.


Constructor & Destructor Documentation

ExactSolution::ExactSolution ( const EquationSystems es  ) 

Constructor. The ExactSolution object must be initialized with an EquationSystems object.

Definition at line 38 of file exact_solution.C.

References _equation_systems, _errors, EquationSystems::get_system(), EquationSystems::n_systems(), System::n_vars(), System::name(), and System::variable_name().

00038                                                       :
00039   _exact_value (NULL),
00040   _exact_deriv (NULL),
00041   _exact_hessian (NULL),
00042   _equation_systems(es),
00043   _equation_systems_fine(NULL),
00044   _extra_order(0)
00045 {
00046   // Initialize the _errors data structure which holds all
00047   // the eventual values of the error.
00048   for (unsigned int sys=0; sys<_equation_systems.n_systems(); ++sys)
00049     {
00050       // Reference to the system
00051       const System& system = _equation_systems.get_system(sys);
00052       
00053       // The name of the system
00054       const std::string& sys_name = system.name();
00055 
00056       // The SystemErrorMap to be inserted
00057       ExactSolution::SystemErrorMap sem;
00058 
00059       for (unsigned int var=0; var<system.n_vars(); ++var)
00060         {
00061           // The name of this variable
00062           const std::string& var_name = system.variable_name(var);
00063           sem[var_name] = std::vector<Real>(5, 0.);
00064         }
00065       
00066       _errors[sys_name] = sem;
00067     }
00068 }

ExactSolution::~ExactSolution (  )  [inline]

Destructor.

Definition at line 76 of file exact_solution.h.

00076 {}


Member Function Documentation

std::vector< Real > & ExactSolution::_check_inputs ( const std::string &  sys_name,
const std::string &  unknown_name 
) [private]

This function is responsible for checking the validity of the sys_name and unknown_name inputs, and returning a reference to the proper vector for storing the values.

Definition at line 124 of file exact_solution.C.

References _errors.

Referenced by compute_error(), error_norm(), h1_error(), h2_error(), l1_error(), l2_error(), and l_inf_error().

00126 {
00127   // If no exact solution function or fine grid solution has been
00128   // attached, we now just compute the solution norm (i.e. the
00129   // difference from an "exact solution" of zero
00130 /*
00131   if (_exact_value == NULL)
00132     {
00133       std::cerr << "Cannot compute error, you must provide a "
00134                 << "function which computes the exact solution."
00135                 << std::endl;
00136       libmesh_error();
00137     }
00138 */
00139   
00140   // Make sure the requested sys_name exists.
00141   std::map<std::string, SystemErrorMap>::iterator sys_iter =
00142     _errors.find(sys_name);
00143   
00144   if (sys_iter == _errors.end())
00145     {
00146       std::cerr << "Sorry, couldn't find the requested system '"
00147                 << sys_name << "'."
00148                 << std::endl;
00149       libmesh_error();
00150     }
00151   
00152   // Make sure the requested unknown_name exists.
00153   SystemErrorMap::iterator var_iter = (*sys_iter).second.find(unknown_name);
00154 
00155   if (var_iter == (*sys_iter).second.end())
00156     {
00157       std::cerr << "Sorry, couldn't find the requested variable '"
00158                 << unknown_name << "'."
00159                 << std::endl;
00160       libmesh_error();
00161     }
00162 
00163   // Return a reference to the proper error entry
00164   return (*var_iter).second;
00165 }

void ExactSolution::_compute_error ( const std::string &  sys_name,
const std::string &  unknown_name,
std::vector< Real > &  error_vals 
) [private]

This function computes the error (in the solution and its first derivative) for a single unknown in a single system. It is a private function since it is used by the implementation when solving for several unknowns in several systems.

Definition at line 349 of file exact_solution.C.

References _equation_systems, _equation_systems_fine, _exact_deriv, _exact_hessian, _exact_value, _extra_order, _mesh, MeshBase::active_local_elements_begin(), MeshBase::active_local_elements_end(), FEBase::build(), System::current_solution(), FEType::default_quadrature_rule(), DofMap::dof_indices(), AutoPtr< Tp >::get(), System::get_dof_map(), System::get_mesh(), EquationSystems::get_system(), libmesh_norm(), std::max(), MeshBase::mesh_dimension(), EquationSystems::parameters, libMeshEnums::SERIAL, TypeTensor< T >::size_sq(), TypeVector< T >::size_sq(), System::solution, System::update_global_solution(), System::variable_number(), and DofMap::variable_type().

Referenced by compute_error().

00352 {
00353   // This function must be run on all processors at once
00354   parallel_only();
00355 
00356   // Make sure we aren't "overconfigured"
00357   libmesh_assert (!(_exact_value && _equation_systems_fine));
00358 
00359   // Get a reference to the system whose error is being computed.
00360   // If we have a fine grid, however, we'll integrate on that instead
00361   // for more accuracy.
00362   const System& computed_system = _equation_systems_fine ?
00363     _equation_systems_fine->get_system(sys_name) :
00364     _equation_systems.get_system (sys_name);
00365 
00366   // Prepare a global solution and a MeshFunction of the coarse system if we need one
00367   AutoPtr<MeshFunction> coarse_values;
00368   AutoPtr<NumericVector<Number> > comparison_soln = NumericVector<Number>::build();
00369   if (_equation_systems_fine)
00370     {
00371       const System& comparison_system
00372         = _equation_systems.get_system(sys_name);
00373 
00374       std::vector<Number> global_soln;
00375       comparison_system.update_global_solution(global_soln);
00376       comparison_soln->init(comparison_system.solution->size(), true, SERIAL);
00377       (*comparison_soln) = global_soln;
00378 
00379       coarse_values = AutoPtr<MeshFunction>
00380         (new MeshFunction(_equation_systems,
00381                           *comparison_soln,
00382                           comparison_system.get_dof_map(),
00383                           comparison_system.variable_number(unknown_name)));
00384       coarse_values->init();
00385     }
00386 
00387   // Get a reference to the dofmap and mesh for that system
00388   const DofMap& computed_dof_map = computed_system.get_dof_map();
00389 
00390   const MeshBase& _mesh = computed_system.get_mesh();
00391 
00392   // Zero the error before summation
00393   error_vals = std::vector<Real>(5, 0.);
00394 
00395   // get the EquationSystems parameters for use with _exact_value
00396   const Parameters& parameters = this->_equation_systems.parameters;
00397 
00398   // Get the current time, in case the exact solution depends on it.
00399   // Steady systems of equations do not have a time parameter, so this
00400   // routine needs to take that into account.
00401   // FIXME!!!
00402   // const Real time = 0.;//_equation_systems.parameter("time");  
00403 
00404   // Construct Quadrature rule based on default quadrature order
00405   const unsigned int var = computed_system.variable_number(unknown_name);
00406   const FEType& fe_type  = computed_dof_map.variable_type(var);
00407 
00408   AutoPtr<QBase> qrule =
00409     fe_type.default_quadrature_rule (_mesh.mesh_dimension(),
00410                                      _extra_order);
00411 
00412   // Construct finite element object
00413   
00414   AutoPtr<FEBase> fe(FEBase::build(_mesh.mesh_dimension(), fe_type));
00415 
00416   // Attach quadrature rule to FE object
00417   fe->attach_quadrature_rule (qrule.get());
00418   
00419   // The Jacobian*weight at the quadrature points.
00420   const std::vector<Real>& JxW                               = fe->get_JxW();
00421   
00422   // The value of the shape functions at the quadrature points
00423   // i.e. phi(i) = phi_values[i][qp] 
00424   const std::vector<std::vector<Real> >&  phi_values         = fe->get_phi();
00425   
00426   // The value of the shape function gradients at the quadrature points
00427   const std::vector<std::vector<RealGradient> >& dphi_values = fe->get_dphi();
00428 
00429 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
00430   // The value of the shape function second derivatives at the quadrature points
00431   const std::vector<std::vector<RealTensor> >& d2phi_values = fe->get_d2phi();
00432 #endif
00433   
00434   // The XYZ locations (in physical space) of the quadrature points
00435   const std::vector<Point>& q_point                          = fe->get_xyz();
00436             
00437   // The global degree of freedom indices associated
00438   // with the local degrees of freedom.
00439   std::vector<unsigned int> dof_indices;
00440 
00441 
00442   //
00443   // Begin the loop over the elements
00444   //
00445   MeshBase::const_element_iterator       el     = _mesh.active_local_elements_begin();
00446   const MeshBase::const_element_iterator end_el = _mesh.active_local_elements_end(); 
00447 
00448   for ( ; el != end_el; ++el)
00449     {
00450       // Store a pointer to the element we are currently
00451       // working on.  This allows for nicer syntax later.
00452       const Elem* elem = *el;
00453 
00454       // reinitialize the element-specific data
00455       // for the current element
00456       fe->reinit (elem);
00457 
00458       // Get the local to global degree of freedom maps
00459       computed_dof_map.dof_indices    (elem, dof_indices, var);
00460       
00461       // The number of quadrature points
00462       const unsigned int n_qp = qrule->n_points();
00463 
00464       // The number of shape functions
00465       const unsigned int n_sf = dof_indices.size();
00466 
00467       //
00468       // Begin the loop over the Quadrature points.
00469       //
00470       for (unsigned int qp=0; qp<n_qp; qp++)
00471         {
00472           // Real u_h = 0.;
00473           // RealGradient grad_u_h;
00474 
00475           Number u_h = 0.;
00476 
00477           Gradient grad_u_h;
00478 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
00479           Tensor grad2_u_h;
00480 #endif
00481   
00482 
00483           // Compute solution values at the current
00484           // quadrature point.  This reqiures a sum
00485           // over all the shape functions evaluated
00486           // at the quadrature point.
00487           for (unsigned int i=0; i<n_sf; i++)
00488             {
00489               // Values from current solution.
00490               u_h      += phi_values[i][qp]*computed_system.current_solution  (dof_indices[i]);
00491               grad_u_h += dphi_values[i][qp]*computed_system.current_solution (dof_indices[i]);
00492 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
00493               grad2_u_h += d2phi_values[i][qp]*computed_system.current_solution (dof_indices[i]);
00494 #endif
00495             }
00496 
00497           // Compute the value of the error at this quadrature point
00498           Number exact_val = 0.0;
00499           if (_exact_value)
00500             exact_val = _exact_value(q_point[qp], parameters,
00501                                      sys_name, unknown_name);
00502           else if (_equation_systems_fine)
00503             exact_val = (*coarse_values)(q_point[qp]);
00504 
00505           const Number val_error = u_h - exact_val;
00506 
00507           // Add the squares of the error to each contribution
00508           error_vals[0] += JxW[qp]*libmesh_norm(val_error);
00509           Real norm = sqrt(libmesh_norm(val_error));
00510           error_vals[3] += JxW[qp]*norm;
00511           if(error_vals[4]<norm) { error_vals[4] = norm; }
00512 
00513           // Compute the value of the error in the gradient at this
00514           // quadrature point
00515           Gradient exact_grad;
00516           if (_exact_deriv)
00517             exact_grad = _exact_deriv(q_point[qp], parameters,
00518                                       sys_name, unknown_name);
00519           else if (_equation_systems_fine)
00520             exact_grad = coarse_values->gradient(q_point[qp]);
00521 
00522           const Gradient grad_error = grad_u_h - exact_grad;
00523 
00524           error_vals[1] += JxW[qp]*grad_error.size_sq();
00525 
00526 
00527 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
00528           // Compute the value of the error in the hessian at this
00529           // quadrature point
00530           Tensor exact_hess;
00531           if (_exact_hessian)
00532             exact_hess = _exact_hessian(q_point[qp], parameters,
00533                                         sys_name, unknown_name);
00534           else if (_equation_systems_fine)
00535             exact_hess = coarse_values->hessian(q_point[qp]);
00536 
00537           const Tensor grad2_error = grad2_u_h - exact_hess;
00538 
00539           error_vals[2] += JxW[qp]*grad2_error.size_sq();
00540 #endif
00541           
00542         } // end qp loop
00543     } // end element loop
00544 
00545   // Add up the error values on all processors, except for the L-infty
00546   // norm, for which the maximum is computed.
00547   Real l_infty_norm = error_vals[4];
00548   Parallel::max(l_infty_norm);
00549   Parallel::sum(error_vals);
00550   error_vals[4] = l_infty_norm;
00551 }

void ExactSolution::attach_exact_deriv ( Gradient   fptrconst Point &p,const Parameters &parameters,const std::string &sys_name,const std::string &unknown_name  ) 

Attach function similar to system.h which allows the user to attach an arbitrary function which computes the exact derivative of the solution at any point.

Definition at line 96 of file exact_solution.C.

References _equation_systems_fine, and _exact_deriv.

00100 {
00101   libmesh_assert (fptr != NULL);
00102   _exact_deriv = fptr;
00103 
00104   // If we're using exact values, we're not using a fine grid solution
00105   _equation_systems_fine = NULL;
00106 }

void ExactSolution::attach_exact_hessian ( Tensor   fptrconst Point &p,const Parameters &parameters,const std::string &sys_name,const std::string &unknown_name  ) 

Attach function similar to system.h which allows the user to attach an arbitrary function which computes the exact second derivatives of the solution at any point.

Definition at line 109 of file exact_solution.C.

References _equation_systems_fine, and _exact_hessian.

00113 {
00114   libmesh_assert (fptr != NULL);
00115   _exact_hessian = fptr;
00116 
00117   // If we're using exact values, we're not using a fine grid solution
00118   _equation_systems_fine = NULL;
00119 }

void ExactSolution::attach_exact_value ( Number   fptrconst Point &p, const Parameters &Parameters, const std::string &sys_name, const std::string &unknown_name  ) 

Attach function similar to system.h which allows the user to attach an arbitrary function which computes the exact value of the solution at any point.

void ExactSolution::attach_reference_solution ( const EquationSystems es_fine  ) 

Attach function similar to system.h which allows the user to attach a second EquationSystems object with a reference fine grid solution.

Definition at line 71 of file exact_solution.C.

References _equation_systems_fine, _exact_deriv, _exact_hessian, and _exact_value.

00072 {
00073   libmesh_assert (es_fine != NULL);
00074   _equation_systems_fine = es_fine;
00075 
00076   // If we're using a fine grid solution, we're not using exact values
00077   _exact_value = NULL;
00078   _exact_deriv = NULL;
00079   _exact_hessian = NULL;
00080 }

void ExactSolution::compute_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

Computes and stores the error in the solution value e = u-u_h, the gradient grad(e) = grad(u) - grad(u_h), and possibly the hessian grad(grad(e)) = grad(grad(u)) - grad(grad(u_h)). Does not return any value. For that you need to call the l2_error(), h1_error() or h2_error() functions respectively.

Definition at line 172 of file exact_solution.C.

References _check_inputs(), and _compute_error().

00174 {
00175   // Check the inputs for validity, and get a reference
00176   // to the proper location to store the error
00177   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00178                                                       unknown_name);
00179   this->_compute_error(sys_name,
00180                        unknown_name,
00181                        error_vals);
00182 }

Real ExactSolution::error_norm ( const std::string &  sys_name,
const std::string &  unknown_name,
const FEMNormType &  norm 
)

This function returns the error in the requested norm for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that. Note also that the result is not exact, but an approximation based on the chosen quadrature rule.

Definition at line 188 of file exact_solution.C.

References _check_inputs(), libMeshEnums::H1, libMeshEnums::H1_SEMINORM, libMeshEnums::H2, libMeshEnums::H2_SEMINORM, libMeshEnums::L1, libMeshEnums::L2, and libMeshEnums::L_INF.

00191 {
00192   // Check the inputs for validity, and get a reference
00193   // to the proper location to store the error
00194   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00195                                                       unknown_name);
00196   
00197   switch (norm)
00198     {
00199     case L2:
00200       return std::sqrt(error_vals[0]);
00201     case H1:
00202       return std::sqrt(error_vals[0] + error_vals[1]);
00203     case H2:
00204       return std::sqrt(error_vals[0] + error_vals[1] + error_vals[2]);
00205     case H1_SEMINORM:
00206       return std::sqrt(error_vals[1]);
00207     case H2_SEMINORM:
00208       return std::sqrt(error_vals[2]);
00209     case L1:
00210       return error_vals[3];
00211     case L_INF:
00212       return error_vals[4];
00213     // Currently only Sobolev norms/seminorms are supported
00214     default:
00215       libmesh_error();
00216     }
00217 }

void ExactSolution::extra_quadrature_order ( const int  extraorder  )  [inline]

Increases or decreases the order of the quadrature rule used for numerical integration.

Definition at line 123 of file exact_solution.h.

References _extra_order.

00124     { _extra_order = extraorder; }

Real ExactSolution::h1_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

This function computes and returns the H1 error for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that.

Definition at line 285 of file exact_solution.C.

References _check_inputs().

00287 {
00288   // If the user has supplied no exact derivative function, we
00289   // just integrate the H1 norm of the solution; i.e. its
00290   // difference from an "exact solution" of zero.
00291 /*
00292   if (_exact_deriv == NULL)
00293     {
00294       std::cerr << "Cannot compute H1 error, you must provide a "
00295                 << "function which computes the gradient of the exact solution."
00296                 << std::endl;
00297       libmesh_error();
00298     }
00299 */
00300   
00301   // Check the inputs for validity, and get a reference
00302   // to the proper location to store the error
00303   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00304                                                       unknown_name);
00305   
00306   // Return the square root of the sum of the computed errors.
00307   return std::sqrt(error_vals[0] + error_vals[1]);
00308 }

Real ExactSolution::h2_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

This function computes and returns the H2 error for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that.

Definition at line 316 of file exact_solution.C.

References _check_inputs().

00318 {
00319   // If the user has supplied no exact derivative functions, we
00320   // just integrate the H1 norm of the solution; i.e. its
00321   // difference from an "exact solution" of zero.
00322 /*
00323   if (_exact_deriv == NULL || _exact_hessian == NULL)
00324     {
00325       std::cerr << "Cannot compute H2 error, you must provide functions "
00326                 << "which computes the gradient and hessian of the "
00327                 << "exact solution."
00328                 << std::endl;
00329       libmesh_error();
00330     }
00331 */
00332   
00333   // Check the inputs for validity, and get a reference
00334   // to the proper location to store the error
00335   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00336                                                       unknown_name);
00337   
00338   // Return the square root of the sum of the computed errors.
00339   return std::sqrt(error_vals[0] + error_vals[1] + error_vals[2]);
00340 }

Real ExactSolution::l1_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

This function returns the integrated L1 error for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that.

Definition at line 245 of file exact_solution.C.

References _check_inputs().

00247 {
00248   
00249   // Check the inputs for validity, and get a reference
00250   // to the proper location to store the error
00251   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00252                                                       unknown_name);
00253   
00254   // Return the square root of the first component of the
00255   // computed error.
00256   return error_vals[3];
00257 }

Real ExactSolution::l2_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

This function returns the integrated L2 error for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that.

Definition at line 225 of file exact_solution.C.

References _check_inputs().

00227 {
00228   
00229   // Check the inputs for validity, and get a reference
00230   // to the proper location to store the error
00231   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00232                                                       unknown_name);
00233   
00234   // Return the square root of the first component of the
00235   // computed error.
00236   return std::sqrt(error_vals[0]);
00237 }

Real ExactSolution::l_inf_error ( const std::string &  sys_name,
const std::string &  unknown_name 
)

This function returns the L_INF error for the system sys_name for the unknown unknown_name. Note that no error computations are actually performed, you must call compute_error() for that. Note also that the result (as for the other norms as well) is not exact, but an approximation based on the chosen quadrature rule: to compute it, we take the max of the absolute value of the error over all the quadrature points.

Definition at line 265 of file exact_solution.C.

References _check_inputs().

00267 {
00268   
00269   // Check the inputs for validity, and get a reference
00270   // to the proper location to store the error
00271   std::vector<Real>& error_vals = this->_check_inputs(sys_name,
00272                                                       unknown_name);
00273   
00274   // Return the square root of the first component of the
00275   // computed error.
00276   return error_vals[4];
00277 }


Member Data Documentation

Constant reference to the EquationSystems object used for the simulation.

Definition at line 259 of file exact_solution.h.

Referenced by _compute_error(), and ExactSolution().

Constant pointer to the EquationSystems object containing the fine grid solution.

Definition at line 265 of file exact_solution.h.

Referenced by _compute_error(), attach_exact_deriv(), attach_exact_hessian(), and attach_reference_solution().

std::map<std::string, SystemErrorMap> ExactSolution::_errors [private]

A map of SystemErrorMaps, which contains entries for each system in the EquationSystems object. This is required, since it is possible for two systems to have unknowns with the *same name*.

Definition at line 253 of file exact_solution.h.

Referenced by _check_inputs(), and ExactSolution().

Gradient(* ExactSolution::_exact_deriv)(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name) [private]

Function pointer to user-provided function which computes the exact derivative of the solution.

Referenced by _compute_error(), attach_exact_deriv(), and attach_reference_solution().

Tensor(* ExactSolution::_exact_hessian)(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name) [private]

Function pointer to user-provided function which computes the exact hessian of the solution.

Referenced by _compute_error(), attach_exact_hessian(), and attach_reference_solution().

Number(* ExactSolution::_exact_value)(const Point &p, const Parameters &parameters, const std::string &sys_name, const std::string &unknown_name) [private]

Function pointer to user-provided function which computes the exact value of the solution.

Referenced by _compute_error(), and attach_reference_solution().

Extra order to use for quadrature rule

Definition at line 270 of file exact_solution.h.

Referenced by _compute_error(), and extra_quadrature_order().


The documentation for this class was generated from the following files:

Site Created By: libMesh Developers
Last modified: November 25 2009 03:44:12.

Hosted By:
SourceForge.net Logo