From 1663f4d80bad8a804fd7fe863609c7d230da3bed Mon Sep 17 00:00:00 2001 From: "Abele, Daniel" Date: Mon, 9 Mar 2026 22:38:14 +0100 Subject: [PATCH] option to not output final result --- src/c/cores/transient_core.cpp | 7 +++++-- src/c/modules/ModelProcessorx/CreateParameters.cpp | 3 +++ src/c/shared/Enum/EnumDefinitions.h | 1 + src/c/shared/Enum/EnumToStringx.cpp | 1 + src/c/shared/Enum/StringToEnumx.cpp | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/c/cores/transient_core.cpp b/src/c/cores/transient_core.cpp index 65650ac1e..dbcedb89a 100644 --- a/src/c/cores/transient_core.cpp +++ b/src/c/cores/transient_core.cpp @@ -24,6 +24,7 @@ void transient_core(FemModel* femmodel){/*{{{*/ /*parameters: */ IssmDouble finaltime,dt,yts; + bool save_final_results; bool iscontrol,isautodiff; int timestepping; int output_frequency,checkpoint_frequency; @@ -48,6 +49,7 @@ void transient_core(FemModel* femmodel){/*{{{*/ femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum); femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum); femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum); + femmodel->parameters->FindParam(&save_final_results,SaveFinalResultsEnum); /*call modules that are not dependent on time stepping:*/ transient_precore(femmodel); @@ -83,8 +85,9 @@ void transient_core(FemModel* femmodel){/*{{{*/ _printf0_("\e[92miteration " << step << "/" << ceil((finaltime-time)/dt)+step << \ " time [yr]: " <= finaltime - (yts*DBL_EPSILON)) || step==1) save_results=true; + const bool save_results = step==1 //save first step + || step%output_frequency==0 //save at regular intervals + || (save_final_results && time >= finaltime - (yts*DBL_EPSILON)); //save last step (optional) femmodel->parameters->SetParam(save_results,SaveResultsEnum); /*Run transient step!*/ diff --git a/src/c/modules/ModelProcessorx/CreateParameters.cpp b/src/c/modules/ModelProcessorx/CreateParameters.cpp index 134ea5417..3316b1d97 100644 --- a/src/c/modules/ModelProcessorx/CreateParameters.cpp +++ b/src/c/modules/ModelProcessorx/CreateParameters.cpp @@ -326,6 +326,9 @@ void CreateParameters(Parameters* parameters,IoModel* iomodel,char* rootpath,FIL /*By default, save all results*/ parameters->AddObject(new BoolParam(SaveResultsEnum,true)); + + /*Option to not save results after the final time step, e.g. for external coupling*/ + parameters->AddObject(new BoolParam(SaveFinalResultsEnum,true)); /*Should we output results on nodes?*/ iomodel->FindConstant(&outputonnodes,&numoutputs,"md.settings.results_on_nodes"); diff --git a/src/c/shared/Enum/EnumDefinitions.h b/src/c/shared/Enum/EnumDefinitions.h index f941e36b5..fd197df76 100644 --- a/src/c/shared/Enum/EnumDefinitions.h +++ b/src/c/shared/Enum/EnumDefinitions.h @@ -460,6 +460,7 @@ enum definitions{ SamplingRobinEnum, SamplingSeedEnum, SaveResultsEnum, + SaveFinalResultsEnum, SolidearthPartitionIceEnum, SolidearthPartitionHydroEnum, SolidearthPartitionOceanEnum, diff --git a/src/c/shared/Enum/EnumToStringx.cpp b/src/c/shared/Enum/EnumToStringx.cpp index 14e78bb32..6d55d2deb 100644 --- a/src/c/shared/Enum/EnumToStringx.cpp +++ b/src/c/shared/Enum/EnumToStringx.cpp @@ -468,6 +468,7 @@ const char* EnumToStringx(int en){ case SamplingRobinEnum : return "SamplingRobin"; case SamplingSeedEnum : return "SamplingSeed"; case SaveResultsEnum : return "SaveResults"; + case SaveFinalResultsEnum : return "SaveFinalResults"; case SolidearthPartitionIceEnum : return "SolidearthPartitionIce"; case SolidearthPartitionHydroEnum : return "SolidearthPartitionHydro"; case SolidearthPartitionOceanEnum : return "SolidearthPartitionOcean"; diff --git a/src/c/shared/Enum/StringToEnumx.cpp b/src/c/shared/Enum/StringToEnumx.cpp index b75f68d5c..87f27244b 100644 --- a/src/c/shared/Enum/StringToEnumx.cpp +++ b/src/c/shared/Enum/StringToEnumx.cpp @@ -477,6 +477,7 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SamplingRobin")==0) return SamplingRobinEnum; else if (strcmp(name,"SamplingSeed")==0) return SamplingSeedEnum; else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum; + else if (strcmp(name,"SaveFinalResults")==0) return SaveFinalResultsEnum; else if (strcmp(name,"SolidearthPartitionIce")==0) return SolidearthPartitionIceEnum; else if (strcmp(name,"SolidearthPartitionHydro")==0) return SolidearthPartitionHydroEnum; else if (strcmp(name,"SolidearthPartitionOcean")==0) return SolidearthPartitionOceanEnum;