World Ocean Simulation System (WOSS) library
altimetry-definitions.h
Go to the documentation of this file.
1/* WOSS - World Ocean Simulation System -
2 *
3 * Copyright (C) 2009, 2025 Federico Guerra
4 * and regents of the SIGNET lab, University of Padova
5 *
6 * Author: Federico Guerra - WOSS@guerra-tlc.com
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation;
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22
23
34#ifndef ALTIMETRY_DEFINITIONS_H
35#define ALTIMETRY_DEFINITIONS_H
36
37
38#include <map>
39#include <memory>
41#include "time-definitions.h"
42
43
44namespace woss {
45
51 using AltimetryMap = std::map < PDouble, double >;
52 using AltIt = AltimetryMap::iterator;
53 using AltCIt = AltimetryMap::const_iterator;
54 using AltRIt = AltimetryMap::reverse_iterator;
55 using AltCRIt = AltimetryMap::const_reverse_iterator;
56
57
64 class Altimetry {
65
66
67 public:
68
69
73 Altimetry();
74
79 Altimetry( AltimetryMap& map );
80
86 Altimetry( double range, double altimetry );
87
92 Altimetry( const Altimetry& copy ) = default;
93
98 Altimetry( Altimetry&& tmp) = default;
99
100 virtual ~Altimetry() = default;
101
106 virtual std::unique_ptr<Altimetry> create() const {
107 auto ptr = std::make_unique<Altimetry>();
108 ptr->updateMinMaxAltimetryValues();
109 return ptr; }
110
116 virtual std::unique_ptr<Altimetry> create( AltimetryMap& map ) const {
117 auto ptr = std::make_unique<Altimetry>(map);
118 ptr->updateMinMaxAltimetryValues();
119 return ptr; }
124 virtual std::unique_ptr<Altimetry> clone() const {
125 return std::make_unique<Altimetry>(*this); }
131
136 static AltimetryMap& createFlat(double altimetry = 0 );
137
138
145 Altimetry& insertValue( double range, double altimetry );
146
152 Altimetry& sumValue( double range, double altimetry );
153
154
160 AltCIt findValue( double range ) const { return( altimetry_map.find(range) ); }
161
162
168 Altimetry& eraseValue( double range ) { altimetry_map.erase(range); return *this; }
169
170
178 virtual std::unique_ptr<Altimetry> crop( double range_start, double range_end ) const;
179
185 virtual std::unique_ptr<Altimetry> randomize( double ratio_incr_value ) const;
186
191 AltCIt begin() const { return altimetry_map.begin(); }
192
197 AltCIt end() const { return altimetry_map.end(); }
198
204 AltCIt at( const int i ) const;
205
210 int size() const { return altimetry_map.size(); }
211
216 bool empty() const { return altimetry_map.empty(); }
217
218
222 void clear() { altimetry_map.clear(); }
223
224
229 static void setDebug( bool flag ) { debug = flag; }
230
235 static bool getDebug( bool flag ) { return debug; }
236
241 Altimetry& setEvolutionTimeQuantum( double quantum ) { evolution_time_quantum = quantum; return *this;}
242
247 Altimetry& setTotalRangeSteps( int r_s ) { total_range_steps = r_s; return *this;}
248
253 Altimetry& setRange( double r ) { range = r; return *this; }
254
259 Altimetry& setDepth( double d) { depth = d; return *this; }
260
261
266 double getMaxRangeValue() const { return( altimetry_map.rbegin()->first ); }
267
272 double getMinRangeValue() const { return( altimetry_map.begin()->first ); }
273
278 double getMaxAltimetryValue() const { return( max_altimetry_value ); }
279
284 double getMinAltimetryValue() const { return( min_altimetry_value ); }
285
290 long double getRangePrecision() const { return range_precision; }
291
297
302 double getRange() const { return range; }
303
308 int getTotalRangeSteps() const { return total_range_steps; }
309
314 double getDepth() const { return depth; }
315
316
321 virtual bool isValid() const;
322
328 virtual bool initialize();
329
335 virtual std::unique_ptr<Altimetry> timeEvolve( const Time& time_value );
336
337
343 Altimetry& operator=( const Altimetry& copy ) = default;
344
350 Altimetry& operator=( Altimetry&& tmp ) = default;
351
358 friend bool operator==( const Altimetry& left, const Altimetry& right );
359
366 friend bool operator!=( const Altimetry& left, const Altimetry& right );
367
368
375 friend const Altimetry operator+( const Altimetry& left, const Altimetry& right );
376
383 friend const Altimetry operator-( const Altimetry& left, const Altimetry& right );
384
385
392 friend const Altimetry operator+( const Altimetry& left, const double right );
393
400 friend const Altimetry operator-( const Altimetry& left, const double right );
401
408 friend const Altimetry operator/( const Altimetry& left, const double right );
409
416 friend const Altimetry operator*( const Altimetry& left, const double right );
417
418
425 friend const Altimetry operator+( const double left, const Altimetry& right );
426
433 friend const Altimetry operator-( const double left, const Altimetry& right );
434
441 friend const Altimetry operator/( const double left, const Altimetry& right );
442
449 friend const Altimetry operator*( const double left, const Altimetry& right );
450
451
458 friend Altimetry& operator+=( Altimetry& left, const Altimetry& right );
459
466 friend Altimetry& operator-=( Altimetry& left, const Altimetry& right );
467
468
475 friend Altimetry& operator+=( Altimetry& left, double right );
476
483 friend Altimetry& operator-=( Altimetry& left, double right );
484
491 friend Altimetry& operator/=( Altimetry& left, double right );
492
499 friend Altimetry& operator*=( Altimetry& left, double right );
500
501
508 friend std::ostream& operator<<( std::ostream& os, const Altimetry& instance );
509
510
511 protected:
512
513
515
519 static bool debug;
520
524 double range;
525
530
535
540
544 long double range_precision;
545
550
555
559 double depth;
560
565
566 };
567
568
575
576 public:
577
582
588
596 AltimBretschneider( double ch_height, double avg_per, int total_range_steps, double depth );
597
603
609
610 virtual ~AltimBretschneider() override = default;
611
616 virtual std::unique_ptr<Altimetry> create() const override {
617 auto ptr = std::make_unique<AltimBretschneider>();
618 ptr->updateMinMaxAltimetryValues();
619 return ptr; }
625 virtual std::unique_ptr<Altimetry> create( AltimetryMap& map ) const override {
626 auto ptr = std::make_unique<AltimBretschneider>( map );
627 ptr->updateMinMaxAltimetryValues();
628 return ptr; }
637 virtual std::unique_ptr<Altimetry> create( double ch_height, double avg_per, int total_range_steps, double depth ) const {
638 return std::make_unique<AltimBretschneider>( ch_height, avg_per, total_range_steps, depth);
639 }
640
645 virtual std::unique_ptr<Altimetry> clone() const override {
646 return std::make_unique<AltimBretschneider>( *this ); }
647
654
661
662
668 virtual bool initialize() override;
669
670
675 virtual bool isValid() const override;
676
677
683 virtual std::unique_ptr<Altimetry> timeEvolve( const Time& time_value ) override;
684
685
691 virtual std::unique_ptr<Altimetry> randomize( double ratio_incr_value ) const override;
692
698 AltimBretschneider& setCharacteristicHeight( double h ) { char_height = h; return *this; }
699
705 AltimBretschneider& setAveragePeriod( double p ) { average_period = p; return *this; }
706
711 double getCharacteristicHeight() const { return char_height; }
712
717 double getAveragePeriod() const { return average_period; }
718
719
720 protected:
721
722
724
731
738
739 };
740
741 //non-inline operator declarations
743 const Altimetry operator+( const Altimetry& left, const Altimetry& right );
744
745 const Altimetry operator-( const Altimetry& left, const Altimetry& right );
746
747
748 const Altimetry operator+( const Altimetry& left, const double right );
749
750 const Altimetry operator-( const Altimetry& left, const double right );
751
752 const Altimetry operator/( const Altimetry& left, const double right );
753
754 const Altimetry operator*( const Altimetry& left, const double right );
755
756
757 const Altimetry operator+( const double left, const Altimetry& right );
758
759 const Altimetry operator-( const double left, const Altimetry& right );
760
761 const Altimetry operator/( const double left, const Altimetry& right );
762
763 const Altimetry operator*( const double left, const Altimetry& right );
764
765
766 Altimetry& operator+=( Altimetry& left, const Altimetry& right );
767
768 Altimetry& operator-=( Altimetry& left, const Altimetry& right );
769
770 Altimetry& operator+=( Altimetry& left, double right );
771
772
773 Altimetry& operator-=( Altimetry& left, double right );
774
775 Altimetry& operator/=( Altimetry& left, double right );
776
777 Altimetry& operator*=( Altimetry& left, double right );
778
780 //inline functions
783 altimetry_map.clear();
784 return altimetry_map;
785 }
786
787
788 inline AltimetryMap& Altimetry::createFlat( double altimetry ) {
790 altimetry_map.clear();
791 altimetry_map[0.0] = altimetry;
792 return altimetry_map;
793 }
794
795
796 inline Altimetry& Altimetry::sumValue( double range, double altimetry ) {
797 if ( altimetry < min_altimetry_value )
798 min_altimetry_value = altimetry;
799 if ( altimetry > max_altimetry_value )
800 max_altimetry_value = altimetry;
801
802 auto it = altimetry_map.find( range );
803 if ( it == altimetry_map.end() )
804 altimetry_map.emplace( std::make_pair( range, altimetry ) );
805 else
806 it->second += altimetry;
807
808 return *this;
809 }
810
811
812 inline std::ostream& operator<<( std::ostream& os, const Altimetry& instance ) {
813 if ( !instance.altimetry_map.empty() ) {
814 os << "size = " << instance.altimetry_map.size() << "; min range = " << instance.altimetry_map.begin()->first
815 << "; altimetry = " << instance.begin()->second
816 << "; max range = " << instance.altimetry_map.rbegin()->first
817 << "; altimetry = " << instance.altimetry_map.rbegin()->second;
818 }
819 else {
820 os << "is empty.";
821 }
822 return os;
823 }
824
825
826 inline bool operator==( const Altimetry& left, const Altimetry& right ) {
827 if ( &left == &right )
828 return true;
829 return( left.altimetry_map == right.altimetry_map );
830 }
831
832
833 inline bool operator!=( const Altimetry& left, const Altimetry& right ) {
834 if ( &left == &right )
835 return false;
836 return( left.altimetry_map != right.altimetry_map );
837 }
838
839}
840
841#endif /* ALTIMETRY_DEFINITIONS_H */
AltimBretschneider supports Bretschneider wave model.
Definition altimetry-definitions.h:574
virtual ~AltimBretschneider() override=default
virtual bool initialize() override
Definition altimetry-definitions.cpp:399
double average_period
Definition altimetry-definitions.h:737
virtual std::unique_ptr< Altimetry > randomize(double ratio_incr_value) const override
Definition altimetry-definitions.cpp:453
AltimBretschneider & operator=(const AltimBretschneider &copy)=default
AltimBretschneider & setAveragePeriod(double p)
Definition altimetry-definitions.h:705
virtual std::unique_ptr< Altimetry > create() const override
Definition altimetry-definitions.h:616
double char_height
Definition altimetry-definitions.h:730
AltimBretschneider & setCharacteristicHeight(double h)
Definition altimetry-definitions.h:698
double getAveragePeriod() const
Definition altimetry-definitions.h:717
virtual std::unique_ptr< Altimetry > create(double ch_height, double avg_per, int total_range_steps, double depth) const
Definition altimetry-definitions.h:637
virtual std::unique_ptr< Altimetry > clone() const override
Definition altimetry-definitions.h:645
AltimBretschneider & operator=(AltimBretschneider &&tmp)=default
virtual bool isValid() const override
Definition altimetry-definitions.cpp:409
virtual AltimBretschneider & createWaveSpectrum()
Definition altimetry-definitions.cpp:465
AltimBretschneider()
Definition altimetry-definitions.cpp:354
virtual std::unique_ptr< Altimetry > timeEvolve(const Time &time_value) override
Definition altimetry-definitions.cpp:420
double getCharacteristicHeight() const
Definition altimetry-definitions.h:711
virtual std::unique_ptr< Altimetry > create(AltimetryMap &map) const override
Definition altimetry-definitions.h:625
Altimetry profile class.
Definition altimetry-definitions.h:64
virtual bool initialize()
Definition altimetry-definitions.cpp:215
double getMaxAltimetryValue() const
Definition altimetry-definitions.h:278
Altimetry(const Altimetry &copy)=default
long double getRangePrecision() const
Definition altimetry-definitions.h:290
AltimetryMap altimetry_map
Definition altimetry-definitions.h:564
Altimetry(Altimetry &&tmp)=default
double getDepth() const
Definition altimetry-definitions.h:314
Altimetry & setTotalRangeSteps(int r_s)
Definition altimetry-definitions.h:247
double getEvolutionTimeQuantum() const
Definition altimetry-definitions.h:296
double evolution_time_quantum
Definition altimetry-definitions.h:554
Altimetry & eraseValue(double range)
Definition altimetry-definitions.h:168
AltCIt end() const
Definition altimetry-definitions.h:197
friend const Altimetry operator/(const double left, const Altimetry &right)
static AltimetryMap & createFlat(double altimetry=0)
Definition altimetry-definitions.h:788
double getMinAltimetryValue() const
Definition altimetry-definitions.h:284
virtual std::unique_ptr< Altimetry > randomize(double ratio_incr_value) const
Definition altimetry-definitions.cpp:163
double depth
Definition altimetry-definitions.h:559
friend const Altimetry operator+(const Altimetry &left, const Altimetry &right)
void clear()
Definition altimetry-definitions.h:222
virtual ~Altimetry()=default
bool empty() const
Definition altimetry-definitions.h:216
friend const Altimetry operator-(const double left, const Altimetry &right)
Altimetry & insertValue(double range, double altimetry)
Definition altimetry-definitions.cpp:113
AltCIt at(const int i) const
Definition altimetry-definitions.cpp:127
friend Altimetry & operator+=(Altimetry &left, const Altimetry &right)
double range
Definition altimetry-definitions.h:524
virtual std::unique_ptr< Altimetry > create() const
Definition altimetry-definitions.h:106
double getMinRangeValue() const
Definition altimetry-definitions.h:272
AltCIt findValue(double range) const
Definition altimetry-definitions.h:160
static bool getDebug(bool flag)
Definition altimetry-definitions.h:235
friend std::ostream & operator<<(std::ostream &os, const Altimetry &instance)
Definition altimetry-definitions.h:812
friend const Altimetry operator+(const Altimetry &left, const double right)
double getRange() const
Definition altimetry-definitions.h:302
static AltimetryMap & createNotValid()
Definition altimetry-definitions.h:781
friend const Altimetry operator+(const double left, const Altimetry &right)
virtual Altimetry & updateMinMaxAltimetryValues()
Definition altimetry-definitions.cpp:224
friend const Altimetry operator*(const Altimetry &left, const double right)
int total_range_steps
Definition altimetry-definitions.h:529
friend const Altimetry operator-(const Altimetry &left, const double right)
Altimetry()
Definition altimetry-definitions.cpp:51
friend bool operator==(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:826
static void setDebug(bool flag)
Definition altimetry-definitions.h:229
Altimetry & sumValue(double range, double altimetry)
Definition altimetry-definitions.h:796
friend bool operator!=(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:833
double min_altimetry_value
Definition altimetry-definitions.h:534
Altimetry & setEvolutionTimeQuantum(double quantum)
Definition altimetry-definitions.h:241
virtual std::unique_ptr< Altimetry > clone() const
Definition altimetry-definitions.h:124
int getTotalRangeSteps() const
Definition altimetry-definitions.h:308
Altimetry & setRange(double r)
Definition altimetry-definitions.h:253
friend Altimetry & operator-=(Altimetry &left, double right)
long double range_precision
Definition altimetry-definitions.h:544
friend const Altimetry operator-(const Altimetry &left, const Altimetry &right)
int size() const
Definition altimetry-definitions.h:210
double getMaxRangeValue() const
Definition altimetry-definitions.h:266
Altimetry & setDepth(double d)
Definition altimetry-definitions.h:259
virtual std::unique_ptr< Altimetry > crop(double range_start, double range_end) const
Definition altimetry-definitions.cpp:141
virtual std::unique_ptr< Altimetry > timeEvolve(const Time &time_value)
Definition altimetry-definitions.cpp:187
Altimetry & operator=(Altimetry &&tmp)=default
friend const Altimetry operator*(const double left, const Altimetry &right)
virtual bool isValid() const
Definition altimetry-definitions.cpp:105
friend Altimetry & operator*=(Altimetry &left, double right)
friend Altimetry & operator+=(Altimetry &left, double right)
AltCIt begin() const
Definition altimetry-definitions.h:191
static bool debug
Definition altimetry-definitions.h:519
virtual std::unique_ptr< Altimetry > create(AltimetryMap &map) const
Definition altimetry-definitions.h:116
friend Altimetry & operator-=(Altimetry &left, const Altimetry &right)
Time last_evolution_time
Definition altimetry-definitions.h:549
friend Altimetry & operator/=(Altimetry &left, double right)
double max_altimetry_value
Definition altimetry-definitions.h:539
friend const Altimetry operator/(const Altimetry &left, const double right)
Altimetry & operator=(const Altimetry &copy)=default
a class for time date manipulation
Definition time-definitions.h:83
Provides the interface for the woss::PDouble class.
Definition ac-toolbox-arr-asc-reader.h:44
AltimetryMap::const_reverse_iterator AltCRIt
Definition altimetry-definitions.h:55
bool operator!=(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:833
std::ostream & operator<<(std::ostream &os, const Altimetry &instance)
Definition altimetry-definitions.h:812
Altimetry & operator*=(Altimetry &left, double right)
Definition altimetry-definitions.cpp:346
AltimetryMap::reverse_iterator AltRIt
Definition altimetry-definitions.h:54
std::map< PDouble, double > AltimetryMap
Definition altimetry-definitions.h:51
const Altimetry operator/(const Altimetry &left, const double right)
Definition altimetry-definitions.cpp:264
AltimetryMap::iterator AltIt
Definition altimetry-definitions.h:52
bool operator==(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:826
Altimetry & operator+=(Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.cpp:306
const Altimetry operator+(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.cpp:236
const Altimetry operator*(const Altimetry &left, const double right)
Definition altimetry-definitions.cpp:271
AltimetryMap::const_iterator AltCIt
Definition altimetry-definitions.h:53
Altimetry & operator-=(Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.cpp:314
const Altimetry operator-(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.cpp:243
Altimetry & operator/=(Altimetry &left, double right)
Definition altimetry-definitions.cpp:338
Definitions and library for woss::Time, woss::SimTime, woss::TimeReference and woss::TimeReferenceTcl...