Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

GridCellHandler.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 //
00003 //  Thomas Berger (main author), Pepijn Schreinemachers, and Thorsten Arnold
00004 //
00005 //
00006 //  Hohenheim University (490d)
00007 //  Professorship for Land Use Economics in the Tropics and Subtropics
00008 //
00009 //  May not be distributed without permission by main author
00010 //
00011 //  File:       GridCellHandler.h (formerly flaeche9.h)
00012 //
00013 //  Contents:   Auxiliary landscape class, containing the grid cells
00014 //
00015 //
00016 //
00017 //------------------------------------------------------------------------------
00018 
00019 
00020 #ifndef _GridCellHandler_h
00021 #define _GridCellHandler_h
00022 #include <iostream>
00023 using namespace std; // fuer C++-Compiler, damit cin nicht als std::cin eingelesen werden muss
00024 #include <fstream>   // new 2005
00025 #include <string>    // new 2005
00026 
00027 #include "CropSoil.h"
00028 #include "AgentParcel.h"
00029 #include "MainAuxiliaryFunctions.h"
00030 #include "MatrixDouble.h"
00031 class Raster3D;
00032 class Raster2D;
00033 
00034 
00035 
00036 
00037 // coordinates
00038 typedef struct {
00039         int x; // = column
00040         int y; // = row
00041 } coord;
00042 
00043 // gridcell
00044 class cell
00045 { 
00046    protected:
00047    bool isInitializedWithData;
00048    
00049         int cellFarmID;    //farmstead ID, must be identical with agent plot ID (cellAgentID = cellFarmID)
00050         int cellAgentID;   //agent plot ID, must be identical with farmstead ID (cellAgentID = cellFarmID)
00051         double cellDistanceHome;//Euklidean distance of plot from farmstead
00052         int cellFlagIdentifiedByOwner;   //flag: plot identified by owner
00053         int cellSoilType;  //soil type
00054    int cellUser;      //cellUser ID (operator, not necessarily owner)
00055    int colr;          //color of cellUser's plots
00056 
00057    int cellPopID;     //population ID of owner
00058    int cellCluID;     //cluster ID of owner
00059    int cellNetwID;    //network ID of owner
00060    int cellSectorID;  // used when migrating cells to catchment
00061 
00062    double cellPrecip;
00064 /*
00065    // This pointer is initialized if the grid is actually owned by some agent, and
00066    // if it then attributed spatially. Otherwise, it remains as initialized to NULL
00067    parzelle* parcel;
00068 */
00069    MatrixDouble couplVector;
00070    // ... dimension: ( 1 X (contENDCOUPL - contENDIRRIG + 1) )
00071    // contains information for 
00072    // ... contSoilMoist, contSoilMoist05, contSoilMoist1, contETpot, contETreal, 
00073    // ... contPrecip,   contSurfaceRunoff, contPercol, contBaseFlow, contGroundwaterRecharge,  
00074 
00075    // Pointer to soilC
00076    // Changed pointer soilC* sCon. Since there were problems with memory allocation,
00077    // now I defined a variable soilC sConDat, which is still referenced with a
00078    // pointer soilC* sCon. Thus, the code does not have to be changed anywhere.
00079    // Only memory allocation changes, sCon->METHODE() still works!
00080    soilC* sCon;   //soil conditions
00081    //soilC sConDat;
00082 
00083    //Spatial allcoation of cropping activities
00084    //cropAct links to milp->getHydro_XXXXX(int crA)
00085    int cropAct;     // Cropping activity
00086    MatrixDouble monthlyIrrigationQuantity;
00087                      // Quantity of irrigation water applied
00088                     // ARRAY, since it encodes for each REAL month
00089                     // setIrrigQ(mTot) called with real month, has Dims of RELEVANT months
00090 
00091                     // (returns zero if not relevant)
00092 
00093    // ---------------------------------------------------
00094    // SHOULD ALL BE PRIVATE
00095    // ---------------------------------------------------
00096    
00097 
00098          // Friend!
00099    friend class ldscape;
00100 
00101 private:
00102 
00103    // General, original version
00104    virtual int getFaID(void);
00105    virtual int getAGID(void);
00106 
00107    virtual double getDistanceFromHome(void);
00108    virtual int getFlagOwnerOK(void);
00109    virtual int getType(void);
00110    virtual int getUser(void);
00111 //   virtual int getColr(void);
00112 
00113    virtual int getPpID(void);
00114    virtual int getClustID(void);
00115    virtual int getNetwID(void);
00116    virtual int getSectorID(void);
00117 
00118    virtual void setSectorID(double in);
00119    virtual void setSectorID(int in);
00120 
00121    virtual void setFaID(int cellFarmID);
00122    virtual void set_aID(int cellAgentID);
00123 
00124    virtual void setDistanceFromHome(double cellDistanceHome);
00125    virtual void setFlagOwnerOK(int cellFlagIdentifiedByOwner);
00126    virtual void setSoilType(int cellSoilType);
00127    virtual void setUser(int usID);
00128    virtual void setColr(int colr);
00129 
00130    virtual void setPpID(int ppID);
00131    virtual void setClusterID(int cellCluID);
00132    virtual void setNetworkID(int nwID);
00133 
00134    // TSPC
00135    virtual soilC* getSCon(void);
00136    virtual void setSCon(soilC* sCon);
00137 
00138    virtual double getSoilN(void);
00139    virtual double getSoilP(void);
00140    virtual double getSoilK(void);
00141    virtual double getSoilA(void);
00142    virtual double getSoilC(void);
00143    virtual double getSoilSl(void);
00144    virtual double getSoilSe(void);
00145 
00146    virtual void setSoilN(double);
00147    virtual void setSoilP(double);
00148    virtual void setSoilK(double);
00149    virtual void setSoilA(double);
00150    virtual void setSoilC(double);
00151    virtual void setSoilSl(double);
00152    virtual void setSoilSe(double);
00153 
00154    // Irrigation Spatially explicit
00155    virtual int  getCropActivityID(void);
00156    virtual void setCropActivityID(int crA);
00157    virtual double getPrecip();
00158    virtual void setPrecip(double val);
00159 
00160    // CELL
00161    // Receives ACTUAL (real) months, but internally saves as reduced ("relevant") months.
00162    // Internal conversion.
00163    virtual void   setMonthlyIrrigationQuantity(int mTot, double monthlyIrrigVal);// CELL
00164    virtual double getMonthlyIrrigationQuantity(int mTot);// CELL
00165    // For wasim coupling: Access to vector with exchanged data
00166    virtual double getCouplingValue(Content cont);// CELL
00167    virtual void setCouplingValue(Content cont, double val);// CELL
00168    
00169 public: // for landscape
00170 
00171 //   public:
00172    cell();
00173    virtual ~cell();
00174    virtual void deallocate(void);
00175    virtual void setEmptyAll();
00176    // calls:
00177    virtual void setEmptyBasic(void);
00178    virtual void setEmptyIrrig(void);
00179    virtual void setEmptyTSPC(void);
00180 
00181 
00182 
00183    // ----------------------------------------
00185    // ----------------------------------------
00186    virtual void printToScreen(void);
00187    virtual void printToScreenBasic(void);
00188    virtual void printOnScreenCropped(void);
00189    virtual void printOnScreenIrrig(void);
00190    virtual void printOnScreenTSPC(void);
00191 
00192    bool isInitialized (void)
00193    { return isInitializedWithData;};
00194 
00195    // -----------------
00196    // get - set functions
00197    // -----------------
00198    // set
00199    virtual void setByContent_monthly(Content cont, int m, int val);
00200    virtual void setByContent_monthly(Content cont, int m, double val);
00201 
00202    virtual void setByContent(Content cont,  int val);
00203    virtual void setByContent(Content cont,  double val);
00204 
00205    // get
00206    virtual double getByContent_monthly(Content cont, int m);
00207    virtual double getByContent(Content cont);
00208 };
00209 
00210 //------------------------------------------------------------------------------
00211 // --> landscape
00212 class ldscape
00213 {  
00214    protected:
00215 
00216         int gRows;   //Rows in grid
00217         int gCols;   //columns in grid
00218    int gridAlloc;//Flag: grid allocated (yes/no)
00219 
00220    double xcoord;
00221    double ycoord;
00222    double cellsize;
00223    int noData;
00224 
00225    
00226    int  numAg;
00227    /* TODO 1 -oArnold -cImplement : Discard this vector - it does not belong into this class */
00228    MatrixDouble agentIDs;
00229 
00230    public:
00231    //pointer to cells in grid
00232    /* TODO 2 -oBerger -cImplement : grid should become protected element of ldscape */
00233    cell*** grid;
00234 
00235    // --------------------------------------
00237    // --------------------------------------
00238    ldscape();
00239         virtual ~ldscape();
00240 
00241    virtual void allocateGrid(int Rows, int Cols);
00242         virtual void deallocGrid();
00243    virtual void deallocate(int r, int c);
00244 
00245    virtual int getGridAlloc();
00246 
00247    // --------------------------------------
00249    // --------------------------------------
00250 //   virtual void writeAllMapsIntoFiles(char* prefix); // prefix not used anymore
00251 //   virtual void writeAllMapsIntoFiles();
00252    virtual void writeLayerToOpenFile(FILE* file, Content cont);
00253      
00254    // --------------------------------------
00256    // --------------------------------------
00257    virtual void printToScreen(int r, int c);
00258    virtual void printOnScreenAll(void);
00259    virtual void printOnScreenAllCropped(void);
00260 
00261    // --------------------------------------
00263    // --------------------------------------
00264    virtual int getGRows();
00265    virtual int getGCols();
00266    virtual int rows();
00267    virtual int cols();
00268 
00269    void setXcoord(double xc) {xcoord = xc;};
00270    void setYcoord(double yc) {ycoord = yc;};
00271    double getXcoord() {return xcoord;}
00272    double getYcoord() {return ycoord;}
00273   
00274    virtual bool isInitialized(int r, int c);
00275    
00277    virtual void provideCellContentViaGisStruct(Content cont, Raster2D& gisCont);
00278    virtual void setCellContentViaGisStruct(Content cont, Raster2D& gisCont);
00279 
00280    // Access by Raster3D
00281    virtual void exportBasicCellContentToRaster3D( Raster3D& raster3);
00282    virtual void exportTSPCCellContentToRaster3D( Raster3D& raster3);
00283    virtual void exportIrrigCellContentToRaster3D(Raster3D& raster3);
00284    virtual void exportAnyCellContentToRaster3D( Raster3D& raster3Dcell, 
00285           int startContVal, int stopContVal);
00286 
00287    // THESE SHOULD BE ONLY ACCESS FUNCTIONS at cell level
00288    // setValueInCell(r, c, contDistFromHome, value);
00289    // = getValueInCell(r, c, contAgentID);
00290    virtual void setValueInCell(int r, int c, Content cont, double value);
00291    virtual double getValueInCell(int r, int c, Content cont);
00292    virtual double getValueInCell(int r, int c, Content cont, bool supress);
00293 
00294    virtual void setValueInCell_monthly(int r, int c, int m, Content cont, double value);
00295    virtual double getValueInCell_monthly(int r, int c, int m, Content cont);
00296 
00297 
00298         //Arnold2008_08 TO BE ERASED
00299    virtual bool updateCell(int r, int c, Content cont, double value); //probably not used
00300    virtual bool updateCellMonthly(int r, int c, int m, Content cont, double newVal);
00301   /*
00302         //Arnold2008_08 NEW
00303    virtual void copyContentValueIntoCell(int r, int c, Content cont, double value); //probably not used
00304     //(takes REAL month. Only "cell" does conversion)
00305    virtual void copyContentValueIntoCell_monthly(int r, int c, int mTot, Content cont, double newVal);
00306 
00307  
00308 
00309    */
00310 
00311    // --------------------------------------
00313    // --------------------------------------
00314 
00315    // Functions that do something
00316    virtual void setFoundAndPlotDistances(int fr, int fc);
00317 
00318    // Carefull: This function can be called INSTEAD of setFoundAndPlotDistances, 
00319    // implemented for standalone consistency check.   
00320    virtual void setFoundForPlot(int r, int c);
00321    virtual void makeAgentVector(int nAg);
00322    virtual void setAgentID(int i, int val);
00323    virtual int getNumAgents();
00324 
00325    // --------------------------------------
00327    // --------------------------------------
00328    // row r, col c always refer to the grid within "cell*** grid"
00329    virtual int getFound(int r, int c);
00330    virtual void setFound(int r, int c, int);
00331 
00332    virtual soilC* getSoilCond(int r, int c);
00333 
00334    virtual void setSoilCond(int r, int c, soilC*&);//overwrites values
00335    virtual void updSoilCond(int r, int c, soilC*&);//adds values
00336 
00337    // These require some vector
00338    virtual int getFstID(int i);
00339    virtual int getPopID(int i);
00340    virtual int getCluID(int i);
00341    virtual int getNetID(int i);
00342    virtual int getNumPl(int i);
00343 
00344    // receives ACTUAL (real) MONTH!
00345    // Internal conversion within cell::getMonthlyIrrigationQuantity(m);
00346    // ... to be handled by
00347    //virtual double getMonthlyIrrigationQuantity( int r, int c, int m);
00348    //virtual void setMonthlyIrrigationQuantity(int r, int c, int m, double newVal);
00349 
00350 };
00351 
00352 
00353 #endif
00354 

Generated on Thu Aug 28 12:38:44 2008 for MPMAS by  doxygen 1.3.9.1