32 unsigned n_dim=mesh_pt->finite_element_pt(0)->dim();
37 FiniteElement* el_pt=mesh_pt->finite_element_pt(0);
38 Vector<double> cog(n_dim);
39 double max_radius=0.0;
40 el_pt->get_centre_of_gravity_and_max_radius_in_terms_of_zeta(cog,max_radius);
41 std::ofstream outfile;
42 outfile.open(
"RESLT/single_element.dat");
43 el_pt->output(outfile,el_pt->nnode_1d());
47 outfile.open(
"RESLT/enclosing_circle_for_single_element.dat");
49 outfile <<
"ZONE I=" << nplot << std::endl;
50 for (
unsigned i=0;
i<nplot;
i++)
53 outfile << cog[0]+max_radius*
cos(phi) <<
" "
54 << cog[1]+max_radius*
sin(phi) << std::endl;
60 outfile.open(
"RESLT/enclosing_sphere_for_single_element.dat");
62 outfile <<
"ZONE I=" << nplot <<
", J=" << nplot << std::endl;
63 for (
unsigned i=0;
i<nplot;
i++)
66 for (
unsigned j=0;
j<nplot;
j++)
69 outfile << cog[0]+max_radius*
cos(phi)*
cos(
theta) <<
" "
71 << cog[2]+max_radius*
sin(
theta) <<
" "
84 Vector<double>
zeta(cog);
85 GeomObject* geom_object_pt=0;
86 Vector<double>
s(n_dim);
87 bool use_coordinate_as_initial_guess=
false;
88 el_pt->locate_zeta(
zeta,
91 use_coordinate_as_initial_guess);
93 if (geom_object_pt==0)
95 oomph_info <<
"elemental locate zeta failed\n";
100 oomph_info <<
"elemental locate zeta succeeded\n";
107 RefineableBinArrayParameters ref_bin_array_parameters(mesh_pt);
108 NonRefineableBinArrayParameters non_ref_bin_array_parameters(mesh_pt);
109 #ifdef OOMPH_HAS_CGAL
110 CGALSamplePointContainerParameters sample_point_container_parameters(mesh_pt);
115 unsigned n_sample_point_container_type=2;
116 #ifdef OOMPH_HAS_CGAL
117 n_sample_point_container_type++;
119 for (
unsigned ref_flag=0;ref_flag<n_sample_point_container_type;ref_flag++)
122 SamplePointContainerParameters* sample_point_container_params_pt=0;
125 sample_point_container_params_pt=&non_ref_bin_array_parameters;
126 oomph_info <<
"\n\n\nDOING NON-REFINEABLE BIN ARRAY" << std::endl;
127 oomph_info <<
"==============================" << std::endl;
129 else if (ref_flag==1)
131 sample_point_container_params_pt=&ref_bin_array_parameters;
132 oomph_info <<
"\n\n\nDOING REFINEABLE BIN ARRAY" << std::endl;
133 oomph_info <<
"==========================" << std::endl;
135 #ifdef OOMPH_HAS_CGAL
136 else if (ref_flag==2)
138 sample_point_container_params_pt=&sample_point_container_parameters;
139 oomph_info <<
"\n\n\nDOING CGAL BASED CONTAINER" << std::endl;
140 oomph_info <<
"==========================" << std::endl;
149 MeshAsGeomObject* mesh_geom_obj_pt=
new MeshAsGeomObject(sample_point_container_params_pt);
188 dynamic_cast<BinArray*
>(mesh_geom_obj_pt->sample_point_container_pt())->
189 output_bin_vertices(outfile);
192 else if (ref_flag==1)
197 dynamic_cast<BinArray*
>(mesh_geom_obj_pt->sample_point_container_pt())->
198 output_bin_vertices(outfile);
207 oomph_info <<
"\n\n\nLots of zetas:" << std::endl;
208 oomph_info <<
"--------------\n\n" << std::endl;
214 Vector<double>
s(n_dim);
215 Vector<double>
zeta(n_dim);
216 GeomObject* geom_obj_pt=0;
217 Vector<double> s_from_locate_zeta(n_dim);
218 Vector<double> zeta_test(n_dim);
220 double t_locate_zeta=0.0;
221 unsigned nelem=mesh_pt->nelement();
222 for (
unsigned e=0;
e<nelem;
e++)
224 FiniteElement* el_pt=mesh_pt->finite_element_pt(
e);
225 Integral* int_pt=el_pt->integral_pt();
226 unsigned nint=int_pt->nweight();
227 for (
unsigned j=0;
j<nint;
j++)
230 Vector<double>
s(n_dim);
231 for (
unsigned i=0;
i<n_dim;
i++)
233 s[
i]=int_pt->knot(
j,
i);
235 el_pt->interpolated_zeta(
s,
zeta);
239 mesh_geom_obj_pt->locate_zeta(
zeta,geom_obj_pt,s_from_locate_zeta);
241 t_locate_zeta+=end_t-start_t;
255 geom_obj_pt->interpolated_zeta(s_from_locate_zeta,zeta_test);
258 for (
unsigned i=0;
i<n_dim;
i++)
266 oomph_info <<
"done/tested " << count <<
" located zetas. Max. error = "
268 <<
"Total time for locate zeta: " << t_locate_zeta
269 <<
" sec " << std::endl;
276 oomph_info <<
"\n\n\nEnforced failure for one zeta:" << std::endl;
277 oomph_info <<
"------------------------------\n\n" << std::endl;
281 filename <<
"RESLT/sample_points_" << n_dim <<
"d_";
286 else if (ref_flag==1)
290 else if (ref_flag==2)
301 Vector<double>
zeta(n_dim,0.5);
302 GeomObject* geom_obj_pt=0;
303 Vector<double> s_from_locate_zeta(n_dim);
304 Vector<double> zeta_test(n_dim,0.5);
305 double t_locate_zeta=0.0;
307 mesh_geom_obj_pt->locate_zeta(
zeta,geom_obj_pt,s_from_locate_zeta);
309 t_locate_zeta+=end_t-start_t;
312 oomph_info <<
"It took " << t_locate_zeta <<
" secs to ";
315 geom_obj_pt->interpolated_zeta(s_from_locate_zeta,zeta_test);
317 << zeta_test[0] <<
" "
318 << zeta_test[1] <<
" "
321 unsigned nvisit=mesh_geom_obj_pt->sample_point_container_pt()->
322 total_number_of_sample_points_visited_during_locate_zeta_from_top_level();
323 unsigned ntotal=mesh_geom_obj_pt->sample_point_container_pt()->
324 total_number_of_sample_points_computed_recursively();
326 oomph_info <<
"Visited " << nvisit <<
" sample points "
327 <<
" out of a total of " << ntotal << std::endl;
332 << zeta_test[0] <<
" "
333 << zeta_test[1] <<
" "
336 unsigned nvisit=mesh_geom_obj_pt->sample_point_container_pt()->
337 total_number_of_sample_points_visited_during_locate_zeta_from_top_level();
338 unsigned ntotal=mesh_geom_obj_pt->sample_point_container_pt()->
339 total_number_of_sample_points_computed_recursively();
341 oomph_info <<
"Visited " << nvisit <<
" sample points "
342 <<
" out of a total of " << ntotal << std::endl;
364 <<
"\n\n\nEnforced failure for one zeta because of limited radius:"
367 <<
"--------------------------------------------------------\n\n"
372 filename <<
"RESLT/sample_points_limited_radius" << n_dim <<
"d_";
377 else if (ref_flag==1)
381 else if (ref_flag==2)
392 Vector<double>
zeta(n_dim);
393 GeomObject* geom_obj_pt=0;
394 Vector<double> s_from_locate_zeta(n_dim);
395 Vector<double> zeta_test(n_dim);
396 Vector<std::pair<double, double> > min_and_max_coordinates=
397 mesh_geom_obj_pt->sample_point_container_pt()->
398 min_and_max_coordinates();
399 double min_dim=DBL_MAX;
400 for (
unsigned i=0;
i<n_dim;
i++)
402 zeta[
i]=0.5*(min_and_max_coordinates[
i].first+
403 min_and_max_coordinates[
i].second);
404 double dist=
fabs(min_and_max_coordinates[
i].first-
405 min_and_max_coordinates[
i].second);
406 if (dist<min_dim) min_dim=dist;
408 mesh_geom_obj_pt->sample_point_container_pt()->max_search_radius()=
412 << mesh_geom_obj_pt->sample_point_container_pt()->
413 max_search_radius() << std::endl;
415 double t_locate_zeta=0.0;
417 mesh_geom_obj_pt->locate_zeta(
zeta,geom_obj_pt,s_from_locate_zeta);
419 t_locate_zeta+=end_t-start_t;
422 oomph_info <<
"It took " << t_locate_zeta <<
" secs to ";
425 geom_obj_pt->interpolated_zeta(s_from_locate_zeta,zeta_test);
427 << zeta_test[0] <<
" "
428 << zeta_test[1] <<
" "
431 unsigned nvisit=mesh_geom_obj_pt->sample_point_container_pt()->
432 total_number_of_sample_points_visited_during_locate_zeta_from_top_level();
433 unsigned ntotal=mesh_geom_obj_pt->sample_point_container_pt()->
434 total_number_of_sample_points_computed_recursively();
436 oomph_info <<
"Visited " << nvisit <<
" sample points "
437 <<
" out of a total of " << ntotal << std::endl;
442 << zeta_test[0] <<
" "
443 << zeta_test[1] <<
" "
446 unsigned nvisit=mesh_geom_obj_pt->sample_point_container_pt()->
447 total_number_of_sample_points_visited_during_locate_zeta_from_top_level();
448 unsigned ntotal=mesh_geom_obj_pt->sample_point_container_pt()->
449 total_number_of_sample_points_computed_recursively();
451 oomph_info <<
"Visited " << nvisit <<
" sample points "
452 <<
" out of a total of " << ntotal << std::endl;
469 mesh_geom_obj_pt->sample_point_container_pt()->max_search_radius()=
476 oomph_info <<
"\n\n\nEnforced failure for one zeta (spiraling):" << std::endl;
477 oomph_info <<
"------------------------------------------\n\n" << std::endl;
479 Vector<double>
zeta(n_dim,0.5);
480 GeomObject* geom_obj_pt=0;
483 unsigned nsample_points_in_bin_array=mesh_geom_obj_pt->
484 sample_point_container_pt()->total_number_of_sample_points_computed_recursively();
488 unsigned n_max_level=0;
492 double t_locate_zeta=0.0;
495 if (mesh_geom_obj_pt->sample_point_container_version()==
500 sample_point_container_pt());
502 sample_point_container_pt->
503 last_sample_point_to_actually_lookup_during_locate_zeta() =
504 sample_point_container_pt->
505 initial_last_sample_point_to_actually_lookup_during_locate_zeta();
506 sample_point_container_pt->
507 first_sample_point_to_actually_lookup_during_locate_zeta() = 0;
510 else if (mesh_geom_obj_pt->sample_point_container_version()==
515 sample_point_container_pt());
531 #ifdef OOMPH_HAS_CGAL
533 else if (mesh_geom_obj_pt->sample_point_container_version()==
534 UseCGALSamplePointContainer)
536 CGALSamplePointContainer* sample_point_container_pt=
537 dynamic_cast<CGALSamplePointContainer*
>(mesh_geom_obj_pt->
538 sample_point_container_pt());
540 sample_point_container_pt->
541 last_sample_point_to_actually_lookup_during_locate_zeta() =
542 sample_point_container_pt->
543 initial_last_sample_point_to_actually_lookup_during_locate_zeta();
544 sample_point_container_pt->
545 first_sample_point_to_actually_lookup_during_locate_zeta() = 0;
550 oomph_info <<
"wrong sample point container\n";
555 unsigned i_level = 0;
556 bool has_not_reached_max_level_of_search=
true;
557 while ((geom_obj_pt==0)&&(has_not_reached_max_level_of_search))
559 oomph_info <<
"\n\nSearch level: " << i_level << std::endl;
562 if (mesh_geom_obj_pt->sample_point_container_version()==
568 sample_point_container_pt());
571 <<
"First/last sample point: "
572 << sample_point_container_pt->
573 first_sample_point_to_actually_lookup_during_locate_zeta() <<
" "
574 << sample_point_container_pt->
575 last_sample_point_to_actually_lookup_during_locate_zeta()
580 else if (mesh_geom_obj_pt->sample_point_container_version()==
585 sample_point_container_pt());
587 oomph_info <<
"First/last spiral level to be visited: "
592 #ifdef OOMPH_HAS_CGAL
594 else if (mesh_geom_obj_pt->sample_point_container_version()==
595 UseCGALSamplePointContainer)
597 CGALSamplePointContainer* sample_point_container_pt=
598 dynamic_cast<CGALSamplePointContainer*
>(mesh_geom_obj_pt->
599 sample_point_container_pt());
601 <<
"First/last sample point: "
602 << sample_point_container_pt->
603 first_sample_point_to_actually_lookup_during_locate_zeta() <<
" "
604 << sample_point_container_pt->
605 last_sample_point_to_actually_lookup_during_locate_zeta()
611 oomph_info <<
"wrong sample point container\n";
617 filename <<
"RESLT/sample_points_" << n_dim <<
"d";
622 else if (ref_flag==1)
626 else if (ref_flag==2)
637 Vector<double> s_from_locate_zeta(n_dim);
638 Vector<double> zeta_test(n_dim,0.5);
640 mesh_geom_obj_pt->locate_zeta(
zeta,geom_obj_pt,s_from_locate_zeta);
642 t_locate_zeta+=end_t-start_t;
654 oomph_info <<
"Found zeta in " << i_level <<
" search levels.\n";
661 if (mesh_geom_obj_pt->sample_point_container_version()==
667 sample_point_container_pt());
668 sample_point_container_pt->
669 first_sample_point_to_actually_lookup_during_locate_zeta() =
670 sample_point_container_pt->
671 last_sample_point_to_actually_lookup_during_locate_zeta();
672 sample_point_container_pt->
673 last_sample_point_to_actually_lookup_during_locate_zeta() *=
674 sample_point_container_pt->
675 multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta();
678 else if (mesh_geom_obj_pt->sample_point_container_version()==
683 sample_point_container_pt());
688 #ifdef OOMPH_HAS_CGAL
690 else if (mesh_geom_obj_pt->sample_point_container_version()==
691 UseCGALSamplePointContainer)
694 CGALSamplePointContainer* sample_point_container_pt=
695 dynamic_cast<CGALSamplePointContainer*
>(mesh_geom_obj_pt->
696 sample_point_container_pt());
697 sample_point_container_pt->
698 first_sample_point_to_actually_lookup_during_locate_zeta() =
699 sample_point_container_pt->
700 last_sample_point_to_actually_lookup_during_locate_zeta();
701 sample_point_container_pt->
702 last_sample_point_to_actually_lookup_during_locate_zeta() *=
703 sample_point_container_pt->
704 multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta();
709 oomph_info <<
"wrong sample point container\n";
717 if (mesh_geom_obj_pt->sample_point_container_version()==
722 sample_point_container_pt());
723 if (sample_point_container_pt->
724 first_sample_point_to_actually_lookup_during_locate_zeta()
725 <= nsample_points_in_bin_array)
727 has_not_reached_max_level_of_search=
true;
731 has_not_reached_max_level_of_search=
false;
735 else if (mesh_geom_obj_pt->sample_point_container_version()==
740 sample_point_container_pt());
744 has_not_reached_max_level_of_search=
true;
748 has_not_reached_max_level_of_search=
false;
752 #ifdef OOMPH_HAS_CGAL
754 else if (mesh_geom_obj_pt->sample_point_container_version()==
755 UseCGALSamplePointContainer)
757 CGALSamplePointContainer* sample_point_container_pt=
758 dynamic_cast<CGALSamplePointContainer*
>(mesh_geom_obj_pt->
759 sample_point_container_pt());
760 if (sample_point_container_pt->
761 first_sample_point_to_actually_lookup_during_locate_zeta()
762 <= nsample_points_in_bin_array)
764 has_not_reached_max_level_of_search=
true;
768 has_not_reached_max_level_of_search=
false;
779 oomph_info <<
"\n\n\nIt took " << t_locate_zeta <<
" secs to ";
795 unsigned nvisit=mesh_geom_obj_pt->sample_point_container_pt()->
796 total_number_of_sample_points_visited_during_locate_zeta_from_top_level();
797 unsigned ntotal=mesh_geom_obj_pt->sample_point_container_pt()->
798 total_number_of_sample_points_computed_recursively();
800 oomph_info <<
"Visited " << nvisit <<
" sample points "
801 <<
" out of a total of " << ntotal << std::endl;
814 delete mesh_geom_obj_pt;
824 outfile <<
"1" << std::endl;
827 else if (ref_flag==1)
832 outfile <<
"1" << std::endl;
835 else if (ref_flag==2)
840 outfile <<
"1" << std::endl;
852 #ifndef OOMPH_HAS_CGAL
858 outfile <<
"1" << std::endl;
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Base class for all bin arrays.
Definition: sample_point_container.h:402
unsigned max_bin_dimension() const
Max. bin dimension (number of bins in coordinate directions)
Definition: sample_point_container.cc:659
EIGEN_DEVICE_FUNC const GlobalUnaryPowReturnType< Derived, ScalarExponent > pow(const Eigen::ArrayBase< Derived > &x, const ScalarExponent &exponent)
Definition: GlobalFunctions.h:137
NonRefineableBinArray class.
Definition: sample_point_container.h:819
unsigned n_spiral_chunk() const
Number of spirals to be searched in one go const version.
Definition: sample_point_container.h:866
unsigned & current_max_spiral_level()
Access function to current max. spiral level.
Definition: sample_point_container.h:891
unsigned & current_min_spiral_level()
Access function to current min. spiral level.
Definition: sample_point_container.h:885
RefineableBinArray class.
Definition: sample_point_container.h:521
static bool Always_fail_elemental_locate_zeta
Boolean flag to make to make locate zeta fail.
Definition: sample_point_container.h:339
static std::ofstream Visited_sample_points_file
File to record sequence of visited sample points in.
Definition: sample_point_container.h:335
RealScalar s
Definition: level1_cplx_impl.h:130
double Pi
Definition: two_d_biharmonic.cc:235
double theta
Definition: two_d_biharmonic.cc:236
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
string filename
Definition: MergeRestartFiles.py:39
double max_error
Definition: MortaringCantileverCompareToNonMortaring.cpp:188
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
int error
Definition: calibrate.py:297
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
std::string to_string(T object, unsigned float_precision=8)
Definition: oomph_utilities.h:189
@ UseRefineableBinArray
Definition: sample_point_parameters.h:41
@ UseNonRefineableBinArray
Definition: sample_point_parameters.h:42
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
double timer
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:210
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2