本文整理汇总了C++中ErrorVector::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ ErrorVector::clear方法的具体用法?C++ ErrorVector::clear怎么用?C++ ErrorVector::clear使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ErrorVector
的用法示例。
在下文中一共展示了ErrorVector::clear方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: estimate_error
void AdjointRefinementEstimator::estimate_error (const System & _system,
ErrorVector & error_per_cell,
const NumericVector<Number> * solution_vector,
bool /*estimate_parent_error*/)
{
// We have to break the rules here, because we can't refine a const System
System & system = const_cast<System &>(_system);
// An EquationSystems reference will be convenient.
EquationSystems & es = system.get_equation_systems();
// The current mesh
MeshBase & mesh = es.get_mesh();
// Get coarse grid adjoint solutions. This should be a relatively
// quick (especially with preconditioner reuse) way to get a good
// initial guess for the fine grid adjoint solutions. More
// importantly, subtracting off a coarse adjoint approximation gives
// us better local error indication, and subtracting off *some* lift
// function is necessary for correctness if we have heterogeneous
// adjoint Dirichlet conditions.
// Solve the adjoint problem(s) on the coarse FE space
// Only if the user didn't already solve it for us
if (!system.is_adjoint_already_solved())
system.adjoint_solve(_qoi_set);
// Loop over all the adjoint problems and, if any have heterogenous
// Dirichlet conditions, get the corresponding coarse lift
// function(s)
for (unsigned int j=0; j != system.qoi.size(); j++)
{
// Skip this QoI if it is not in the QoI Set or if there are no
// heterogeneous Dirichlet boundaries for it
if (_qoi_set.has_index(j) &&
system.get_dof_map().has_adjoint_dirichlet_boundaries(j))
{
std::ostringstream liftfunc_name;
liftfunc_name << "adjoint_lift_function" << j;
NumericVector<Number> & liftvec =
system.add_vector(liftfunc_name.str());
system.get_dof_map().enforce_constraints_exactly
(system, &liftvec, true);
}
}
// We'll want to back up all coarse grid vectors
std::map<std::string, NumericVector<Number> *> coarse_vectors;
for (System::vectors_iterator vec = system.vectors_begin(); vec !=
system.vectors_end(); ++vec)
{
// The (string) name of this vector
const std::string & var_name = vec->first;
coarse_vectors[var_name] = vec->second->clone().release();
}
// Back up the coarse solution and coarse local solution
NumericVector<Number> * coarse_solution =
system.solution->clone().release();
NumericVector<Number> * coarse_local_solution =
system.current_local_solution->clone().release();
// And we'll need to temporarily change solution projection settings
bool old_projection_setting;
old_projection_setting = system.project_solution_on_reinit();
// Make sure the solution is projected when we refine the mesh
system.project_solution_on_reinit() = true;
// And it'll be best to avoid any repartitioning
UniquePtr<Partitioner> old_partitioner(mesh.partitioner().release());
// And we can't allow any renumbering
const bool old_renumbering_setting = mesh.allow_renumbering();
mesh.allow_renumbering(false);
// Use a non-standard solution vector if necessary
if (solution_vector && solution_vector != system.solution.get())
{
NumericVector<Number> * newsol =
const_cast<NumericVector<Number> *> (solution_vector);
newsol->swap(*system.solution);
system.update();
}
// Resize the error_per_cell vector to be
// the number of elements, initialized to 0.
error_per_cell.clear();
error_per_cell.resize (mesh.max_elem_id(), 0.);
#ifndef NDEBUG
// n_coarse_elem is only used in an assertion later so
// avoid declaring it unless asserts are active.
const dof_id_type n_coarse_elem = mesh.n_elem();
#endif
// Uniformly refine the mesh
MeshRefinement mesh_refinement(mesh);
//.........这里部分代码省略.........