Plugins
Loading...
Searching...
No Matches
river_data_observer.h
Go to the documentation of this file.
1
6#ifndef UG4_RIVER_DATA_OBSERVER_H
7#define UG4_RIVER_DATA_OBSERVER_H
8
9#include <fstream>
11#include "common/common.h"
13
14namespace ug {
15namespace d3f {
16
26template<class TDomain, class TAlgebra>
27class OutflowIntegrationObserver : public ITimeIntegratorObserver<TDomain, TAlgebra> {
28public:
29 static const int dim = TDomain::dim;
34
44 const char* subset = "Sink",
45 const char* inner_subset = "River")
46 : m_value(0.0), subset_name(subset), inner_subset_name(inner_subset),
47 m_vel(velocity), m_A(area) {}
48
49 virtual ~OutflowIntegrationObserver() = default;
50
54 bool step_process(SmartPtr<grid_function_type> uNew, int step, number time, number dt) override {
55 // We multiply by 1000 assuming a water density of 1000 kg/m^3 to get mass if IntegrateRiverOutflow returns m^3/s
56 m_value += 1000.0 * dt * IntegrateRiverOutflow<grid_function_type>(m_vel, m_A, uNew, subset_name, inner_subset_name, 1);
57 return true;
58 }
59
63 number value() const { return m_value; }
64
68 void reset_value() { m_value = 0.0; }
69
70protected:
72 const char* subset_name;
73 const char* inner_subset_name;
76};
77
86template<class TDomain, class TAlgebra>
87class TimestepObserver : public ITimeIntegratorObserver<TDomain, TAlgebra> {
88public:
89 static const int dim = TDomain::dim;
92
97 explicit TimestepObserver(const char* filename) : m_filename(filename) {
98#ifdef UG_PARALLEL
99 if (pcl::ProcRank() == 0)
100#endif
101 {
102 m_file.open(m_filename, std::ios::out | std::ios::trunc);
103 if (m_file.is_open()) {
104 m_file << "time\tdt\n";
105 m_file.flush();
106 } else {
107 UG_THROW("TimestepObserver: Could not open file '" << m_filename << "' for writing.");
108 }
109 }
110 }
111
113 if (m_file.is_open()) m_file.close();
114 }
115
119 bool step_process(SmartPtr<grid_function_type> uNew, int step, number time, number dt) override {
120 if (
121 #ifdef UG_PARALLEL
122 pcl::ProcRank() == 0 &&
123 #endif
124 m_file.is_open()) {
125 m_file << time << "\t" << dt << "\n";
126 m_file.flush();
127 }
128 m_last_dt = dt;
129 return true;
130 }
131
136
137protected:
139 std::ofstream m_file;
140 const char* m_filename;
141};
142
143} // namespace d3f
144} // namespace ug
145
146#endif // UG4_RIVER_DATA_OBSERVER_H
Observer that integrates the river outflow over time.
Definition river_data_observer.h:27
void reset_value()
Resets the cumulative counter.
Definition river_data_observer.h:68
const char * inner_subset_name
Definition river_data_observer.h:73
bool step_process(SmartPtr< grid_function_type > uNew, int step, number time, number dt) override
Integrates the outflow for the current time step and adds it to the total.
Definition river_data_observer.h:54
CplUserData< number, dim > TNumberData
Definition river_data_observer.h:33
SmartPtr< TNumberData > m_A
Definition river_data_observer.h:75
GridFunction< TDomain, TAlgebra > grid_function_type
Definition river_data_observer.h:31
static const int dim
Definition river_data_observer.h:29
OutflowIntegrationObserver(SmartPtr< TVectorData > velocity, SmartPtr< TNumberData > area, const char *subset="Sink", const char *inner_subset="River")
Constructor.
Definition river_data_observer.h:42
SmartPtr< TVectorData > m_vel
Definition river_data_observer.h:74
const char * subset_name
Definition river_data_observer.h:72
ITimeIntegratorObserver< TDomain, TAlgebra > base_type
Definition river_data_observer.h:30
virtual ~OutflowIntegrationObserver()=default
number m_value
Definition river_data_observer.h:71
CplUserData< MathVector< dim >, dim > TVectorData
Definition river_data_observer.h:32
number value() const
Returns the cumulative integrated value.
Definition river_data_observer.h:63
Observer that logs the time step history (time and dt) to a text file.
Definition river_data_observer.h:87
std::ofstream m_file
Definition river_data_observer.h:139
GridFunction< TDomain, TAlgebra > grid_function_type
Definition river_data_observer.h:91
const char * m_filename
Definition river_data_observer.h:140
number get_last_timestep() const
Returns the last used time step size.
Definition river_data_observer.h:135
static const int dim
Definition river_data_observer.h:89
virtual ~TimestepObserver()
Definition river_data_observer.h:112
TimestepObserver(const char *filename)
Constructor. Opens the file and writes the header.
Definition river_data_observer.h:97
ITimeIntegratorObserver< TDomain, TAlgebra > base_type
Definition river_data_observer.h:90
bool step_process(SmartPtr< grid_function_type > uNew, int step, number time, number dt) override
Logs the current time and step size.
Definition river_data_observer.h:119
number m_last_dt
Definition river_data_observer.h:138
int ProcRank()
#define UG_THROW(msg)
double number
Integration utilities for river network outflow analysis.