00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
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
00075 int columnInLP;
00077 int priceColumnInLP;
00079 int yieldRowInLP;
00080
00081
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
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
00118 virtual void computeCropEffectivePrecipitationInMonth
00119 (int m, double actualRainfall,
00120 MatrixDouble& vectorOfMonthlyCropEffectivePrecipitation);
00121 virtual void computeCropIrrigationWaterDemandsInMonth
00122 (int m, int secID_,
00123 const IrrigationMethodSector& sectorparamsIrrigationMethod,
00124 const MatrixDouble& effectivePrecipitation,
00125 MatrixDouble& vectorOfMonthlyCropIrrigationWaterDemands);
00126
00128
00129 virtual double computeIrrigatedAreaPerMethodAndTotalIrrigationWaterDemand(int m,
00130 const MatrixDouble& cropWaterData,
00131 const MatrixDouble*& irrigationWaterDemands,
00132 MatrixDouble& vectorOfIrrigatedAreaByMethod);
00133
00135
00136 virtual double allocateIrrigationWaterToCropsInMonth
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
00147 virtual void computeWaterDeficitsOfAllCrops
00148 (const MatrixDouble& cropWaterData,
00149 const MatrixDouble*& effectivePrecipitation,
00150 const MatrixDouble& irrigationWaterSuppliedToCrops,
00151 MatrixDouble& waterDeficitsOfCropsAsMonthlyKR);
00152 virtual void computeYieldReductionUnderWaterStress
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
00199
00201
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;
00225 double effRainCoeffDemand;
00226 double effRainCoeffDemandSquared;
00227 double effRainCoeffRain;
00228 double effRainCoeffRainSquared;
00229 double effRainCoeffCross;
00230
00231
00233 InfoHydro* waterActivities;
00234
00235
00237 MatrixDouble waterActivityLookup;
00238
00240
00242
00243
00244
00245 double computeCropWaterYieldReductionFactor(double ky, double kr);
00246
00248 };
00249
00250
00251 #endif