Changeset 16478


Ignore:
Timestamp:
10/21/13 13:47:42 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: removing all InputToResult

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/control_core.cpp

    r16307 r16478  
    9898        /*some results not computed by steadystate_core or stressbalance_core: */
    9999        if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
    100                 for(i=0;i<num_controls;i++) InputToResultx(femmodel,control_type[i]);
     100                femmodel->OutputControlsx(&femmodel->results);
    101101
    102102                #ifdef _HAVE_ADOLC_
  • issm/trunk-jpl/src/c/analyses/damage_core.cpp

    r16214 r16478  
    3434        if(save_results){
    3535                if(VerboseSolution()) _printf0_("   saving results\n");
    36                 InputToResultx(femmodel,DamageDEnum);
     36                const char* outputs [] = {"DamageD"};
     37                femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
    3738        }
    3839}
  • issm/trunk-jpl/src/c/analyses/gia_core.cpp

    r16158 r16478  
    5050        if(save_results){
    5151                if(VerboseSolution()) _printf0_("   saving results\n");
    52                 InputToResultx(femmodel,GiaWEnum);
    53                 InputToResultx(femmodel,GiadWdtEnum);
     52                const char* outputs [] = {"GiaW","GiadWdt"};
     53                femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
    5454        }
    5555
  • issm/trunk-jpl/src/c/analyses/hydrology_core.cpp

    r16470 r16478  
    8888                        if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
    8989                                if(VerboseSolution()) _printf0_("   saving results \n");
    90                                 InputToResultx(femmodel,SedimentHeadEnum);
    91                                 InputToResultx(femmodel,SedimentHeadResidualEnum);
    9290                                if(isefficientlayer){
    9391                                        const char* outputs [] = {"SedimentHead","SedimentHeadResidual","EplHead","HydrologydcMaskEplactive"};
  • issm/trunk-jpl/src/c/analyses/transient_core.cpp

    r16470 r16478  
    162162                if(save_results){
    163163                        if(VerboseSolution()) _printf0_("   saving transient results\n");
    164                         InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
    165                         femmodel->RequestedOutputsx(requested_outputs,numoutputs);
     164                        femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
    166165                        if(isdelta18o){
    167                                 InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
    168                                 InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
     166                                const char* outputs [] = {"SurfaceforcingsMonthlytemperatures","SurfaceforcingsPrecipitation"};
     167                                femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
    169168                        }
    170169                        if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
    171                                 InputToResultx(femmodel,MaskGroundediceLevelsetEnum);
     170                                const char* outputs [] = {"MaskGroundediceLevelset"};
     171                                femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
    172172                        }
    173173                        if(VerboseSolution()) _printf0_("   saving temporary results\n");
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16470 r16478  
    121121                virtual void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
    122122                virtual void   ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
     123                virtual void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum)=0;
    123124                virtual void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
    124125                virtual void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16474 r16478  
    53305330        grad_input=new PentaInput(GradientEnum,grad_list,P1Enum);
    53315331        ((ControlInput*)input)->SetGradient(grad_input);
     5332
     5333}/*}}}*/
     5334/*FUNCTION Penta::ControlInputSetGradient{{{*/
     5335void Penta::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
     5336
     5337        Input* input=NULL;
     5338
     5339        if(control_enum==MaterialsRheologyBbarEnum){
     5340                input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum);
     5341        }
     5342        else if(control_enum==DamageDbarEnum){
     5343                input=(Input*)material->inputs->GetInput(DamageDEnum);
     5344        }
     5345        else{
     5346                input=inputs->GetInput(control_enum);
     5347        }
     5348        if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
     5349        if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
     5350
     5351        int          sidlist[NUMVERTICES];
     5352        IssmPDouble   values[NUMVERTICES];
     5353        IssmPDouble gradients[NUMVERTICES];
     5354        IssmDouble  value,gradient;
     5355
     5356        GetVertexSidList(&sidlist[0]);
     5357
     5358        GaussPenta* gauss=new GaussPenta();
     5359        for (int iv=0;iv<NUMVERTICES;iv++){
     5360                gauss->GaussVertex(iv);
     5361
     5362                ((ControlInput*)input)->GetInputValue(&value,gauss);
     5363                ((ControlInput*)input)->GetGradientValue(&gradient,gauss);
     5364
     5365                values[iv]    = reCast<IssmPDouble>(value);
     5366                gradients[iv] = reCast<IssmPDouble>(gradient);
     5367        }
     5368        delete gauss;
     5369
     5370        vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
     5371        vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
    53325372
    53335373}/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16470 r16478  
    152152                void   ControlInputScaleGradient(int enum_type,IssmDouble scale);
    153153                void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
     154                void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
    154155                IssmDouble RheologyBbarAbsGradient(void);
    155156                IssmDouble ThicknessAbsMisfit(void);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r16470 r16478  
    172172                void       ControlInputScaleGradient(int enum_type,IssmDouble scale){_error_("not implemented yet");};
    173173                void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
     174                void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
    174175                IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
    175176                IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16474 r16478  
    48714871
    48724872        ((ControlInput*)input)->SetGradient(grad_input);
     4873
     4874}/*}}}*/
     4875/*FUNCTION Tria::ControlInputSetGradient{{{*/
     4876void Tria::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
     4877
     4878        Input* input=NULL;
     4879        if(control_enum==MaterialsRheologyBbarEnum || control_enum==DamageDbarEnum){
     4880                input=(Input*)material->inputs->GetInput(control_enum);
     4881        }
     4882        else{
     4883                input=inputs->GetInput(control_enum);
     4884        }
     4885        if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
     4886        if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
     4887
     4888        int          sidlist[NUMVERTICES];
     4889        IssmPDouble   values[NUMVERTICES];
     4890        IssmPDouble gradients[NUMVERTICES];
     4891        IssmDouble  value,gradient;
     4892
     4893        GetVertexSidList(&sidlist[0]);
     4894
     4895        GaussTria* gauss=new GaussTria();
     4896        for (int iv=0;iv<NUMVERTICES;iv++){
     4897                gauss->GaussVertex(iv);
     4898
     4899                ((ControlInput*)input)->GetInputValue(&value,gauss);
     4900                ((ControlInput*)input)->GetGradientValue(&gradient,gauss);
     4901
     4902                values[iv]    = reCast<IssmPDouble>(value);
     4903                gradients[iv] = reCast<IssmPDouble>(gradient);
     4904        }
     4905        delete gauss;
     4906
     4907        vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
     4908        vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
    48734909
    48744910}/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16470 r16478  
    161161                void       ControlInputScaleGradient(int enum_type,IssmDouble scale);
    162162                void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
     163                void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
    163164                IssmDouble RheologyBbarAbsGradient(void);
    164165                IssmDouble ThicknessAbsMisfit(void);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r16476 r16478  
    639639}
    640640/*}}}*/
     641void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
     642
     643        /*Convert list of enums to list of string*/
     644        char** enumlist = xNew<char*>(numoutputs);
     645        for(int i=0;i<numoutputs;i++){
     646                EnumToStringx(&enumlist[i],requested_outputs[i]);
     647        }
     648
     649        /*Call main module*/
     650        this->RequestedOutputsx(presults,enumlist,numoutputs);
     651
     652
     653        /*clean up and return*/
     654        for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
     655        xDelete<char*>(enumlist);
     656        return;
     657}
     658/*}}}*/
    641659void FemModel::RequestedDependentsx(void){/*{{{*/
    642660
     
    12071225}
    12081226/*}}}*/
     1227void FemModel::OutputControlsx(Results **presults){/*{{{*/
     1228
     1229        /*parameters: */
     1230        int         num_controls,step;
     1231        IssmDouble  time;
     1232        int        *control_type = NULL;
     1233
     1234        /*recover results*/
     1235        Results* results = *presults;
     1236        if(!results) results = new Results();
     1237
     1238        /*Get list of Controls*/
     1239        this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
     1240        this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
     1241        this->parameters->FindParam(&step,StepEnum);
     1242        this->parameters->FindParam(&time,TimeEnum);
     1243
     1244        for(int i=0;i<num_controls;i++){
     1245
     1246                int control_enum = control_type[i];
     1247                int gradient_enum;
     1248
     1249                switch(i){
     1250                        case 0: gradient_enum = Gradient1Enum; break;
     1251                        case 1: gradient_enum = Gradient2Enum; break;
     1252                        case 2: gradient_enum = Gradient3Enum; break;
     1253                        default: _error_("more than 3 controls not implemented yet");
     1254                }
     1255
     1256                /*Allocate vector*/
     1257                Vector<IssmPDouble> *vector_control  = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
     1258                Vector<IssmPDouble> *vector_gradient = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
     1259
     1260                /*Fill in vector*/
     1261                for(int j=0;j<elements->Size();j++){
     1262                        Element* element=(Element*)elements->GetObjectByOffset(j);
     1263                        element->ControlToVectors(vector_control,vector_gradient,control_enum);
     1264                }
     1265                vector_control->Assemble();
     1266                vector_gradient->Assemble();
     1267
     1268                results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,control_enum,vector_control ,step,time));
     1269                results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,gradient_enum,vector_gradient,step,time));
     1270        }
     1271}
     1272/*}}}*/
    12091273#endif
    12101274#ifdef  _HAVE_DAKOTA_
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r16476 r16478  
    8282                void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
    8383                #endif
     84                void RequestedOutputsx(Results **presults,int* requested_outputs,int numoutputs);
    8485                void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
    8586                void RequestedOutputsx(char** requested_outputs, int numoutputs);
     
    8889                void Responsex(IssmDouble* presponse,const char* response_descriptor);
    8990                #ifdef _HAVE_CONTROL_
     91                void OutputControlsx(Results **presults);
    9092                void CostFunctionx( IssmDouble* pJ);
    9193                void ThicknessAbsGradientx( IssmDouble* pJ);
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp

    r16382 r16478  
    139139        //gradient->Extrude();
    140140}/*}}}*/
     141/*FUNCTION ControlInput::GetResultInterpolation{{{*/
     142int  ControlInput::GetResultInterpolation(void){
     143
     144        return values->GetResultInterpolation();
     145
     146}
     147/*}}}*/
    141148/*FUNCTION ControlInput::GetGradient{{{*/
    142149void ControlInput::GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){
     
    245252        values->GetInputValue(pvalue,gauss);
    246253}/*}}}*/
     254/*FUNCTION ControlInput::GetGradientValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
     255void ControlInput::GetGradientValue(IssmDouble* pvalue,GaussTria* gauss){
     256        gradient->GetInputValue(pvalue,gauss);
     257}/*}}}*/
     258/*FUNCTION ControlInput::GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
     259void ControlInput::GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss){
     260        gradient->GetInputValue(pvalue,gauss);
     261}/*}}}*/
    247262/*FUNCTION ControlInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){{{*/
    248263void ControlInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h

    r16461 r16478  
    4848                /*}}}*/
    4949                /*numerics: {{{*/
     50                void GetGradientValue(IssmDouble* pvalue,GaussTria* gauss);
     51                void GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss);
    5052                void SetInput(Input* in_input);
    5153                void GetInputValue(bool* pvalue);
     
    9092                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
    9193                ElementResult* SpawnGradient(int step, IssmDouble time);
    92                 int  GetResultInterpolation(void){_error_("not implemented yet");};
     94                int  GetResultInterpolation(void);
    9395                void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist);
    9496                void ScaleGradient(IssmDouble scale);
  • issm/trunk-jpl/src/m/classes/transient.m

    r16458 r16478  
    2626
    2727                        %full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
    28                         obj.ismasstransport=1;
    29                         obj.isstressbalance=1;
    30                         obj.isthermal=1;
    31                         obj.isgroundingline=0;
    32                         obj.isgia=0;
    33                         obj.isdamage=0;
     28                        obj.ismasstransport = 1;
     29                        obj.isstressbalance = 1;
     30                        obj.isthermal       = 1;
     31                        obj.isgroundingline = 0;
     32                        obj.isgia           = 0;
     33                        obj.isdamage        = 0;
     34
     35                        %default output
     36                        obj.requested_outputs={'default'};
     37                end % }}}
     38                function list = defaultoutputs(self,md) % {{{
     39
     40                        list = {'SurfaceforcingsMassBalance'};
    3441
    3542                end % }}}
     
    6774                        WriteData(fid,'object',obj,'fieldname','isgia','format','Boolean');
    6875                        WriteData(fid,'object',obj,'fieldname','isdamage','format','Boolean');
    69                         WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
     76
     77                        %process requested outputs
     78                        outputs = obj.requested_outputs;
     79                        pos  = find(ismember(outputs,'default'));
     80                        if ~isempty(pos),
     81                                outputs(pos) = [];                         %remove 'default' from outputs
     82                                outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
     83                        end
     84                        WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
    7085                end % }}}
    7186        end
  • issm/trunk-jpl/src/m/classes/transient.py

    r16458 r16478  
    3434                return string
    3535                #}}}
     36        def defaultoutputs(self,md): # {{{
     37
     38                return ['SurfaceforcingsMassBalance']
     39
     40        #}}}
    3641        def setdefaultparameters(self): # {{{
    3742               
    3843                #full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
    39                 self.ismasstransport=True
    40                 self.isstressbalance=True
    41                 self.isthermal=True
    42                 self.isgroundingline=False
    43                 self.isgia=False
     44                self.ismasstransport = True
     45                self.isstressbalance = True
     46                self.isthermal       = True
     47                self.isgroundingline = False
     48                self.isgia           = False
    4449
     50                #default output
     51                self.requested_outputs=['default']
    4552                return self
    4653        #}}}
     
    6673                WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
    6774                WriteData(fid,'object',self,'fieldname','isgia','format','Boolean')
    68                 WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray')
     75
     76                #process requested outputs
     77                outputs = self.requested_outputs
     78                indices = [i for i, x in enumerate(outputs) if x == 'default']
     79                if len(indices) > 0:
     80                        outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
     81                        outputs    =outputscopy
     82                WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray')
    6983        # }}}
    70 
Note: See TracChangeset for help on using the changeset viewer.