From dc9c3383ca8899fe93412382038a3f1160f2dbea Mon Sep 17 00:00:00 2001
From: KyleKlenk <kyle.c.klenk@gmail.com>
Date: Thu, 7 Jul 2022 15:10:56 -0600
Subject: [PATCH] removed unecessary variables changed job actor to use
 getSettings instead of parseSettings

---
 .../file_access_actor/cppwrap_fileAccess.f90  | 87 ++-----------------
 .../file_access_actor/file_access_actor.cpp   | 11 +--
 build/source/actors/job_actor/job_actor.cpp   | 71 ++++-----------
 build/source/engine/ffile_info.f90            |  1 -
 build/source/netcdf/writeOutput.f90           |  3 +-
 5 files changed, 25 insertions(+), 148 deletions(-)

diff --git a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
index 1fe507c..db40b8b 100644
--- a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
+++ b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
@@ -203,65 +203,6 @@ subroutine FileAccessActor_ReadForcing(handle_forcFileInfo, currentFile, stepsIn
 
 end subroutine FileAccessActor_ReadForcing
 
-! subroutine Create_Output_File(&
-!             handle_ncid,      & ! ncid of the output file
-!             numGRU,           & ! number of GRUs assigned to this job
-!             startGRU,         & ! Starting GRU indx for the job
-!             err) bind(C, name="Create_Output_File")
-!   USE globalData,only:fileout
-!   USE summaActors_FileManager,only:OUTPUT_PATH,OUTPUT_PREFIX ! define output file
-!   USE def_output_module,only:def_output                      ! module to define model output
-!   USE globalData,only:gru_struc
-!   USE var_lookup,only:maxVarFreq                             ! number of available output frequencies
-!   USE globalData,only:outputTimeStep
-!   USE globalData,only:finalizeStats
-!   USE var_lookup,only:iLookFreq                              ! named variables for the frequency structure
-
-  
-!   implicit none
-!   type(c_ptr),intent(in), value        :: handle_ncid       ! ncid of the output file
-!   integer(c_int),intent(in)            :: numGRU            ! numGRUs for the entire job (for file creation)
-!   integer(c_int),intent(in)            :: startGRU          ! startGRU for the entire job (for file creation)
-!   integer(c_int),intent(inout)         :: err               ! Error code
-
-!   ! local variables
-!   type(var_i),pointer                  :: ncid              ! ncid of the output file
-!   character(LEN=256)                   :: startGRUString    ! String Variable to convert startGRU
-!   character(LEN=256)                   :: numGRUString      ! String Varaible to convert numGRU
-!   character(LEN=256)                   :: cmessage
-!   integer(i4b)                         :: iGRU
-
-!   call c_f_pointer(handle_ncid, ncid)
-
-!   ! allocate space for the output file ID array
-!   allocate(ncid%var(maxVarFreq))
-!   ncid%var(:) = integerMissing
-
-!   ! initialize finalizeStats for testing purposes
-!   allocate(outputTimeStep(numGRU))
-!   do iGRU = 1, numGRU
-!     allocate(outputTimeStep(iGRU)%dat(maxVarFreq))
-!     outputTimeStep(iGRU)%dat(:) = 1
-!   end do 
-
-!   ! finalizeStats(:) = .false.
-!   ! finalizeStats(iLookFreq%timestep) = .true.
-!   ! initialize number of hru and gru in global data
-!   nGRUrun = numGRU
-!   nHRUrun = numGRU
-
-!   write(unit=startGRUString,fmt=*)startGRU
-!   write(unit=numGRUString,fmt=*)  numGRU
-!   fileout = trim(OUTPUT_PATH)//trim(OUTPUT_PREFIX)//"GRU"&
-!               //trim(adjustl(startGRUString))//"-"//trim(adjustl(numGRUString))
-
-!   ! def_output call will need to change to allow for numHRUs in future
-!   ! NA_Domain numGRU = numHRU, this is why we pass numGRU twice
-!   call def_output("summaVersion","buildTime","gitBranch","gitHash",numGRU,numGRU,&
-!     gru_struc(1)%hruInfo(1)%nSoil,fileout,ncid,err,cmessage)
-!     print*, "Creating Output File "//trim(fileout)
-! end subroutine Create_Output_File
-
 subroutine Write_HRU_Param(&
         handle_ncid,       &
         indxGRU,           &
@@ -315,7 +256,6 @@ subroutine FileAccessActor_WriteOutput(&
                                 maxGRU,          & ! index of HRU we are currently writing for
                                 err) bind(C, name="FileAccessActor_WriteOutput")
   USE def_output_module,only:def_output                       ! module to define model output
-  USE globalData,only:gru_struc
   USE var_lookup,only:maxVarFreq                               ! # of available output frequencies
   USE writeOutput_module,only:writeBasin,writeTime,writeData
   USE globalData,only:structInfo
@@ -371,27 +311,27 @@ subroutine FileAccessActor_WriteOutput(&
   do iStruct=1,size(structInfo)
     select case(trim(structInfo(iStruct)%structName))
       case('forc')
-        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,&
+        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,&
                       minGRU, maxGRU, numGRU, & 
                       forc_meta,outputStructure(1)%forcStat(1),outputStructure(1)%forcStruct(1),'forc', &
                       forcChild_map,outputStructure(1)%indxStruct(1),err,cmessage)
       case('prog')
-        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,&
+        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,&
                       minGRU, maxGRU, numGRU, &
                       prog_meta,outputStructure(1)%progStat(1),outputStructure(1)%progStruct(1),'prog', &
                       progChild_map,outputStructure(1)%indxStruct(1),err,cmessage)
       case('diag')
-        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,&
+        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,&
                       minGRU, maxGRU, numGRU, &
                       diag_meta,outputStructure(1)%diagStat(1),outputStructure(1)%diagStruct(1),'diag', &
                       diagChild_map,outputStructure(1)%indxStruct(1),err,cmessage)
       case('flux')
-        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,&
+        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,&
                       minGRU, maxGRU, numGRU, &
                       flux_meta,outputStructure(1)%fluxStat(1),outputStructure(1)%fluxStruct(1),'flux', &
                       fluxChild_map,outputStructure(1)%indxStruct(1),err,cmessage)
       case('indx')
-        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,minGRU,nSteps,&
+        call writeData(ncid,outputTimeStep(minGRU)%dat(:),outputTimestepUpdate,maxLayers,nSteps,&
                       minGRU, maxGRU, numGRU, &
                       indx_meta,outputStructure(1)%indxStat(1),outputStructure(1)%indxStruct(1),'indx', &
                       indxChild_map,outputStructure(1)%indxStruct(1),err,cmessage)
@@ -407,9 +347,7 @@ end subroutine
 
 subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid) bind(C,name="FileAccessActor_DeallocateStructures")
   USE netcdf_util_module,only:nc_file_close 
-  USE globalData,only:forcingDataStruct     
   USE globalData,only:structInfo                              ! information on the data structures
-  USE globalData,only:vecTime
   USE globalData,only:outputTimeStep
   USE globalData,only:failedHRUs
   USE summaActors_deallocateOuptutStruct,only:deallocateOutputStruc
@@ -423,8 +361,6 @@ subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid
   character(LEN=256)                   :: cmessage
   character(LEN=256)                   :: message
   integer(i4b)                         :: err
-  integer(i4b)                         :: iFile
-  integer(i4b)                         :: iVar
 
   call c_f_pointer(handle_ncid, ncid)
   call c_f_pointer(handle_forcFileInfo, forcFileInfo)
@@ -438,23 +374,10 @@ subroutine FileAccessActor_DeallocateStructures(handle_forcFileInfo, handle_ncid
     endif   
   end do
   
-  ! Deallocate Forcing Structure
-  ! do iFile = 1, size(forcingDataStruct(:))
-  !   do iVar = 1, size(forcingDataStruct(iFile)%var(:))
-  !     if (allocated(forcingDataStruct(iFile)%var(iVar)%dataFromFile))then
-  !       deallocate(forcingDataStruct(iFile)%var(iVar)%dataFromFile)
-  !     endif
-  !   end do
-  !   deallocate(forcingDataStruct(iFile)%var_ix)
-  ! end do
-  ! deallocate(forcingDataStruct)
-
   deallocate(forcFileInfo)
-  ! deallocate(outputStructure)
   deallocate(outputTimeStep)
   deallocate(ncid)
   deallocate(failedHRUs)
-  ! if(allocated(vecTime)) then; deallocate(vecTime); endif
 
 end subroutine FileAccessActor_DeallocateStructures
 
diff --git a/build/source/actors/file_access_actor/file_access_actor.cpp b/build/source/actors/file_access_actor/file_access_actor.cpp
index 66c8d41..b453461 100644
--- a/build/source/actors/file_access_actor/file_access_actor.cpp
+++ b/build/source/actors/file_access_actor/file_access_actor.cpp
@@ -225,17 +225,10 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) {
 
     initFailedHRUTracker(&self->state.numGRU);
 
-    // The CreateOutput Routine Can Fail So we may have to try it multiple times
-    int maxAttempt = 3;
-    for (int i = 0; i < maxAttempt; i++) {
-        def_output(self->state.handle_ncid, &self->state.startGRU, &self->state.numGRU, &self->state.numGRU, &err);
-        if (err == 0) {
-            break;
-        }
-    }
+    def_output(self->state.handle_ncid, &self->state.startGRU, &self->state.numGRU, &self->state.numGRU, &err);
     if (err != 0) {
         aout(self) << "ERROR: Create_OutputFile\n";
-        std::string function = "Create_Output_File";
+        std::string function = "def_output";
         self->send(self->state.parent, file_access_actor_err_v, function);
         self->quit();
         return;
diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp
index 0378f1e..3cdef19 100644
--- a/build/source/actors/job_actor/job_actor.cpp
+++ b/build/source/actors/job_actor/job_actor.cpp
@@ -26,17 +26,25 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
     self->state.parent = parent;
     self->state.outputStrucSize = outputStrucSize;
 
-    if (parseSettings(self, configPath) == -1) {
-        aout(self) << "ERROR WITH JSON SETTINGS FILE!!!\n";
-        self->quit();
-    } else {
-        aout(self) << "\nSETTINGS FOR JOB_ACTOR\n" << 
-        "File Manager Path = " << self->state.fileManager << "\n" <<
-        "outputCSV = " << self->state.outputCSV << "\n";
-        if (self->state.outputCSV) {
-            aout(self) << "csvPath = " << self->state.csvPath << "\n";
+    self->state.fileManager = getSettings(self->state.configPath, "JobActor", "FileManagerPath", 
+        self->state.fileManager).value_or("");
+    self->state.outputCSV = getSettings(self->state.configPath, "JobActor", "outputCSV",
+        self->state.outputCSV).value_or(false);
+    if (self->state.outputCSV) {
+        self->state.csvPath = getSettings(self->state.configPath, "JobActor", "csvPath",
+        self->state.csvPath).value_or("");
+        if (self->state.csvPath == ""){ // check if we found the value if not set outputCSV to false
+            self->state.outputCSV = false;
         }
     }
+    
+    // Print Settings
+    aout(self) << "\nSETTINGS FOR JOB_ACTOR\n" << 
+    "File Manager Path = " << self->state.fileManager << "\n" <<
+    "outputCSV = " << self->state.outputCSV << "\n";
+    if (self->state.outputCSV) {
+        aout(self) << "csvPath = " << self->state.csvPath << "\n";
+    }
 
     // Initalize global variables
     initJob(self);
@@ -140,8 +148,6 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
             self->send(self, init_hru_v);
         },
 
-
-
         [=](file_access_actor_done, double readDuration, double writeDuration) {
             int err = 0;
             if (debug) {
@@ -194,48 +200,6 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
 }
 
 
-int parseSettings(stateful_actor<job_state>* self, std::string configPath) {
-    json settings;
-    std::string SummaActorsSettings = "/Summa_Actors_Settings.json";
-	std::ifstream settings_file(configPath + SummaActorsSettings);
-	settings_file >> settings;
-	settings_file.close();
-    
-    if (settings.find("JobActor") != settings.end()) {
-        json JobActorConfig = settings["JobActor"];
-        // Find the File Manager Path
-        if (JobActorConfig.find("FileManagerPath") !=  JobActorConfig.end()) {
-            self->state.fileManager = JobActorConfig["FileManagerPath"];
-        } else {
-            aout(self) << "Error Finding FileManagerPath - Exiting as this is needed\n";
-            return -1;
-        }
-
-        // Find if we want to outputCSV
-        if (JobActorConfig.find("outputCSV") !=  JobActorConfig.end()) {
-            self->state.outputCSV = JobActorConfig["outputCSV"];
-        } else {
-            aout(self) << "Error Finding outputCSV in JSON file - Reverting to Default Value\n";
-            self->state.outputCSV = false;
-        }
-
-        // Output Path of CSV
-        if (self->state.outputCSV) {
-            if (JobActorConfig.find("csvPath") !=  JobActorConfig.end()) {
-                self->state.csvPath = JobActorConfig["csvPath"];
-            } else {
-                aout(self) << "Error Finding csvPath in JSON file = Reverting to Default Value \n";
-                self->state.outputCSV = false; // we just choose not to output a csv
-            }
-        }
-
-        return 0;
-    } else {
-        aout(self) << "Error Finding JobActor in JSON file - Exiting as there is no path for the fileManger\n";
-        return -1;
-    }
-}
-
 void initJob(stateful_actor<job_state>* self) {
     std::string success = "Success"; // allows us to build the string
     if (self->state.outputCSV) {
@@ -249,7 +213,6 @@ void initJob(stateful_actor<job_state>* self) {
         file.close();
     }
 
-
     int totalGRUs           = 0;
     int totalHRUs           = 0;
     int numHRUs             = 0;
diff --git a/build/source/engine/ffile_info.f90 b/build/source/engine/ffile_info.f90
index 1dcaccf..32ff329 100755
--- a/build/source/engine/ffile_info.f90
+++ b/build/source/engine/ffile_info.f90
@@ -23,7 +23,6 @@ USE nrtype
 USE netcdf
 USE data_types
 USE globalData,only:integerMissing
-USE globalData,only:ixHRUfile_min,ixHRUfile_max
 implicit none
 private
 public::ffile_info
diff --git a/build/source/netcdf/writeOutput.f90 b/build/source/netcdf/writeOutput.f90
index f37dfa0..5ae1386 100644
--- a/build/source/netcdf/writeOutput.f90
+++ b/build/source/netcdf/writeOutput.f90
@@ -150,7 +150,7 @@ end subroutine writeParm
     ! **************************************************************************************
     ! public subroutine writeData: write model time-dependent data
     ! **************************************************************************************
-subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU,nSteps, &
+subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, &
             minGRU, maxGRU, numGRU, & 
             meta,stat,dat,structName,map,indx,err,message)
   USE data_types,only:var_info                       ! metadata type
@@ -170,7 +170,6 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,indxGRU,
   integer(i4b)  ,intent(inout)     :: outputTimestep(:) ! output time step
   integer(i4b)  ,intent(inout)     :: outputTimestepUpdate(:) ! number of HRUs in the run domain
   integer(i4b)  ,intent(in)        :: maxLayers         ! maximum number of layers
-  integer(i4b)  ,intent(in)        :: indxGRU
   integer(i4b)  ,intent(in)        :: nSteps            ! number of timeSteps
   integer(i4b)  ,intent(in)        :: minGRU            ! minGRU index to write
   integer(i4b)  ,intent(in)        :: maxGRU            ! maxGRU index to write - probably not needed
-- 
GitLab