package org.jgrasstools.hortonmachine.models.hm;
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.libs.monitor.PrintStreamProgressMonitor;
import org.jgrasstools.gears.utils.math.NumericsUtilities;
import org.jgrasstools.hortonmachine.modules.hydrogeomorphology.etp.OmsPresteyTaylorEtpModel;
import org.jgrasstools.hortonmachine.utils.HMTestCase;
/**
* Test PrestleyTaylorModel.
*
*/
@SuppressWarnings("nls")
public class TestPrestleyTaylorModel extends HMTestCase {
public void testFaoEtpDaily() throws Exception {
String startDate = "2005-05-02 00:00";
String endDate = "2005-05-02 000:00";
int timeStepMinutes = 60;
String fId = "ID";
PrintStreamProgressMonitor pm = new PrintStreamProgressMonitor(System.out, System.out);
URL TempUrl = this.getClass().getClassLoader().getResource("PT_in_temp.csv");
URL netradiationUrl = this.getClass().getClassLoader().getResource("PT_in_netrad.csv");
URL pressureUrl = this.getClass().getClassLoader().getResource("PT_in_atmpress.csv");
OmsTimeSeriesIteratorReader tempReader = getTimeseriesReader(TempUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader pressReader = getTimeseriesReader(pressureUrl, fId, startDate, endDate, timeStepMinutes);
OmsTimeSeriesIteratorReader netradReader = getTimeseriesReader(netradiationUrl, fId, startDate, endDate, timeStepMinutes);
OmsPresteyTaylorEtpModel PTEtp = new OmsPresteyTaylorEtpModel();
while( tempReader.doProcess ) {
tempReader.nextRecord();
HashMap<Integer, double[]> id2ValueMap = tempReader.outData;
PTEtp.inTemp = id2ValueMap;
PTEtp.tCurrent = tempReader.tCurrent;
pressReader.nextRecord();
id2ValueMap = pressReader.outData;
PTEtp.inPressure = id2ValueMap;
PTEtp.defaultPressure = 101.3;
netradReader.nextRecord();
id2ValueMap = netradReader.outData;
PTEtp.inNetradiation = id2ValueMap;
PTEtp.pAlpha = 1.06;
PTEtp.pGmorn = 0.35;
PTEtp.pGnight = 0.75;
PTEtp.doHourly = true;
PTEtp.pm = pm;
PTEtp.process();
HashMap<Integer, double[]> outEtp = PTEtp.outPTEtp;
double value = outEtp.get(1221)[0];
System.out.println(value);
assertTrue(NumericsUtilities.dEq(value, -0.01375, 0.001));
}
TempUrl = this.getClass().getClassLoader().getResource("PT_in_temp_day.csv");
netradiationUrl = this.getClass().getClassLoader().getResource("PT_in_netrad_day.csv");
pressureUrl = this.getClass().getClassLoader().getResource("PT_in_atmpress_day.csv");
tempReader = getTimeseriesReader(TempUrl, fId, startDate, endDate, timeStepMinutes);
pressReader = getTimeseriesReader(pressureUrl, fId, startDate, endDate, timeStepMinutes);
netradReader = getTimeseriesReader(netradiationUrl, fId, startDate, endDate, timeStepMinutes);
PTEtp = new OmsPresteyTaylorEtpModel();
while( tempReader.doProcess ) {
tempReader.nextRecord();
HashMap<Integer, double[]> id2ValueMap = tempReader.outData;
PTEtp.inTemp = id2ValueMap;
PTEtp.tCurrent = tempReader.tCurrent;
pressReader.nextRecord();
id2ValueMap = pressReader.outData;
PTEtp.inPressure = id2ValueMap;
PTEtp.defaultPressure = 101.3;
netradReader.nextRecord();
id2ValueMap = netradReader.outData;
PTEtp.inNetradiation = id2ValueMap;
PTEtp.pAlpha = 1.1;
PTEtp.doHourly = false;
PTEtp.pm = pm;
PTEtp.process();
HashMap<Integer, double[]> outEtp = PTEtp.outPTEtp;
double value = outEtp.get(1221)[0];
System.out.println(value);
assertTrue(NumericsUtilities.dEq(value, 2.9937, 0.1));
}
}
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 = startDate;
reader.tTimestep = timeStepMinutes;
reader.tEnd = endDate;
reader.fileNovalue = "-9999";
reader.initProcess();
return reader;
}
}