Plugins
Loading...
Searching...
No Matches
fs_measurement.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Gesellschaft fuer Anlagen- und Reaktorsicherheit gGmbH
3 * SPDX-License-Identifier: EUPL-1.2
4 * SPDX-FileContributor: Tim Schoen
5 * SPDX-FileContributor: Goethe Universität Frankfurt
6 * SPDX-FileType: SOURCE
7 *
8 * This file is part of d3f++.
9 * d3f++ is an extension for UG4. Licensing information and citation requirements of UG4 are provided in LICENSES/UG4-LGPL_2.1
10 */
11
12#ifndef __H__UG__PLUGINS__D3F__FS_MEASUREMENT
13#define __H__UG__PLUGINS__D3F__FS_MEASUREMENT
14
15
16#include "level_set_pos.h"
19#include <fstream>
20#include <cmath>
21
22#ifdef UG_PARALLEL
23#include "pcl/pcl_base.h"
25#endif
26
27namespace ug {
28
29
30template<class TDomain, class TAlgebra>
31class FSFileMeasurer;
32
33template<class TDomain, class TAlgebra>
35{
38
39 public:
41
43 {
44 return m_parent.get()->on_finished(u, step, time, dt);
45 }
46
47 private:
49};
50
57template<class TDomain, class TAlgebra>
58class FSFileMeasurer : public ITimeIntegratorObserver<TDomain, TAlgebra>
59{
60 private:
61
62 static const int dim = TDomain::dim;
63
66 {
70 bool z_given;
71
72 bool valid;
73
74 t_pnt_data (MathVector<dim-1> & the_xy, number the_z_spec, bool if_z_given)
75 : xy (the_xy), z (0), z_spec (the_z_spec), z_given (if_z_given), valid (false) {};
76 };
77
79 {
80 public:
81 virtual void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) { };
82 virtual void finish() {};
83 virtual ~IOutputAdapter() {};
84
85 };
86
88 {
89 public:
90 ShellOutput(bool output_difference, std::string& title)
91 : m_outputDifference(output_difference),
92 m_title(title)
93 {}
94
95 void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) override
96 {
97 std::cout << "---------- FS Height --------" << std::endl;
98 for (auto& pnt : measurementPoints)
99 {
100 std::cout << "(";
101 for (size_t i = 0; i < dim-1; i++ )
102 {
103 std::cout << pnt.xy[i];
104 if(i != dim-2)
105 {
106 std::cout << ", ";
107 }
108 }
109 std::cout << ") \t " << time << "\t";
110 if(pnt.valid)
111 {
112 std::cout << pnt.z;
113
114 if(this->m_outputDifference && pnt.z_given)
115 {
116 std::cout << " - " << pnt.z_spec-pnt.z;
117 }
118 }
119 else
120 {
121 std::cout << "not valid";
122 }
123
124 if (m_title.length () != 0)
125 {
126 std::cout << " - " << m_title;
127 }
128
129 std::cout << std::endl;
130 }
131 std::cout << "-----------------------------" << std::endl;
132 }
133
134 void finish() override {}
135
136
137 private:
139 std::string& m_title;
140 };
141
143 {
144 public:
145 CSVOutput(std::string filename, std::string delimiter, bool output_difference) : m_delim(delimiter), m_outputDifference(output_difference)
146 {
147 m_outputfilename = filename;
148
149 std::fstream output_file;
150 output_file.open(m_outputfilename.c_str(), std::fstream::trunc | std::fstream::out);
151
152 // print header
153 output_file << "step"<< m_delim << "time" << m_delim;
154 for (size_t i = 0; i < dim-1; i++ )
155 {
156 output_file << "dim" << i << m_delim;
157 }
158 output_file << "z";
159
160 if(this->m_outputDifference)
161 output_file << m_delim << "difference";
162
163 output_file << std::endl;
164
165 output_file.close();
166 }
167
168 void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) override
169 {
170 std::fstream output_file;
171 output_file.open(m_outputfilename.c_str(), std::fstream::app | std::fstream::out);
172 output_file.precision(15);
173
174
175 for (auto& pnt : measurementPoints)
176 {
177 output_file << step << m_delim << time << m_delim;
178 for (size_t i = 0; i < dim-1; i++ )
179 {
180 output_file << pnt.xy[i] << m_delim;
181 }
182 if(pnt.valid)
183 {
184 output_file << pnt.z;
185
186 }
187 else
188 {
189 output_file << "NaN";
190 }
191
192 if(this->m_outputDifference)
193 {
194 if(pnt.valid && pnt.z_given)
195 output_file << m_delim << pnt.z_spec-pnt.z;
196 else
197 output_file << m_delim << "NaN";
198 }
199
200 output_file << std::endl;
201 }
202
203 output_file.close();
204 }
205
206 void finish() override
207 {
208 std::fstream output_file;
209 output_file.open(m_outputfilename.c_str(), std::fstream::app | std::fstream::out);
210 output_file << "FINISHED" << m_delim << m_delim;
211 for (size_t i = 0; i < dim-1; i++ )
212 {
213 output_file << m_delim;
214 }
215 output_file << m_delim;
216
217 if(this->m_outputDifference)
218 output_file << m_delim;
219
220 output_file << std::endl;
221 }
222
223 private:
224 std::string m_delim;
225 std::string m_outputfilename;
227 };
228
230 {
231 public:
232 StepFileOutput(std::string filename, std::string delimiter, bool output_difference) : m_delim(delimiter), m_outputfilename(filename), m_outputDifference(output_difference)
233 {
234 }
235
236 void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) override
237 {
238 // Format the integer with leading zeros to a width of 8 digits
239 std::ostringstream oss;
240 oss << std::setw(8) << std::setfill('0') << step;
241
242 std::string filename = m_outputfilename + "-ts-" + oss.str() + ".dat";
243
244 std::fstream output_file;
245 output_file.open(filename.c_str(), std::fstream::trunc | std::fstream::out);
246 output_file.precision(15);
247
248 for (auto& pnt : measurementPoints)
249 {
250 for (size_t j = 0; j < dim - 1; j++)
251 output_file << pnt.xy[j] << m_delim;
252 if (pnt.valid)
253 output_file << pnt.z;
254 else
255 output_file << "nAn";
256 if (pnt.z_given)
257 {
258 output_file << m_delim << pnt.z_spec;
259 if (this->m_outputDifference)
260 {
261 if (pnt.valid)
262 output_file << m_delim << pnt.z - pnt.z_spec;
263 else
264 output_file << m_delim << "nAn";
265 }
266 }
267 output_file << std::endl;
268 }
269
270 output_file.close();
271
272 }
273
274 void finish() override
275 {
276 }
277
278 private:
279 std::string m_delim;
280 std::string m_outputfilename;
282 };
283
284
286 {
287 public:
288 TableOutput(const std::vector<t_pnt_data>& measurementPoints, std::string filename, std::string delimiter, bool output_difference, std::string& title)
289 : m_delim(delimiter),
290 m_outputDifference(output_difference)
291 {
292 if (filename.find(".csv") == std::string::npos)
293 m_outputfilename = filename + ".csv";
294 else
295 m_outputfilename = filename;
296
297 std::fstream output_file;
298 output_file.open(m_outputfilename.c_str(), std::fstream::trunc | std::fstream::out);
299
300 if (title.length () != 0)
301 output_file << "# " << title << std::endl;
302
303 for (size_t k = 0; k < dim - 1; k++)
304 {
305 output_file << "# ----" + m_delim + "----";
306 for (size_t i = 0; i < measurementPoints.size (); i++)
307 {
308 const t_pnt_data & pnt = measurementPoints[i];
309 output_file << m_delim << pnt.xy[k];
310 }
311 output_file << std::endl;
312 }
313 output_file << "# step" + m_delim + "time";
314 for (size_t i = 0; i < measurementPoints.size (); i++)
315 {
316 const t_pnt_data & pnt = measurementPoints[i];
317 if (pnt.z_given)
318 output_file << m_delim << pnt.z_spec;
319 else
320 output_file << m_delim << "----";
321 }
322 output_file << std::endl;
323
324 output_file.close();
325 }
326
327 void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) override
328 {
329 std::fstream output_file;
330 output_file.open(m_outputfilename.c_str(), std::fstream::app | std::fstream::out);
331 output_file.precision(15);
332
333 for (size_t i = 0; i < measurementPoints.size (); i++)
334 {
335 output_file << step << m_delim << time << m_delim;
336 const t_pnt_data & pnt = measurementPoints[i];
337 if (pnt.valid)
338 output_file << pnt.z;
339 else
340 output_file << "nAn";
341 output_file << std::endl;
342 }
343
344 output_file.close();
345
346 }
347
348 void finish() override
349 {
350 }
351
352 private:
353 std::string m_delim;
354 std::string m_outputfilename;
356 };
357
359 {
360 public:
361 BinaryOutput(std::string filename, bool output_difference) : m_outputDifference(output_difference)
362 {
363 if (filename.find(".bin") == std::string::npos)
364 m_outputfilename = filename + ".bin";
365 else
366 m_outputfilename = filename;
367
368 std::fstream bin_output_file;
369 bin_output_file.open(m_outputfilename.c_str(), std::fstream::trunc | std::fstream::out | std::fstream::binary);
370 int toWrite = dim;
371 bin_output_file.write((char *)&toWrite, sizeof(int));
372 bin_output_file.close();
373 }
374
375 void output(const std::vector<t_pnt_data>& measurementPoints, int step, number time) override
376 {
377 std::fstream bin_output_file;
378 bin_output_file.open(m_outputfilename.c_str(), std::fstream::app | std::fstream::out | std::fstream::binary);
379
380 for (auto& pnt : measurementPoints)
381 {
382 char toWrite = 0x01;
383 bin_output_file.write(&toWrite, sizeof(char));
384 bin_output_file.write((char*)&step, sizeof(int));
385 bin_output_file.write((char*)&time, sizeof(number));
386
387 for (size_t i = 0; i < dim-1; i++ )
388 {
389 bin_output_file.write((char*)&pnt.xy[i], sizeof(number));
390 }
391
392 if(pnt.valid)
393 bin_output_file.write((char*)&pnt.z, sizeof(number));
394 else
395 {
396 number NaN = nan("");
397 bin_output_file.write((char*)&NaN, sizeof(number));
398 }
399
400
401 if(this->m_outputDifference)
402 {
403 if(pnt.valid && pnt.z_given)
404 {
405 number diff = pnt.z_spec-pnt.z;
406 bin_output_file.write((char*)&diff, sizeof(number));
407
408 }
409 else
410 {
411 number NaN = nan("");
412 bin_output_file.write((char*)&NaN, sizeof(number));
413 }
414 }
415 }
416
417 bin_output_file.close();
418 }
419
420 void finish() override
421 {
422 std::fstream bin_output_file;
423 bin_output_file.open(m_outputfilename.c_str(), std::fstream::app | std::fstream::out | std::fstream::binary);
424 char toWrite = 0x02;
425 bin_output_file.write(&toWrite, sizeof(char));
426 bin_output_file.close();
427 }
428
429 private:
430 std::string m_outputfilename;
432 };
433
434 public:
435
437
442
445 m_height_measurer(lsf, cmp, zero)
446 {}
447
448 void set_title_text (const char* text)
449 {
450 m_titleText = text;
451 }
452
453 void enable_difference_output(bool differenceOutput)
454 {
455 m_outputDifference = differenceOutput;
456 }
457
458 void enable_csv_output(const char * output_filename)
459 {
460 #ifdef UG_PARALLEL
461 if(pcl::ProcRank() != 0)
462 return;
463 #endif
464
465 std::string filename = std::string(output_filename);
466
467 if (filename.find(".csv") == std::string::npos)
468 filename = filename + ".csv";
469
470 IOutputAdapter* adapter = new CSVOutput(filename, ",", m_outputDifference);
471 m_output_adapters.push_back(make_sp(adapter));
472 }
473
474 void enable_tsv_output(const char * output_filename)
475 {
476 #ifdef UG_PARALLEL
477 if(pcl::ProcRank() != 0)
478 return;
479 #endif
480
481
482 std::string filename = std::string(output_filename);
483
484
485 if (filename.find(".tsv") == std::string::npos)
486 filename = filename + ".tsv";
487
488 IOutputAdapter* adapter = new CSVOutput(filename, "\t", m_outputDifference);
489 m_output_adapters.push_back(make_sp(adapter));
490 }
491
492 void enable_table_output(const char * output_filename)
493 {
494 #ifdef UG_PARALLEL
495 if(pcl::ProcRank() != 0)
496 return;
497 #endif
498
499 IOutputAdapter* adapter = new TableOutput(m_measurement_points, std::string(output_filename), "\t", m_outputDifference, m_titleText);
500 m_output_adapters.push_back(make_sp(adapter));
501 }
502
503 void enable_step_file_output(const char * output_filename)
504 {
505 #ifdef UG_PARALLEL
506 if(pcl::ProcRank() != 0)
507 return;
508 #endif
509
510 IOutputAdapter* adapter = new StepFileOutput(std::string(output_filename), "\t", m_outputDifference);
511 m_output_adapters.push_back(make_sp(adapter));
512 }
513
514 void enable_binary_output(const char * output_filename)
515 {
516 #ifdef UG_PARALLEL
517 if(pcl::ProcRank() != 0)
518 return;
519 #endif
520
521 IOutputAdapter* adapter = new BinaryOutput(std::string(output_filename), m_outputDifference);
522 m_output_adapters.push_back(make_sp(adapter));
523 }
524
526 {
527 #ifdef UG_PARALLEL
528 if(pcl::ProcRank() != 0)
529 return;
530 #endif
531
533 m_output_adapters.push_back(make_sp(adapter));
534 }
535
536 void set_measurement_interval(int measurement_interval)
537 {
538 if (measurement_interval < 1)
539 {
540 std::cout << "FSFileMeasurer: Illegal measurement interval " << measurement_interval << std::endl;
541 }
542 m_measurement_interval = measurement_interval;
543 }
544
545 void read_measurement_points(const char * filename, bool includesExpectedZ)
546 {
547
548 std::string full_file_name = FindFileInStandardPaths (filename);
549 UG_COND_THROW (full_file_name.empty (), "FSFileMeasurer: Coulnd't locate file '" << filename << "'.");
550
551 std::ifstream input (full_file_name.c_str (), std::ifstream::in);
552 UG_COND_THROW (input.fail (), "FSFileMeasurer: Cannot open data file '" << full_file_name << "' for input!");
553
554 std::string input_line;
555 std::istringstream line_stream;
556
557 line_stream.exceptions (std::istream::failbit | std::istream::badbit);
558
559 while (! input.eof ())
560 {
561 std::vector<number> xy(dim-1);
562 number z_spec = 0;
563
564 if (input.fail ())
565 UG_THROW ("FSFileMeasurer: Could not load the points from the file!");
566 std::getline (input, input_line);
567 if (input_line.length () == 0)
568 continue;
569 try
570 {
571 line_stream.str (input_line);
572 line_stream.clear ();
573 for (size_t i = 0; i < dim-1; i++)
574 line_stream >> xy[i];
575 if (includesExpectedZ)
576 line_stream >> z_spec;
577 }
578 catch (std::istream::failure & e)
579 {
580 UG_THROW ("FSFileMeasurer: Failed to parse line '" << input_line << "' in the input file.");
581 };
582
583 if(includesExpectedZ)
584 add_measurement_point (xy, z_spec);
585 else
587 }
588 }
589
590
591 void add_measurement_point(std::vector<number> point)
592 {
593 if(point.size() != TDomain::dim-1 && point.size() != TDomain::dim)
594 {
595 std::cout << "FSFileMeasurer: free surface measurement point does not have correct dimension " << TDomain::dim-1 << " or " << TDomain::dim << ", if z is given, ignoring!" << std::endl;
596 return;
597 }
598
599 MathVector<dim-1> p;
600
601 for(int i = 0; i < TDomain::dim-1; i++)
602 {
603 p[i] = point[i];
604 }
605
606 if(point.size() == TDomain::dim)
607 {
608 m_measurement_points.push_back(t_pnt_data(p, point[TDomain::dim-1], true));
609 }
610 else
611 {
612 m_measurement_points.push_back(t_pnt_data(p, 0, false));
613 }
614 }
615
616
617 void add_measurement_point(std::vector<number> point, number specified_z)
618 {
619 if(point.size() != TDomain::dim-1)
620 {
621 std::cout << "FSFileMeasurer: free surface measurement point does not have correct dimension " << TDomain::dim-1 << ", ignoring!" << std::endl;
622 return;
623 }
624
625 MathVector<dim-1> p;
626
627 for(int i = 0; i < TDomain::dim-1; i++)
628 {
629 p[i] = point[i];
630 }
631
632 m_measurement_points.push_back(t_pnt_data(p, specified_z, true));
633 }
634
641
643 {
644 #ifdef UG_PARALLEL
645 if(pcl::ProcRank() != 0)
646 return true;
647 #endif
648
649 for (auto& outputAdapter : m_output_adapters)
650 {
651 outputAdapter->finish();
652 }
653
654 return true;
655 }
656
657 virtual bool step_process(SmartPtr<grid_function_type> u, int step, number time, number dt)
658 {
659
660 if (step % m_measurement_interval != 0)
661 return true;
662
663 m_height_measurer.reinit();
664
665 #ifndef UG_PARALLEL
666
667 for (size_t i = 0; i < m_measurement_points.size (); i++)
668 {
670 pnt.valid = m_height_measurer.get_height_at (pnt.xy, pnt.z);
671 }
672
673 #else // i.e. ifdef UG_PARALLEL
674
675 {
676 pcl::ProcessCommunicator proc_comm;
677 std::vector<number> loc_z (m_measurement_points.size ()), red_z (m_measurement_points.size ());
678
679 for (size_t i = 0; i < m_measurement_points.size (); i++)
680 if (! m_height_measurer.get_height_at (m_measurement_points[i].xy, loc_z[i]))
681 loc_z[i] = - std::numeric_limits<number>::max (); // the position is not covered by the free surface in this process
682
683 proc_comm.allreduce (loc_z, red_z, PCL_RO_MAX);
684 for (size_t i = 0; i < m_measurement_points.size (); i++)
685 {
687 number z_val = red_z[i];
688 if (z_val != - std::numeric_limits<number>::max ()) // i.e. is not set in any process
689 {
690 pnt.z = z_val;
691 pnt.valid = true;
692 }
693 else
694 pnt.valid = false;
695 }
696 }
697
698 if(pcl::ProcRank() != 0)
699 return true;
700 #endif
701
702 for (auto& outputAdapter : m_output_adapters)
703 {
704 outputAdapter->output(m_measurement_points, step, time);
705 }
706
707 return true;
708 }
709
710 private:
711
712 std::vector<t_pnt_data> m_measurement_points;
713 std::vector< SmartPtr<IOutputAdapter> > m_output_adapters;
717 std::string m_titleText;
718};
719}
720#endif
parameterString p
Definition Biogas.lua:1
function util d3f parse FSFileMeasurer(luaobj, levelfunction, cmp, zeroval)
size_t allreduce(const size_t &t, pcl::ReduceOperation op) const
Definition fs_measurement.hpp:359
BinaryOutput(std::string filename, bool output_difference)
Definition fs_measurement.hpp:361
void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time) override
Definition fs_measurement.hpp:375
bool m_outputDifference
Definition fs_measurement.hpp:431
std::string m_outputfilename
Definition fs_measurement.hpp:430
void finish() override
Definition fs_measurement.hpp:420
Definition fs_measurement.hpp:143
std::string m_outputfilename
Definition fs_measurement.hpp:225
void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time) override
Definition fs_measurement.hpp:168
bool m_outputDifference
Definition fs_measurement.hpp:226
CSVOutput(std::string filename, std::string delimiter, bool output_difference)
Definition fs_measurement.hpp:145
void finish() override
Definition fs_measurement.hpp:206
std::string m_delim
Definition fs_measurement.hpp:224
Definition fs_measurement.hpp:79
virtual void finish()
Definition fs_measurement.hpp:82
virtual void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time)
Definition fs_measurement.hpp:81
virtual ~IOutputAdapter()
Definition fs_measurement.hpp:83
Definition fs_measurement.hpp:88
void finish() override
Definition fs_measurement.hpp:134
ShellOutput(bool output_difference, std::string &title)
Definition fs_measurement.hpp:90
bool m_outputDifference
Definition fs_measurement.hpp:138
std::string & m_title
Definition fs_measurement.hpp:139
void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time) override
Definition fs_measurement.hpp:95
Definition fs_measurement.hpp:230
bool m_outputDifference
Definition fs_measurement.hpp:281
std::string m_outputfilename
Definition fs_measurement.hpp:280
std::string m_delim
Definition fs_measurement.hpp:279
void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time) override
Definition fs_measurement.hpp:236
StepFileOutput(std::string filename, std::string delimiter, bool output_difference)
Definition fs_measurement.hpp:232
void finish() override
Definition fs_measurement.hpp:274
Definition fs_measurement.hpp:286
bool m_outputDifference
Definition fs_measurement.hpp:355
TableOutput(const std::vector< t_pnt_data > &measurementPoints, std::string filename, std::string delimiter, bool output_difference, std::string &title)
Definition fs_measurement.hpp:288
std::string m_delim
Definition fs_measurement.hpp:353
void finish() override
Definition fs_measurement.hpp:348
void output(const std::vector< t_pnt_data > &measurementPoints, int step, number time) override
Definition fs_measurement.hpp:327
std::string m_outputfilename
Definition fs_measurement.hpp:354
Definition fs_measurement.hpp:35
SmartPtr< measurer_type > m_parent
Definition fs_measurement.hpp:48
FSFileMeasurer< TDomain, TAlgebra > measurer_type
Definition fs_measurement.hpp:37
bool step_process(SmartPtr< grid_function_type > u, int step, number time, number dt)
Definition fs_measurement.hpp:42
FSFileMeasurerFinishedObserver(SmartPtr< measurer_type > parent)
Definition fs_measurement.hpp:40
GridFunction< TDomain, TAlgebra > grid_function_type
Definition fs_measurement.hpp:36
Definition fs_measurement.hpp:59
void set_title_text(const char *text)
Definition fs_measurement.hpp:448
ug::GridFunction< TDomain, TAlgebra > grid_function_type
Definition fs_measurement.hpp:436
void add_measurement_point(std::vector< number > point, number specified_z)
Definition fs_measurement.hpp:617
void enable_csv_output(const char *output_filename)
Definition fs_measurement.hpp:458
void add_measurement_point(std::vector< number > point)
Definition fs_measurement.hpp:591
FSFileMeasurer(SmartPtr< grid_function_type > lsf, const char *cmp, number zero)
Definition fs_measurement.hpp:443
void enable_difference_output(bool differenceOutput)
Definition fs_measurement.hpp:453
void enable_step_file_output(const char *output_filename)
Definition fs_measurement.hpp:503
void enable_tsv_output(const char *output_filename)
Definition fs_measurement.hpp:474
void enable_print_output()
Definition fs_measurement.hpp:525
void set_measurement_interval(int measurement_interval)
Definition fs_measurement.hpp:536
void enable_binary_output(const char *output_filename)
Definition fs_measurement.hpp:514
std::vector< t_pnt_data > m_measurement_points
Definition fs_measurement.hpp:712
virtual bool step_process(SmartPtr< grid_function_type > u, int step, number time, number dt)
Definition fs_measurement.hpp:657
int m_measurement_interval
Definition fs_measurement.hpp:714
bool m_outputDifference
Definition fs_measurement.hpp:716
std::string m_titleText
Definition fs_measurement.hpp:717
void read_measurement_points(const char *filename, bool includesExpectedZ)
Definition fs_measurement.hpp:545
static const int dim
Definition fs_measurement.hpp:62
FSFileMeasurer(SmartPtr< grid_function_type > lsf)
Definition fs_measurement.hpp:438
std::vector< SmartPtr< IOutputAdapter > > m_output_adapters
Definition fs_measurement.hpp:713
bool on_finished(SmartPtr< grid_function_type > u, int step, number time, number dt)
Definition fs_measurement.hpp:642
void enable_table_output(const char *output_filename)
Definition fs_measurement.hpp:492
SmartPtr< FSFileMeasurerFinishedObserver< TDomain, TAlgebra > > get_finished_observer()
Definition fs_measurement.hpp:635
ug::d3f::LSPositionZ< grid_function_type > m_height_measurer
Definition fs_measurement.hpp:715
Definition level_set_pos.h:48
int ProcRank()
#define PCL_RO_MAX
std::string FindFileInStandardPaths(const char *filename)
#define UG_THROW(msg)
#define UG_COND_THROW(cond, msg)
double number
SmartPtr< T, FreePolicy > make_sp(T *inst)
type of point data
Definition fs_measurement.hpp:66
t_pnt_data(MathVector< dim-1 > &the_xy, number the_z_spec, bool if_z_given)
Definition fs_measurement.hpp:74
bool valid
if not computed or the level set is not covered by the top surface
Definition fs_measurement.hpp:72
number z
computed value of the z-coordiate
Definition fs_measurement.hpp:68
MathVector< dim-1 > xy
low-dim coordinate of the point
Definition fs_measurement.hpp:67
bool z_given
iff z is specified
Definition fs_measurement.hpp:70
number z_spec
expected value of z-coordinate
Definition fs_measurement.hpp:69