ExactSolution Class Reference
#include <exact_solution.h>
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 ¶meters, const std::string &sys_name, const std::string &unknown_name)) |
| void | attach_exact_hessian (Tensor fptr(const Point &p, const Parameters ¶meters, 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 ¶meters, const std::string &sys_name, const std::string &unknown_name) |
| Gradient(* | _exact_deriv )(const Point &p, const Parameters ¶meters, const std::string &sys_name, const std::string &unknown_name) |
| Tensor(* | _exact_hessian )(const Point &p, const Parameters ¶meters, 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.
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] |
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 ¶meters,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 ¶meters,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
const EquationSystems& ExactSolution::_equation_systems [private] |
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().
const EquationSystems* ExactSolution::_equation_systems_fine [private] |
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 ¶meters, 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 ¶meters, 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 ¶meters, 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().
int ExactSolution::_extra_order [private] |
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: