/* * 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 . */ #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