14#ifndef __H__UG__PLUGINS__D3F__FS_EQUIBILIRIUM_FINISHED_CONDITION
15#define __H__UG__PLUGINS__D3F__FS_EQUIBILIRIUM_FINISHED_CONDITION
32template<
class TDomain,
class TAlgebra>
38 static const int dim = TDomain::dim;
48 :
xy (the_xy),
z (0),
valid (false) {};
69 bool finished =
false;
79 std::cout <<
"FSInEquilibriumFinishedCondition: no measurement has happenend yet" << std::endl;
84 std::cout <<
"FSInEquilibriumFinishedCondition: max_change is 0" << std::endl;
107 if(point.size() != TDomain::dim-1)
109 std::cout <<
"FSInEquilibriumFinishedCondition: free surface measurement point does not have correct dimension " << TDomain::dim-1 <<
", ignoring!" << std::endl;
115 for(
int i = 0; i < TDomain::dim-1; i++)
146 loc_z[i] = - std::numeric_limits<number>::max ();
153 if (z_val != - std::numeric_limits<number>::max ())
169 std::vector<number> this_measurement;
179 this_measurement.push_back(height);
190 throw std::logic_error(
"Number of measurement points changed during runtime!");
206 std::cout <<
"EquilibriumFinishedTester: No free surface at " <<
m_measurement_points[i].xy[0] << std::endl;
228 UG_COND_THROW (full_file_name.empty (),
"FSInEquilibriumFinishedCondition: Coulnd't locate file '" << filename <<
"'.");
230 std::ifstream input (full_file_name.c_str (), std::ifstream::in);
231 UG_COND_THROW (input.fail (),
"FSInEquilibriumFinishedCondition: Cannot open data file '" << full_file_name <<
"' for input!");
233 std::string input_line;
234 std::istringstream line_stream;
236 line_stream.exceptions (std::istream::failbit | std::istream::badbit);
238 while (! input.eof ())
240 std::vector<number>
xy(
dim-1);
243 UG_THROW (
"FSInEquilibriumFinishedCondition: Could not load the points from the file!");
244 std::getline (input, input_line);
245 if (input_line.length () == 0)
249 line_stream.str (input_line);
250 line_stream.clear ();
251 for (
size_t i = 0; i <
dim-1; i++)
252 line_stream >>
xy[i];
254 catch (std::istream::failure & e)
256 UG_THROW (
"FSInEquilibriumFinishedCondition: Failed to parse line '" << input_line <<
"' in the input file.");
parameterString p
Definition Biogas.lua:1
size_t allreduce(const size_t &t, pcl::ReduceOperation op) const
void broadcast(size_t &s, int root=0) const
Definition fs_equilibirum_finished_condition.hpp:34
int m_number_of_measurement_points
Definition fs_equilibirum_finished_condition.hpp:264
FSInEquilibriumFinishedCondition(SmartPtr< grid_function_type > lsf, number equilibrium_factor)
Definition fs_equilibirum_finished_condition.hpp:56
std::vector< number > m_last_measurement
Definition fs_equilibirum_finished_condition.hpp:269
ug::GridFunction< TDomain, TAlgebra > grid_function_type
Definition fs_equilibirum_finished_condition.hpp:54
void read_measurement_points(const char *filename)
Definition fs_equilibirum_finished_condition.hpp:224
number m_equilibrium_factor
Definition fs_equilibirum_finished_condition.hpp:265
number m_max_change
Definition fs_equilibirum_finished_condition.hpp:266
void set_equilibrium_factor(number equilibrium_factor)
Definition fs_equilibirum_finished_condition.hpp:62
static const int dim
Definition fs_equilibirum_finished_condition.hpp:38
number m_last_change
Definition fs_equilibirum_finished_condition.hpp:267
std::vector< t_pnt_data > m_measurement_points
Definition fs_equilibirum_finished_condition.hpp:268
virtual bool step_process(SmartPtr< grid_function_type > u, int step, number time, number dt)
Definition fs_equilibirum_finished_condition.hpp:124
ug::d3f::LSPositionZ< grid_function_type > m_height_measurer
Definition fs_equilibirum_finished_condition.hpp:270
void add_measurement_point(std::vector< number > point)
Definition fs_equilibirum_finished_condition.hpp:105
bool check_finished(number time, int step)
Definition fs_equilibirum_finished_condition.hpp:67
Definition level_set_pos.h:48
std::string FindFileInStandardPaths(const char *filename)
#define UG_COND_THROW(cond, msg)
type of point data
Definition fs_equilibirum_finished_condition.hpp:41
MathVector< dim-1 > xy
low-dim coordinate of the point
Definition fs_equilibirum_finished_condition.hpp:42
t_pnt_data(MathVector< dim-1 > &the_xy)
Definition fs_equilibirum_finished_condition.hpp:47
bool valid
if not computed or the level set is not covered by the top surface
Definition fs_equilibirum_finished_condition.hpp:45
number z
computed value of the z-coordiate
Definition fs_equilibirum_finished_condition.hpp:43