package org.jgrasstools.hortonmachine.models.hm;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import org.geotools.data.DataUtilities;
import org.jgrasstools.gears.io.timedependent.OmsTimeSeriesIteratorReader;
import org.jgrasstools.gears.io.timedependent.OmsTimeSeriesIteratorWriter;
import org.jgrasstools.gears.libs.monitor.PrintStreamProgressMonitor;
import org.jgrasstools.gears.utils.math.NumericsUtilities;
import org.jgrasstools.hortonmachine.modules.hydrogeomorphology.etp.OmsFaoEtpDaily;
import org.jgrasstools.hortonmachine.utils.HMTestCase;
/**
* Test FAO daily evapotranspiration.
*
* @author Andrea Antonello (www.hydrologis.com)
*/
@SuppressWarnings("nls")
public class TestFaoEtpDaily extends HMTestCase {
public void testFaoEtpDaily() throws Exception {
// PrintStreamProgressMonitor pm = new PrintStreamProgressMonitor(System.out, System.err);
// URL rainUrl = this.getClass().getClassLoader().getResource("etp_in_data_rain.csv");
String startDate = "2005-05-01 00:00";
String endDate = "2005-05-02 00:00";
int timeStepMinutes = 1440;
String fId = "ID";
PrintStreamProgressMonitor pm = new PrintStreamProgressMonitor(System.out, System.out);
URL maxTempUrl = this.getClass().getClassLoader().getResource("faoetpday_in_tmax.csv");
URL minTempUrl = this.getClass().getClassLoader().getResource("faoetpday_in_tmin.csv");
URL windUrl = this.getClass().getClassLoader().getResource("faoetpday_in_wind.csv");
URL humidityUrl = this.getClass().getClassLoader().getResource("faoetpday_in_rh.csv");
URL netradiationUrl = this.getClass().getClassLoader().getResource("faoetpday_in_rad.csv");
OmsTimeSeriesIteratorReader maxtempReader = getTimeseriesReader(maxTempUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader mintempReader = getTimeseriesReader(minTempUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader windReader = getTimeseriesReader(windUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader humReader = getTimeseriesReader(humidityUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader netradReader = getTimeseriesReader(netradiationUrl, fId, startDate, endDate,
timeStepMinutes);
OmsFaoEtpDaily faoEtpDaily = new OmsFaoEtpDaily();
while( maxtempReader.doProcess ) {
maxtempReader.nextRecord();
maxtempReader.nextRecord();
HashMap<Integer, double[]> id2ValueMap = maxtempReader.outData;
faoEtpDaily.inMaxTemp = id2ValueMap;
mintempReader.nextRecord();
id2ValueMap = mintempReader.outData;
faoEtpDaily.inMinTemp = id2ValueMap;
windReader.nextRecord();
id2ValueMap = windReader.outData;
faoEtpDaily.inWind = id2ValueMap;
faoEtpDaily.defaultPressure = 101.3;
humReader.nextRecord();
id2ValueMap = humReader.outData;
faoEtpDaily.inRh = id2ValueMap;
netradReader.nextRecord();
id2ValueMap = netradReader.outData;
faoEtpDaily.inNetradiation = id2ValueMap;
faoEtpDaily.pm = pm;
faoEtpDaily.process();
HashMap<Integer, double[]> outEtp = faoEtpDaily.outFaoEtp;
double value = outEtp.get(1221)[0];
assertTrue(NumericsUtilities.dEq(value, 3.7612114870933824));
break;
}
maxtempReader.close();
windReader.close();
humReader.close();
netradReader.close();
}
private OmsTimeSeriesIteratorReader getTimeseriesReader( URL url, String id, String startDate, String endDate,
int timeStepMinutes ) throws URISyntaxException {
OmsTimeSeriesIteratorReader reader = new OmsTimeSeriesIteratorReader();
reader.file = DataUtilities.urlToFile(url).getAbsolutePath();
reader.idfield = "ID";
reader.tStart = "2005-05-01 00:00";
reader.tTimestep = 1440;
reader.tEnd = "2005-05-02 00:00";
reader.fileNovalue = "-9999";
reader.initProcess();
return reader;
}
}