Changeset 26255


Ignore:
Timestamp:
05/10/21 12:30:20 (4 years ago)
Author:
Cheng Gong
Message:

CHG: add marshall and a test for the levelset misfit output definition

Location:
issm/trunk-jpl
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r26090 r26255  
    1010#include "../modules/modules.h"
    1111#include "../solutionsequences/solutionsequences.h"
     12#include "../classes/Inputs/DatasetInput.h"
     13
    1214
    1315void LevelsetAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
     
    4951
    5052        iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
     53//      iomodel->FetchDataToInput(inputs,elements,"md.mask.ref_levelset",MaskIceRefLevelsetEnum);
    5154        iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
    5255        iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
     
    6770                        iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
    6871                        break;
     72                case CalvingTestEnum:
     73                        iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
     74                        iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
     75                        iomodel->FetchDataToInput(inputs,elements,"md.calving.Qrates",CalvingNonlinearQRateEnum);
     76                        iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
     77                        break;
    6978                case CalvingMinthicknessEnum:
    7079                        iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
     
    103112void LevelsetAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
    104113
     114        IssmDouble* coefficients=NULL;
     115        int nco;
     116
    105117        parameters->AddObject(iomodel->CopyConstantObject("md.levelset.stabilization",LevelsetStabilizationEnum));
    106118        parameters->AddObject(iomodel->CopyConstantObject("md.levelset.reinit_frequency",LevelsetReinitFrequencyEnum));
     
    117129                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
    118130                        break;
     131                case CalvingTestEnum:
     132                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
     133                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.dt_order",CalvingDtimeorderEnum));
     134                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.nonlinear_law",CalvingNonlinearLawEnum));
     135                       
     136                        /* Add the coefficients for the new nonlinear law */
     137                        iomodel->FetchData(&coefficients, &nco, NULL, "md.calving.coefficients");
     138              parameters->AddObject(new DoubleMatParam(CalvingNonlinearCoeffEnum, coefficients, nco, 1));
     139                        xDelete<IssmDouble>(coefficients);
    119140                case CalvingMinthicknessEnum:
    120141                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
     
    215236        IssmDouble*    dbasis   = xNew<IssmDouble>(2*numnodes);
    216237        IssmDouble*    Bprime = NULL;
     238        IssmDouble              tau;
    217239        if(stabilization==2){
    218240                Bprime   = xNew<IssmDouble>(dim*numnodes);
     
    340362
    341363        /*Intermediaries */
    342         int domaintype;
     364        int domaintype, stabilization;
    343365        IssmDouble  Jdet,dt;
    344366        IssmDouble  lsf;
    345367        IssmDouble* xyz_list = NULL;
     368   IssmDouble  vx,vy,vel,h,tau;
    346369
    347370        /*Fetch number of nodes and dof for this finite element*/
     
    351374        ElementVector* pe = basalelement->NewElementVector();
    352375        basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
     376   basalelement->FindParam(&stabilization,LevelsetStabilizationEnum);
    353377
    354378        if(dt!=0.){
     
    359383                basalelement->GetVerticesCoordinates(&xyz_list);
    360384                Input* levelset_input     = basalelement->GetInput(MaskIceLevelsetEnum);                    _assert_(levelset_input);
     385               
     386        //      h=element->CharacteristicLength();
    361387
    362388                /* Start  looping on the number of gaussian points: */
     
    473499        }
    474500
     501        if(calvinglaw==CalvingTestEnum){
     502
     503                /*Get minimum thickness threshold*/
     504                femmodel->parameters->FindParam(&min_thickness,CalvingMinthicknessEnum);
     505
     506                /*Loop over all elements of this partition*/
     507                for(Object* & object : femmodel->elements->objects){
     508                        Element* element  = xDynamicCast<Element*>(object);
     509
     510                        int      numnodes = element->GetNumberOfNodes();
     511                        Gauss*   gauss    = element->NewGauss();
     512                        Input*   H_input  = element->GetInput(ThicknessEnum); _assert_(H_input);
     513                        Input*   b_input = element->GetInput(BedEnum); _assert_(b_input);
     514                        Input*   sl_input = element->GetInput(SealevelEnum); _assert_(sl_input);
     515
     516                        /*Potentially constrain nodes of this element*/
     517                        for(int in=0;in<numnodes;in++){
     518                                gauss->GaussNode(element->GetElementType(),in);
     519                                Node* node=element->GetNode(in);
     520                                if(!node->IsActive()) continue;
     521
     522                                H_input->GetInputValue(&thickness,gauss);
     523                                b_input->GetInputValue(&bed,gauss);
     524                                sl_input->GetInputValue(&sealevel,gauss);
     525                                if(thickness<min_thickness && bed<sealevel){
     526                                        node->ApplyConstraint(0,+1.);
     527                                }
     528                                else {
     529                                        /* no ice, set no spc */
     530                                        node->DofInFSet(0);
     531                                }
     532                        }
     533                        delete gauss;
     534                }
     535        }
    475536        if(calvinglaw==CalvingHabEnum){
    476537
  • TabularUnified issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.cpp

    r26254 r26255  
    8989
    9090        marshallhandle->call(this->definitionenum);
    91         marshallhandle->call(this->local);
    9291        marshallhandle->call(this->model_enum);
    9392        marshallhandle->call(this->name);
    9493        marshallhandle->call(this->observation_enum);
    95         marshallhandle->call(this->timeinterpolation);
    9694        marshallhandle->call(this->weights_enum);
    9795        marshallhandle->call(this->datatime);
  • TabularUnified issm/trunk-jpl/src/c/datastructures/DataSet.cpp

    r25531 r26255  
    251251                                this->AddObject(res);
    252252                        }
     253                        else if(obj_enum==CflevelsetmisfitEnum){
     254                                Cflevelsetmisfit* Cflevelset=new Cflevelsetmisfit();
     255                                Cflevelset->Marshall(marshallhandle);
     256                                this->AddObject(Cflevelset);
     257                        }
    253258                        else _error_("could not recognize enum type: " << obj_enum << ": " << EnumToStringx(obj_enum) );
    254259                }
Note: See TracChangeset for help on using the changeset viewer.