OpenCDSS / cdss-app-statemod-fortran-test

Colorado's Decision Support Systems (CDSS) StateMod water allocation model tests
0 stars 0 forks source link

15.00.01 b44 files have Total_Release 2 times #19

Open smalers opened 2 years ago

smalers commented 2 years ago

This issue is causing testing that involves older versions of StateMod (e.g., 15.00.01) to show differences.

While running the testing framework on full datasets, TSTool prints warnings similar to the following for data read from b44 (reservoir) files that were produced with 15.00.01 executable:

image

I turned on debug level 1 and the following is shown. Notice that Total_Release is shown in position 12 and 19. The output is in Java-style 0-index array posirion reference whereas Fortran uses 1-reference.

Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[0] = "Initial_Storage"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[1] = "River_Priority"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[2] = "River_Storage"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[3] = "River_Other"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[4] = "River_Loss"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[5] = "Carrier_Priority"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[6] = "Carrier_Other"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[7] = "Carrier_Loss"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[8] = "Total_Supply"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[9] = "Storage_Use"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[10] = "Storage_Exchange"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[11] = "Carrier_Use"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[12] = "Total_Release"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[13] = "Evap"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[14] = "Seep_Spill"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[15] = "Sim_EOM"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[16] = "Target_Limit"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[17] = "Fill_Limit"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[18] = "River_Inflow"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[19] = "Total_Release"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[20] = "Total_Supply"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[21] = "River_By_Well"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[22] = "River_Outflow"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[23] = "Divert_From_Carrier"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[24] = "Seep_Loss"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[25] = "ridr"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[26] = "acc"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[27] = "rnr"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[28] = "River_Exchange"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[29] = "Carrier_Storage"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[30] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[31] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[32] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[33] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[34] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[35] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[36] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[37] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[38] = "NA"^M
Debug[1](StateMod_BTS.readHeader): Parameter from file...ip=1 Parameter[39] = "NA"^M

This is defined in the following, which looks OK for current code:

setpar

A difference of the code shows the following:

Difference of current code and old code

One option to fix this would be to update the TSTool code to automatically change the parameters as if the code fix had been in place. For example, the second Total_Release would become River_Release. However, I need confirmation from Ray Bennett and I don't know how many such changes occurred without researching the code. This could impact multiple binary files. I need something like:

StateMod Version Range File Old Parameter Parameter Should Be
13.x - 15.00.02 b44 Total_Release (Fortran position 20, Java position 19) River_Release
13.x - 15.00.02 b44 Total Supply (Fortran position 21, Java position 20) River_Divert

With the above guidance, I could change the TSTool code and make it return the correct parameter for old binary files and then the tests would be "apples to apples". Otherwise, the CompareTimeSeries command will continue to report the warnings and the comparison is incomplete.

smalers commented 2 years ago

I added a command parameter OutputVersion to the ReadStateModB TSTool command and handled Total_Release and Total_Supply being duplicates. However, I am not sure how to handle the other cases. The result is that comparisons of StateMod 15.00.02 and 17.x will always show differences for those time series as unmatched across the datasets. However, at least the duplicate parameter issue can be handled and by using OutputVersion=Latest (default is Original). This is in TSTool 14.0.1.dev3, and will be in 14.0.1.

smalers commented 2 years ago

🇶🇦