37template<
typename TGr
idFunction>
45 for (
size_t co = 0; co < noc; co++)
47 if (lsf [co] >= m_level_set_zero - lsf_threshold ()
48 && lsf [co] <= m_level_set_zero + lsf_threshold ())
50 if (lsf [co] < m_level_set_zero) neg = 1;
57template <
typename TGr
idFunction>
61 typedef typename TGridFunction::template dim_traits<dim>::const_iterator t_elem_iter;
67 if (! m_spLSF.valid ())
return;
73 t_elem_iter iterEnd = m_spLSF->template end<elem_type> ();
74 for (t_elem_iter iter = m_spLSF->template begin<elem_type> (); iter != iterEnd; ++iter)
77 size_t noc = elem->num_vertices ();
78 number lsf [maxNumCorners];
81 m_spLSF->indices (elem, locInd);
84 for (
size_t i = 0; i < noc; i++) lsf[i] = locLSF (m_lsf_fct, i);
87 if (lsf_sign (noc, lsf) == 0)
88 m_vpCut.push_back (elem);
93template <
typename TGr
idFunction>
102 VecSet (dir, 0); dir[dim-1] = 1;
103 for (
size_t i = 0; i < dim-1; i++) origin[i] =
xy[i];
107 m_intersections.clear ();
110 for (
size_t i = 0; i < m_intersectionRecords.size (); i++)
120template <
typename TGr
idFunction>
123 std::vector<number> & z,
129 std::vector<number> vShape;
131 for (
size_t i = 0; i < m_intersections.size (); i++)
137 std::vector<MathVector<dim> > vCornerCoords;
143 = ReferenceMappingProvider::get<dim, dim> (roid, vCornerCoords);
145 = LocalFiniteElementProvider::get<dim> (roid, m_spLSF->local_finite_element_id (m_lsf_fct));
153 m_spLSF->indices (elem, locInd);
159 for (
size_t j = 0; j < 2; j++)
162 rTrialSpace.
shapes (vShape, locPos[j]);
165 lsf_value[j] = - m_level_set_zero;
166 for(
size_t sh = 0; sh < vShape.size(); sh++)
167 lsf_value[j] += locLSF (m_lsf_fct, sh) * vShape[sh];
170 if (fabs (lsf_value[j]) < 1e-10)
175 if (lsf_value[0] * lsf_value[1] > 0)
180 if (lsf_value[0] == lsf_value[1])
181 elem_z = e_data.
pnt[1][dim-1];
183 elem_z = (lsf_value[0] * e_data.
pnt[1][dim-1] - lsf_value[1] * e_data.
pnt[0][dim-1])
184 / (lsf_value[0] - lsf_value[1]);
188 for (k = 0; k < z.size (); k++)
189 if (std::fabs (z[k] - elem_z) < small_z)
break;
191 z.push_back (elem_z);
205template <
int WDim,
typename TAAPos,
typename TElem>
208 static const int dim = WDim;
223 eval_pnt = aa_pos [elem->vertex (0)];
224 for (
size_t i = 1; i < (size_t) ref_elem_t::numCorners; i++)
225 eval_pnt += aa_pos [elem->vertex (i)];
226 eval_pnt /= ref_elem_t::numCorners;
233template <
int WDim,
typename TAAPos>
236 static const int dim = WDim;
250 eval_pnt = aa_pos [elem];
259template <
typename TGr
idFunction>
263 const char * subsetNames
265: m_sp_ls_pos_z (sp_ls_pos_z), m_use_ss_z_as_default (true), m_elem_dim (-1)
267 if (! sp_ls_pos_z.
valid ())
268 UG_THROW (
"LSPosZData: The measurer not specified.");
278template <
typename TGr
idFunction>
281 detach_for (m_elem_dim);
287template <
typename TGr
idFunction>
288template <
typename TElem>
295 typedef typename gf_type::template traits<TElem>::const_iterator elem_iter_t;
300 pos_acc_type aa_pos = spLSF->domain()->position_accessor ();
301 num_aa_t aa_elem_num (* spLSF->domain()->grid (), m_a_elem_num);
303 for (
size_t i = 0; i < m_SsGrp.size (); i++)
306 for (elem_iter_t iter = spLSF->template begin<TElem> (si);
307 iter != spLSF->template end<TElem> (si); ++iter)
309 TElem * elem = * iter;
316 const size_t index = aa_elem_num [(base_elem_t *) elem];
318 for (
size_t k = 0; k < wDim - 1; k++)
xy[k] =
xyz[k];
319 if (z_pos != NULL) z_pos [index] =
xyz [wDim-1];
328template <
typename TGr
idFunction>
329template <
int elemDim>
333 typedef typename gf_type::template traits<elem_t>::const_iterator elem_iter_t;
338 bool default_used =
false;
340 if (m_elem_dim != elemDim)
342 detach_for (m_elem_dim);
343 spLSF->domain()->grid()->template attach_to_dv<elem_t> (m_a_elem_num, (
size_t) -1);
344 m_elem_dim = elemDim;
348 num_aa_t aa_elem_num (* spLSF->domain()->grid (), m_a_elem_num);
350 for (
size_t i = 0; i < m_SsGrp.size (); i++)
353 for (elem_iter_t iter = spLSF->template begin<elem_t> (si);
354 iter != spLSF->template end<elem_t> (si); ++iter)
355 aa_elem_num [*iter] = elem_num++;
361 m_elem_z.resize (elem_num);
362 std::vector<
MathVector<wDim-1> > eval_pos (elem_num);
363 std::vector<number> z_pos;
number * z_pos_ptr = NULL;
364 if (m_use_ss_z_as_default)
366 z_pos.resize (elem_num);
367 z_pos_ptr = & (z_pos[0]);
369 boost::mpl::for_each<ElemList> (
GetXYForElements (
this, & (eval_pos[0]), z_pos_ptr));
370 for (
size_t j = 0; j < eval_pos.size (); j++)
371 if (! m_sp_ls_pos_z->get_height_at (eval_pos[j], m_elem_z[j]))
373 m_elem_z [j] = m_use_ss_z_as_default? z_pos[j] : m_default_height;
384 std::vector<
MathVector<wDim-1> > proc_pos (elem_num);
385 std::vector<number> z_pos;
number * z_pos_ptr = NULL;
386 if (m_use_ss_z_as_default)
388 z_pos.resize (elem_num);
389 z_pos_ptr = & (z_pos[0]);
391 boost::mpl::for_each<ElemList> (
GetXYForElements (
this, & (proc_pos[0]), z_pos_ptr));
394 std::vector<int> offset;
395 proc_comm.
allgatherv (all_pos, proc_pos, NULL, &offset);
398 std::vector<number> tmp_elem_z (all_pos.size ());
399 for (
size_t j = 0; j < tmp_elem_z.size (); j++)
400 if (! m_sp_ls_pos_z->get_height_at (all_pos[j], tmp_elem_z [j]))
401 tmp_elem_z [j] = - std::numeric_limits<number>::max ();
404 std::vector<number> all_elem_z (tmp_elem_z.size ());
408 m_elem_z.resize (elem_num);
410 if (! m_use_ss_z_as_default)
412 for (
size_t j = 0; j < elem_num; j++)
414 number z_val = all_elem_z [my_offset + j];
415 if (z_val == - std::numeric_limits<number>::max ())
417 m_elem_z [j] = m_default_height;
421 m_elem_z [j] = z_val;
426 for (
size_t i = 0; i < m_SsGrp.size (); i++)
429 for (elem_iter_t iter = spLSF->template begin<elem_t> (si);
430 iter != spLSF->template end<elem_t> (si); ++iter)
432 elem_t * vrt = * iter;
433 size_t j = aa_elem_num [vrt];
434 number z_val = all_elem_z [my_offset + j];
435 if (z_val == - std::numeric_limits<number>::max ())
437 m_elem_z [j] = z_pos[j];
441 m_elem_z [j] = z_val;
451 UG_LOG (
"LSPosZData::reinit: Some parts of the level set is not under the specified subsets.");
452 if (m_use_ss_z_as_default)
454 UG_LOG (
" Position of the subsets is used instead.\n");
458 UG_LOG (
" Default value " << m_default_height <<
" used.\n");
466template <
typename TGr
idFunction>
467template <
int elemDim>
471 m_sp_ls_pos_z->lsf()->domain()->grid()->template detach_from<elem_type> (m_a_elem_num);
477template <
typename TGr
idFunction>
483 if (dim == 0) detach_for_<0> ();
484 else if (dim == 1) detach_for_<1> ();
485#if defined (UG_DIM_2) || defined (UG_DIM_3)
486 else if (dim == 2) detach_for_<2> ();
488#if defined (UG_DIM_3)
489 else if (dim == 3) detach_for_<3> ();
497template <
typename TGr
idFunction>
503 if (dim < 0) reinit ();
504 else if (dim == 0) reinit_for_<0> ();
505 else if (dim == 1) reinit_for_<1> ();
506#if defined (UG_DIM_2) || defined (UG_DIM_3)
507 else if (dim == 2) reinit_for_<2> ();
509#if defined (UG_DIM_3)
510 else if (dim == 3) reinit_for_<3> ();
513 UG_THROW (
"LSPosZData::reinit_for: Illegal dimensionality " << dim <<
" specified.");
520template <
typename TGr
idFunction>
524 int dim = m_SsGrp.get_highest_subset_dimension ();
540template <
typename TGr
idFunction>
555 std::vector<std::vector<number> > vvvDeriv[],
559 typedef typename gf_type::template dim_traits<refDim>::grid_base_object elem_type;
562 if (! m_SsGrp.contains (si))
563 UG_THROW (
"LSPosZData: Attempt to get the value for a subset that has not been specified.");
568 const elem_type * elem =
dynamic_cast<elem_type *
> (grid_obj);
573 if (m_elem_dim == refDim)
577 num_aa_t aa_elem_num (* m_sp_ls_pos_z->lsf()->domain()->grid (), m_a_elem_num);
578 size_t elem_no = aa_elem_num [elem];
579 if (elem_no == (
size_t) -1)
580 UG_THROW (
"LSPosZData: The object is not properly initialized.");
581 number z_val = m_elem_z [elem_no];
582 for (
size_t ip = 0; ip < nip; ip++)
585 UG_THROW (
"LSPosZData: No derivative for " << m_elem_dim <<
"d > 0d.");
587 else if (m_elem_dim == 0)
590 std::vector<number> shape;
592 for (
size_t ip = 0; ip < nip; ip++)
595 rTrialSpace.
shapes (shape, vLocIP [ip]);
596 UG_ASSERT (shape.size () == elem->num_vertices (),
"LSPosZData: Hanging nodes are not supported!");
600 for(
size_t sh = 0; sh < shape.size (); sh++)
602 const Vertex * vrt = elem->vertex (sh);
603 size_t vrt_no = aa_vrt_num [vrt];
604 if (vrt_no == (
size_t) -1)
605 UG_THROW (
"LSPosZData: The object is not properly initialized.");
606 vValue [ip] += m_elem_z [vrt_no] * shape [sh];
612 for (
size_t ip = 0; ip < nip; ip++)
614 rTrialSpace.
shapes(shape, vLocIP [ip]);
615 for (
size_t sh = 0; sh < shape.size(); sh++) vvvDeriv [ip] [0] [sh] = shape [sh];
620 UG_THROW (
"LSPosZData: The object is reinitialized for a wrong dimensionality " << m_elem_dim <<
".");
628template <
typename TGr
idFunction>
632 const char * subsetNames
634: m_sp_ls_pos_z (sp_ls_pos_z), m_use_ss_z_as_default (true), m_elem_dim (-1)
636 if (! sp_ls_pos_z.
valid ())
637 UG_THROW (
"LSPosZCellToVrtData: The measurer not specified.");
651template <
typename TGr
idFunction>
654 grid_type &
grid = * m_sp_ls_pos_z->lsf()->domain()->grid ();
656 grid.template detach_from<Vertex> (m_a_vrt_div);
657 grid.template detach_from<Vertex> (m_a_height);
663template <
typename TGr
idFunction>
664template <
typename TElem>
672 typedef typename gf_type::template traits<TElem>::const_iterator elem_iter_t;
677 pos_acc_type aa_pos = spLSF->domain()->position_accessor ();
678 num_aa_t aa_elem_num (* spLSF->domain()->grid (), a_elem_num);
680 for (
size_t i = 0; i < m_SsGrp.size (); i++)
683 for (elem_iter_t iter = spLSF->template begin<TElem> (si);
684 iter != spLSF->template end<TElem> (si); ++iter)
686 TElem * elem = * iter;
693 const size_t index = aa_elem_num [(base_elem_t *) elem];
695 for (
size_t k = 0; k < wDim - 1; k++)
xy[k] =
xyz[k];
696 if (z_pos != NULL) z_pos [index] =
xyz [wDim-1];
707template <
typename TGr
idFunction>
708template <
int elemDim>
712 typedef typename gf_type::template traits<elem_t>::const_iterator elem_iter_t;
713 typedef typename gf_type::template traits<Vertex>::const_iterator vert_iter_t;
718 bool default_used =
false;
720 m_elem_dim = elemDim;
727 SetAttachmentValues (aa_vrt_div, spLSF->template begin<Vertex> (), spLSF->template end<Vertex> (), 0);
730 SetAttachmentValues (aa_height, spLSF->template begin<Vertex> (), spLSF->template end<Vertex> (), 0);
734 grid.template attach_to_dv<elem_t> (a_elem_num, (
size_t) -1);
735 num_aa_t aa_elem_num (
grid, a_elem_num);
737 for (
size_t i = 0; i < m_SsGrp.size (); i++)
740 for (elem_iter_t iter = spLSF->template begin<elem_t> (si);
741 iter != spLSF->template end<elem_t> (si); ++iter)
742 aa_elem_num [*iter] = elem_num++;
746 std::vector<number> elem_z;
751 elem_z.resize (elem_num);
752 std::vector<
MathVector<wDim-1> > eval_pos (elem_num);
753 std::vector<number> z_pos;
number * z_pos_ptr = NULL;
754 if (m_use_ss_z_as_default)
756 z_pos.resize (elem_num);
757 z_pos_ptr = & (z_pos[0]);
759 boost::mpl::for_each<ElemList> (
GetXYForElements (
this, a_elem_num, & (eval_pos[0]), z_pos_ptr));
760 for (
size_t j = 0; j < eval_pos.size (); j++)
761 if (! m_sp_ls_pos_z->get_height_at (eval_pos[j], elem_z[j]))
763 elem_z [j] = m_use_ss_z_as_default? z_pos[j] : m_default_height;
774 std::vector<
MathVector<wDim-1> > proc_pos (elem_num);
775 std::vector<number> z_pos;
number * z_pos_ptr = NULL;
776 if (m_use_ss_z_as_default)
778 z_pos.resize (elem_num);
779 z_pos_ptr = & (z_pos[0]);
781 boost::mpl::for_each<ElemList> (
GetXYForElements (
this, a_elem_num, & (proc_pos[0]), z_pos_ptr));
784 std::vector<int> offset;
785 proc_comm.
allgatherv (all_pos, proc_pos, NULL, &offset);
788 std::vector<number> tmp_elem_z (all_pos.size ());
789 for (
size_t j = 0; j < tmp_elem_z.size (); j++)
790 if (! m_sp_ls_pos_z->get_height_at (all_pos[j], tmp_elem_z [j]))
791 tmp_elem_z [j] = - std::numeric_limits<number>::max ();
794 std::vector<number> all_elem_z (tmp_elem_z.size ());
798 elem_z.resize (elem_num);
800 if (! m_use_ss_z_as_default)
802 for (
size_t j = 0; j < elem_num; j++)
804 number z_val = all_elem_z [my_offset + j];
805 if (z_val == - std::numeric_limits<number>::max ())
807 elem_z [j] = m_default_height;
816 for (
size_t i = 0; i < m_SsGrp.size (); i++)
819 for (elem_iter_t iter = spLSF->template begin<elem_t> (si);
820 iter != spLSF->template end<elem_t> (si); ++iter)
822 elem_t * vrt = * iter;
823 size_t j = aa_elem_num [vrt];
824 number z_val = all_elem_z [my_offset + j];
825 if (z_val == - std::numeric_limits<number>::max ())
827 elem_z [j] = z_pos[j];
840 for (
size_t i = 0; i < m_SsGrp.size (); i++)
843 for (elem_iter_t iter = spLSF->template begin<elem_t> (si);
844 iter != spLSF->template end<elem_t> (si); ++iter)
846 elem_t * elem = *iter;
847 for (
size_t j = 0; j < elem->size (); j++)
849 aa_height [(* elem) [j]] += elem_z [aa_elem_num [elem]];
850 aa_vrt_div [(* elem) [j]] ++;
860 for (vert_iter_t v_iter = spLSF->template begin<Vertex> ();
861 v_iter != spLSF->template end<Vertex> (); ++v_iter)
864 if (aa_vrt_div [v] != 0)
865 aa_height [v] /= aa_vrt_div [v];
869 grid.template detach_from<elem_t> (a_elem_num);
874 UG_LOG (
"LSPosZData::reinit: Some parts of the level set is not under the specified subsets.");
875 if (m_use_ss_z_as_default)
877 UG_LOG (
" Position of the subsets is used instead.\n");
881 UG_LOG (
" Default value " << m_default_height <<
" used.\n");
890template <
typename TGr
idFunction>
896 if (dim < 0) reinit ();
899 UG_THROW (
"LSPosZCellToVrtData::reinit_for is not implemented for vertices (0d). Use LSPosZData instead.");
901 else if (dim == 1) reinit_for_<1> ();
902#if defined (UG_DIM_2) || defined (UG_DIM_3)
903 else if (dim == 2) reinit_for_<2> ();
905#if defined (UG_DIM_3)
906 else if (dim == 3) reinit_for_<3> ();
909 UG_THROW (
"LSPosZCellToVrtData::reinit_for: Illegal dimensionality " << dim <<
" specified.");
916template <
typename TGr
idFunction>
920 int dim = m_SsGrp.get_highest_subset_dimension ();
936template <
typename TGr
idFunction>
951 std::vector<std::vector<number> > vvvDeriv[],
955 typedef typename gf_type::template dim_traits<refDim>::grid_base_object elem_type;
958 if (! m_SsGrp.contains (si))
959 UG_THROW (
"LSPosZCellToVrtData: Attempt to get the value for a subset that has not been specified.");
964 const elem_type * elem =
dynamic_cast<elem_type *
> (grid_obj);
969 cnt_aa_t aa_vrt_div (* m_sp_ls_pos_z->lsf()->domain()->grid (), m_a_vrt_div);
970 h_aa_t aa_vrt_h (* m_sp_ls_pos_z->lsf()->domain()->grid (), m_a_height);
971 std::vector<number> shape;
973 for (
size_t ip = 0; ip < nip; ip++)
976 rTrialSpace.
shapes (shape, vLocIP [ip]);
977 UG_ASSERT (shape.size () == elem->num_vertices (),
"LSPosZCellToVrtData: Hanging nodes are not supported!");
981 for(
size_t sh = 0; sh < shape.size (); sh++)
983 const Vertex * vrt = elem->vertex (sh);
984 if (aa_vrt_div [vrt] == 0)
985 UG_THROW (
"LSPosZCellToVrtData: Attempt to get the position of the level set in a subset where the object is not initialized");
986 number vrt_h = aa_vrt_h [vrt];
987 vValue [ip] += vrt_h * shape [sh];
993 for (
size_t ip = 0; ip < nip; ip++)
995 rTrialSpace.
shapes(shape, vLocIP [ip]);
996 for (
size_t sh = 0; sh < shape.size(); sh++) vvvDeriv [ip] [0] [sh] = shape [sh];
1006template <
typename TLSPosZ>
1013 std::string input_line;
1014 std::istringstream line_stream;
1016 line_stream.exceptions (std::istream::failbit | std::istream::badbit);
1024 UG_THROW (
"LSPositionAtPoints: Could not load the points from the file!");
1025 std::getline (in, input_line);
1026 if (input_line.length () == 0)
1030 line_stream.str (input_line);
1031 line_stream.clear ();
1032 for (
size_t i = 0; i < dim-1; i++)
1033 line_stream >>
xy[i];
1035 line_stream >> z_spec;
1037 catch (std::istream::failure & e)
1039 UG_THROW (
"LSPositionAtPoints: Failed to parse line '" << input_line <<
"' in the input file.");
1042 add_pnt (
xy, z_spec, z_given);
1049template <
typename TLSPosZ>
1052 const char * file_name,
1057 UG_COND_THROW (full_file_name.empty (),
"LSPositionAtPoints: Coulnd't locate file '" << file_name <<
"'.");
1059 std::ifstream input (full_file_name.c_str (), std::ifstream::in);
1060 UG_COND_THROW (input.fail (),
"LSPositionAtPoints: Cannot open data file '" << full_file_name <<
"' for input!");
1061 load_points_from (input, z_given);
1067template <
typename TLSPosZ>
1070 if (m_sp_ls_measurer.invalid ())
1071 UG_THROW (
"LSPositionAtPoints: The measurer is not specified!");
1075 for (
size_t i = 0; i < m_v_points.size (); i++)
1078 pnt.
valid = m_sp_ls_measurer->get_height_at (pnt.
xy, pnt.
z);
1085 std::vector<number> loc_z (m_v_points.size ()), red_z (m_v_points.size ());
1087 for (
size_t i = 0; i < m_v_points.size (); i++)
1088 if (! m_sp_ls_measurer->get_height_at (m_v_points[i].xy, loc_z[i]))
1089 loc_z[i] = - std::numeric_limits<number>::max ();
1092 for (
size_t i = 0; i < m_v_points.size (); i++)
1096 if (z_val != - std::numeric_limits<number>::max ())
1112template <
typename TLSPosZ>
1116 bool print_difference
1119 if (m_sp_ls_measurer.invalid ())
1120 UG_THROW (
"LSPositionAtPoints: The measurer is not specified!");
1122 for (
size_t i = 0; i < m_v_points.size (); i++)
1125 for (
size_t j = 0; j < dim - 1; j++)
1126 out << pnt.
xy[j] <<
'\t';
1133 out <<
'\t' << pnt.
z_spec;
1134 if (print_difference)
1137 out <<
'\t' << pnt.
z - pnt.
z_spec;
1149template <
typename TLSPosZ>
1152 const char * file_name,
1153 bool print_difference
1162 std::ofstream output (file_name, std::ofstream::out);
1163 UG_COND_THROW (output.fail (),
"LSPositionAtPoints: Cannot open data file '" << file_name <<
"' for output!");
1164 print_to (output, print_difference);
1170template <
typename TLSPosZ>
1173 const char * file_name,
1184 std::ofstream out (file_name, std::ofstream::app);
1185 UG_COND_THROW (out.fail (),
"LSPositionAtPoints: Cannot open data file '" << file_name <<
"' for output!");
1187 out.unsetf (std::ios::fixed | std::ios::scientific);
1190 for (
size_t i = 0; i < m_v_points.size (); i++)
1192 out << step <<
'\t' << time <<
'\t';
1205template <
typename TLSPosZ>
1208 const char * file_name
1217 std::ofstream out (file_name, std::ofstream::out);
1218 UG_COND_THROW (out.fail (),
"LSPositionAtPoints: Cannot open data file '" << file_name <<
"' for output!");
1220 out.unsetf (std::ios::fixed | std::ios::scientific);
1223 for (
size_t k = 0; k < dim - 1; k++)
1225 out <<
"# ----\t----";
1226 for (
size_t i = 0; i < m_v_points.size (); i++)
1229 out <<
'\t' << pnt.
xy[k];
1233 out <<
"# step\ttime";
1234 for (
size_t i = 0; i < m_v_points.size (); i++)
1238 out <<
'\t' << pnt.
z_spec;
1240 out <<
'\t' <<
"----";
parameterString s
Definition Biogas.lua:2
size_t allreduce(const size_t &t, pcl::ReduceOperation op) const
int get_proc_id(size_t index) const
void allgatherv(const void *sendBuf, int sendCount, DataType sendType, void *recBuf, int *recCounts, int *displs, DataType recType) const
int get_local_proc_id(int globalProcID=pcl::ProcRank()) const
virtual void global_to_local(MathVector< dim > &locPos, const MathVector< worldDim > &globPos, const size_t maxIter=1000, const number tol=1e-10) const=0
virtual ReferenceObjectID reference_object_id() const=0
virtual void shapes(std::vector< std::vector< shape_type > > &vvShape, const std::vector< MathVector< dim > > &vLocPos) const=0
void resize(const LocalIndices &ind)
void add(const char *name)
void set_subset_handler(ConstSmartPtr< ISubsetHandler > sh)
domain_type::grid_type grid_type
grid type
Definition level_set_pos.h:449
SmartPtr< measurer_type > m_sp_ls_pos_z
the object to measure the z-coordinate of the level set
Definition level_set_pos.h:563
LSPosZCellToVrtData(SmartPtr< measurer_type > &sp_ls_pos_z, const char *subsets)
Constructor.
Definition level_set_pos_impl.h:630
~LSPosZCellToVrtData()
Destructor.
Definition level_set_pos_impl.h:652
void reinit_for(int dim)
Initializer (should be called before every use). Reinialize the measurer before running this reinit!
Definition level_set_pos_impl.h:892
void reinit_for_()
Initializer for the constant dimensionality.
Definition level_set_pos_impl.h:709
h_a_type m_a_height
attachment keeping the averaged height at the vertex
Definition level_set_pos.h:570
domain_type::position_accessor_type pos_acc_type
position attachment accessor type
Definition level_set_pos.h:452
void reinit()
Initializer (should be called before every use). Reinialize the measurer before running this reinit!
Definition level_set_pos_impl.h:917
void eval_and_deriv(number vValue[], const MathVector< wDim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< wDim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, bool bDeriv, int s, std::vector< std::vector< number > > vvvDeriv[], const MathMatrix< refDim, wDim > *vJT=NULL)
Performs the main computations:
Definition level_set_pos_impl.h:939
SubsetGroup m_SsGrp
(low-dimensional) subsets to compute the coordinates over
Definition level_set_pos.h:561
cnt_a_type m_a_vrt_div
attachment keeping the number of the elements adjecent to a vertex
Definition level_set_pos.h:569
void get_xy_for_all_(num_a_type &a_elem_num, MathVector< wDim-1 > *xy_pos, number *z_pos)
Computes the xy-coordinates of the evaluation points for all elements of the given type.
Definition level_set_pos_impl.h:666
static void get(elem_t *elem, pos_acc_t &aa_pos, MathVector< dim > &eval_pnt)
Definition level_set_pos_impl.h:243
RegularVertex elem_t
Definition level_set_pos_impl.h:238
TAAPos pos_acc_t
Definition level_set_pos_impl.h:237
Definition level_set_pos_impl.h:207
static void get(elem_t *elem, pos_acc_t &aa_pos, MathVector< dim > &eval_pnt)
Definition level_set_pos_impl.h:216
reference_element_traits< elem_t >::reference_element_type ref_elem_t
Definition level_set_pos_impl.h:211
TAAPos pos_acc_t
Definition level_set_pos_impl.h:209
TElem elem_t
Definition level_set_pos_impl.h:210
static const int dim
Definition level_set_pos_impl.h:208
void reinit()
Initializer (should be called before every use). Reinialize the measurer before running this reinit!
Definition level_set_pos_impl.h:521
SmartPtr< measurer_type > m_sp_ls_pos_z
the object to measure the z-coordinate of the level set
Definition level_set_pos.h:408
domain_type::position_accessor_type pos_acc_type
position attachment accessor type
Definition level_set_pos.h:301
LSPosZData(SmartPtr< measurer_type > &sp_ls_pos_z, const char *subsets)
Constructor.
Definition level_set_pos_impl.h:261
~LSPosZData()
Destructor.
Definition level_set_pos_impl.h:279
void reinit_for(int dim)
Initializer (should be called before every use). Reinialize the measurer before running this reinit!
Definition level_set_pos_impl.h:499
void eval_and_deriv(number vValue[], const MathVector< wDim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< wDim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, bool bDeriv, int s, std::vector< std::vector< number > > vvvDeriv[], const MathMatrix< refDim, wDim > *vJT=NULL)
Performs the main computations:
Definition level_set_pos_impl.h:543
void get_xy_for_all_(MathVector< wDim-1 > *xy_pos, number *z_pos)
Computes the xy-coordinates of the evaluation points for all elements of the given type.
Definition level_set_pos_impl.h:290
void detach_for_()
Destroys the attachment (for the templated dimensionality)
Definition level_set_pos_impl.h:468
void reinit_for_()
Initializer for the constant dimensionality.
Definition level_set_pos_impl.h:330
SubsetGroup m_SsGrp
(low-dimensional) subsets to compute the coordinates over
Definition level_set_pos.h:406
void detach_for(int dim)
Destroys the attachment (for a variable dimensionality)
Definition level_set_pos_impl.h:479
void append_to_table(const char *file_name, size_t step, number time)
appends the data to a given file
Definition level_set_pos_impl.h:1172
void compute()
compute the z-coordinates
Definition level_set_pos_impl.h:1068
void load_points_from(std::istream &in, bool z_given=false)
load points from a stream
Definition level_set_pos_impl.h:1008
void print_table_header(const char *file_name)
prints the table header to a given file
Definition level_set_pos_impl.h:1207
void print_to(std::ostream &out, bool print_difference=false)
prints the table of the points into a given stream
Definition level_set_pos_impl.h:1114
TGridFunction::element_type elem_type
generic element type
Definition level_set_pos.h:61
void get_z(std::vector< number > &z, number small_z=1e-12)
get the point at the level set
Definition level_set_pos_impl.h:122
int lsf_sign(size_t noc, number lsf[])
sign of the LSF in the element
Definition level_set_pos_impl.h:39
bool get_intersected(const MathVector< dim-1 > &xy)
get the elements intersected by the ray
Definition level_set_pos_impl.h:95
void fill_cut()
get the elements cut by the level set
Definition level_set_pos_impl.h:58
void CollectCornerCoordinates(int base_object_id, std::vector< typename TDomain::position_type > &vCornerCoordsOut, GridObject &elem, const TDomain &domain, bool clearContainer)
void SetAttachmentValues(TAttachmentAccessor &aaVal, TIter elemsBegin, TIter elemsEnd, const TVal &val)
std::string FindFileInStandardPaths(const char *filename)
vector< string > TokenizeString(const char *str, const char delimiter=',')
#define UG_ASSERT(expr, msg)
#define UG_COND_THROW(cond, msg)
vector_t PointOnRay(const vector_t &from, const vector_t &dir, number s)
bool RayElementIntersections(std::vector< RayElemIntersectionRecord< typename tree_t::elem_t > > &intersectionsOut, const tree_t &tree, const typename tree_t::vector_t &rayFrom, const typename tree_t::vector_t &rayDir, const number small=1.e-12)
void GetLocalVector(LocalVector &lvec, const TVector &vec)
void VecSet(vector_t &dest, number alpha, const std::vector< size_t > vIndex)
Helper class for computation of the position of the level set in all the elements.
Definition level_set_pos.h:542
Helper class for computation of the position of the level set in all the elements.
Definition level_set_pos.h:378
type of point data
Definition level_set_pos.h:710
number z
computed value of the z-coordiate
Definition level_set_pos.h:712
bool z_given
iff z is specified
Definition level_set_pos.h:714
number z_spec
expected value of z-coordinate
Definition level_set_pos.h:713
MathVector< dim-1 > xy
low-dim coordinate of the point
Definition level_set_pos.h:711
bool valid
if not computed or the level set is not covered by the top surface
Definition level_set_pos.h:716
a structure to get the intersection points of an element
Definition level_set_pos.h:83
MathVector< dim > pnt[2]
the intersection points
Definition level_set_pos.h:85
elem_type * elem
the intersected element
Definition level_set_pos.h:84