/*
* This file is part of JGrasstools (http://www.jgrasstools.org)
* (C) HydroloGIS - www.hydrologis.com
*
* JGrasstools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jgrasstools.hortonmachine.modules.hydrogeomorphology.etp;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_AUTHORCONTACTS;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_AUTHORNAMES;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_KEYWORDS;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_LABEL;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_LICENSE;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_NAME;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_STATUS;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_UI;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_defaultNetradiation_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_defaultPressure_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_defaultRh_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_defaultTemp_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_defaultWind_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_fId_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_inNetradiation_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_inPressure_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_inRh_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_inTemp_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_inWind_DESCRIPTION;
import static org.jgrasstools.hortonmachine.i18n.HortonMessages.OMSFAOETPMODEL_outFaoEtp_DESCRIPTION;
import java.util.HashMap;
import oms3.annotations.Author;
import oms3.annotations.Description;
import oms3.annotations.Execute;
import oms3.annotations.In;
import oms3.annotations.Keywords;
import oms3.annotations.Label;
import oms3.annotations.License;
import oms3.annotations.Name;
import oms3.annotations.Out;
import oms3.annotations.Status;
import oms3.annotations.UI;
import oms3.annotations.Unit;
import org.jgrasstools.gears.io.timedependent.OmsTimeSeriesIteratorReader;
import org.jgrasstools.gears.io.timedependent.OmsTimeSeriesIteratorWriter;
import org.jgrasstools.gears.libs.modules.JGTConstants;
import org.jgrasstools.gears.libs.modules.JGTModel;
@Description(OMSFAOETPMODEL_DESCRIPTION)
@Author(name = OMSFAOETPMODEL_AUTHORNAMES, contact = OMSFAOETPMODEL_AUTHORCONTACTS)
@Keywords(OMSFAOETPMODEL_KEYWORDS)
@Label(OMSFAOETPMODEL_LABEL)
@Name(OMSFAOETPMODEL_NAME)
@Status(OMSFAOETPMODEL_STATUS)
@License(OMSFAOETPMODEL_LICENSE)
@UI(OMSFAOETPMODEL_UI)
public class OmsFaoEtpModel extends JGTModel {
@Description(OMSFAOETPMODEL_inNetradiation_DESCRIPTION)
@UI(JGTConstants.FILEIN_UI_HINT)
@In
@Unit("MJ m-2 hour-1")
public String inNetradiation;
@Description(OMSFAOETPMODEL_defaultNetradiation_DESCRIPTION)
@In
@Unit("MJ m-2 hour-1")
public double defaultNetradiation = 2.0;
@Description(OMSFAOETPMODEL_inWind_DESCRIPTION)
@UI(JGTConstants.FILEIN_UI_HINT)
@In
@Unit("m s-1")
public String inWind;
@Description(OMSFAOETPMODEL_defaultWind_DESCRIPTION)
@In
@Unit("m s-1")
public double defaultWind = 2.0;
@Description(OMSFAOETPMODEL_inTemp_DESCRIPTION)
@In
@Unit("C")
public String inTemp;
@Description(OMSFAOETPMODEL_defaultTemp_DESCRIPTION)
@In
@Unit("C")
public double defaultTemp = 15.0;
@Description(OMSFAOETPMODEL_inRh_DESCRIPTION)
@In
@Unit("%")
public String inRh;
@Description(OMSFAOETPMODEL_defaultRh_DESCRIPTION)
@In
@Unit("%")
public double defaultRh = 70.0;
@Description(OMSFAOETPMODEL_inPressure_DESCRIPTION)
@In
@Unit("KPa")
public String inPressure;
@Description(OMSFAOETPMODEL_defaultPressure_DESCRIPTION)
@In
@Unit("KPa")
public double defaultPressure = 100.0;
@Description(OMSFAOETPMODEL_fId_DESCRIPTION)
@In
public String fId = "ID";
@Description(OMSFAOETPMODEL_outFaoEtp_DESCRIPTION)
@UI(JGTConstants.FILEOUT_UI_HINT)
@Unit("mm hour-1")
@Out
public String outFaoEtp;
@Execute
public void process() throws Exception {
checkNull(inNetradiation, inWind, inTemp, inRh, inPressure);
OmsFaoEtp faoEtp = new OmsFaoEtp();
OmsTimeSeriesIteratorReader netradReader = getTimeseriesReader(inNetradiation, fId);
OmsTimeSeriesIteratorReader windReader = getTimeseriesReader(inWind, fId);
OmsTimeSeriesIteratorReader tempReader = getTimeseriesReader(inTemp, fId);
OmsTimeSeriesIteratorReader rhReader = getTimeseriesReader(inRh, fId);
OmsTimeSeriesIteratorReader pressureReader = getTimeseriesReader(inPressure, fId);
OmsTimeSeriesIteratorWriter outputWriter = new OmsTimeSeriesIteratorWriter();
outputWriter.file = outFaoEtp;
try {
while( netradReader.doProcess ) {
netradReader.nextRecord();
HashMap<Integer, double[]> id2ValueMap = netradReader.outData;
faoEtp.inNetradiation = id2ValueMap;
windReader.nextRecord();
id2ValueMap = windReader.outData;
faoEtp.inWind = id2ValueMap;
tempReader.nextRecord();
id2ValueMap = tempReader.outData;
faoEtp.inTemp = id2ValueMap;
rhReader.nextRecord();
id2ValueMap = rhReader.outData;
faoEtp.inRh = id2ValueMap;
pressureReader.nextRecord();
id2ValueMap = pressureReader.outData;
faoEtp.inPressure = id2ValueMap;
faoEtp.defaultNetradiation = defaultNetradiation;
faoEtp.defaultPressure = defaultPressure;
faoEtp.defaultRh = defaultRh;
faoEtp.defaultTemp = defaultTemp;
faoEtp.defaultWind = defaultWind;
faoEtp.pm = pm;
faoEtp.process();
HashMap<Integer, double[]> outEtp = faoEtp.outFaoEtp;
outputWriter.inData = outEtp;
outputWriter.writeNextLine();
}
} finally {
netradReader.close();
pressureReader.close();
windReader.close();
tempReader.close();
rhReader.close();
outputWriter.close();
}
}
private OmsTimeSeriesIteratorReader getTimeseriesReader( String file, String id ) {
OmsTimeSeriesIteratorReader reader = new OmsTimeSeriesIteratorReader();
reader.file = file;
reader.idfield = id;
reader.fileNovalue = "-9999";
reader.initProcess();
return reader;
}
}