29 #ifndef OOMPH_LINE_VISUALISER_HEADER
30 #define OOMPH_LINE_VISUALISER_HEADER
34 #include <oomph-lib-config.h>
62 const double& max_search_radius = DBL_MAX)
64 Comm_pt(mesh_pt->communicator_pt())
67 setup(mesh_pt, coord_vec);
77 const double& scale = 1.0)
94 const double& max_search_radius,
96 const double& scale = 1.0)
98 Comm_pt(mesh_pt->communicator_pt())
118 unsigned n =
data[
i].size();
121 for (
unsigned j = 0;
j <
n;
j++)
123 outfile <<
data[
i][
j] <<
" ";
127 outfile << std::endl;
201 unsigned ndata = vec[
i].size();
205 size_values.push_back(ndata);
208 tmp_proc_point_found_plus_one[
i] = my_rank + 1;
211 for (
unsigned j = 0;
j < ndata;
j++)
213 local_values.push_back(vec[
i][
j]);
222 MPI_Reduce(&tmp_proc_point_found_plus_one[0],
223 &proc_point_found_plus_one[0],
241 for (
int i = 1;
i < nproc;
i++)
251 received_size[
i - 1].resize(
std::max(
unsigned(1), buff_size));
252 MPI_Recv(&received_size[
i - 1][0],
268 received_data[
i - 1].resize(
std::max(
unsigned(1), buff_size));
269 MPI_Recv(&received_data[
i - 1][0],
282 if (proc_point_found_plus_one[
i] != 0)
285 if (proc_point_found_plus_one[
i] == 1)
293 unsigned line_i = proc_point_found_plus_one[
i] - 2;
296 data[
i].resize(received_size[line_i][counter_s[line_i]]);
300 j < received_size[line_i][counter_s[line_i]];
303 data[
i][
j] = received_data[line_i][counter_d[line_i] +
j];
307 counter_d[line_i] += received_size[line_i][counter_s[line_i]];
318 buff_size = size_values.size();
319 MPI_Send(&buff_size, 1, MPI_UNSIGNED, 0, tag,
Comm_pt->mpi_comm());
322 if (buff_size == 0) size_values.resize(1);
323 MPI_Send(&size_values[0],
331 buff_size = local_values.size();
332 MPI_Send(&buff_size, 1, MPI_UNSIGNED, 0, tag,
Comm_pt->mpi_comm());
335 if (buff_size == 0) local_values.resize(1);
336 MPI_Send(&local_values[0],
406 for (
unsigned j = 0;
j < dim;
j++)
437 unsigned ndata = vec[
i].size();
441 size_values.push_back(ndata);
444 tmp_proc_point_found_plus_one[
i] = my_rank + 1;
448 for (
unsigned j = 0;
j < ndata;
j++)
450 local_values.push_back(vec[
i][
j]);
459 MPI_Reduce(&tmp_proc_point_found_plus_one[0],
460 &proc_point_found_plus_one[0],
477 for (
int i = 1;
i < nproc;
i++)
487 received_size[
i - 1].resize(
std::max(
unsigned(1), buff_size));
488 MPI_Recv(&received_size[
i - 1][0],
504 received_data[
i - 1].resize(
std::max(
unsigned(1), buff_size));
505 MPI_Recv(&received_data[
i - 1][0],
518 if (proc_point_found_plus_one[
i] != 0)
521 if (proc_point_found_plus_one[
i] == 1)
524 coord_vec[
i] = vec[
i];
529 unsigned line_i = proc_point_found_plus_one[
i] - 2;
532 coord_vec[
i].resize(received_size[line_i][counter_s[line_i]]);
536 j < received_size[line_i][counter_s[line_i]];
540 received_data[line_i][counter_d[line_i] +
j];
544 counter_d[line_i] += received_size[line_i][counter_s[line_i]];
555 buff_size = size_values.size();
556 MPI_Send(&buff_size, 1, MPI_UNSIGNED, 0, tag,
Comm_pt->mpi_comm());
559 if (buff_size == 0) size_values.resize(1);
560 MPI_Send(&size_values[0],
568 buff_size = local_values.size();
569 MPI_Send(&buff_size, 1, MPI_UNSIGNED, 0, tag,
Comm_pt->mpi_comm());
572 if (buff_size == 0) local_values.resize(1);
573 MPI_Send(&local_values[0],
608 std::ifstream file_input(
file_name.c_str(), std::ios_base::in);
611 std::ostringstream error_message;
612 error_message <<
"Cannot open file " <<
file_name <<
"\n";
617 if (!file_input.is_open())
619 std::ostringstream error_message;
620 error_message <<
"Cannot open file " <<
file_name <<
"\n";
631 while (getline(file_input,
line) )
635 if (isdigit(
line[0]))
642 sscanf(
line.c_str(),
"%lf %lf %lf", &
tmp[0], &
tmp[1], &
tmp[2]);
647 for (
unsigned i = 0;
i < 3;
i++)
653 coord_vec_tmp.push_back(
tmp);
663 setup(mesh_pt, coord_vec_tmp);
676 unsigned count_not_found_local = 0;
679 unsigned dim = coord_vec[0].size();
710 count_not_found_local++;
723 Plot_point[
i] = std::pair<FiniteElement*, Vector<double>>(fe_pt,
s);
727 oomph_info <<
"Number of points not found locally: "
728 << count_not_found_local << std::endl;
731 unsigned count_not_found = count_not_found_local;
756 tmp_proc_point_found_plus_one[
i] = my_rank + 1;
764 MPI_Reduce(&tmp_proc_point_found_plus_one[0],
765 &proc_point_found_plus_one[0],
781 if (proc_point_found_plus_one[
i] == 0)
789 MPI_Bcast(&count_not_found, 1, MPI_UNSIGNED, 0,
Comm_pt->mpi_comm());
794 oomph_info <<
"Number of plot points not found (with max search radius="
796 <<
"\nTotal time for LineVisualiser setup [sec]: "
812 for (
unsigned j = 0;
j < dim;
j++)
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
int data[]
Definition: Map_placement_new.cpp:1
double & max_search_radius()
Definition: sample_point_container.h:327
Definition: elements.h:1313
Definition: geom_objects.h:101
Definition: line_visualiser.h:49
OomphCommunicator * Comm_pt
Definition: line_visualiser.h:600
Vector< std::pair< FiniteElement *, Vector< double > > > Plot_point
Definition: line_visualiser.h:824
LineVisualiser(Mesh *mesh_pt, const std::string file_name, const double &scale=1.0)
Definition: line_visualiser.h:75
void update_plot_points_coordinates(Vector< Vector< double >> &coord_vec)
Definition: line_visualiser.h:370
unsigned Nplot_points
Number of plot points.
Definition: line_visualiser.h:827
void setup(Mesh *mesh_pt, const Vector< Vector< double >> &coord_vec)
Helper function to setup the output structures.
Definition: line_visualiser.h:668
void get_output_data(Vector< Vector< double >> &data)
Definition: line_visualiser.h:134
LineVisualiser(Mesh *mesh_pt, const double &max_search_radius, const std::string file_name, const double &scale=1.0)
Definition: line_visualiser.h:93
double Max_search_radius
Definition: line_visualiser.h:596
LineVisualiser(Mesh *mesh_pt, const Vector< Vector< double >> &coord_vec, const double &max_search_radius=DBL_MAX)
Definition: line_visualiser.h:60
void get_local_plot_points_coordinates(Vector< Vector< double >> &data)
Definition: line_visualiser.h:801
void output(std::ostream &outfile)
Definition: line_visualiser.h:107
void setup_from_file(Mesh *mesh_pt, const std::string file_name, const double &scale)
Helper function to setup from file.
Definition: line_visualiser.h:603
Definition: mesh_as_geometric_object.h:93
void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
Definition: mesh_as_geometric_object.h:373
SamplePointContainer * sample_point_container_pt() const
Pointer to the sample point container.
Definition: mesh_as_geometric_object.h:288
Definition: communicator.h:54
int my_rank() const
my rank
Definition: communicator.h:176
int nproc() const
number of processors
Definition: communicator.h:157
Definition: oomph_definitions.h:222
Definition: oomph-lib/src/generic/Vector.h:58
#define max(a, b)
Definition: datatypes.h:23
RealScalar s
Definition: level1_cplx_impl.h:130
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
string file_name
Definition: Particles2023AnalysisHung.py:321
line
Definition: calibrate.py:103
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
double timer()
returns the time in seconds after some point in past
Definition: oomph_utilities.cc:1295
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2