Changeset 27920


Ignore:
Timestamp:
09/21/23 11:41:17 (18 months 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.