Changeset 27920


Ignore:
Timestamp:
Sep 21, 2023, 11:41:17 AM (3 years ago)
Author:
youngmc3
Message:

CHG: added Cfrheologybbarabsgradtransient

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

Legend:

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

    r27916 r27920  
    8686        ./classes/Cfdragcoeffabsgradtransient.cpp \
    8787        ./classes/Cfrheologybbarabsgrad.cpp \
     88        ./classes/Cfrheologybbarabsgradtransient.cpp \
    8889        ./classes/Cfsurfacelogvel.cpp \
    8990        ./classes/Cflevelsetmisfit.cpp \
  • issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.cpp

    r27728 r27920  
    2929        this->definitionenum = -1;
    3030        this->name = NULL;
    31         this->weights_enum = UNDEF;
    32         this->timepassedflag = false;
    3331        this->J = 0.;
     32        this->firsttimepassed = false;
    3433}
    3534/*}}}*/
    36 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum){/*{{{*/
     35Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum){/*{{{*/
    3736
    3837        this->definitionenum=in_definitionenum;
    … …  
    4140        xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
    4241
    43         this->weights_enum=in_weights_enum;
    44         this->timepassedflag=false;
    45 
    4642        this->J=0;
     43        this->firsttimepassed = false;
    4744}
    4845/*}}}*/
    49 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, bool in_timepassedflag, IssmDouble in_J){/*{{{*/
     46Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J){/*{{{*/
    5047
    5148        this->definitionenum=in_definitionenum;
    … …  
    5451        xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
    5552
    56         this->weights_enum=in_weights_enum;
    57         this->timepassedflag=in_timepassedflag;
     53        this->J=in_J;
     54        this->firsttimepassed = false;
     55}
     56/*}}}*/
     57Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J, bool in_firsttimepassed){/*{{{*/
     58
     59        this->definitionenum=in_definitionenum;
     60
     61        this->name              = xNew<char>(strlen(in_name)+1);
     62        xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
    5863
    5964        this->J=in_J;
     65        this->firsttimepassed = in_firsttimepassed;
    6066}
    6167/*}}}*/
    … …  
    6672/*Object virtual function resolutoin: */
    6773Object* Cfrheologybbarabsgrad::copy() {/*{{{*/
    68         Cfrheologybbarabsgrad* mf = new Cfrheologybbarabsgrad(this->name,this->definitionenum, this->weights_enum,this->timepassedflag,this->J);
     74        Cfrheologybbarabsgrad* mf = new Cfrheologybbarabsgrad(this->name,this->definitionenum, this->J, this->firsttimepassed);
    6975        return (Object*) mf;
    7076}
    … …  
    7682void Cfrheologybbarabsgrad::Echo(void){/*{{{*/
    7783        _printf_(" Cfrheologybbarabsgrad: " << name << " " << this->definitionenum << "\n");
    78         _printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
    79         _printf_("        timepassedflag: "<<timepassedflag<<"\n");
    8084}
    8185/*}}}*/
    … …  
    9296        marshallhandle->call(this->definitionenum);
    9397        marshallhandle->call(this->name);
    94         marshallhandle->call(this->weights_enum);
    95         marshallhandle->call(this->timepassedflag);
    9698        marshallhandle->call(this->J);
     99        marshallhandle->call(this->firsttimepassed);
    97100}
    98101/*}}}*/
    … …  
    119122        IssmDouble J_sum=0.;
    120123
    121         for(Object* & object : femmodel->elements->objects){
    122                 Element* element=xDynamicCast<Element*>(object);
    123                 J_part+=this->Cfrheologybbarabsgrad_Calculation(element,weights_enum);
     124        if (!this->firsttimepassed){
     125                for(Object* & object : femmodel->elements->objects){
     126                        Element* element=xDynamicCast<Element*>(object);
     127                        J_part+=this->Cfrheologybbarabsgrad_Calculation(element);
     128                }
     129
     130                ISSM_MPI_Allreduce( (void*)&J_part,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
     131                ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     132                this->J = J_sum;
     133
     134                this->firsttimepassed = true;
    124135        }
    125 
    126         ISSM_MPI_Allreduce( (void*)&J_part,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
    127         ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
    128 
    129         this->timepassedflag = true;
    130         this->J = J_sum;
    131136        return this->J;
    132137}/*}}}*/
    133 IssmDouble Cfrheologybbarabsgrad::Cfrheologybbarabsgrad_Calculation(Element* element, int weights_enum){/*{{{*/
     138IssmDouble Cfrheologybbarabsgrad::Cfrheologybbarabsgrad_Calculation(Element* element){/*{{{*/
    134139
    135140        int        domaintype,numcomponents;
  • issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.h

    r27728 r27920  
    1919                int         definitionenum;
    2020                char*       name;
    21                 int         weights_enum;
    22                 bool                    timepassedflag;
     21                bool                    firsttimepassed;
    2322                IssmDouble  J;
    2423
    2524                /*Cfrheologybbarabsgrad constructors, destructors :*/
    2625                Cfrheologybbarabsgrad();
    27                 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum);
    28                 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum,  bool in_timepassedflag, IssmDouble in_J);
     26                Cfrheologybbarabsgrad(char* in_name, int in_definitionenum);
     27                Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J);
     28                Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J, bool in_firsttimepassed);
    2929                ~Cfrheologybbarabsgrad();
    3030
    … …  
    4141                char* Name();
    4242                IssmDouble Response(FemModel* femmodel);
    43                 IssmDouble Cfrheologybbarabsgrad_Calculation(Element* element, int weights_enum);
     43                IssmDouble Cfrheologybbarabsgrad_Calculation(Element* element);
    4444};
    4545#endif  /* _CFRHEOLOGYBBARABSGRAD_H_ */
  • issm/trunk-jpl/src/c/classes/classes.h

    r27902 r27920  
    2828#include "./Cfdragcoeffabsgradtransient.h"
    2929#include "./Cfrheologybbarabsgrad.h"
     30#include "./Cfrheologybbarabsgradtransient.h"
    3031#include "./Cfsurfacelogvel.h"
    3132#include "./Cflevelsetmisfit.h"
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp

    r27902 r27920  
    384384                                int*         cfdraggradt_weights_N_s                            = NULL;
    385385
    386                                 /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfdragcoeffabsgrad.m): */
     386                                /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfdragcoeffabsgradtransient.m): */
    387387                                iomodel->FetchMultipleData(&cfdraggradt_name_s,&num_cfdragcoeffabsgradtransients,                                                        "md.cfdragcoeffabsgradtransient.name");
    388388                                iomodel->FetchMultipleData(&cfdraggradt_definitionstring_s,&num_cfdragcoeffabsgradtransients,                                            "md.cfdragcoeffabsgradtransient.definitionstring");
    … …  
    486486            xDelete<int>(cfrheologybbarabsgrad_weights_N_s);
    487487            xDelete<char*>(cfrheologybbarabsgrad_weights_string_s);
     488            /*}}}*/
     489         }
     490                        else if (output_definition_enums[i]==CfrheologybbarabsgradtransientEnum){
     491                                /*Deal with cfrheologybbarabsgradtransient: {{{*/
     492
     493                                /*cfrheologybbarabsgrad variables: */
     494                                int          num_cfrheologybbarabsgradtransients, test;
     495                                char**       cfrheogradt_name_s                = NULL;
     496                                char**       cfrheogradt_definitionstring_s    = NULL;
     497                                IssmDouble** cfrheogradt_weights_s             = NULL;
     498                                int*         cfrheogradt_weights_M_s           = NULL;
     499                                int*         cfrheogradt_weights_N_s           = NULL;
     500                                char**       cfrheogradt_weights_string_s      = NULL;
     501
     502                                /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfrheologybbarabsgradtransient.m): */
     503                                iomodel->FetchMultipleData(&cfrheogradt_name_s,&num_cfrheologybbarabsgradtransients,                                                        "md.cfrheologybbarabsgradtransient.name");
     504                                iomodel->FetchMultipleData(&cfrheogradt_definitionstring_s,&num_cfrheologybbarabsgradtransients,                                            "md.cfrheologybbarabsgradtransient.definitionstring");
     505                                iomodel->FetchMultipleData(&cfrheogradt_weights_s,&cfrheogradt_weights_M_s,&cfrheogradt_weights_N_s,&test,             "md.cfrheologybbarabsgradtransient.weights");
     506
     507                                for(j=0;j<num_cfrheologybbarabsgradtransients;j++){
     508
     509                                        if (cfrheogradt_weights_M_s[j]!=iomodel->numberofvertices+1) _error_("weights should be a P1 time series");
     510                                       
     511                                        /*extract data times from last row of observations*/
     512                                        IssmDouble *datatimes = xNew<IssmDouble>(cfrheogradt_weights_N_s[j]);
     513                                        for(int k=0;k<cfrheogradt_weights_N_s[j];k++) datatimes[k] = (cfrheogradt_weights_s[j])[cfrheogradt_weights_N_s[j]*(cfrheogradt_weights_M_s[j]-1)+k];
     514
     515                                        /*First create a cfrheologybbarabsgradtransient object for that specific string:*/
     516                                        output_definitions->AddObject(new Cfrheologybbarabsgradtransient(cfrheogradt_name_s[j],StringToEnumx(cfrheogradt_definitionstring_s[j]), cfrheogradt_weights_N_s[j], datatimes));
     517
     518                                        /*Now, for this particular cfrheologybbarabsgrad object, make sure we plug into the elements: the observation, and the weights.*/
     519                                        for(Object* & object : elements->objects){
     520
     521                                                Element* element=xDynamicCast<Element*>(object);
     522
     523                                                element->DatasetInputAdd(StringToEnumx(cfrheogradt_definitionstring_s[j]),cfrheogradt_weights_s[j],inputs,iomodel,cfrheogradt_weights_M_s[j],cfrheogradt_weights_N_s[j],1,WeightsSurfaceObservationEnum,WeightsSurfaceObservationEnum);
     524
     525                                        }
     526                                }
     527                               
     528                                /*Free resources:*/
     529            for(j=0;j<num_cfrheologybbarabsgradtransients;j++){
     530               char* string=NULL;
     531               IssmDouble* matrix = NULL;
     532
     533               string = cfrheogradt_definitionstring_s[j];    xDelete<char>(string);
     534               string = cfrheogradt_name_s[j];    xDelete<char>(string);
     535               matrix = cfrheogradt_weights_s[j]; xDelete<IssmDouble>(matrix);
     536            }
     537            xDelete<char*>(cfrheogradt_name_s);
     538            xDelete<char*>(cfrheogradt_definitionstring_s);
     539            xDelete<IssmDouble*>(cfrheogradt_weights_s);
     540            xDelete<int>(cfrheogradt_weights_M_s);
     541            xDelete<int>(cfrheogradt_weights_N_s);
    488542            /*}}}*/
    489543         }
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r27913 r27920  
    14211421syn keyword cConstant CfdragcoeffabsgradtransientEnum
    14221422syn keyword cConstant CfrheologybbarabsgradEnum
     1423syn keyword cConstant CfrheologybbarabsgradtransientEnum
    14231424syn keyword cConstant CfsurfacelogvelEnum
    14241425syn keyword cConstant CfsurfacesquareEnum
    … …  
    18001801syn keyword cType Cflevelsetmisfit
    18011802syn keyword cType Cfrheologybbarabsgrad
     1803syn keyword cType Cfrheologybbarabsgradtransient
    18021804syn keyword cType Cfsurfacelogvel
    18031805syn keyword cType Cfsurfacesquare
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r27913 r27920  
    14201420        CfdragcoeffabsgradtransientEnum,
    14211421        CfrheologybbarabsgradEnum,
     1422        CfrheologybbarabsgradtransientEnum,
    14221423        CfsurfacelogvelEnum,
    14231424        CfsurfacesquareEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r27913 r27920  
    14231423                case CfdragcoeffabsgradtransientEnum : return "Cfdragcoeffabsgradtransient";
    14241424                case CfrheologybbarabsgradEnum : return "Cfrheologybbarabsgrad";
     1425                case CfrheologybbarabsgradtransientEnum : return "Cfrheologybbarabsgradtransient";
    14251426                case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
    14261427                case CfsurfacesquareEnum : return "Cfsurfacesquare";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r27913 r27920  
    14141414syn keyword juliaConstC CfdragcoeffabsgradtransientEnum
    14151415syn keyword juliaConstC CfrheologybbarabsgradEnum
     1416syn keyword juliaConstC CfrheologybbarabsgradtransientEnum
    14161417syn keyword juliaConstC CfsurfacelogvelEnum
    14171418syn keyword juliaConstC CfsurfacesquareEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r27913 r27920  
    14561456              else if (strcmp(name,"Cfdragcoeffabsgradtransient")==0) return CfdragcoeffabsgradtransientEnum;
    14571457              else if (strcmp(name,"Cfrheologybbarabsgrad")==0) return CfrheologybbarabsgradEnum;
     1458              else if (strcmp(name,"Cfrheologybbarabsgradtransient")==0) return CfrheologybbarabsgradtransientEnum;
    14581459              else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
    14591460              else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
Note: See TracChangeset for help on using the changeset viewer.