regularsurfacerotated.hpp
Go to the documentation of this file.
1// $Id: regularsurfacerotated.hpp 882 2011-09-23 13:10:16Z perroe $
2
3// Copyright (c) 2011, Norwegian Computing Center
4// All rights reserved.
5// Redistribution and use in source and binary forms, with or without modification,
6// are permitted provided that the following conditions are met:
7// • Redistributions of source code must retain the above copyright notice, this
8// list of conditions and the following disclaimer.
9// • Redistributions in binary form must reproduce the above copyright notice, this list of
10// conditions and the following disclaimer in the documentation and/or other materials
11// provided with the distribution.
12// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
13// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
14// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
15// SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
16// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
17// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
18// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
20// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
21
22#ifndef NRLIB_REGULARSURFACEROTATED_HPP
23#define NRLIB_REGULARSURFACEROTATED_HPP
24
25#include "surface.hpp"
26#include "regularsurface.hpp"
27#include "../grid/grid2d.hpp"
28#include "../iotools/stringtools.hpp"
29
30#include <cmath>
31#include <algorithm>
32
33namespace NRLib {
34template <class A>
35
36class RegularSurfaceRotated : public Surface<A> {
37public:
39
40 RegularSurfaceRotated(double x0,
41 double y0,
42 double lx,
43 double ly,
44 size_t nx,
45 size_t ny,
46 double angle,
47 const A& value = A());
48
49 RegularSurfaceRotated(const RegularSurface<A>& surface, double angle);
50
51 RegularSurfaceRotated(double x0, double y0, double lx, double ly, Grid2D<A> grid, double angle);
52
59
62 double angle = 0.0,
63 double x_ref = 0.0,
64 double y_ref = 0.0,
65 double lx = 0.0,
66 double ly = 0.0,
67 int * ilxl_area = NULL,
68 double il0_ref = 0.0,
69 double xl0_ref = 0.0);
70
72 { return new RegularSurfaceRotated<A>(*this); }
73
74 typedef typename std::vector<A>::iterator iterator;
75 iterator begin() { return surface_.begin(); }
76 iterator end() { return surface_.end(); }
77
78 typedef typename std::vector<A>::const_iterator const_iterator;
79 const_iterator begin() const { return surface_.begin(); }
80 const_iterator end() const { return surface_.end(); }
81
82 typedef typename std::vector<A>::reference reference;
83 inline reference operator()(size_t i, size_t j) { return surface_(i,j); }
84 inline reference operator()(size_t index) { return surface_(index); }
85
86 typedef typename std::vector<A>::const_reference const_reference;
87 inline const_reference operator()(size_t i, size_t j) const { return surface_(i,j); }
88 inline const_reference operator()(size_t index) const { return surface_(index); }
89
93 A GetZ(double x, double y) const;
94
97 A GetZInside(double x, double y) const;
98
100 bool IsInsideSurface(double x, double y) const;
101
102 bool EnclosesRectangle(double x_min, double x_max,
103 double y_min, double y_max) const;
104
106 void Assign(A c) {surface_.Assign(c);}
107
108 void Add(A c) { surface_.Add(c);}
109
110 void Subtract(A c) {surface_.Subtract(c);}
111
112 void Multiply(A c) {surface_.Multiply(c);}
113
114 void GetXY(size_t i, size_t j, double & x, double & y) const;
115
116 void GetXY(size_t index, double & x, double & y) const;
117
118 double GetDX() const { return surface_.GetDX(); }
119 double GetDY() const { return surface_.GetDY(); }
120 double GetLengthX() const { return surface_.GetLengthX(); }
121 double GetLengthY() const { return surface_.GetLengthY(); }
122
123 void SetDimensions(double x_min, double y_min,
124 double lx, double ly);
125
127 void Resize(size_t ni, size_t nj, const A& val = A());
128
129 size_t GetNI() const { return surface_.GetNI(); }
130 size_t GetNJ() const { return surface_.GetNJ(); }
131 size_t GetN() const { return surface_.GetN(); }
132
134 bool IsMissing(A val) const { return surface_.IsMissing(val); }
135 bool IsMissingAt(size_t i, size_t j) const { return surface_.IsMissingAt(i, j); }
136 void SetMissing(size_t i, size_t j) { surface_.SetMissing(i, j); }
137
138 A Min() const { return surface_.Min(); }
139 A Max() const { return surface_.Max(); }
140 A Avg() const { return surface_.Avg(); }
141 A Avg(int& n_nodes) const { return surface_.Avg(n_nodes); }
142
146 bool AddNonConform(const Surface<A> * s2);
147 bool SubtractNonConform(const Surface<A> * s2);
148 bool MultiplyNonConform(const Surface<A> * s2);
149 bool DivideNonConform(const Surface<A> *s2);
150
151 double GetXRef() const { return x_ref_; }
152 double GetYRef() const { return y_ref_; }
153 double GetXMin() const { return x_min_; }
154 double GetYMin() const { return y_min_; }
155 double GetXMax() const { return x_max_; }
156 double GetYMax() const { return y_max_; }
157
159
160 double GetAngle() const { return angle_ ;}
161 void SetAngle(double angle) { angle_ = angle ;}
162
163 A GetMissingValue() const { return surface_.GetMissingValue() ;}
164 void SetMissingValue(A missing_val) { surface_.SetMissingValue(missing_val); }
165
166// We do not want to use the following methods if possible
167// RegularSurface<A> GetSurface() const {return surface_;}
168// Grid2D<A> GetSurfaceGrid2D() const { return surface_;}
169
170 const std::string& GetName() const { return surface_.GetName(); }
171 void SetName(const std::string& name) { surface_.SetName(name); }
172
179 void ReadFromFile(std::string filename,
181 double angle = 0.0,
182 double x_ref = 0.0,
183 double y_ref = 0.0,
184 double lx = 0.0,
185 double ly = 0.0,
186 int * ilxl_area = NULL,
187 double il0_ref = 0.0,
188 double xl0_ref = 0.0);
189
193 void WriteToFile(const std::string& filename,
195
196private:
197 void GlobalToLocalCoord(double global_x,
198 double global_y,
199 double& local_x,
200 double& local_y) const;
201 void LocalToGlobalCoord(double local_x,
202 double local_y,
203 double& global_x,
204 double& global_y) const;
205 void CalculateMinMaxXY();
206 RegularSurface<A> surface_;
207
208 double angle_;
209 double x_ref_;
210 double y_ref_;
211 double x_min_;
212 double y_min_;
213 double x_max_;
214 double y_max_;
215
216};
217
218// ==================== TEMPLATE IMPLEMENTATIONS ====================
219
220template <class A>
222:angle_(0),
223 x_ref_(0.0),
224 y_ref_(0.0)
225{
226 surface_ = RegularSurface<A>();
227 CalculateMinMaxXY();
228}
229
230
231template <class A>
233 double lx, double ly,
234 size_t nx, size_t ny, double angle,
235 const A& value)
236 : angle_(angle),
237 x_ref_(x_min),
238 y_ref_(y_min)
239{
240 surface_ = RegularSurface<A>(x_min, y_min, lx, ly, nx, ny, value);
241 CalculateMinMaxXY();
242}
243
244template <class A>
246 : angle_(angle)
247{
248 surface_ = surface;
249 x_ref_ = surface.GetXMin();
250 y_ref_ = surface.GetYMin();
251 CalculateMinMaxXY();
252}
253
254template <class A>
256 double lx, double ly,
257 Grid2D<A> grid, double angle)
258 : angle_(angle),
259 x_ref_(x_min),
260 y_ref_(y_min)
261{
262 surface_ = RegularSurface<A>(x_min, y_min, lx, ly, grid);
263 CalculateMinMaxXY();
264}
265
266
267template <class A>
270 double angle,
271 double x_ref,
272 double y_ref,
273 double lx,
274 double ly,
275 int * ilxl_area,
276 double il0_ref,
277 double xl0_ref)
278
279{
280 ReadFromFile(filename,
281 format,
282 angle,
283 x_ref,
284 y_ref,
285 lx,
286 ly,
287 ilxl_area,
288 il0_ref,
289 xl0_ref);
290}
291
292
293template <class A>
294void
296 double global_y,
297 double& local_x,
298 double& local_y) const
299{
300 double x_rel = global_x - x_ref_;
301 double y_rel = global_y - y_ref_;
302
303 local_x = std::cos(angle_)*x_rel + std::sin(angle_)*y_rel ;
304 local_y = - std::sin(angle_)*x_rel + std::cos(angle_)*y_rel ;
305}
306
307template <class A>
308void RegularSurfaceRotated<A>::LocalToGlobalCoord(double local_x,
309 double local_y,
310 double& global_x,
311 double& global_y) const
312{
313 global_x = std::cos(angle_)*local_x - std::sin(angle_)*local_y + x_ref_;
314 global_y = std::sin(angle_)*local_x + std::cos(angle_)*local_y + y_ref_;
315}
316
317template <class A>
318A RegularSurfaceRotated<A>::GetZ(double x, double y) const
319{
320 double local_x, local_y;
321 GlobalToLocalCoord(x, y, local_x, local_y);
322 A z = surface_.GetZ(local_x+x_ref_, local_y+y_ref_);
323 return z;
324}
325template <class A>
327{
328 double local_x, local_y;
329 GlobalToLocalCoord(x, y, local_x, local_y);
330 A z = surface_.GetZInside(local_x+x_ref_, local_y+y_ref_);
331 return z;
332}
333template <class A>
335{
336 double local_x, local_y;
337 GlobalToLocalCoord(x, y, local_x, local_y);
338 bool z = surface_.IsInsideSurface(local_x+x_ref_, local_y+y_ref_);
339 return z;
340
341}
342
343template <class A>
345{
346 A missing_val = surface_.GetMissingValue();
347 for (size_t i = 0; i < this->GetN(); i++) {
348 if ((*this)(i) != missing_val) {
349 double x, y, value;
350 GetXY(i, x, y);
351 value = s2->GetZ(x, y);
352 if (s2->IsMissing(value) == false)
353 (*this)(i) += value;
354 else
355 (*this)(i) = missing_val;
356 }
357 }
358 return(true);
359}
360
361
362template <class A>
364{
365 A missing_val = surface_.GetMissingValue();
366 for (size_t i = 0; i < this->GetN(); i++) {
367 if ((*this)(i) != missing_val) {
368 double x, y, value;
369 GetXY(i, x, y);
370 value = s2->GetZ(x, y);
371 if (s2->IsMissing(value) == false)
372 (*this)(i) -= value;
373 else
374 (*this)(i) = missing_val;
375 }
376 }
377 return(true);
378}
379
380template <class A>
382{
383 A missing_val = surface_.GetMissingValue();
384 for (size_t i = 0; i < this->GetN(); i++) {
385 if ((*this)(i) != missing_val) {
386 double x, y, value;
387 GetXY(i, x, y);
388 value = s2->GetZ(x, y);
389 if (s2->IsMissing(value) == false)
390 (*this)(i) *= value;
391 else
392 (*this)(i) = missing_val;
393 }
394 }
395 return(true);
396}
397
398template <class A>
400{
401 A missing_val = surface_.GetMissingValue();
402 for (size_t i = 0; i < this->GetN(); i++) {
403 if ((*this)(i) != missing_val) {
404 double x, y, value;
405 GetXY(i, x, y);
406 value = s2->GetZ(x, y);
407 if (s2->IsMissing(value) == false)
408 (*this)(i) /= value;
409 else
410 (*this)(i) = missing_val;
411 }
412 }
413 return(true);
414}
415
416template <class A>
417bool RegularSurfaceRotated<A>::EnclosesRectangle(double x_min, double x_max,
418 double y_min, double y_max) const
419{
420 if (x_min < GetXMin() || x_max > GetXMax() ||
421 y_min < GetYMin() || y_max > GetYMax()) {
422 return false;
423 }
424
425 return true;
426
427}
428
429template <class A>
431{
432 std::vector<double> x(4);
433 std::vector<double> y(4);
434
435 LocalToGlobalCoord(0, 0, x[0], y[0]);
436 LocalToGlobalCoord(surface_.GetLengthX(), 0, x[1], y[1]);
437 LocalToGlobalCoord(0, surface_.GetLengthY(), x[2], y[2]);
438 LocalToGlobalCoord(surface_.GetLengthX(), surface_.GetLengthY(), x[3], y[3]);
439
440 x_min_ = *(std::min_element(x.begin(), x.end()));
441 y_min_ = *(std::min_element(y.begin(), y.end()));
442 x_max_ = *(std::max_element(x.begin(), x.end()));
443 y_max_ = *(std::max_element(y.begin(), y.end()));
444
445}
446
447template <class A>
448void RegularSurfaceRotated<A>::SetDimensions(double x_min, double y_min,
449 double lx, double ly)
450{
451 surface_.SetDimensions(x_min, y_min, lx, ly);
452
453 x_ref_ = x_min;
454 y_ref_ = y_min;
455 CalculateMinMaxXY();
456}
457
458template <class A>
459void RegularSurfaceRotated<A>::Resize(size_t nx, size_t ny, const A& value)
460{
461 surface_.Resize(nx, ny, value);
462}
463
464
465template <class A>
466void RegularSurfaceRotated<A>::GetXY(size_t i, size_t j, double & x, double & y) const
467{
468 double x_tmp, y_tmp;
469 surface_.GetXY(i,j,x_tmp,y_tmp);
470
471 double x_loc = x_tmp - x_ref_;
472 double y_loc = y_tmp - y_ref_;
473
474 LocalToGlobalCoord(x_loc,y_loc,x,y);
475}
476
477template <class A>
478void RegularSurfaceRotated<A>::GetXY(size_t index, double & x, double & y) const
479{
480 double x_tmp, y_tmp;
481 surface_.GetXY(index,x_tmp,y_tmp);
482
483 double x_loc = x_tmp - x_ref_;
484 double y_loc = y_tmp - y_ref_;
485
486 LocalToGlobalCoord(x_loc,y_loc,x,y);
487}
488
489template <class A>
491{
492 double dx = surface_.GetDX()*cos(angle_);
493 double dy = surface_.GetDY()*cos(angle_);
494 int nx = int((x_max_-x_min_)/dx) + 1;
495 int ny = int((y_max_-y_min_)/dy) +1;
496 RegularSurface<A> surf(x_min_, y_min_, x_max_-x_min_, y_max_-y_min_, nx, ny, 0.0);
497 surf.SetMissingValue(GetMissingValue());
498 A value;
499 double x,y;
500 int i,j;
501 for(i=0;i<nx;i++)
502 for(j=0;j<ny;j++)
503 {
504 x = x_min_ + i*dx;
505 y = y_min_ + j*dy;
506 value = GetZ(x,y);
507 surf(i,j) = value;
508 }
509
510 return surf;
511}
512
513
514template <class A>
517 double segy_angle,
518 double x_ref,
519 double y_ref,
520 double lx,
521 double ly,
522 int * ilxl_area,
523 double il0_ref,
524 double xl0_ref)
525{
526 if (format == SURF_UNKNOWN) {
527 format = FindSurfaceFileType(filename);
528 if (format == SURF_UNKNOWN) {
529 throw FileFormatError("Failed to determine file format for surface file: " + filename);
530 }
531 }
532
533 switch (format) {
535 ReadIrapClassicAsciiSurf(filename, surface_, angle_);
536 break;
538 ReadStormBinarySurf(filename, surface_);
539 angle_ = 0.0;
540 break;
541 case SURF_SGRI:
542 ReadSgriSurf(filename, surface_, angle_);
543 break;
544 case SURF_MULT_ASCII:
546 surface_,
547 x_ref,
548 y_ref,
549 lx,
550 ly,
551 ilxl_area,
552 il0_ref,
553 xl0_ref);
554 angle_ = segy_angle;
555 break;
556 default:
557 throw FileFormatError("Reading of file " + filename + " on format " + ToString(format)
558 + " as a rotated grid is currently not supported.");
559 }
560
561 x_ref_ = surface_.GetXMin();
562 y_ref_ = surface_.GetYMin();
563
564 CalculateMinMaxXY();
565}
566
567
568template <class A>
571{
572 switch (format) {
574 WriteIrapClassicAsciiSurf(surface_, angle_, filename);
575 break;
577 {
578 if (angle_ != 0.0) {
579 RegularSurface<A> resampled_surf = ResampleSurface();
580 WriteStormBinarySurf(resampled_surf, filename);
581 }
582 else {
583 WriteStormBinarySurf(surface_, filename);
584 }
585 }
586 break;
587 default:
588 throw FileFormatError("Writing of surface to file " + filename + " on format "
589 + ToString(format) + " is currently not supported.");
590 }
591}
592
593
594}
595#endif
const char *const name
Definition: cJSON.h:258
int index
Definition: cJSON.h:168
char const int const cJSON_bool format
Definition: cJSON.h:161
const char *const string
Definition: cJSON.h:170
Definition: exception.hpp:71
Definition: grid2d.hpp:32
Definition: regularsurface.hpp:39
double GetXMin() const
Definition: regularsurface.hpp:187
double GetYMin() const
Definition: regularsurface.hpp:188
void SetMissingValue(A missing_val)
Definition: regularsurface.hpp:223
Definition: regularsurfacerotated.hpp:36
A GetMissingValue() const
Definition: regularsurfacerotated.hpp:163
std::vector< A >::reference reference
Definition: regularsurfacerotated.hpp:82
A GetZInside(double x, double y) const
Definition: regularsurfacerotated.hpp:326
iterator begin()
Definition: regularsurfacerotated.hpp:75
bool AddNonConform(const Surface< A > *s2)
Definition: regularsurfacerotated.hpp:344
bool IsMissing(A val) const
Check if grid value is missing.
Definition: regularsurfacerotated.hpp:134
double GetDX() const
Definition: regularsurfacerotated.hpp:118
std::vector< A >::const_iterator const_iterator
Definition: regularsurfacerotated.hpp:78
double GetLengthX() const
Definition: regularsurfacerotated.hpp:120
void SetName(const std::string &name)
Definition: regularsurfacerotated.hpp:171
double GetAngle() const
Definition: regularsurfacerotated.hpp:160
void Subtract(A c)
Definition: regularsurfacerotated.hpp:110
double GetXMin() const
Definition: regularsurfacerotated.hpp:153
void SetAngle(double angle)
Definition: regularsurfacerotated.hpp:161
double GetYMin() const
Definition: regularsurfacerotated.hpp:154
bool MultiplyNonConform(const Surface< A > *s2)
Definition: regularsurfacerotated.hpp:381
void Resize(size_t ni, size_t nj, const A &val=A())
Resize grid. Overrides Grid2D's resize.
Definition: regularsurfacerotated.hpp:459
bool EnclosesRectangle(double x_min, double x_max, double y_min, double y_max) const
Definition: regularsurfacerotated.hpp:417
const_iterator begin() const
Definition: regularsurfacerotated.hpp:79
void SetMissing(size_t i, size_t j)
Definition: regularsurfacerotated.hpp:136
A GetZ(double x, double y) const
Definition: regularsurfacerotated.hpp:318
size_t GetN() const
Definition: regularsurfacerotated.hpp:131
void SetDimensions(double x_min, double y_min, double lx, double ly)
Definition: regularsurfacerotated.hpp:448
double GetYMax() const
Definition: regularsurfacerotated.hpp:156
reference operator()(size_t i, size_t j)
Definition: regularsurfacerotated.hpp:83
A Avg(int &n_nodes) const
Definition: regularsurfacerotated.hpp:141
RegularSurface< A > ResampleSurface() const
Definition: regularsurfacerotated.hpp:490
void Assign(A c)
Sets all values on the surface to a constant value.
Definition: regularsurfacerotated.hpp:106
Surface< A > * Clone() const
Generate a copy of the underlying object.
Definition: regularsurfacerotated.hpp:71
A Max() const
Definition: regularsurfacerotated.hpp:139
iterator end()
Definition: regularsurfacerotated.hpp:76
bool IsInsideSurface(double x, double y) const
Checks if point is inside definition area for surface.
Definition: regularsurfacerotated.hpp:334
bool IsMissingAt(size_t i, size_t j) const
Definition: regularsurfacerotated.hpp:135
const_reference operator()(size_t i, size_t j) const
Definition: regularsurfacerotated.hpp:87
RegularSurfaceRotated()
Definition: regularsurfacerotated.hpp:221
bool DivideNonConform(const Surface< A > *s2)
Definition: regularsurfacerotated.hpp:399
A Avg() const
Definition: regularsurfacerotated.hpp:140
std::vector< A >::iterator iterator
Definition: regularsurfacerotated.hpp:74
double GetYRef() const
Definition: regularsurfacerotated.hpp:152
void GetXY(size_t i, size_t j, double &x, double &y) const
Definition: regularsurfacerotated.hpp:466
void WriteToFile(const std::string &filename, SurfaceFileFormat format=SURF_STORM_BINARY) const
Write surface to file on given format. If the file format does not support rotation,...
Definition: regularsurfacerotated.hpp:569
double GetXRef() const
Definition: regularsurfacerotated.hpp:151
void Add(A c)
Definition: regularsurfacerotated.hpp:108
size_t GetNI() const
Definition: regularsurfacerotated.hpp:129
std::vector< A >::const_reference const_reference
Definition: regularsurfacerotated.hpp:86
const_iterator end() const
Definition: regularsurfacerotated.hpp:80
double GetDY() const
Definition: regularsurfacerotated.hpp:119
A Min() const
Definition: regularsurfacerotated.hpp:138
void SetMissingValue(A missing_val)
Definition: regularsurfacerotated.hpp:164
void ReadFromFile(std::string filename, SurfaceFileFormat format=SURF_UNKNOWN, double angle=0.0, double x_ref=0.0, double y_ref=0.0, double lx=0.0, double ly=0.0, int *ilxl_area=NULL, double il0_ref=0.0, double xl0_ref=0.0)
Read surface file on given format.
Definition: regularsurfacerotated.hpp:515
bool SubtractNonConform(const Surface< A > *s2)
Definition: regularsurfacerotated.hpp:363
const_reference operator()(size_t index) const
Definition: regularsurfacerotated.hpp:88
reference operator()(size_t index)
Definition: regularsurfacerotated.hpp:84
size_t GetNJ() const
Definition: regularsurfacerotated.hpp:130
double GetLengthY() const
Definition: regularsurfacerotated.hpp:121
const std::string & GetName() const
Definition: regularsurfacerotated.hpp:170
void Multiply(A c)
Definition: regularsurfacerotated.hpp:112
double GetXMax() const
Definition: regularsurfacerotated.hpp:155
Definition: surface.hpp:29
virtual bool IsMissing(A) const
Definition: surface.hpp:41
virtual A GetZ(double x, double y) const =0
Definition: exception.hpp:31
void WriteIrapClassicAsciiSurf(const RegularSurface< A > &surf, double angle, const std::string &filename)
Definition: surfaceio.hpp:650
void ReadIrapClassicAsciiSurf(const std::string &filename, RegularSurface< A > &surface, double &angle)
Definition: surfaceio.hpp:180
void ReadSgriSurf(const std::string &filename, RegularSurface< A > &surface, double &angle)
Definition: surfaceio.hpp:262
SurfaceFileFormat FindSurfaceFileType(const std::string &filename)
Find type of file.
void WriteStormBinarySurf(const RegularSurface< A > &surf, const std::string &filename)
Definition: surfaceio.hpp:700
SurfaceFileFormat
Definition: surfaceio.hpp:38
@ SURF_STORM_BINARY
Definition: surfaceio.hpp:41
@ SURF_SGRI
Definition: surfaceio.hpp:42
@ SURF_UNKNOWN
Definition: surfaceio.hpp:39
@ SURF_IRAP_CLASSIC_ASCII
Definition: surfaceio.hpp:40
@ SURF_MULT_ASCII
Definition: surfaceio.hpp:44
void ReadMulticolumnAsciiSurf(std::string filename, RegularSurface< A > &surface, double x_ref, double y_ref, double lx, double ly, int *ilxl_area, double il0_ref, double xl0_ref)
Definition: surfaceio.hpp:406
std::string ToString(const T obj, int precision=-99999)
Definition: stringtools.hpp:177
void ReadStormBinarySurf(const std::string &filename, RegularSurface< A > &surface)
Definition: surfaceio.hpp:119
x y * z
Definition: exprtk.hpp:9663
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12955
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)