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

CropWater.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:       CropWater.h (formerly part of agentF.h)
00012 //
00013 //  Contents:   Implemenation of the water-stress crop growth model CROPWAT
00014 //
00015 //
00016 //
00017 //------------------------------------------------------------------------------
00018 
00019 #ifndef _CropWater_h
00020 #define _CropWater_h
00021 
00022 #include "BasicData.h"
00023 #include "MatrixDouble.h"
00024 
00025 #ifndef LP_OLD
00026         #include "AgentSolution.h"
00027 #else
00028         #include "lp9.h"
00029 #endif
00030 
00032 class InfoHydro{  
00033 public:
00035 
00036         int getColumnInLP()const;
00037         int getPriceColumnInLP()const;
00038         int getYieldRowInLP()const;
00039         int getSoilTypeID()const;
00040         int getIrrigationPriorityGroup()const;
00041         int getCropIrrigationType()const;
00042         int getIrrigationMethod()const;
00043         int getFormOfStressCoefficientKR()const;
00044         double getWaterStressCoefficientKY()const;
00045         double getCropYieldPotential()const;
00046         double getCropYieldStartValue()const;
00047         double getPlantWaterDemandsGrossInLiterPerSecond(int m)const;
00048         double getWaterDemandsGrossInOriginalUnit(int m)const;
00049         //double getWaterDemandsExpectedReducedByEffectiveRainfall(int m)const;//## H2O
00051         
00053 
00054         void copyRhsToThis(const InfoHydro& rhs);
00055         void printToScreen();
00056         void writeToFile(ofstream& outStream);
00057         bool readFromFile(ifstream& fileStreamCrop, int numIrrigationPeriods);
00058         void allocate();
00059         void initialize(double initVal);
00060         void write(FILE* strm);
00062 
00064 
00065         InfoHydro();
00066         InfoHydro(double initVal);
00067         InfoHydro(const InfoHydro&);
00068         InfoHydro& operator=(const InfoHydro&);
00069         ~InfoHydro();
00071 
00072 private:
00073         /* TODO 1 -oBerger -cImplement : LP info related to WASIM */
00075         int columnInLP;
00077         int priceColumnInLP;
00079         int yieldRowInLP;
00080         
00081         //int soilClassID; ## soil
00082         int soilTypeID;
00083 
00084         int irrigationPriorityGroup;
00086         int cropIrrigationType;
00087         int irrigationMethod;
00088         int formOfStressCoefficientKR;
00089         double waterStressCoefficientKY;
00090         double cropYieldPotential;
00091         double cropYieldStartValue;
00093         MatrixDouble waterDemandsGross;
00095         //MatrixDouble waterDemandsReducedByExpectedEffectiveRainfall;//## h2o
00096 };
00097 
00098 
00100 
00106 class IrrigationMethodSector;
00107  
00108 class CropWater
00109 {
00110 public:
00111 
00114         virtual double computeCropEffectivePrecipitation(double actualRainfall, double monthlyWaterDemand);
00115 
00117         //virtual void computeCropEffectiveWaterDemandsInMonth //substitute
00118         virtual void computeCropEffectivePrecipitationInMonth //Tbe 080220
00119                          (int m, double actualRainfall, 
00120                          MatrixDouble& vectorOfMonthlyCropEffectivePrecipitation);
00121         virtual void computeCropIrrigationWaterDemandsInMonth //Tbe 080220
00122                         (int m,   int secID_,
00123                         const IrrigationMethodSector& sectorparamsIrrigationMethod, 
00124                         const MatrixDouble& effectivePrecipitation,
00125                         MatrixDouble& vectorOfMonthlyCropIrrigationWaterDemands);
00126 
00128         //virtual double computeIrrigationWaterDemandPerHectareForMonth //substitute
00129         virtual double computeIrrigatedAreaPerMethodAndTotalIrrigationWaterDemand(int m, //Tbe 080220
00130                         const MatrixDouble& cropWaterData,
00131                         const MatrixDouble*& irrigationWaterDemands,
00132                         MatrixDouble& vectorOfIrrigatedAreaByMethod);
00133 
00135         //virtual double allocateIrrigationWaterToCropsPerMonth //substitute
00136         virtual double allocateIrrigationWaterToCropsInMonth //Tbe 080220
00137                         (int m,
00138                         double*& D_sat,
00139                         const  MatrixDouble*& irrigationWaterDemands,
00140                         const MatrixDouble& cropWaterData,
00141                         MatrixDouble& irrigationWaterDemandsPerPriorityGroup,
00142                         MatrixDouble& percentageIrrigatedPerPriorityGroup,
00143                         MatrixDouble& irrigationWaterSuppliedToCrops);
00144 
00146         //virtual void computeWaterDeficitForHydroActivity //substitute
00147         virtual void computeWaterDeficitsOfAllCrops //Tbe 080220
00148                         (const MatrixDouble& cropWaterData,
00149                         const MatrixDouble*& effectivePrecipitation,
00150                         const MatrixDouble& irrigationWaterSuppliedToCrops,
00151                         MatrixDouble& waterDeficitsOfCropsAsMonthlyKR);
00152         virtual void computeYieldReductionUnderWaterStress //Tbe 080220
00153                         (MatrixDouble& cropWaterData,
00154                         MatrixDouble& waterDeficitsOfCropsAsMonthlyKR);
00156 
00157 
00158         //---------------------------------------------------------------------------
00159 
00161 
00162 
00163         virtual int getNumWaterActivities();
00164         virtual int getNumIrrigationPriorityGroups();
00165         virtual int getNumWaterMonths();
00166         
00167         virtual int getLpColumnForActivityID(int _actID);
00168         virtual int getIrrigationTypeForActivityID(int _actID);
00169         
00170         virtual int getActivityIDForLpColumn(int _colLP);
00171         virtual int getIrrigationTypeForLpColumn(int _colLP);
00172 
00173    virtual double getPlantWaterDemandsGrossInLiterPerSecond(int _hydroActID, int m_);
00174         virtual int getSoilTypeID(int _hydroActID);
00175         virtual InfoHydro getInfoOnActivityCropHydrology(int arrayIndex);
00176         const InfoHydro* getPointerToInfoOnActivityCropHydrology(int arrayIndex);
00178         
00179         //---------------------------------------------------------------------------
00180         
00182 
00183 
00184         virtual void readInputFromFile(string fn);
00185         virtual void writeInputIntoFile();
00186 
00187         
00189 
00190         //---------------------------------------------------------------------------
00191 
00193 
00194 
00195         CropWater();
00196 
00198         //CropWater(const CropWater& cropWater_);
00199 
00201         //CropWater& operator=(const CropWater& cropWater_);
00202 
00204         virtual ~CropWater()
00205         {       delete [] waterActivities;
00206                 waterActivityLookup.deallocate();
00207         }
00209         
00210         
00211 protected:
00213 
00214 
00215         int numWaterActivities;
00216         
00218         int numIrrigationPriorityGroups;
00219 
00221         int numWaterMonths;
00222 
00224         double effRainCoeffConstant;            // 1.2995160
00225         double effRainCoeffDemand;                      //-0.0348437
00226         double effRainCoeffDemandSquared;// 0.0001663
00227         double effRainCoeffRain;                        // 0.6439529
00228         double effRainCoeffRainSquared; //-0.0004772
00229         double effRainCoeffCross;                       // 0.0010454    
00230         
00231         /* TODO 1 -oBerger -cImplement : LP info related to WASIM */
00233         InfoHydro* waterActivities;//formerly 'actHydro' or 'actHydroVector'
00234 
00235 
00237         MatrixDouble waterActivityLookup;
00238 
00240 
00242 
00243 
00244         //double growthRedFunction(double ky, double kr);//substitute
00245         double computeCropWaterYieldReductionFactor(double ky, double kr);//Tbe 080220
00246         
00248 };
00249 
00250 
00251 #endif

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