00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _CropActualPrecipitation_h
00021 #define _CropActualPrecipitation_h
00022
00023 #include "BasicData.h"
00024 #include "MatrixDouble.h"
00025
00026 enum enumPrecipType {
00027 precipTypeActual, precipTypeAverage
00028 };
00029
00030 enum typeInputDataActualPrecipitation
00031 { inputTypeByYear, inputTypeRandom
00032 };
00033
00035 class CropPrecipitation{
00036 public:
00038
00039 virtual double getActualPrecipitationByYear(int year_, int month_, int catchment_, int sector_);
00040 virtual double getActualPrecipitationByIndex(int year_, int month_, int catchment_, int sector_);
00041 virtual int getIndexForAbsoluteYear(int year);
00042 virtual void printValue(int year_, int month_, int catchment_, int sector_);
00043 virtual void printValueByIndex(int yearIndex, int month_, int catchment_, int sector_);
00044 virtual double getAveragePrecipitationInMonth(int month_, int catchment_, int sector_);
00046
00048
00049 virtual void printToScreen();
00050 virtual void writeToFile(string fn, int catchID);
00051 virtual void writeToFile(char* filename, int catchID);
00052
00053 virtual void readHeader(FILE* strm);
00054 virtual void readPrecipitationDataIntoMatrix(FILE* strm, MatrixDouble& matrixPassedByRef, int numYR_, int secID, enumPrecipType precipType);
00055 virtual void readFromFile(char* filename, int catchID);
00057
00059
00060 CropPrecipitation()
00061 { allocate();
00062 }
00063
00064 CropPrecipitation(int numCatchments_, int numSectors_, int numberOfYears_, int numTimeSteps_)
00065 { allocate(numCatchments_, numSectors_, numberOfYears_, numTimeSteps_);
00066 }
00067
00068 CropPrecipitation(CropPrecipitation& orig)
00069 { allocate(orig);
00070 }
00071
00072 virtual CropPrecipitation& operator=(CropPrecipitation&);
00073 virtual ~CropPrecipitation();
00074
00076
00077 protected:
00078
00079 int numberOfYears;
00080 int numTimeSteps;
00081 int numCatchments;
00082 int numSectors;
00083 typeInputDataActualPrecipitation inputType;
00084
00085 virtual int getNumberOfYears()
00086 { return numberOfYears;
00087 }
00088
00089 virtual int getNumTimeStepsPerYear()
00090 { return numTimeSteps;
00091 }
00092
00093 virtual int getNumCatchments()
00094 { return numCatchments;
00095 }
00096
00097 virtual int getNumSectors()
00098 { return numSectors;
00099 }
00100
00101 virtual int getRealYear(int yInd)
00102 { return (int)translationMatrix_YearToIndex.getValue(yInd);
00103 }
00104
00105 virtual typeInputDataActualPrecipitation getInputType()
00106 { return inputType;
00107 }
00108
00109 virtual bool getIsDataPerSector()
00110 { return isDataPerSector;
00111 }
00112
00113 bool isDataPerSector;
00115 MatrixDouble translationMatrix_YearToIndex;
00116
00118 MatrixDouble** actualPrecipitation;
00119
00120
00121
00123 MatrixDouble** averagePrecipitation;
00124
00125
00126
00127
00128
00129 virtual void allocate();
00130 virtual void allocate(int numCatchments_, int numSectors_, int numberOfYears_, int numTimeSteps_);
00131 virtual void allocate(CropPrecipitation& orig);
00132 virtual void deallocate();
00133 virtual void copy(CropPrecipitation& orig);
00134 };
00135
00136
00137 #endif
00138