Ejemplo n.º 1
0
// function used to combine the contributions from solution components to the total error 
double error_total( double (*efn)(MeshFunction*, MeshFunction*, RefMap*, RefMap*), 
                    double (*nfn)(MeshFunction*, RefMap*), 
                    Hermes::vector<Solution*>& slns1, 
                    Hermes::vector<Solution*>& slns2 )
{
  double error = 0.0, norm = 0.0;

  std::vector<Solution*>::iterator it1, it2;
  for (it1=slns1.begin(), it2=slns2.begin(); it1 < slns1.end(); it1++, it2++) {
    assert(it2 < slns2.end());
    error += sqr(calc_abs_error(efn, *it1, *it2));
    if (nfn) norm += sqr(calc_norm(nfn, *it2));
  }
  
  /* Alternatively, without iterators:
  double error = 0.0, norm = 0.0;

  for (int i=0; i < slns1.size(); i++) {
    error += sqr(calc_abs_error(efn, slns1[i], slns2[i]));
    if (nfn) norm += sqr(calc_norm(nfn, slns2[i]));
  }
  */

  return (nfn ? sqrt(error/norm) : sqrt(error));
}
Ejemplo n.º 2
0
void EssentialBCs::add_boundary_conditions(Hermes::vector<EssentialBoundaryCondition *> boundary_conditions) {
  for(Hermes::vector<EssentialBoundaryCondition *>::iterator it = boundary_conditions.begin(); it != boundary_conditions.end(); it++)
        all.push_back(*it);

  markers.clear();
  create_marker_cache();
};
Ejemplo n.º 3
0
 void NeighborSearch<Scalar>::Transformations::apply_on(const Hermes::vector<Transformable*>& tr) const
 {
   for(Hermes::vector<Transformable*>::const_iterator it = tr.begin(); it != tr.end(); ++it)
     for(unsigned int i = 0; i < num_levels; i++)
       (*it)->push_transform(transf[i]);
 }
Ejemplo n.º 4
0
 void NeighborSearch<Scalar>::Transformations::copy_from(const Hermes::vector<unsigned int>& t)
 {
   num_levels = std::min<unsigned int>(t.size(), max_level);
   std::copy( t.begin(), t.begin() + num_levels, transf);
 }