Changeset 26826


Ignore:
Timestamp:
01/27/22 13:30:21 (3 years ago)
Author:
vverjans
Message:

CHG: added requested_outputs to groundingline class

Location:
issm/trunk-jpl/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r26596 r26826  
    273273        ./classes/RiftStruct.cpp \
    274274        ./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp \
     275        ./modules/ModelProcessorx/Transient/UpdateParametersTransient.cpp \
    275276        ./cores/transient_core.cpp \
    276277        ./cores/steadystate_core.cpp \
  • issm/trunk-jpl/src/c/cores/groundingline_core.cpp

    r25680 r26826  
    1616
    1717        /* intermediaries */
     18        int numoutputs;
    1819        bool save_results;
     20        char** requested_outputs = NULL;
    1921
    2022        /* recover parameters */
    2123        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
     24        femmodel->parameters->FindParam(&numoutputs,GroundinglineNumRequestedOutputsEnum);
     25        if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,GroundinglineRequestedOutputsEnum);
    2226
    2327        /*Move grounding line*/
     
    3337        extrudefrombase_core(femmodel);
    3438
    35         if(save_results){
    36                 int outputs[3] = {SurfaceEnum,BaseEnum,MaskOceanLevelsetEnum};
    37                 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
    38         }
     39        /*Save results*/
     40        if(save_results) femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
     41
     42        /*Free ressources:*/
     43   if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
    3944
    4045        /*Stop profiler*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp

    r26388 r26826  
    8181        UpdateElementsAndMaterialsDakota(elements,inputs,materials,iomodel);
    8282        #endif
    83         if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,inputs,iomodel);
    84 
     83        if(solution_enum==TransientSolutionEnum){
     84                UpdateParametersTransient(parameters,iomodel);
     85                UpdateElementsTransient(elements,parameters,inputs,iomodel);
     86        }
    8587        /*Output definitions dataset: */
    8688        if(VerboseMProcessor()) _printf0_("   creating output definitions" << "\n");
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r25379 r26826  
    2424void UpdateElementsAndMaterialsDakota(Elements* elements,Inputs* inputs,Materials* materials, IoModel* iomodel);
    2525void UpdateElementsTransient(Elements* elements,Parameters* parameters,Inputs* inputs,IoModel* iomodel);
     26void UpdateParametersTransient(Parameters* parameters,IoModel* iomodel);
    2627void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,bool isamr=false,int approximation=NoneApproximationEnum,int* approximations=NULL);
    2728
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r26825 r26826  
    190190syn keyword cConstant GroundinglineMeltInterpolationEnum
    191191syn keyword cConstant GroundinglineMigrationEnum
     192syn keyword cConstant GroundinglineNumRequestedOutputsEnum
     193syn keyword cConstant GroundinglineRequestedOutputsEnum
    192194syn keyword cConstant HydrologyAveragingEnum
    193195syn keyword cConstant HydrologyCavitySpacingEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r26825 r26826  
    184184        GroundinglineMeltInterpolationEnum,
    185185        GroundinglineMigrationEnum,
     186        GroundinglineNumRequestedOutputsEnum,
     187        GroundinglineRequestedOutputsEnum,
    186188        HydrologyAveragingEnum,
    187189        HydrologyCavitySpacingEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r26825 r26826  
    192192                case GroundinglineMeltInterpolationEnum : return "GroundinglineMeltInterpolation";
    193193                case GroundinglineMigrationEnum : return "GroundinglineMigration";
     194                case GroundinglineNumRequestedOutputsEnum : return "GroundinglineNumRequestedOutputs";
     195                case GroundinglineRequestedOutputsEnum : return "GroundinglineRequestedOutputs";
    194196                case HydrologyAveragingEnum : return "HydrologyAveraging";
    195197                case HydrologyCavitySpacingEnum : return "HydrologyCavitySpacing";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r26825 r26826  
    183183syn keyword juliaConstC GroundinglineMeltInterpolationEnum
    184184syn keyword juliaConstC GroundinglineMigrationEnum
     185syn keyword juliaConstC GroundinglineNumRequestedOutputsEnum
     186syn keyword juliaConstC GroundinglineRequestedOutputsEnum
    185187syn keyword juliaConstC HydrologyAveragingEnum
    186188syn keyword juliaConstC HydrologyCavitySpacingEnum
  • issm/trunk-jpl/src/m/classes/groundingline.m

    r24861 r26826  
    99                friction_interpolation = '';
    1010                melt_interpolation     = '';
     11                requested_outputs      = {};
    1112        end
    1213        methods
     
    2526                        self.friction_interpolation= 'SubelementFriction1';
    2627                        self.melt_interpolation    = 'NoMeltOnPartiallyFloating';
     28                        %default output
     29         self.requested_outputs     = {'default'};
    2730
    2831                end % }}}
     
    3235                        md = checkfield(md,'fieldname','groundingline.friction_interpolation','values',{'NoFrictionOnPartiallyFloating' 'SubelementFriction1' 'SubelementFriction2'});
    3336                        md = checkfield(md,'fieldname','groundingline.melt_interpolation','values',{'NoMeltOnPartiallyFloating' 'SubelementMelt1' 'SubelementMelt2' 'FullMeltOnPartiallyFloating'});
     37                        md = checkfield(md,'fieldname','groundingline.requested_outputs','stringrow',1);
    3438
    3539                        if ~strcmp(self.migration,'None') & strcmp(solution,'TransientSolution') & md.transient.isgroundingline==1,
     
    4852
    4953                end % }}}
     54                function list = defaultoutputs(self,md) % {{{
     55     
     56                        list = {'Surface','Base','MaskOceanLevelset'};
     57         
     58      end % }}}
    5059                function disp(self) % {{{
    5160                        disp(sprintf('   grounding line migration parameters:'));
     
    5362                        fielddisplay(self,'friction_interpolation','type of friction interpolation for partially floating elements: ''NoFrictionOnPartiallyFloating'',''SubelementFriction1'', or ''SubelementFriction2''');
    5463                        fielddisplay(self,'melt_interpolation','type of melt interpolation for partially floating elements: ''NoMeltOnPartiallyFloating'',''SubelementMelt1'',''SubelementMelt2'', or ''FullMeltOnPartiallyFloating''');
     64                        fielddisplay(self,'requested_outputs','additional outputs requested');
    5565
    5666                end % }}}
     
    5969                        WriteData(fid,prefix,'data',self.friction_interpolation,'name','md.groundingline.friction_interpolation','format','String');
    6070                        WriteData(fid,prefix,'data',self.melt_interpolation,'name','md.groundingline.melt_interpolation','format','String');
     71                       
     72                        %process requested outputs
     73         outputs = self.requested_outputs;
     74         pos  = find(ismember(outputs,'default'));
     75         if ~isempty(pos),
     76            outputs(pos) = [];                         %remove 'default' from outputs
     77            outputs      = [outputs defaultoutputs(self,md)]; %add defaults
     78         end
     79                        WriteData(fid,prefix,'data',outputs,'name','md.groundingline.requested_outputs','format','StringArray')
    6180                end % }}}
    6281                function savemodeljs(self,fid,modelname) % {{{
    6382               
    6483                        writejsstring(fid,[modelname '.groundingline.migration'],self.migration);
    65                         writejsstring(fid,[modelname '.groundingline.friction_interpolation'],self.migration);
    66                         writejsstring(fid,[modelname '.groundingline.melt_interpolation'],self.migration);
     84                        writejsstring(fid,[modelname '.groundingline.friction_interpolation'],self.friction_interpolation);
     85                        writejsstring(fid,[modelname '.groundingline.melt_interpolation'],self.melt_interpolation);
     86                        writejscellstring(fid,[modelname '.groundingline.requested_outputs'],self.requested_outputs);
    6787
    6888                end % }}}
  • issm/trunk-jpl/src/m/classes/groundingline.py

    r26358 r26826  
    1818        self.friction_interpolation = ''
    1919        self.melt_interpolation = ''
     20        self.requested_outptuts = []
    2021
    2122        # Set defaults
     
    2930        s += '{}\n'.format(fielddisplay(self, 'migration', 'type of friction interpolation on partially floating elements: ''SubelementFriction1'', ''SubelementFriction2'', ''NoFrictionOnPartiallyFloating'''))
    3031        s += '{}\n'.format(fielddisplay(self, 'migration', 'type of melt interpolation on partially floating elements: \'SubelementMelt1\', \'SubelementMelt2\', \'NoMeltOnPartiallyFloating\', \'FullMeltOnPartiallyFloating\''))
     32        s += '{}\n'.format(fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3133        return s
    3234    # }}}
     35
     36    def defaultoutputs(self, md):  # {{{
     37        return ['Surface', 'Base','MaskOceanLevelset']
     38
     39    #}}}
    3340
    3441    def setdefaultparameters(self):  # {{{
     
    3744        self.friction_interpolation = 'SubelementFriction1'
    3845        self.melt_interpolation = 'NoMeltOnPartiallyFloating'
     46        # Default output
     47        self.requested_outputs = ['default']
    3948
    4049        return self
     
    4554        md = checkfield(md, 'fieldname', 'groundingline.friction_interpolation', 'values', ['SubelementFriction1', 'SubelementFriction2', 'NoFrictionOnPartiallyFloating'])
    4655        md = checkfield(md, 'fieldname', 'groundingline.melt_interpolation', 'values', ['SubelementMelt1', 'SubelementMelt2', 'NoMeltOnPartiallyFloating', 'FullMeltOnPartiallyFloating'])
     56        md = checkfield(md, 'fieldname', 'groundingline.requested_outputs', 'stringrow', 1)
    4757
    4858        if(not m.strcmp(self.migration, 'None') and md.transient.isgroundingline and solution == 'TransientSolution'):
     
    6272        WriteData(fid, prefix, 'data', self.friction_interpolation, 'name', 'md.groundingline.friction_interpolation', 'format', 'String')
    6373        WriteData(fid, prefix, 'data', self.melt_interpolation, 'name', 'md.groundingline.melt_interpolation', 'format', 'String')
     74       
     75        # Process requested outputs
     76        outputs = self.requested_outputs
     77        indices = [i for i, x in enumerate(outputs) if x == 'default']
     78        if len(indices) > 0:
     79            outputscopy = outputs[0:max(0, indices[0] - 1)] + self.defaultoutputs(md) + outputs[indices[0] + 1:]
     80            outputs = outputscopy
     81        WriteData(fid, prefix, 'data', outputs, 'name', 'md.groundingline.requested_outputs', 'format', 'StringArray')
    6482    # }}}
Note: See TracChangeset for help on using the changeset viewer.