00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _CatchmentSector_h
00021 #define _CatchmentSector_h
00022
00023
00024 #include <iostream>
00025 using namespace std;
00026 #include <fstream>
00027 #include <string>
00028
00029 #include "BasicEnums.h"
00030
00031 #include "CatchmentHandler.h"
00032 #include "GridCellHandler.h"
00033 #include "RandomDataHandler.h"
00034 #include "Raster2D.h"
00035
00036 class CropPrecipitation;
00037 class CropWater;
00038 class IrrigationMethodSector;
00039 class TimeHandler;
00040
00041 class sector
00042 {
00043 protected:
00044 int* zuflussID;
00045
00046 protected:
00047 string secName;
00048 int sc_nr;
00049 int GISID;
00050
00051
00052
00053 int sectorSeed;
00054
00055 scuenca* sub;
00056 int sectorIndex;
00057
00058
00059
00060
00061
00062 int positionInRegionFile;
00063
00064
00065 double irrigableHa_j;
00066 double nonIrrigableHa_j;
00067 int iniAgents;
00068 int numInflows;
00069
00070
00071 double xCoord;
00072 double yCoord;
00073
00074 int* parzellen;
00075
00076 double* totalSectorShares;
00077 double* maxQuantInflow;
00078
00079
00080 CropPrecipitation* p_cropActualPrecipitation;
00081 CropWater* p_cropWat;
00082
00083
00084
00085 virtual double getActualPrecipitation();
00086
00087 virtual double getActualPrecipitation(TimeHandler& th_notChanged);
00088
00089
00090
00091 virtual double getAveragePrecipitation_Global();
00092
00093 virtual double getAveragePrecipitation(TimeHandler& th_notChanged);
00094
00095
00096 MatrixDouble irrigationWaterDemands;
00097
00098
00099 MatrixDouble effectivePrecipitation;
00100
00101
00102
00103 MatrixDouble methoden_j;
00104
00105
00106 MatrixDouble areaShareOfIrrigationMethods;
00107
00108
00109
00110 IrrigationMethodSector sectorparamsIrrigationMethod;
00111
00112
00113
00114 double canalEfficiency;
00115
00116
00117
00118 MatrixDouble N_j;
00119
00120
00121 double Ext_j;
00122 double U_j;
00123
00124 double B_j;
00125 double G_j;
00126 double L_j;
00127 double eta_j;
00128
00129 double b_j;
00130 double g_j;
00131 double loss_j;
00132 double zeta_j;
00133
00134
00135 double D_sat_j;
00136 double Derr_j;
00137 double Esc_j;
00138 double Ueb_j;
00139 double Fehl_j;
00140
00141 double Canal_j;
00142
00143 double S_j;
00144
00145 double D_j;
00146
00147
00148
00149
00150 double weff;
00151
00152
00153 ldscape fl;
00154
00155
00156
00157 MatrixDouble couplVector;
00158
00159
00160
00161 public:
00162
00164
00165
00166
00167
00168
00169 sector (const char*, const char*,
00170 int sc, scuenca*,
00171 int sk,
00172 CropPrecipitation* p_cropPrecipitation_ = NULL, CropWater* p_cropWat_ =NULL );
00173 virtual ~sector();
00174
00175 virtual void sectorbetriebe_loeschen();
00176 virtual void speicher_freigeben(void);
00177
00178
00179
00181
00182
00183
00184
00185
00186
00187
00188
00189 virtual void initializeInflowsToSector(MatrixDouble& INFL, MatrixDouble& MAXINFL);
00190 virtual void assignInflowIDs(const MatrixDouble& inflows);
00191 virtual void initLandscape_SectorRaster(Content cont, Raster2D& gisData);
00192 virtual void fillLandscapeDataContent(Content cont, Raster2D& gisData);
00193
00194 void setActualPrecipitationPointer( CropPrecipitation* p_cropPrecipitation_)
00195 {p_cropActualPrecipitation = p_cropPrecipitation_;}
00196 void setCropWatPointer( CropWater* p_cropWat_)
00197 {p_cropWat = p_cropWat_;}
00198
00199 CropWater* getCropWatPointer()
00200 {return p_cropWat;}
00201
00202 virtual void makeAgentVector();
00203
00204 virtual int checkAndInitializeAgentIds(Raster2D& gisCont);
00205 virtual void checkPropertiesAndInitializeToSector(Raster2D& gisCont);
00206
00207 virtual void analyseAgentsInSectorAndExport(ofstream& streamData);
00208
00210
00212 virtual void besitzer_eintragen(int z, int s, int nr);
00213 virtual void nutzer_eintragen(int z, int s, int farbe);
00214 virtual void alle_nutzer_zuruecksetzen();
00215
00216
00218
00219 virtual void printOnScreen_MatrixSize(void);
00220 virtual void printToScreen(void);
00221 virtual void printToScreenOld(void);
00222 virtual void printIrrgationMethods();
00223
00224 virtual void writeIrrigationMethodToFile(string fn, bool isFirst);
00225
00227 virtual void writeMonthlyWaterToStream(int m);
00228 virtual void writeMonthlyWaterToStream(int m, double Ueb_j_tmp);
00229 virtual void bodenkarte_printOnScreen(void);
00230
00231 virtual void nutzerkarte_datei_speichern(char*);
00232 virtual void nutzerkarte_IDRISI_speichern(char*);
00233 virtual void WriteSoilMapInCol(char*);
00234 virtual void WriteUserMapInCol(char*);
00235 virtual void WriteFarmMapInCol(char*);
00236
00237 virtual void WriteAnyContentToFile(Content cont, int month, char*);
00238
00239
00240
00242
00243
00244
00245
00246 virtual void set_iniAgents(int numA) { iniAgents = numA; }
00247 virtual void setIrrigableHa_j(double haSz) { irrigableHa_j = haSz; }
00248 virtual void setNonIrrigableHa_j(double haSz) { nonIrrigableHa_j = haSz; }
00249
00250
00251 virtual void setSectorSeed(int _sectorSeed);
00252 virtual int getSectorSeed() { return sectorSeed; }
00253
00254
00255
00256 virtual double getXcoord() { return xCoord;}
00257 virtual double getYcoord() { return yCoord;}
00258 virtual void setXcoord(double xc);
00259 virtual void setYcoord(double yc);
00260
00261
00262 virtual int getSectorID(void) {return sectorIndex;}
00263 virtual int getCatchmentID(void) {return sc_nr;}
00264
00265 virtual int getGISID(void) {return GISID;}
00266 virtual int getGisId(void) {return GISID;}
00267
00268 virtual int getIniAgents() {return iniAgents;}
00269 virtual double getIrrigableHa(void){return irrigableHa_j;}
00270 virtual double getNonIrrigableHa(void){return nonIrrigableHa_j;}
00271
00272
00273 virtual int getInflowIdForIndex(int index)
00274 { return zuflussID[index];
00275 }
00276 virtual double getWaterShares(int index)
00277 { return totalSectorShares[index];
00278 }
00279 virtual IrrigationMethodSector* const getPointerToIrrigationMethodSector()
00280 { return §orparamsIrrigationMethod;
00281 }
00282
00283
00284 virtual const MatrixDouble* getPtrToIrrigationWaterDemands() {return &irrigationWaterDemands;}
00285
00286
00287 virtual const MatrixDouble* getPtrToEffectivePrecipitation(){return &effectivePrecipitation;}
00288
00289 virtual double get_N_j(int m){ return N_j.wert_holen(0, m); }
00290
00291 virtual int get_parzellen(int typ);
00292
00293
00294 virtual void set_GISID(int GISID_){ GISID = GISID_;};
00295 virtual void set_GisId(int GISID_){ GISID = GISID_;};
00296
00297
00298 virtual void set_positionInRegionFile(int posInRegionFile){ positionInRegionFile =posInRegionFile;}
00299
00300
00301
00302
00304
00305
00306 virtual void createAgentsInSector();
00307 virtual void assignGridCells();
00308
00309
00311
00312
00313 virtual void countInflows(void);
00314 virtual void addToIrrigationMethod_AreaShare(typeIrrigationMethod type, double val);
00315 virtual void computeAreaShareOfIrrigationMethods();
00316
00318
00319
00320 virtual double computeAgentsIrrigationWaterSupplyPerMonth
00321 (int m, double irrHa,
00322 double* D_i, double* N_i, double*& Ext_i, double*& S_i, double* WPa_i, double Ueb_j_tmp);
00323
00324 virtual void addAgentValueToN_j(int m, double val);
00325 virtual void make_N_j(int m);
00326
00327
00328 virtual void make_Ueb(double);
00329 virtual double get_Ueb_j();
00330 virtual double reduce_Ueb_j(double);
00331 virtual void reset_Ueb_j();
00332
00333 virtual void addToSectorsTotalSatisfiedDemand_D_sat(double);
00334 virtual void make_Fehl(double);
00335
00336
00337 virtual void setEta(double eta_);
00338 virtual double getEta() {return eta_j;}
00339
00340 virtual void compute_B_G();
00341 virtual double compute_delta();
00342 virtual double compute_e();
00343 virtual double compute_fieldLoss();
00344 virtual double compute_sectorLoss();
00345 virtual double compute_e_jj();
00346
00347
00348 virtual double computeInternalReturnFlowCoefficients();
00349 virtual double receiveExternalReturnFlowsFromUpstreamSectors();
00350 virtual void computeSurfaceRunoff();
00351 virtual void computeLateralFlows();
00352 virtual void sendReturnFlowsToDownstreamSectors();
00353
00354
00355 virtual void initializeStartValuesForEffectivePrecipitation();
00356 virtual void initializeStartValuesForEffectivePrecipitation(TimeHandler& th_notChanged);
00357
00358
00359
00360 virtual void initializeEffectivePrecipitation();
00361
00362
00363 virtual void initializeEffectivePrecipitation(TimeHandler& th_notChanged);
00364
00365
00366
00367
00368
00369 virtual void initializeIrrigationWaterDemands_GlobalTime();
00370
00371 virtual void initializeIrrigationWaterDemands(TimeHandler& th_fixed);
00372
00373
00374 virtual void initializeEdicMonth();
00375
00376
00377 virtual void resetEdicSectorStorages();
00378
00379
00380 virtual void copyEffectivePrecipitationInMonth(int m,
00381 const MatrixDouble& vectorOfMonthlyCropEffectivePrecipitation);
00382
00383
00384 virtual double getEffectivePrecipitation(int waterActiID_, int month_);
00385
00386 virtual double getPlantIrrigationDemand(int waterActiID_, int month_);
00387
00388 virtual void copyIrrigationWaterDemandsInMonth(int m,
00389 const MatrixDouble& vectorOfMonthlyCropIrrigationDemands);
00390
00391
00393
00394
00395 virtual int get_numInflows(void);
00396 virtual double getU_j();
00397 virtual double getWeff();
00398 virtual string getName();
00399 virtual double getNetInflowFromCatchment(int inflowID, int month, double share);
00400 virtual double getCanalEfficiency() {return canalEfficiency;}
00401 virtual void setCanalEfficiency (double canalEfficiency_);
00402
00403 virtual void set_b_j(double _b);
00404 virtual void set_g_j(double _g);
00405 virtual double getZeta_j(){return zeta_j;};
00406
00407 virtual double getActualPrecipitation(int month_, int year_);
00408
00409
00410 virtual double computeReturnFlowsForAgent_Ext_i(int, double);
00411
00412 virtual double computeReturnFlowsForAgent_Ext_i(int, double, double Ueb_j_tmp);
00413
00414
00415 virtual void setEsc(double val);
00416 virtual void setDerr(double val);
00417
00418 void set_U_j(double U_j_) { U_j = U_j_;}
00419
00420 void set_weff(double weff_) { weff = weff_; }
00421
00422 virtual void set_Ext_j(double ext_j_);
00423 virtual double get_Ext_j(void);
00424
00425
00426 void setparamsIrrigationMethod(IrrigationMethod paramsIrrigationMethod);
00427 virtual double getMethodPlantWaterAvailability(int methodID);
00428
00429 void printOutflowsToOtherSectors();
00430 virtual void writeToDescriptiveFile(ofstream& out);
00431
00432
00433 virtual void addToCanal_j(double CC_J_);
00434 virtual double get_Canal_j();
00435 virtual double reduce_Canal_j(double CC_J_);
00436 virtual void reset_Canal_j();
00437
00438
00439 virtual void addToS_j(double S_J_);
00440 virtual double get_S_j();
00441 virtual void reduce_S_j(double S_J_);
00442 virtual void reset_S_j();
00443
00444
00445 virtual void addToD_j(double D_J_);
00446 virtual double get_D_j();
00447 virtual void reduce_D_j(double D_J_);
00448 virtual void reset_D_j();
00449
00450
00452
00453
00454
00455 virtual double getSlopeLen(int r, int c);
00456 virtual double getSlopeEro(int r, int c);
00457 virtual void updateSoilC(int r, int c, soilC*& slc);
00458
00459
00461
00462
00463
00465
00467
00468
00469
00470
00471
00472
00473
00474 virtual void exportAnyCellContentToRaster3D(Raster3D& raster3D, int start, int end);
00475
00476
00478
00479 virtual void printOnScreenLdscapeCells(void);
00480 virtual void printOnScreenAllCells(void);
00481
00482
00484
00485
00486
00487
00488
00489
00490 virtual bool checkConsistencyOfMapsFarmAndProperty();
00491 virtual bool eraseAllAgentsBellowSize(double factor, double cutoffsize);
00492
00493
00494 virtual bool rectifySectorBoundariesFromInflows();
00495
00496
00497
00498
00500
00501
00502 virtual void getRaster2DfromLandscape( Content cont, Raster2D& raster, int noData);
00503 virtual void getRaster2DfromLandscape( Content cont, Raster2D& raster);
00504
00505
00506
00507
00508 virtual double getSpatialInfo_Content( int r, int c, Content cont);
00509 virtual double getSpatialInfo_Content_monthly( int r, int c, int m, Content cont);
00510
00511
00512
00513
00514 virtual double getContentFromSectorLevel( Content con);
00515
00516
00517
00518 virtual double getContentFromCell( int r, int c, Content cont);
00519 virtual double getContentFromCell_monthly( int r, int c, int m,Content cont );
00520
00521
00523
00524
00525
00526
00527
00528
00529 virtual void setSpatialInfo_Content(Content cont, Raster2D data_);
00530
00532 virtual void copyContentRaster2Cell(Content cont, Raster2D& gisCont);
00533 virtual void copyContentValueIntoCell(int r, int c, Content cont, double value);
00534 virtual void copyContentValueIntoCell_monthly(int r, int c, int month, Content cont, double value);
00535
00536
00537 virtual void setSpatialInfo_Content_Double(Content cont, double value);
00538
00539
00540
00541
00542
00543
00545 virtual void writeToFileRaster(Content cont);
00546 virtual void writeToFileRaster_monthly(Content cont, int m);
00547
00548 void writeN_jToFileWithDims(ofstream& out);
00550 virtual void createRasterFromCell(Content cont, Raster2D& gis);
00551 virtual void createRasterFromCell(Content cont, Raster2D& gis, bool flag_forceToCell);
00552 virtual void createRasterFromCell_monthly(Content cont, Raster2D& gis, int m);
00553
00554
00555 };
00556
00557
00558
00559
00560 #endif
00561