Changeset 16504


Ignore:
Timestamp:
10/22/13 09:05:37 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: merging CostFunction and RequestedOutputx

Location:
issm/trunk-jpl/src/c/classes
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h

    r16474 r16504  
    2323        public:
    2424
    25                 virtual        ~ExternalResult(){};
    26                 /*Virtual functions:{{{*/
    27                 virtual void  WriteData(FILE* fid,bool io_gather)=0;
    28                 virtual char* GetResultName(void)=0;
    29                 virtual int   GetStep(void)=0;
    30                 /*}}}*/
     25                virtual         ~ExternalResult(){};
     26                virtual void   WriteData(FILE* fid,bool io_gather)=0;
     27                virtual char*  GetResultName(void)=0;
     28                virtual int    GetStep(void)=0;
     29                virtual double GetValue(void)=0;
    3130};
    3231#endif
  • issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h

    r16474 r16504  
    118118
    119119                /*GenericExternalResult management: */
    120 void WriteData(FILE* fid,bool io_gather){ /*{{{*/
     120void  WriteData(FILE* fid,bool io_gather){ /*{{{*/
    121121
    122122        int     my_rank;
     
    150150                return name;
    151151} /*}}}*/
    152 int GetStep(void){ /*{{{*/
     152int   GetStep(void){ /*{{{*/
    153153        return this->step;
     154} /*}}}*/
     155IssmPDouble GetValue(void){ /*{{{*/
     156        /*Only supported by IssmPDouble result, error out by default*/
     157        _error_("not supported for this type of result");
     158        return 0.;
    154159} /*}}}*/
    155160};
     
    189194template <> inline int GenericExternalResult<double>::ObjectEnum(void){ /*{{{*/
    190195        return DoubleExternalResultEnum;
     196} /*}}}*/
     197template <> inline double GenericExternalResult<double>::GetValue(void){ /*{{{*/
     198        return value;
    191199} /*}}}*/
    192200
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r16489 r16504  
    591591}
    592592/*}}}*/
     593void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
     594
     595        /*Convert list of enums to list of string*/
     596        char** enumlist = xNew<char*>(numoutputs);
     597        for(int i=0;i<numoutputs;i++){
     598                EnumToStringx(&enumlist[i],requested_outputs[i]);
     599        }
     600
     601        /*Call main module*/
     602        this->RequestedOutputsx(presults,enumlist,numoutputs);
     603
     604        /*clean up and return*/
     605        for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
     606        xDelete<char*>(enumlist);
     607        return;
     608}
     609/*}}}*/
    593610void FemModel::RequestedDependentsx(void){/*{{{*/
    594611
     
    11341151
    11351152        /*Intermediary*/
    1136         int num_responses;
    1137         int *responses = NULL;
    1138 
    1139         /*output: */
    1140         IssmDouble J,Jplus;
     1153        int      num_responses;
     1154        int     *responses      = NULL;
     1155        Results *cost_functions = NULL;
    11411156
    11421157        /*Recover parameters*/
     
    11441159        parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
    11451160
    1146         /*Get response*/
    1147         J=0;
    1148         //_printf_(true,"list of misfits: ");
     1161        /*Get the value of all cost functions*/
     1162        this->RequestedOutputsx(&cost_functions,responses,num_responses);
     1163
     1164        /*Add all contributions one by one*/
     1165        IssmDouble J=0;
     1166        //_printf0_("list of misfits: ");
    11491167        for(int i=0;i<num_responses;i++){
    1150                 this->Responsex(&Jplus,EnumToStringx(responses[i]));
    1151                 //_printf_(true," %12.7g ",Jplus);
    1152                 J+=Jplus;
    1153         }
    1154         //_printf_(true," \n");
     1168                ExternalResult* result=(ExternalResult*)cost_functions->GetObjectByOffset(i);
     1169                J += reCast<IssmDouble>(result->GetValue());
     1170                //_printf0_(J<<" ");
     1171        }
     1172        //_printf0_(" \n");
     1173        _assert_(cost_functions->Size()==num_responses);
    11551174
    11561175        /*Assign output pointers: */
     1176        delete cost_functions;
    11571177        xDelete<int>(responses);
    11581178        *pJ=J;
     
    12031223                results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,gradient_enum,vector_gradient,step,time));
    12041224        }
     1225
     1226        /*Clean up and return*/
     1227        xDelete<int>(control_type);
    12051228}
    12061229/*}}}*/
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r16489 r16504  
    8383                #endif
    8484                void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
     85                void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs);
    8586                void RequestedDependentsx(void);
    8687                void Responsex(IssmDouble* presponse,int response_descriptor_enum);
Note: See TracChangeset for help on using the changeset viewer.