V1_0.java [src/java/m/rhem/rhem07_editparfile] Revision: b1f1fc3c2c466e8a5313a960ce1020ecca39677c Date: Mon Mar 15 18:55:13 MDT 2021
/*
* $Id$
*
* This file is part of the Cloud Services Integration Platform (CSIP),
* a Model-as-a-Service framework, API, and application suite.
*
* 2012-2020, OMSLab, Colorado State University.
*
* OMSLab licenses this file to you under the MIT license.
* See the LICENSE file in the project root for more information.
*/
package m.rhem.rhem07_editparfile;
import csip.Executable;
import csip.ModelDataService;
import csip.ServiceException;
import csip.annotations.Polling;
import csip.annotations.Resource;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.ws.rs.Path;
import m.rhem.model.Parameter;
import m.rhem.model.RhemModel;
import csip.annotations.Description;
import csip.annotations.Name;
import m.rhem.ApplicationResources;
import static m.rhem.ApplicationResources.RHEM4_EXE;
import m.rhem.DBResources;
/**
* RHEM-07: Run model with edited parameter file
*
* @version 1.0
* @author Rumpal Sidhu
*/
@Name("RHEM-07: Run model with edited parameter file")
@Description("Run the RHEM model with parameter file as input.")
@Path("m/rhem/editparfile/1.0")
@Polling(first = 5000, next = 2000)
@Resource(from = DBResources.class)
@Resource(from = ApplicationResources.class)
public class V1_0 extends ModelDataService {
private String parameterFileName;
private String stormFileName;
private String summaryFileName;
private String runFileName;
private String detailedOutputFileName;
private Parameter parameter;
private int aoaId;
private int rhemSiteId;
private String scenarioName;
private String stateId;
private String climatestationId;
@Override
public void preProcess() throws ServiceException {
aoaId = parameter().getInt("AoAID", 0);
rhemSiteId = parameter().getInt("rhem_site_id", 0);
scenarioName = parameter().getString("scenarioname");
stateId = parameter().getString("stateid");
climatestationId = parameter().getString("climatestationid");
String diams = parameter().getString("DIAMS");
String density = parameter().getString("DENSITY");
String len = parameter().getString("LEN");
String chezy = parameter().getString("CHEZY");
String rchezy = parameter().getString("RCHEZY");
String sl = parameter().getString("SL");
String sx = parameter().getString("SX");
String cv = parameter().getString("CV");
String sat = parameter().getString("SAT");
String kss = parameter().getString("KSS");
String komega = parameter().getString("KOMEGA");
String kcm = parameter().getString("KCM");
String ke = parameter().getString("KE");
String adf = parameter().getString("ADF");
String alf = parameter().getString("ALF");
String bare = parameter().getString("BARE");
String g = parameter().getString("G");
String dist = parameter().getString("DIST");
String por = parameter().getString("POR");
String fract = parameter().getString("FRACT");
parameter = new Parameter(diams, density, len, chezy, rchezy,
sl, sx, cv, sat, kss, komega, kcm, ke, adf, alf, bare, g,
dist, por, fract);
}
@Override
public void doProcess() throws Exception {
String fileName = scenarioName;
if (scenarioName.length() > 15) {
fileName = scenarioName.substring(0, 15);
}
parameterFileName = "scenario_input_" + fileName + ".par";
stormFileName = "storm_input_" + fileName + ".pre";
summaryFileName = "scenario_output_summary_" + fileName + ".sum";
detailedOutputFileName = "scenario_output_summary_" + fileName + ".out";
runFileName = fileName + ".run";
RhemModel rhemModel = new RhemModel(scenarioName, workspace().getDir(), parameterFileName,
stormFileName, runFileName, summaryFileName);
rhemModel.generateParamFile(parameter);
rhemModel.generateStormFile(ApplicationResources.cligen_db, Double.parseDouble(parameter.getKe()), stateId, climatestationId);
rhemModel.generateRunFile();
runModel();
//If the run is successful then edit the summary file.
double avgYearlyPrecip = 0;
try (Connection connection = resources().getJDBC(DBResources.CRDB);
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(DBResources.RHEM07Query01(climatestationId))) {
while (rs.next()) {
avgYearlyPrecip = rs.getDouble("avg_yearly_precip_mm");
}
}
rhemModel.appendToSumFile(avgYearlyPrecip);
}
private void runModel() throws Exception {
Executable rh = resources().getExe(RHEM4_EXE);
rh.setArguments("-b", workspace().getFile(runFileName).toPath());
int run = rh.exec();
if (run != 0) {
throw new ServiceException("Problem in running the model.");
}
}
@Override
public void postProcess() {
results().put("AoAID", aoaId, "Area of Analysis Identifier");
results().put("rhem_site_id", rhemSiteId, "RHEM Evaluation Site Identifier");
results().put("CLEN", parameter.getClen());
results().put("UNITS", "metric");
results().put("DIAMS", parameter.getDiams());
results().put("DENSITY", parameter.getDensity());
results().put("LEN", parameter.getLen());
results().put("CHEZY", parameter.getChezy());
results().put("RCHEZY", parameter.getRchezy());
results().put("SL", parameter.getSl());
results().put("SX", parameter.getSx());
results().put("CV", parameter.getCv());
results().put("SAT", parameter.getSat());
results().put("KSS", parameter.getKss());
results().put("KOMEGA", parameter.getKomega());
results().put("KCM", parameter.getKcm());
results().put("KE", parameter.getKe());
results().put("G", parameter.getG());
results().put("DIST", parameter.getDist());
results().put("POR", parameter.getPor());
results().put("ADF", parameter.getAdf());
results().put("ALF", parameter.getAlf());
results().put("BARE", parameter.getBare());
results().put("FRACT", parameter.getFract());
results().put(new File(workspace().getDir(), parameterFileName), "Parameter input file");
results().put(new File(workspace().getDir(), stormFileName), "Storm input file");
results().put(new File(workspace().getDir(), summaryFileName), "Summary file");
results().put(new File(workspace().getDir(), detailedOutputFileName), "Detailed");
}
}