cOgrd.h 3.38 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
/*
 * EasyWave - A realtime tsunami simulation program with GPU support.
 * Copyright (C) 2014  Andrey Babeyko, Johannes Spazier
 * GFZ German Research Centre for Geosciences (http://www.gfz-potsdam.de)
 *
 * Parts of this program (especially the GPU extension) were developed
 * within the context of the following publicly funded project:
 * - TRIDEC, EU 7th Framework Programme, Grant Agreement 258723
 *   (http://www.tridec-online.eu)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef OGRD_H
#define OGRD_H

class cOgrd
{

protected:


public:
  int nx,ny;
  int nnod;
  double noval;
  double xmin,xmax;
  double ymin,ymax;
  double dx,dy;
  double *val;

  cOgrd();
  cOgrd( const cOgrd& );
  cOgrd( double xmin0, double xmax0, int nx0, double ymin0, double ymax0, int ny0 );
  cOgrd( double xmin0, double xmax0, double dx0, double ymin0, double ymax0, double dy0 );
  ~cOgrd();

  void setNoval( double val );
  double getNoval();
  int initialize( double xmin0, double xmax0, int nx0, double ymin0, double ymax0, int ny0 );
  int initialize( double xmin0, double xmax0, double dx0, double ymin0, double ymax0, double dy0 );
  int readShape( const char *grdfile );
  int readHeader( const char *grdfile );
  int readGRD( const char *grdfile );
  int readXYZ( const char *xyzfile );
  int readRasterStream( FILE *fp, int ordering, int ydirection );
  cOgrd* extract( int i1, int i2, int j1, int j2 );
  cOgrd* extract( double x1, double x2, double y1, double y2 );
  int idx( int i, int j );
  double& operator() ( int i, int j );
  double& operator() ( int idx );
  cOgrd& operator= ( const cOgrd& grd );
  cOgrd& operator*= ( double coeff );
  cOgrd& operator+= ( cOgrd& grd );
  void getIJ( int idx, int& i, int& j );
  int getIJ( double x, double y, int& i, int& j );
  double getX( int i, int j );
  double getX( int idx );
  double getY( int i, int j );
  double getY( int idx );
  double getVal( int idx );
  double getVal( int i, int j );
  double getVal( double x, double y );
  double getMaxVal();
  double getMaxVal( int& i, int& j );
  double getMinVal();
  double getMinVal( int& i, int& j );
  double getMaxAbsVal();
  double getMaxAbsVal( int& i, int& j );
  double getMaxAbsValBnd();
  void setVal( double value, int i, int j );
  void setVal( double value, int idx );
  void reset();
  void resetVal();
  int getIntersectionRegion( const cOgrd &grd, int& imin, int& imax, int& jmin, int& jmax );
  int interpolateFrom( cOgrd &grd, int resetValues );
  int getNearestIdx( double x, double y );
  int getNearestIdx( double x, double y, double rangemin, double rangemax );
  int equalTo( cOgrd& grd );
  int isSameShapeTo( cOgrd& grd );
  void smooth( int radius );
  int writeGRD( const char *fname );
  int writeGRDbin( const char *fname );
  int writeXYZ( const char *fname );
};


#endif  // OGRD_H