Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/prognostic_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/prognostic_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/prognostic_core.cpp (revision 11827) @@ -15,22 +15,20 @@ /*parameters: */ int solution_type; - bool control_analysis; + bool save_results; /*activate formulation: */ femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum); /*recover parameters: */ - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); _printf_(VerboseSolution()," call computational core\n"); solver_linear(femmodel); - if(solution_type==PrognosticSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum); } - } - Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/steadystate_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/steadystate_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/steadystate_core.cpp (revision 11827) @@ -24,7 +24,7 @@ int step; /*parameters: */ - bool control_analysis,isenthalpy; + bool save_results,isenthalpy; int dim; int solution_type; int maxiter; @@ -33,7 +33,7 @@ /* recover parameters:*/ femmodel->parameters->FindParam(&dim,MeshDimensionEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum); femmodel->parameters->FindParam(&numoutputs,SteadystateNumRequestedOutputsEnum); @@ -80,7 +80,7 @@ step++; } - if(solution_type==SteadystateSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/surfaceslope_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/surfaceslope_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/surfaceslope_core.cpp (revision 11827) @@ -16,12 +16,12 @@ int dim; bool isstokes; bool ishutter; - bool control_analysis; + bool save_results; int solution_type; /*Recover some parameters: */ femmodel->parameters->FindParam(&dim,MeshDimensionEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); _printf_(VerboseSolution(),"%s\n","computing slope..."); @@ -32,7 +32,7 @@ femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum); solver_linear(femmodel); - if(solution_type==SurfaceSlopeSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution(),"saving results:\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeXEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeYEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/thermal_core.cpp (revision 11827) @@ -18,12 +18,12 @@ /*intermediary*/ double melting_offset; - bool control_analysis; + bool save_results; int solution_type; bool dakota_analysis = false; //first recover parameters common to all solutions - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); @@ -35,10 +35,9 @@ /*call thermal_core_step: */ thermal_core_step(femmodel); - if(solution_type==ThermalSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum); } - } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp (revision 11827) @@ -16,13 +16,13 @@ /*parameters: */ bool isstokes; - bool control_analysis; + bool save_results; bool conserve_loads = true; int solution_type; /*retrieve parameters:*/ femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); /*Compute velocities*/ @@ -39,7 +39,7 @@ solver_adjoint_linear(femmodel); /*Save results*/ - if(solution_type==AdjointSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/bedslope_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/bedslope_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/bedslope_core.cpp (revision 11827) @@ -16,12 +16,12 @@ int dim; bool isstokes; bool ishutter; - bool control_analysis; + bool save_results; int solution_type; /*Recover some parameters: */ femmodel->parameters->FindParam(&dim,MeshDimensionEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); _printf_(VerboseSolution(),"%s\n"," computing slope"); @@ -32,7 +32,7 @@ femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum); solver_linear(femmodel); - if(solution_type==BedSlopeSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeXEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeYEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/balancethickness_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/balancethickness_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/balancethickness_core.cpp (revision 11827) @@ -17,20 +17,20 @@ /*parameters: */ int dim; int solution_type; - bool control_analysis; + bool save_results; /*activate formulation: */ femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum); /*recover parameters: */ femmodel->parameters->FindParam(&dim,MeshDimensionEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); _printf_(VerboseSolution(),"call computational core:\n"); solver_linear(femmodel); - if(solution_type==BalancethicknessSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum); } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/issm.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/issm.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/issm.cpp (revision 11827) @@ -113,7 +113,7 @@ MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( ); _printf_(true,"write results to disk:\n"); - OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); + OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results); /*Close output and petsc options file and write lock file if requested*/ pfclose(output_fid,lockfilename); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/transient_core.cpp (revision 11827) @@ -23,8 +23,8 @@ /*parameters: */ double starttime,finaltime,dt,yts; - bool control_analysis,isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy; - bool dakota_analysis=false; + bool isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy; + bool save_results,dakota_analysis; bool time_adapt=false; int solution_type; int output_frequency; @@ -42,7 +42,6 @@ femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum); @@ -86,8 +85,14 @@ step+=1; time+=dt; femmodel->parameters->SetParam(time,TimeEnum); + femmodel->parameters->SetParam(step,StepEnum); _printf_(VerboseSolution(),"iteration %i/%g time [yr]: %-7.3g (time step: %.2g)\n",step,floor((finaltime-time)/dt)+step,time/yts,dt/yts); + if(step%output_frequency==0 || time==finaltime) + save_results=true; + else + save_results=false; + femmodel->parameters->SetParam(save_results,SaveResultsEnum); if(isthermal && dim==3){ _printf_(VerboseSolution()," computing temperatures:\n"); @@ -128,29 +133,17 @@ #endif } - //save should be done by the analysis... see control_core - if(solution_type==TransientSolutionEnum && !control_analysis && (step%output_frequency==0 || time==finaltime)){ - _printf_(VerboseSolution()," saving results\n"); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzMeshEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum,step,time); - if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum,step,time); - if(isdiagnostic)InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum,step,time); - if(isdiagnostic)InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum,step,time); - if(dim==3 && isthermal) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum,step,time); - if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum,step,time); - if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum,step,time); - if(!isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum,step,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum,step,time); - RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs,step,time); + /*unload results*/ + if(save_results){ + _printf_(VerboseSolution()," saving transient results\n"); + InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceEnum); + InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum); + InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum); + InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum); + RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs); - /*unload results*/ _printf_(VerboseSolution()," saving temporary results\n"); - OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); + OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results); } } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp (revision 11827) @@ -15,11 +15,11 @@ void adjointbalancethickness_core(FemModel* femmodel){ /*parameters: */ - bool control_analysis; + bool save_results; int solution_type; /*retrieve parameters:*/ - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); /*compute thickness */ @@ -36,7 +36,7 @@ solver_adjoint_linear(femmodel); /*Save results*/ - if(solution_type==AdjointSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointEnum); } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controlrestart.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controlrestart.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controlrestart.cpp (revision 11827) @@ -28,7 +28,7 @@ //femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,InversionControlParametersEnum,EnumToStringx(control_type),1,0)); /*write to disk: */ - OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); + OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results); } /*Clean up and return*/ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/control_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/control_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/control_core.cpp (revision 11827) @@ -58,6 +58,7 @@ femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum); femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); + femmodel->parameters->SetParam(false,SaveResultsEnum); /*out of solution_type, figure out solution core and adjoint function pointer*/ CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type); @@ -65,7 +66,7 @@ /*Launch once a complete solution to set up all inputs*/ _printf_(VerboseControl(),"%s\n"," preparing initial solution"); - if (isstokes) solutioncore(femmodel); + if(isstokes) solutioncore(femmodel); /*Initialize responses: */ J=(double*)xmalloc(nsteps*sizeof(double)); @@ -107,7 +108,7 @@ } _printf_(VerboseControl(),"%s\n"," preparing final solution"); - femmodel->parameters->SetParam(false,InversionIscontrolEnum); //needed to turn control result output in solutioncore + femmodel->parameters->SetParam(true,SaveResultsEnum); solutioncore(femmodel); /*some results not computed by steadystate_core or diagnostic_core: */ @@ -124,7 +125,4 @@ xfree((void**)&maxiter); xfree((void**)&cm_jump); xfree((void**)&J); - - /*control_core might be used in Qmu, so leave everything similar to where it started: */ - femmodel->parameters->SetParam(true,InversionIscontrolEnum); } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/hydrology_core.cpp (revision 11827) @@ -20,7 +20,7 @@ int nsteps; double starttime,final_time; double dt; - bool control_analysis; + bool save_results; int solution_type; int output_frequency; @@ -28,7 +28,7 @@ femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum); /*first compute slopes: */ @@ -53,19 +53,16 @@ /*call hydrology_core step: */ hydrology_core_step(femmodel,i,time); - if(solution_type==HydrologySolutionEnum && !control_analysis && ((i+1)%output_frequency==0 || (i+1)==nsteps)){ - + if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){ _printf_(VerboseSolution()," saving results \n"); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum,i+1,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum,i+1,time); - InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVyEnum,i+1,time); + //InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum,i+1,time); + //InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum,i+1,time); + //InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVyEnum,i+1,time); /*unload results*/ _printf_(VerboseSolution()," saving temporary results\n"); - OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); - + OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results); } - } } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/diagnostic_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/diagnostic_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/diagnostic_core.cpp (revision 11827) @@ -23,7 +23,7 @@ bool isnewton = false; bool conserve_loads = true; bool modify_loads = true; - bool control_analysis; + bool save_results; int solution_type; int numoutputs = 0; int *requested_outputs = NULL; @@ -35,7 +35,7 @@ femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum); femmodel->parameters->FindParam(&isnewton,DiagnosticIsnewtonEnum); femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); femmodel->parameters->FindParam(&numoutputs,DiagnosticNumRequestedOutputsEnum); if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,DiagnosticRequestedOutputsEnum); @@ -93,7 +93,7 @@ } - if(solution_type==DiagnosticSolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controltao_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controltao_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controltao_core.cpp (revision 11827) @@ -48,6 +48,7 @@ femmodel->parameters->FindParam(&control_list,NULL,InversionControlParametersEnum); femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum); femmodel->parameters->FindParam(&dummy,NULL,NULL,InversionMaxiterPerStepEnum); + femmodel->parameters->SetParam(false,SaveResultsEnum); maxiter=nsteps*(int)dummy[0]; xfree((void**)&dummy); /*Initialize TAO*/ @@ -87,7 +88,7 @@ /*Finalize*/ _printf_(VerboseControl(),"%s\n"," preparing final solution"); - femmodel->parameters->SetParam(false,InversionIscontrolEnum); //needed to turn control result output in solutioncore + femmodel->parameters->SetParam(true,SaveResultsEnum); void (*solutioncore)(FemModel*)=NULL; CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type); solutioncore(femmodel); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/enthalpy_core.cpp (revision 11827) @@ -14,24 +14,21 @@ void enthalpy_core(FemModel* femmodel){ - int i; - /*intermediary*/ - bool control_analysis; + bool save_results; int solution_type; //first recover parameters common to all solutions - femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); + femmodel->parameters->FindParam(&save_results,SaveResultsEnum); femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); /*call enthalpy_core_step: */ enthalpy_core_step(femmodel); - if(solution_type==EnthalpySolutionEnum && !control_analysis){ + if(save_results){ _printf_(VerboseSolution()," saving results\n"); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum); InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum); } - } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h (revision 11827) @@ -384,6 +384,7 @@ P1DGEnum, /*}}}*/ /*Results{{{1*/ + SaveResultsEnum, BoolElementResultEnum, BoolExternalResultEnum, DoubleElementResultEnum, @@ -398,6 +399,7 @@ PentaP1ElementResultEnum, PetscVecExternalResultEnum, StringExternalResultEnum, + StepEnum, TimeEnum, TriaP1ElementResultEnum, WaterColumnOldEnum, Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/io/Matlab/FetchMatlabData.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/io/Matlab/FetchMatlabData.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/io/Matlab/FetchMatlabData.cpp (revision 11827) @@ -602,12 +602,11 @@ /*Check type of field: */ if (mxIsClass(pfield,"double")){ - /*could be DOUBLE, DOUBLEVEC or DOUBLEMAT, depends on dimensions: */ M=mxGetM(pfield); N=mxGetN(pfield); if (M==0 | N==0){ - _error_("%s%i (%s) %s%i%s%i%s","array in parameters structure field ",count,name," is of size (",M,",",N,")"); + _error_("array in parameters structure field %s is of size 0",name); } if (M==1 && N==1){ /*we have a simple scalar: */ @@ -642,6 +641,24 @@ } } + else if (mxIsClass(pfield,"logical")){ + + M=mxGetM(pfield); + N=mxGetN(pfield); + + if (M==0 | N==0){ + _error_("array in parameters structure field %s is of size 0",name); + } + if (M==1 && N==1){ + /*we have a simple bool: */ + param= new BoolParam(enum_type,*mxGetLogicals(pfield)); + parameters->AddObject(param); + + } + else{ + _error_("Matrices of Booleans not supported yet in parameters"); + } + } else if (mxIsClass(pfield,"char")){ /* we have a string parameter:*/ @@ -717,12 +734,11 @@ xfree((void**)&ndims_array); } } - else _error_("%s%i","unknow type in parameters structure field ",i); + else _error_("Parameters structure field %s has a format that is not supported: %s",name,mxGetClassName(pfield)); } /*Assign output pointers:*/ *pparameters=parameters; - } /*}}}*/ #endif Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp (revision 11827) @@ -377,15 +377,16 @@ else if (strcmp(name,"P0")==0) return P0Enum; else if (strcmp(name,"P1")==0) return P1Enum; else if (strcmp(name,"P1DG")==0) return P1DGEnum; + else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum; else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum; else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum; else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum; else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum; - else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum; else stage=4; } if(stage==4){ - if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum; + if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum; + else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum; else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; else if (strcmp(name,"J")==0) return JEnum; else if (strcmp(name,"Patch")==0) return PatchEnum; @@ -394,6 +395,7 @@ else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum; else if (strcmp(name,"PetscVecExternalResult")==0) return PetscVecExternalResultEnum; else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum; + else if (strcmp(name,"Step")==0) return StepEnum; else if (strcmp(name,"Time")==0) return TimeEnum; else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum; else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp (revision 11827) @@ -370,6 +370,7 @@ case P0Enum : return "P0"; case P1Enum : return "P1"; case P1DGEnum : return "P1DG"; + case SaveResultsEnum : return "SaveResults"; case BoolElementResultEnum : return "BoolElementResult"; case BoolExternalResultEnum : return "BoolExternalResult"; case DoubleElementResultEnum : return "DoubleElementResult"; @@ -384,6 +385,7 @@ case PentaP1ElementResultEnum : return "PentaP1ElementResult"; case PetscVecExternalResultEnum : return "PetscVecExternalResult"; case StringExternalResultEnum : return "StringExternalResult"; + case StepEnum : return "Step"; case TimeEnum : return "Time"; case TriaP1ElementResultEnum : return "TriaP1ElementResult"; case WaterColumnOldEnum : return "WaterColumnOld"; Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h (revision 11827) @@ -15,9 +15,9 @@ #ifdef _SERIAL_ #include -void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults); +void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results* results); #else -void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults); +void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results* results); #endif #endif /* _OUTPUTRESULTS_H */ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp (revision 11827) @@ -16,9 +16,9 @@ #include "../../objects/objects.h" #ifdef _SERIAL_ -void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults){ +void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){ #else -void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults){ +void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){ #endif extern int my_rank; @@ -28,7 +28,6 @@ bool io_gather; int solutiontype; char* solutiontypestring = NULL; - Results *results = NULL; bool dakota_analysis = false; #ifdef _SERIAL_ @@ -38,9 +37,6 @@ int nfields=0; #endif - /*recover results dataset: */ - results=*presults; - /*retrieve parameters: */ parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); @@ -114,7 +110,4 @@ } */ #endif - - /*Assign output pointers:*/ - *presults=results; } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 11827) @@ -92,9 +92,13 @@ parameters->AddObject(new IntParam(SolutionTypeEnum,solution_type)); parameters->AddObject(new IntParam(AnalysisTypeEnum,analysis_type)); parameters->AddObject(new IntParam(AnalysisCounterEnum,analysis_counter)); - parameters->AddObject(new DoubleParam(TimeEnum,0.0)); //start at time 0 by default for all solutions + parameters->AddObject(new DoubleParam(TimeEnum,0.0)); //start at time 0 by default for all solutions FIXME: to be deleted + parameters->AddObject(new IntParam(StepEnum,1)); //start at time 0 by default for all solutions FIXME: to be deleted - /*Requested output?*/ + /*By default, save all results*/ + parameters->AddObject(new BoolParam(SaveResultsEnum,true)); + + /*Requested outputs*/ iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,DiagnosticRequestedOutputsEnum); parameters->AddObject(new IntParam(DiagnosticNumRequestedOutputsEnum,numoutputs)); if(numoutputs)parameters->AddObject(new IntVecParam(DiagnosticRequestedOutputsEnum,requestedoutputs,numoutputs)); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h (revision 11827) @@ -8,7 +8,6 @@ #include "../../Container/Container.h" /* local prototypes: */ -void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type,int step=1, double time=0); +void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type); #endif /* _INPUTTORESULTX_H */ - Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp (revision 11827) @@ -8,14 +8,19 @@ #include "../../toolkits/toolkits.h" #include "../../EnumDefinitions/EnumDefinitions.h" -void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type,int step, double time){ +void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type){ /*intermediary:*/ - int i; + int step; + double time; Element *element = NULL; + /*Get time and step*/ + parameters->FindParam(&step,StepEnum); + parameters->FindParam(&time,TimeEnum); + /*Go through elemnets, and ask each element to transfer the enum_type input into the results dataset, with step and time information: */ - for(i=0;iSize();i++){ + for(int i=0;iSize();i++){ element=(Element*)elements->GetObjectByOffset(i); element->InputToResult(enum_type,step,time); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h (revision 11827) @@ -8,7 +8,7 @@ #include "../../Container/Container.h" /* local prototypes: */ -void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step=1, double time=0); +void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs); #endif /* _INPUTTORESULTX_H */ Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp (revision 11827) @@ -8,16 +8,21 @@ #include "../../toolkits/toolkits.h" #include "../../EnumDefinitions/EnumDefinitions.h" -void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step, double time){ +void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs){ - int i,j; - int output_enum; - double output_value; - Element* element=NULL; + int output_enum; + int step; + double time; + double output_value; + Element *element = NULL; - /*retrieve parameters: */ + /*Get time and step*/ + parameters->FindParam(&step,StepEnum); + parameters->FindParam(&time,TimeEnum); + + /*retrieve Inputs*/ if(numoutputs){ - for(i=0;iSize();j++){ + for(int j=0;jSize();j++){ element=(Element*)elements->GetObjectByOffset(j); element->RequestedOutput(output_enum,step,time); } Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/InputToResult/InputToResult.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/InputToResult/InputToResult.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/InputToResult/InputToResult.cpp (revision 11827) @@ -41,19 +41,9 @@ nodes-> Configure(elements,loads, nodes,vertices, materials,parameters); loads-> Configure(elements, loads, nodes,vertices, materials,parameters); - if(nrhs==9){ - FetchMatlabData(&step,STEP); - FetchMatlabData(&time,TIME); + /*Call core code: */ + InputToResultx( elements, nodes, vertices, loads, materials,parameters,enum_type); - /*!Call core code: */ - InputToResultx( elements, nodes, vertices, loads, materials,parameters,enum_type, step,time); - } - else{ - - /*!Call core code: */ - InputToResultx( elements, nodes, vertices, loads, materials,parameters,enum_type); - } - /*write output : */ WriteMatlabData(ELEMENTSOUT,elements); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/OutputResults/OutputResults.cpp =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/OutputResults/OutputResults.cpp (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/mex/OutputResults/OutputResults.cpp (revision 11827) @@ -42,7 +42,7 @@ loads-> Configure(elements, loads, nodes,vertices, materials,parameters); /*Call "x" code layer: */ - OutputResultsx(&dataref, elements,nodes,vertices,loads,materials,parameters,&results); + OutputResultsx(&dataref, elements,nodes,vertices,loads,materials,parameters,results); /*write output datasets: */ plhs[0]=dataref; Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/enthalpy_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/enthalpy_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/enthalpy_core.m (revision 11827) @@ -5,13 +5,13 @@ % femmodel=enthalpy_core(femmodel) %recover parameters common to all solutions - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; issmprintf(VerboseSolution,'\n%s',[' computing enthalpy']); femmodel=enthalpy_core_step(femmodel); - if (solution_type==EnthalpySolutionEnum & ~control_analysis), + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,EnthalpyEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,TemperatureEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/steadystate_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/steadystate_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/steadystate_core.m (revision 11827) @@ -7,7 +7,7 @@ %recover parameters common to all solutions dim=femmodel.parameters.MeshDimension; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; isenthalpy=femmodel.parameters.ThermalIsenthalpy; @@ -42,7 +42,7 @@ step=step+1; end - if (solution_type==SteadystateSolutionEnum & ~control_analysis), + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointdiagnostic_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointdiagnostic_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointdiagnostic_core.m (revision 11827) @@ -7,7 +7,7 @@ %recover parameters common to all solutions isstokes=femmodel.parameters.FlowequationIsstokes; dim=femmodel.parameters.MeshDimension; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; conserve_loads=true; @@ -25,7 +25,7 @@ femmodel=solver_adjoint_linear(femmodel); %save results - if(solution_type==AdjointSolutionEnum & ~control_analysis) + if(save_results), issmprintf(VerboseSolution,' saving results'); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,AdjointxEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,AdjointyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/bedslope_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/bedslope_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/bedslope_core.m (revision 11827) @@ -7,7 +7,7 @@ %Recover some parameters: dim=femmodel.parameters.MeshDimension; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; issmprintf(VerboseSolution,' computing bed slope'); @@ -18,7 +18,7 @@ femmodel=SetCurrentConfiguration(femmodel,BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum); femmodel=solver_linear(femmodel); - if (solution_type==BedSlopeSolutionEnum & ~control_analysis), + if (save_results), issmprintf(VerboseSolution,' saving results'); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,BedSlopeXEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,BedSlopeYEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointbalancethickness_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointbalancethickness_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/adjointbalancethickness_core.m (revision 11827) @@ -5,7 +5,7 @@ % femmodel=adjointbalancethickness_core(femmodel) %recover parameters common to all solutions - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; %set analysis type to compute velocity: @@ -23,7 +23,7 @@ %Save results femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,AdjointEnum); - if(solution_type==AdjointSolutionEnum & ~control_analysis) + if(save_results), issmprintf(VerboseSolution,' saving results'); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,AdjointEnum); end Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/control_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/control_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/control_core.m (revision 11827) @@ -18,6 +18,7 @@ gradient_only=femmodel.parameters.InversionGradientOnly; dim=femmodel.parameters.MeshDimension; isstokes=femmodel.parameters.FlowequationIsstokes; + femmodel.parameters.SaveResults=false; %Initialise options with maxiter options.MaxIter=femmodel.parameters.InversionMaxiterPerStep; @@ -74,7 +75,7 @@ %generate output issmprintf(VerboseControl,' preparing final velocity solution'); - femmodel.parameters.InversionIscontrol=0; + femmodel.parameters.SaveResults=true; eval(['femmodel=' solutioncore '(femmodel);']); %Some results not computed by diagnostic or steadystate Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/diagnostic_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/diagnostic_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/diagnostic_core.m (revision 11827) @@ -16,7 +16,7 @@ isstokes=femmodel.parameters.FlowequationIsstokes; isnewton=femmodel.parameters.DiagnosticIsnewton; dakota_analysis=femmodel.parameters.QmuIsdakota; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; %for qmu analysis, be sure the velocity input we are starting from is the one in the parameters: @@ -74,7 +74,7 @@ femmodel=solver_linear(femmodel); end - if (solution_type==DiagnosticSolutionEnum & ~control_analysis) + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VyEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/prognostic_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/prognostic_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/prognostic_core.m (revision 11827) @@ -5,7 +5,7 @@ % femmodel=prognostic_core(femmodel) %recover parameters common to all solutions - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; %Activate formulation @@ -14,7 +14,7 @@ issmprintf(VerboseSolution,'\n%s',[' call computational core']); femmodel=solver_linear(femmodel); - if (solution_type==PrognosticSolutionEnum & ~control_analysis) + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ThicknessEnum); end Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/surfaceslope_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/surfaceslope_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/surfaceslope_core.m (revision 11827) @@ -7,7 +7,7 @@ %Recover some parameters: dim=femmodel.parameters.MeshDimension; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; %Call on core computations: @@ -17,7 +17,7 @@ femmodel=SetCurrentConfiguration(femmodel,SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum); femmodel=solver_linear(femmodel); - if (solution_type==SurfaceSlopeSolutionEnum), + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,SurfaceSlopeXEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,SurfaceSlopeYEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/thermal_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/thermal_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/thermal_core.m (revision 11827) @@ -6,13 +6,13 @@ %recover parameters common to all solutions - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; issmprintf(VerboseSolution,'\n%s',[' computing temperature']); femmodel=thermal_core_step(femmodel); - if (solution_type==ThermalSolutionEnum & ~control_analysis), + if (save_results), issmprintf(VerboseSolution,'\n%s',[' saving results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,TemperatureEnum); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,BasalforcingsMeltingRateEnum); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/balancethickness_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/balancethickness_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/balancethickness_core.m (revision 11827) @@ -6,7 +6,7 @@ %recover parameters common to all solutions dim=femmodel.parameters.MeshDimension; - control_analysis=femmodel.parameters.InversionIscontrol; + save_results=femmodel.parameters.SaveResults; solution_type=femmodel.parameters.SolutionType; %Activate formulation @@ -15,7 +15,7 @@ issmprintf(VerboseSolution,' call computational core'); femmodel=solver_linear(femmodel); - if (solution_type==BalancethicknessSolutionEnum & ~control_analysis), + if (save_results), issmprintf(VerboseSolution,' saving results'); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ThicknessEnum); end Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solutions/transient_core.m (revision 11827) @@ -10,7 +10,6 @@ finaltime=femmodel.parameters.TimesteppingFinalTime; dt=femmodel.parameters.TimesteppingTimeStep; yts=femmodel.parameters.ConstantsYts; - control_analysis=femmodel.parameters.InversionIscontrol; solution_type=femmodel.parameters.SolutionType; output_frequency=femmodel.parameters.SettingsOutputFrequency; time_adapt=femmodel.parameters.TimesteppingTimeAdapt; @@ -53,8 +52,15 @@ step=step+1; time=time+dt; femmodel.parameters.Time=time; + femmodel.parameters.Step=step; issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor((finaltime-starttime)/dt)); + if(mod(step,output_frequency)==0 | time==ndt), + save_results=true; + else + save_results=false; + end + femmodel.parameters.SaveResults=save_results; if (isthermal & dim==3) issmprintf(VerboseSolution,'\n%s',[' computing temperature']); @@ -84,20 +90,10 @@ GroundinglineMigration(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); end - if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==finaltime)), - issmprintf(VerboseSolution,'\n%s',[' saving results']); - femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum,step,time); - femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VyEnum,step,time); - if (dim==3), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VzEnum,step,time); end - if (isdiagnostic), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VelEnum,step,time); end - if (isdiagnostic), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,PressureEnum,step,time); end - femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ThicknessEnum,step,time); + if (save_results), + issmprintf(VerboseSolution,'\n%s',[' saving transient results']); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,SurfaceEnum,step,time); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,BedEnum,step,time); - if (dim==3 & isthermal), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,TemperatureEnum,step,time);end - if (dim==3 & isenthalpy), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,WaterfractionEnum,step,time);end - if (dim==3 & isenthalpy), femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,EnthalpyEnum,step,time);end - femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,BasalforcingsMeltingRateEnum,step,time); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,SurfaceforcingsMassBalanceEnum,step,time); femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,MaskElementonfloatingiceEnum,step,time); end Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/model/plot/plotmodel.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/model/plot/plotmodel.m (revision 11826) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/model/plot/plotmodel.m (revision 11827) @@ -47,6 +47,7 @@ try, for i=1:numberofplots, plot_manager(getfieldvalue(options.list{i},'model',md),options.list{i},subplotwidth,nlines,ncols,i); + cbfreeze; end catch me, %figure(figurenumber),close; Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/StepEnum.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/StepEnum.m (revision 0) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/StepEnum.m (revision 11827) @@ -0,0 +1,11 @@ +function macro=StepEnum() +%STEPENUM - Enum of Step +% +% WARNING: DO NOT MODIFY THIS FILE +% this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh +% Please read src/c/EnumDefinitions/README for more information +% +% Usage: +% macro=StepEnum() + +macro=StringToEnum('Step'); Index: /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/SaveResultsEnum.m =================================================================== --- /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/SaveResultsEnum.m (revision 0) +++ /proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/enum/SaveResultsEnum.m (revision 11827) @@ -0,0 +1,11 @@ +function macro=SaveResultsEnum() +%SAVERESULTSENUM - Enum of SaveResults +% +% WARNING: DO NOT MODIFY THIS FILE +% this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh +% Please read src/c/EnumDefinitions/README for more information +% +% Usage: +% macro=SaveResultsEnum() + +macro=StringToEnum('SaveResults');