From a99f36d4a1189c06deccb992ce88b2844490253a Mon Sep 17 00:00:00 2001
From: KyleKlenk <kyle.c.klenk@gmail.com>
Date: Mon, 2 May 2022 14:17:35 -0600
Subject: [PATCH] fixed output timings giving wrong output

fixed program segfaulting on one cpu
---
 build/makefile                        |  8 ++++----
 build/source/actors/FileAccessActor.h | 17 ++++++++++-------
 build/source/actors/HRUActor.h        |  7 +++++++
 build/source/actors/JobActor.h        |  7 ++++++-
 build/source/actors/SummaActor.h      |  4 ++++
 build/source/actors/global.h          |  2 +-
 6 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/build/makefile b/build/makefile
index 1b3442e..ab14e95 100644
--- a/build/makefile
+++ b/build/makefile
@@ -22,10 +22,10 @@ FLAGS_SUMMA = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC
 FLAGS_ACTORS = -O3
 
 # # Debug runs
-# FLAGS_NOAH = -p -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fbacktrace -Wno-unused -Wno-unused-dummy-argument -fPIC
-# FLAGS_COMM = -p -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC
-# FLAGS_SUMMA = -p -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC
-# FLAGS_ACTORS = -g -O0 -Wall
+# FLAGS_NOAH = -pg -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fbacktrace -Wno-unused -Wno-unused-dummy-argument -fPIC
+# FLAGS_COMM = -pg -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC
+# FLAGS_SUMMA = -pg -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC
+# FLAGS_ACTORS = -pg -g -O0 -Wall
 
 
 #========================================================================
diff --git a/build/source/actors/FileAccessActor.h b/build/source/actors/FileAccessActor.h
index c8d51e6..c3d1d59 100644
--- a/build/source/actors/FileAccessActor.h
+++ b/build/source/actors/FileAccessActor.h
@@ -134,8 +134,11 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU
             aout(self) << "Deallocating Structure" << std::endl;
             FileAccessActor_DeallocateStructures(self->state.handle_forcFileInfo, self->state.handle_ncid);
             
-            self->state.readDuration = self->state.readDuration / 1000;
-            self->state.writeDuration = self->state.writeDuration / 1000;
+            self->state.readDuration = self->state.readDuration / 1000; // Convert to milliseconds
+            self->state.readDuration = self->state.readDuration / 1000; // Convert to seconds
+
+            self->state.writeDuration = self->state.writeDuration / 1000; // Convert to milliseconds
+            self->state.writeDuration = self->state.writeDuration / 1000; // Convert to milliseconds
             
             self->send(self->state.parent, file_access_actor_done_v, self->state.readDuration, 
                 self->state.writeDuration);
@@ -197,12 +200,12 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) {
         self->quit();
         return;
     }
+
+    // Initalize the output Structure
+    aout(self) << "Initalizing Output Structure" << std::endl;
+    Init_OutputStruct(self->state.handle_forcFileInfo, &self->state.outputStrucSize, 
+        &self->state.numGRU, &self->state.err);
     
-    
-    // initalize vector for knowing if HRU output has init'd
-    for(int i = 0; i < self->state.numGRU; i++) {
-        self->state.outputFileInitHRU.push_back(false);
-    }
 
     self->send(self->state.parent, done_file_access_actor_init_v);
     // initalize the forcingFile array
diff --git a/build/source/actors/HRUActor.h b/build/source/actors/HRUActor.h
index bd0b999..81b085a 100644
--- a/build/source/actors/HRUActor.h
+++ b/build/source/actors/HRUActor.h
@@ -90,6 +90,13 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
                 self->state.end = std::chrono::high_resolution_clock::now();
                 self->state.duration += calculateTime(self->state.start, self->state.end);
                 // Tell our parent we are done, convert all timings to seconds
+
+                self->state.duration = self->state.duration / 1000; // Convert to milliseconds
+                self->state.initDuration = self->state.initDuration / 1000; // Convert to milliseconds
+                self->state.forcingDuration = self->state.forcingDuration / 1000; // Convert to milliseconds
+                self->state.runPhysicsDuration = self->state.runPhysicsDuration / 1000; // Convert to milliseconds
+                self->state.writeOutputDuration = self->state.writeOutputDuration / 1000; // Convert to milliseconds
+
                 self->send(self->state.parent, 
                     done_hru_v,
                     self->state.indxGRU, 
diff --git a/build/source/actors/JobActor.h b/build/source/actors/JobActor.h
index 63abb30..8dc2b6c 100644
--- a/build/source/actors/JobActor.h
+++ b/build/source/actors/JobActor.h
@@ -127,10 +127,12 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
          */
         [=](done_file_access_actor_init) {
             // Init GRU Actors and the Output Structure
-            self->send(self->state.file_access_actor, initalize_outputStructure_v);
+            // self->send(self->state.file_access_actor, initalize_outputStructure_v);
             self->send(self, init_hru_v);
         },
 
+
+
         [=](file_access_actor_done, double readDuration, double writeDuration) {
             int err = 0;
             if (debug) {
@@ -151,6 +153,9 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
 
             self->state.end = std::chrono::high_resolution_clock::now();
             self->state.duration = calculateTime(self->state.start, self->state.end);
+
+            self->state.duration = self->state.duration / 1000; // Convert to milliseconds
+
             aout(self) << "\nTotal Job Duration:\n";
             aout(self) << "     " << self->state.duration / 1000  << " Seconds\n";
             aout(self) << "     " << (self->state.duration / 1000) / 60  << " Minutes\n";
diff --git a/build/source/actors/SummaActor.h b/build/source/actors/SummaActor.h
index 4bfe0e9..444bdc7 100644
--- a/build/source/actors/SummaActor.h
+++ b/build/source/actors/SummaActor.h
@@ -37,6 +37,10 @@ behavior summa_actor(stateful_actor<summa_manager>* self, int startGRU, int numG
 
 				self->state.end = std::chrono::high_resolution_clock::now();
             	self->state.duration = calculateTime(self->state.start, self->state.end);
+				
+            	self->state.duration = self->state.duration / 1000; // Convert to milliseconds
+
+				
 				aout(self) << "Total Program Duration:\n";
             	aout(self) << "     " << self->state.duration / 1000  << " Seconds\n";
             	aout(self) << "     " << (self->state.duration / 1000) / 60  << " Minutes\n";
diff --git a/build/source/actors/global.h b/build/source/actors/global.h
index 58135bc..b3104cb 100644
--- a/build/source/actors/global.h
+++ b/build/source/actors/global.h
@@ -18,7 +18,7 @@ double calculateTime(std::chrono::time_point<std::chrono::system_clock> start,
 double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, 
     std::chrono::time_point<std::chrono::system_clock> end) {
     
-    return std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
+    return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
 }
 
 
-- 
GitLab