00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _DEMBL_H_
00030 #define _DEMBL_H_
00031
00032 #include "MayDay.H"
00033 #include "LoHiSide.H"
00034 #include "IntVect.H"
00035 #include "RealVect.H"
00036 #include "BaseLevelSet.H"
00037 #include "REAL.H"
00038 #include "BoxIterator.H"
00039 using std::pair;
00040
00042
00043
00044
00045
00046
00047 class DEMBL: public BaseLevelSet
00048 {
00049 public:
00050
00052 DEMBL(const IntVect& a_ncell,
00053 const int& a_interpType,
00054 const Real& a_dx,
00055 const RealVect& a_vectDx);
00056
00058 virtual ~DEMBL();
00059
00060
00061
00062
00063
00064 virtual bool readDEM(const bool& a_justhead);
00065
00067
00068
00069
00070 virtual bool fixDEM();
00071
00073
00074
00075
00076
00077
00078 virtual bool isRegular(const Box& region,
00079 const Box& domain,
00080 const RealVect& origin,
00081 const Real& dx) const;
00082
00084
00085
00086
00087
00088 virtual bool isCovered(const Box& region,
00089 const Box& domain,
00090 const RealVect& origin,
00091 const Real& dx) const;
00092
00094
00095
00096
00097
00098
00099
00100
00101 virtual
00102 pair<int, Side::LoHiSide> upDirection(const RealVect& a_midpt,const IntVect& a_iv) const;
00103
00105
00106
00107
00108
00109
00110
00111 virtual Real localFuncValue(const RealVect& a_independentCoords,
00112 const int& a_upDirection,
00113 const IntVect& a_iv,
00114 const Box& a_domain,
00115 const RealVect& a_origin,
00116 const Real& a_dx) const;
00117
00118
00119
00120
00121
00122
00123 virtual
00124 BaseLevelSet* new_baseLevelSet() const;
00125
00126 virtual Real max(const RealVect& vec)const;
00127
00128 virtual Real magnitude(const RealVect& vec)const;
00129
00130
00131 protected:
00132
00133 int m_ncols, m_nrows,m_NODATA;
00134 Real m_xllcorner,m_yllcorner,m_cellsize ,m_cellvalue;
00135 Real **m_DEM;
00136 Real m_dx;
00137 RealVect m_vectDx;
00138 IntVect m_ncell;
00139 int m_interpType;
00140 Real m_highground;
00141 Real m_minDEM;
00142 Real m_maxDEM;
00143
00144
00145 private:
00147 DEMBL()
00148 {
00149 MayDay::Error("DEMBL uses strong construction");
00150 }
00151 DEMBL(const DEMBL& a_radius)
00152 {
00153 MayDay::Error("sphereBaselevel disallows copy construction");
00154 }
00155 void operator=(const DEMBL& a_radius)
00156 {
00157 MayDay::Error("DEMBL disallows assignment");
00158 }
00159
00160 };
00161 #endif