Changeset 16787


Ignore:
Timestamp:
11/15/13 13:32:33 (11 years ago)
Author:
Eric.Larour
Message:

CHG: new Misfit output definition. Adapted ModelProcessorx and CreateOutputDefinitions accordingly.
Created enums that go with it. Also create misfit.m class to setup this specific output definition.

Location:
issm/trunk-jpl/src
Files:
8 added
2 deleted
15 edited

Legend:

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

    r16685 r16787  
    540540#Responses sources  {{{
    541541responses_sources= ./classes/Massfluxatgate.h \
     542                                   ./classes/Misfit.h \
    542543                                   ./modules/ModelProcessorx/CreateOutputDefinitions.cpp\
    543544                                   ./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h\
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16778 r16787  
    133133                virtual IssmDouble IceVolumeAboveFloatation(void)=0;
    134134                virtual IssmDouble TotalSmb(void)=0;
     135                virtual IssmDouble Misfit(int modelenum,int observationenum,int weightsenum)=0;
    135136                #endif
    136137
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16783 r16787  
    178178                IssmDouble BalancethicknessMisfit(void){_error_("not supported");};
    179179                void   InputControlUpdate(IssmDouble scalar,bool save_parameter);
     180                IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");};
    180181                #endif
    181182
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r16783 r16787  
    179179                void       MaxVy(IssmDouble* pmaxvy){_error_("not implemented yet");};
    180180                void       MaxVz(IssmDouble* pmaxvz){_error_("not implemented yet");};
     181                IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");};
    181182#endif
    182183
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16785 r16787  
    32503250        /*Return: */
    32513251        return Total_Smb;
     3252}
     3253/*}}}*/
     3254/*FUNCTION Tria::Misfit{{{*/
     3255IssmDouble Tria::Misfit(int modelenum,int observationenum,int weightsenum){
     3256
     3257        /*Intermediaries*/
     3258        IssmDouble model,observation,weight;
     3259        IssmDouble Jdet;
     3260        IssmDouble Jelem = 0;
     3261        IssmDouble xyz_list[NUMVERTICES][3];
     3262        GaussTria *gauss = NULL;
     3263
     3264        /*If on water, return 0: */
     3265        if(NoIceInElement())return 0;
     3266
     3267        /*Retrieve all inputs we will be needing: */
     3268        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     3269        Input* model_input=inputs->GetInput(modelenum);   _assert_(model_input);
     3270        Input* observation_input=inputs->GetInput(observationenum);_assert_(observation_input);
     3271        Input* weights_input     =inputs->GetInput(weightsenum);     _assert_(weights_input);
     3272
     3273        /* Start  looping on the number of gaussian points: */
     3274        gauss=new GaussTria(2);
     3275        for(int ig=gauss->begin();ig<gauss->end();ig++){
     3276
     3277                gauss->GaussPoint(ig);
     3278
     3279                /* Get Jacobian determinant: */
     3280                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
     3281
     3282                /*Get parameters at gauss point*/
     3283                model_input->GetInputValue(&model,gauss);
     3284                observation_input->GetInputValue(&observation,gauss);
     3285                weights_input->GetInputValue(&weight,gauss);
     3286
     3287                /*compute misfit between model and observation */
     3288                Jelem+=0.5*(model-observation)*(model-observation)*weight*Jdet*gauss->weight;
     3289        }
     3290
     3291        /* clean up and Return: */
     3292        delete gauss;
     3293        return Jelem;
    32523294}
    32533295/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16783 r16787  
    150150                void       MaxVy(IssmDouble* pmaxvy);
    151151                void       MaxVz(IssmDouble* pmaxvz);
     152                IssmDouble Misfit(int modelenum,int observationenum,int weightsenum);
    152153                #endif
    153154
  • issm/trunk-jpl/src/c/classes/classes.h

    r16486 r16787  
    1818#include "./Segment.h"
    1919#include "./Massfluxatgate.h"
     20#include "./Misfit.h"
    2021
    2122/*Constraints: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp

    r16542 r16787  
    88#include "./ModelProcessorx.h"
    99
    10 void CreateOutputDefinitions(Parameters* parameters,IoModel* iomodel){
     10void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel){
    1111
    1212        int i,j;
    1313       
    14         DataSet     *output_definitions      = NULL;
    15         int         *output_definition_enums = NULL;
     14        DataSet*     output_definitions      = NULL;
     15        int*         output_definition_enums = NULL;
    1616        int          num_output_definitions;
    17         int          numgates;
    18         char       **gatenames               = NULL;
    19         IssmDouble **gatesegments            = NULL;
    20         int         *gatesegments_M          = NULL;
    2117
    2218        /*Create output_definitions dataset: */
     
    2824
    2925                        if (output_definition_enums[i]==MassfluxatgateEnum){
     26
    3027                                /*Deal with mass flux gates:{{{ */
     28                               
     29                                /*massfluxatgate variables: */
     30                                int          numgates;
     31                                char       **gatenames               = NULL;
     32                                IssmDouble **gatesegments            = NULL;
     33                                int         *gatesegments_M          = NULL;
     34
    3135
    3236                                /*Fetch segments and names: */
     
    4751                                /*}}}*/
    4852                        }
     53                        else if (output_definition_enums[i]==MisfitEnum){
     54                                /*Deal with misfits: {{{*/
     55                               
     56                                /*misfit variables: */
     57                                int          nummisfits;
     58                                char**       misfit_name_s             = NULL;   
     59                                int*         misfit_model_enum_s        = NULL;
     60                                IssmDouble** misfit_observation_s      = NULL;
     61                                int*         misfit_observation_enum_s  = NULL;
     62                                int*         misfit_observation_M_s    = NULL;
     63                                int*         misfit_observation_N_s    = NULL;
     64                                char**       misfit_timeinterpolation_s = NULL;
     65                                IssmDouble** misfit_weights_s           = NULL;
     66                                int*         misfit_weights_M_s    = NULL;
     67                                int*         misfit_weights_N_s    = NULL;
     68                                int*         misfit_weights_enum_s= NULL;
     69
     70                                /*Fetch name, model_enum, observation, observation_enum, etc ... (see src/m/classes/misfit.m): */
     71                                iomodel->FetchMultipleData(&misfit_name_s,&nummisfits,MisfitNameEnum);
     72                                iomodel->FetchMultipleData(&misfit_model_enum_s,&nummisfits,MisfitModelEnumEnum);
     73                                iomodel->FetchMultipleData(&misfit_observation_s,&misfit_observation_M_s,&misfit_observation_N_s,&nummisfits,MisfitObservationEnum);
     74                                iomodel->FetchMultipleData(&misfit_observation_enum_s,&nummisfits,MisfitObservationEnumEnum);
     75                                iomodel->FetchMultipleData(&misfit_timeinterpolation_s,&nummisfits,MisfitTimeinterpolationEnum);
     76                                iomodel->FetchMultipleData(&misfit_weights_s,&misfit_weights_M_s,&misfit_weights_N_s,&nummisfits,MisfitWeightsEnum);
     77                                iomodel->FetchMultipleData(&misfit_weights_enum_s,&nummisfits,MisfitWeightsEnumEnum);
     78
     79                                for(j=0;j<nummisfits;j++){
     80
     81                                        /*First create a misfit object for that specific enum (misfit_model_enum_s[j]):*/
     82                                        output_definitions->AddObject(new Misfit(misfit_name_s[j],misfit_model_enum_s[j],misfit_observation_enum_s[j],misfit_timeinterpolation_s[j],misfit_weights_enum_s[j]));
     83
     84                                        /*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/
     85                                        for(i=0;i<elements->Size();i++){
     86                                                Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
     87                                                element->InputCreate(misfit_observation_s[j], iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],1,misfit_observation_enum_s[j],7);
     88                                                element->InputCreate(misfit_weights_s[j], iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],1,misfit_weights_enum_s[j],7);
     89                                        }
     90
     91                                }
     92
     93                                /*Free ressources:*/
     94                                for(j=0;j<nummisfits;j++){
     95                                        char* string=NULL;
     96                                        IssmDouble* matrix = NULL;
     97
     98                                        string = misfit_name_s[j];    xDelete<char>(string);
     99                                        string = misfit_timeinterpolation_s[j];    xDelete<char>(string);
     100                                        matrix = misfit_observation_s[j]; xDelete<IssmDouble>(matrix);
     101                                        matrix = misfit_weights_s[j]; xDelete<IssmDouble>(matrix);
     102                                }
     103                                xDelete<char*>(misfit_name_s);
     104                                xDelete<int>(misfit_model_enum_s);
     105                                xDelete<IssmDouble*>(misfit_observation_s);
     106                                xDelete<int>(misfit_observation_enum_s);
     107                                xDelete<int>(misfit_observation_M_s);
     108                                xDelete<int>(misfit_observation_N_s);
     109                                xDelete<char*>(misfit_timeinterpolation_s);
     110                                xDelete<IssmDouble*>(misfit_weights_s);
     111                                xDelete<int>(misfit_weights_M_s);
     112                                xDelete<int>(misfit_weights_N_s);
     113                                xDelete<int>(misfit_weights_enum_s);
     114                                /*}}}*/
     115                        }
     116
    49117                        else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!");
    50118                }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r16604 r16787  
    196196        /*}}}*/
    197197
    198         /*Output definitions dataset: */
    199         CreateOutputDefinitions(parameters,iomodel);
    200 
     198       
    201199        /*Before returning, create parameters in case we are running Qmu or control types runs: */
    202200        #ifdef _HAVE_CONTROL_
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp

    r16550 r16787  
    105105        #endif
    106106
     107        /*Output definitions dataset: */
     108        CreateOutputDefinitions(elements,parameters,iomodel);
     109
    107110        /* Sort datasets:
    108111         * All our datasets are already ordered by ids. Set presort flag so that
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r16550 r16787  
    1717void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type);
    1818void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath);
    19 void CreateOutputDefinitions(Parameters* parameters,IoModel* iomodel);
     19void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel);
    2020void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
    2121void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r16767 r16787  
    552552        MassfluxatgateSegmentsEnum,
    553553        MisfitNameEnum,
    554         MisfitModelEnum,
    555         MisfitObservationsEnum,
     554        MisfitModelEnumEnum,
     555        MisfitObservationEnum,
     556        MisfitObservationEnumEnum,
    556557        MisfitTimeinterpolationEnum,
    557558        MisfitWeightsEnum,
     559        MisfitWeightsEnumEnum,
     560        SurfaceObservationEnum,
     561        WeightsSurfaceObservationEnum,
    558562        /*}}}*/
    559563        /*Responses{{{*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r16767 r16787  
    540540                case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
    541541                case MisfitNameEnum : return "MisfitName";
    542                 case MisfitModelEnum : return "MisfitModel";
    543                 case MisfitObservationsEnum : return "MisfitObservations";
     542                case MisfitModelEnumEnum : return "MisfitModelEnum";
     543                case MisfitObservationEnum : return "MisfitObservation";
     544                case MisfitObservationEnumEnum : return "MisfitObservationEnum";
    544545                case MisfitTimeinterpolationEnum : return "MisfitTimeinterpolation";
    545546                case MisfitWeightsEnum : return "MisfitWeights";
     547                case MisfitWeightsEnumEnum : return "MisfitWeightsEnum";
     548                case SurfaceObservationEnum : return "SurfaceObservation";
     549                case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
    546550                case MinVelEnum : return "MinVel";
    547551                case MaxVelEnum : return "MaxVel";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r16767 r16787  
    552552              else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
    553553              else if (strcmp(name,"MisfitName")==0) return MisfitNameEnum;
    554               else if (strcmp(name,"MisfitModel")==0) return MisfitModelEnum;
    555               else if (strcmp(name,"MisfitObservations")==0) return MisfitObservationsEnum;
     554              else if (strcmp(name,"MisfitModelEnum")==0) return MisfitModelEnumEnum;
     555              else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum;
     556              else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum;
    556557              else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
    557558              else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
     559              else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
     560              else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
     561              else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
    558562              else if (strcmp(name,"MinVel")==0) return MinVelEnum;
    559563              else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
     
    625629              else if (strcmp(name,"Option")==0) return OptionEnum;
    626630              else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
    627               else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
    628635              else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
    629636              else if (strcmp(name,"Paterson")==0) return PatersonEnum;
    630637              else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
     638              else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
    635639              else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
    636640         else stage=7;
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r16767 r16787  
    532532def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
    533533def MisfitNameEnum(): return StringToEnum("MisfitName")[0]
    534 def MisfitModelEnum(): return StringToEnum("MisfitModel")[0]
    535 def MisfitObservationsEnum(): return StringToEnum("MisfitObservations")[0]
     534def MisfitModelEnumEnum(): return StringToEnum("MisfitModelEnum")[0]
     535def MisfitObservationEnum(): return StringToEnum("MisfitObservation")[0]
     536def MisfitObservationEnumEnum(): return StringToEnum("MisfitObservationEnum")[0]
    536537def MisfitTimeinterpolationEnum(): return StringToEnum("MisfitTimeinterpolation")[0]
    537538def MisfitWeightsEnum(): return StringToEnum("MisfitWeights")[0]
     539def MisfitWeightsEnumEnum(): return StringToEnum("MisfitWeightsEnum")[0]
     540def SurfaceObservationEnum(): return StringToEnum("SurfaceObservation")[0]
     541def WeightsSurfaceObservationEnum(): return StringToEnum("WeightsSurfaceObservation")[0]
    538542def MinVelEnum(): return StringToEnum("MinVel")[0]
    539543def MaxVelEnum(): return StringToEnum("MaxVel")[0]
Note: See TracChangeset for help on using the changeset viewer.