Skip to content

Commit

Permalink
Merge pull request #188 from CentralValleyModeling/feature/interval-n…
Browse files Browse the repository at this point in the history
…ame-check-monthly

add helper utility function for checking if the interval is monthly
  • Loading branch information
jmdegeorge authored Jan 2, 2025
2 parents b149462 + 0333b83 commit 70f8821
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 13 deletions.
4 changes: 4 additions & 0 deletions wrims-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ dependencies {
implementation(':XAOptimizer')
implementation(':calsurrogate')

testImplementation(libs.bundles.junit5)
}

// This moves .tokens files into the same generated-src files with the .java files
Expand Down Expand Up @@ -88,3 +89,6 @@ tasks.withType(AntlrTask) {
}
}

test {
useJUnitPlatform()
}
33 changes: 20 additions & 13 deletions wrims-core/src/main/java/wrimsv2/components/ControllerBatch.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import java.util.LinkedHashSet;
import java.util.Map;

import mil.army.usace.hec.metadata.Interval;
import mil.army.usace.hec.metadata.IntervalFactory;
import org.antlr.runtime.RecognitionException;

import wrimsv2.commondata.solverdata.SolverData;
Expand Down Expand Up @@ -407,7 +409,7 @@ public void runModelXA(StudyDataSet sds){
}

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -424,7 +426,7 @@ public void runModelXA(StudyDataSet sds){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -495,7 +497,7 @@ public void runModelXA(StudyDataSet sds){

public void writeOutputDssEveryTenYears(){
if (ControlData.currMonth==12 && ControlData.currYear%10==0){
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
DssOperation.writeDVAliasToDSS();
}else if(ControlData.timeStep.equals("1DAY") && ControlData.currDay==31){
DssOperation.writeDVAliasToDSS();
Expand Down Expand Up @@ -803,7 +805,7 @@ public void runModelILP(StudyDataSet sds){
if (ControlData.solverType == Param.SOLVER_CBC1.intValue()||ControlData.solverType == Param.SOLVER_CBC.intValue()) { CbcSolver.resetModel();}

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -817,7 +819,7 @@ public void runModelILP(StudyDataSet sds){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -1027,7 +1029,7 @@ public void runModelGurobi(StudyDataSet sds){
}

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -1044,7 +1046,7 @@ public void runModelGurobi(StudyDataSet sds){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -1284,7 +1286,7 @@ public void runModelOrTools(StudyDataSet sds, String mpSolverType){
if (Error.error_evaluation.size()>=1) noError=false;

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -1301,7 +1303,7 @@ public void runModelOrTools(StudyDataSet sds, String mpSolverType){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -1455,7 +1457,7 @@ public void runModelClp(StudyDataSet sds){
}

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -1472,7 +1474,7 @@ public void runModelClp(StudyDataSet sds){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -1691,7 +1693,7 @@ public void runModelCbc(StudyDataSet sds){
CbcSolver.resetModel();

ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand All @@ -1708,7 +1710,7 @@ public void runModelCbc(StudyDataSet sds){
System.out.println("Cycle "+cycleI+" in "+ControlData.currYear+"/"+ControlData.currMonth+"/"+ControlData.currDay+" Skipped. ("+model+")");
new AssignPastCycleVariable();
ControlData.currTimeStep.set(ControlData.currCycleIndex, ControlData.currTimeStep.get(ControlData.currCycleIndex)+1);
if (ControlData.timeStep.equals("1MON")){
if (isMonthlyInterval(ControlData.timeStep)){
VariableTimeStep.currTimeAddOneMonth();
}else{
VariableTimeStep.currTimeAddOneDay();
Expand Down Expand Up @@ -1791,4 +1793,9 @@ public void procLaunch(String[] args){
String launchFilePath = args[0].substring(args[0].indexOf("=") + 1, args[0].length());
new LaunchConfiguration(launchFilePath);
}

static boolean isMonthlyInterval(String intervalName) {
return IntervalFactory.findAllDss(IntervalFactory.equalsName(intervalName)).stream()
.anyMatch(Interval::isMonthly);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Water Resource Integrated Modeling System (WRIMS) Copyright (c) 2024.
*
* WRIMS 2 is copyrighted by the State of California Department of Water Resources.
* It is licensed under the Eclipse Public License, Version 1.0.
* See Eclipse Public License for more details.
*/

package wrimsv2.components;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

final class ControllerBatchTest {

@CsvSource({"1Month", "1MON", "1month", "1mon", "1mOnTh", "1MoN"})
@ParameterizedTest
void testIsMonthlyInterval(String intervalName) {
assertTrue(ControllerBatch.isMonthlyInterval(intervalName), "Interval: " + intervalName + " should be monthly");
}

@CsvSource({"1DAY", "1Day", "1DaY"})
@ParameterizedTest
void testIsNotMonthlyInterval(String intervalName) {
assertFalse(ControllerBatch.isMonthlyInterval(intervalName), "Interval: " + intervalName + " should not be monthly");
}
}

0 comments on commit 70f8821

Please sign in to comment.