Changeset 27709


Ignore:
Timestamp:
04/26/23 17:17:41 (23 months ago)
Author:
Mathieu Morlighem
Message:

CHG: adding new transient cost function, not finished just yet

Location:
issm/trunk-jpl/src/c
Files:
2 added
10 edited

Legend:

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

    r27696 r27709  
    8989        ./classes/Misfit.cpp \
    9090        ./classes/Cfsurfacesquare.cpp \
     91        ./classes/Cfsurfacesquaretransient.cpp \
    9192        ./classes/Cfdragcoeffabsgrad.cpp \
    9293        ./classes/Cfrheologybbarabsgrad.cpp \
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r27696 r27709  
    23852385        /*Assign output pointers: */
    23862386        *pstrings=strings;
    2387         *pnumstrings=num_instances;
     2387        if(pnumstrings) *pnumstrings=num_instances;
    23882388}
    23892389/*}}}*/
  • issm/trunk-jpl/src/c/classes/IoModel.h

    r27696 r27709  
    154154                void        FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name);
    155155                void        FetchMultipleData(int** pvector, int* pnum_instances,const char* data_name);
    156                 void        FetchMultipleData(IssmDouble** pvector, int* pnum_instances,const char* data_name);
     156                void        FetchMultipleData(IssmDouble** pvector, int* pM,const char* data_name);
    157157                fpos_t*     SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, const char* data_name);
    158158                FILE*       SetFilePointerToData(int* pcode,int* pvector_type, const char* data_name);
  • issm/trunk-jpl/src/c/classes/classes.h

    r27696 r27709  
    2424#include "./Numberedcostfunction.h"
    2525#include "./Cfsurfacesquare.h"
     26#include "./Cfsurfacesquaretransient.h"
    2627#include "./Cfdragcoeffabsgrad.h"
    2728#include "./Cfrheologybbarabsgrad.h"
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp

    r27686 r27709  
    244244                                /*}}}*/
    245245                        }
     246                        else if (output_definition_enums[i]==CfsurfacesquaretransientEnum){
     247                                /*Deal with cfsurfacesquaretransient: {{{*/
     248
     249                                /*cfsurfacesquaretransient variables: */
     250                                int          num_cfsurfacesquaretransients,test;
     251                                char       **cfssqt_name_s                = NULL;
     252                                char       **cfssqt_definitionstring_s    = NULL;
     253                                char       **cfssqt_model_string_s        = NULL;
     254                                IssmDouble **cfssqt_observations_s        = NULL;
     255                                char       **cfssqt_observations_string_s = NULL;
     256                                int         *cfssqt_observations_M_s      = NULL;
     257                                int         *cfssqt_observations_N_s      = NULL;
     258                                IssmDouble **cfssqt_weights_s             = NULL;
     259                                int         *cfssqt_weights_M_s           = NULL;
     260                                int         *cfssqt_weights_N_s           = NULL;
     261                                char       **cfssqt_weights_string_s      = NULL;
     262                                IssmDouble **cfssqt_datatimes_s           = NULL;
     263            int         *cfssqt_datatimes_M_s         = NULL;
     264            int         *cfssqt_datatimes_N_s         = NULL;
     265
     266                                /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfsurfacesquaretransient.m): */
     267                                iomodel->FetchMultipleData(&cfssqt_name_s,&num_cfsurfacesquaretransients,"md.cfsurfacesquaretransient.name");
     268                                iomodel->FetchMultipleData(&cfssqt_definitionstring_s,&test,"md.cfsurfacesquaretransient.definitionstring"); _assert_(test==num_cfsurfacesquaretransients);
     269                                iomodel->FetchMultipleData(&cfssqt_model_string_s,&test,"md.cfsurfacesquaretransient.model_string"); _assert_(test==num_cfsurfacesquaretransients);
     270                                iomodel->FetchMultipleData(&cfssqt_observations_s,&cfssqt_observations_M_s,&cfssqt_observations_N_s,NULL, "md.cfsurfacesquaretransient.observations");
     271                                iomodel->FetchMultipleData(&cfssqt_observations_string_s, NULL,"md.cfsurfacesquaretransient.observation_string");
     272                                iomodel->FetchMultipleData(&cfssqt_weights_s,&cfssqt_weights_M_s,&cfssqt_weights_N_s,NULL,"md.cfsurfacesquaretransient.weights");
     273                                iomodel->FetchMultipleData(&cfssqt_weights_string_s,NULL,"md.cfsurfacesquaretransient.weights_string");
     274                                iomodel->FetchMultipleData(&cfssqt_datatimes_s,&cfssqt_datatimes_M_s,&cfssqt_datatimes_N_s,NULL,"md.cfsurfacesquaretransient.datatimes");
     275
     276                                for(j=0;j<num_cfsurfacesquaretransients;j++){
     277
     278               /*Check that we can use P1 inputs*/
     279                                        if (cfssqt_observations_M_s[j]==iomodel->numberofvertices) _error_("only P1 fields are allowed for now");
     280               if (cfssqt_observations_M_s[j]==cfssqt_weights_M_s[j]) _error_("observations and weights do not have the same number of rows");
     281               if (cfssqt_observations_N_s[j]==cfssqt_weights_N_s[j]) _error_("observations and weights do not have the same number of columns");
     282               if (cfssqt_datatimes_M_s[j]==1) _error_("datatime should have only one row");
     283               if (cfssqt_datatimes_N_s[j]==cfssqt_weights_N_s[j]) _error_("datatime should have the same number of columns as the observations");
     284
     285                                        /*First create a cfsurfacesquaretransient object for that specific string (cfssqt_model_string_s[j]):*/
     286                                        output_definitions->AddObject(new Cfsurfacesquaretransient(cfssqt_name_s[j], StringToEnumx(cfssqt_definitionstring_s[j]), StringToEnumx(cfssqt_model_string_s[j]), cfssqt_datatimes_N_s[j], cfssqt_datatimes_s[j]));
     287
     288                                        /*Now, for this particular cfsurfacesquaretransient object, make sure we plug into the elements: the observation, and the weights.*/
     289                                        for(Object* & object : elements->objects){
     290                                                Element* element=xDynamicCast<Element*>(object);
     291                                                _error_("need to implement transient inputs?");
     292                                                //element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_observations_s[j],inputs,iomodel,cfssqt_observations_M_s[j],cfssqt_observations_N_s[j],obs_vector_type,StringToEnumx(cfssqt_observations_string_s[j]),7,SurfaceObservationEnum);
     293                                                //element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_weights_s[j],inputs,iomodel,cfssqt_weights_M_s[j],cfssqt_weights_N_s[j],weight_vector_type,StringToEnumx(cfssqt_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
     294
     295                                        }
     296
     297                                }
     298
     299                                /*Free resources:*/
     300                                for(j=0;j<num_cfsurfacesquaretransients;j++){
     301                                        char* string=NULL;
     302                                        IssmDouble* matrix = NULL;
     303                                        string = cfssqt_definitionstring_s[j];          xDelete<char>(string);
     304                                        string = cfssqt_observations_string_s[j];       xDelete<char>(string);
     305                                        string = cfssqt_model_string_s[j];                      xDelete<char>(string);
     306                                        string = cfssqt_weights_string_s[j];            xDelete<char>(string);
     307                                        string = cfssqt_name_s[j];    xDelete<char>(string);
     308                                        matrix = cfssqt_observations_s[j]; xDelete<IssmDouble>(matrix);
     309                                        matrix = cfssqt_weights_s[j]; xDelete<IssmDouble>(matrix);
     310                                }
     311                                xDelete<char*>(cfssqt_name_s);
     312                                xDelete<char*>(cfssqt_model_string_s);
     313                                xDelete<char*>(cfssqt_definitionstring_s);
     314                                xDelete<IssmDouble*>(cfssqt_observations_s);
     315                                xDelete<char*>(cfssqt_observations_string_s);
     316                                xDelete<int>(cfssqt_observations_M_s);
     317                                xDelete<int>(cfssqt_observations_N_s);
     318                                xDelete<IssmDouble*>(cfssqt_weights_s);
     319                                xDelete<int>(cfssqt_weights_M_s);
     320                                xDelete<int>(cfssqt_weights_N_s);
     321                                xDelete<char*>(cfssqt_weights_string_s);
     322                                xDelete<IssmDouble>(cfssqt_datatimes_s);
     323                                /*}}}*/
     324                        }
    246325                        else if (output_definition_enums[i]==CfdragcoeffabsgradEnum){
    247326                                /*Deal with cfdragcoeffabsgrad: {{{*/
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r27696 r27709  
    13961396syn keyword cConstant CfsurfacelogvelEnum
    13971397syn keyword cConstant CfsurfacesquareEnum
     1398syn keyword cConstant CfsurfacesquaretransientEnum
    13981399syn keyword cConstant CflevelsetmisfitEnum
    13991400syn keyword cConstant ChannelEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r27696 r27709  
    13951395        CfsurfacelogvelEnum,
    13961396        CfsurfacesquareEnum,
     1397        CfsurfacesquaretransientEnum,
    13971398        CflevelsetmisfitEnum,
    13981399        ChannelEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r27696 r27709  
    13981398                case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
    13991399                case CfsurfacesquareEnum : return "Cfsurfacesquare";
     1400                case CfsurfacesquaretransientEnum : return "Cfsurfacesquaretransient";
    14001401                case CflevelsetmisfitEnum : return "Cflevelsetmisfit";
    14011402                case ChannelEnum : return "Channel";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r27696 r27709  
    13891389syn keyword juliaConstC CfsurfacelogvelEnum
    13901390syn keyword juliaConstC CfsurfacesquareEnum
     1391syn keyword juliaConstC CfsurfacesquaretransientEnum
    13911392syn keyword juliaConstC CflevelsetmisfitEnum
    13921393syn keyword juliaConstC ChannelEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r27696 r27709  
    14311431              else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
    14321432              else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
     1433              else if (strcmp(name,"Cfsurfacesquaretransient")==0) return CfsurfacesquaretransientEnum;
    14331434              else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum;
    14341435              else if (strcmp(name,"Channel")==0) return ChannelEnum;
     
    14891490              else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
    14901491              else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
    1491               else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
    14921492         else stage=13;
    14931493   }
    14941494   if(stage==13){
    1495               if (strcmp(name,"FemModel")==0) return FemModelEnum;
     1495              if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
     1496              else if (strcmp(name,"FemModel")==0) return FemModelEnum;
    14961497              else if (strcmp(name,"FileParam")==0) return FileParamEnum;
    14971498              else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
     
    16121613              else if (strcmp(name,"Mathydro")==0) return MathydroEnum;
    16131614              else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
    1614               else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    16151615         else stage=14;
    16161616   }
    16171617   if(stage==14){
    1618               if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
     1618              if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
     1619              else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    16191620              else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
    16201621              else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
     
    17351736              else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
    17361737              else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
    1737               else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
    17381738         else stage=15;
    17391739   }
    17401740   if(stage==15){
    1741               if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
     1741              if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
     1742              else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
    17421743              else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
    17431744              else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
Note: See TracChangeset for help on using the changeset viewer.