Changeset 28102


Ignore:
Timestamp:
02/15/24 13:53:15 (13 months ago)
Author:
schlegel
Message:

CHG: added accumulated SMB to pdd

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

Legend:

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

    r27856 r28102  
    3939        iomodel->FindConstant(&smb_model,"md.smb.model");
    4040        iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
     41        InputUpdateFromConstantx(inputs,elements,false,SmbIsInitializedEnum);
    4142        switch(smb_model){
    4243                case SMBforcingEnum:
     
    6768                        iomodel->FetchDataToInput(inputs,elements,"md.smb.Tz",SmbTzEnum);
    6869                        iomodel->FetchDataToInput(inputs,elements,"md.smb.Vz",SmbVzEnum);
    69                         InputUpdateFromConstantx(inputs,elements,false,SmbIsInitializedEnum);
    7070                        iomodel->FetchDataToInput(inputs,elements,"md.smb.Dzini",SmbDziniEnum);
    7171                        iomodel->FetchDataToInput(inputs,elements,"md.smb.Dini",SmbDiniEnum);
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r28067 r28102  
    34093409
    34103410        int             i,vertexlids[MAXVERTICES];
     3411        bool     isinitialized=false;
    34113412        IssmDouble* agd=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
    3412         IssmDouble* melt=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
    3413         IssmDouble* accu=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
     3413        IssmDouble* melt=xNew<IssmDouble>(NUM_VERTICES); // surface melt
     3414        IssmDouble* accu=xNew<IssmDouble>(NUM_VERTICES); // surface precipitation
    34143415        IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR);
    34153416        IssmDouble* monthlyprec=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR);
     
    34223423        IssmDouble pddsnowfac = -1.;
    34233424        IssmDouble pddicefac = -1.;
     3425        IssmDouble accsumM = 0.0;
     3426        IssmDouble accsumSMB = 0.0;
     3427        IssmDouble accsumP = 0.0;
     3428        IssmDouble avgM = 0.0;
     3429        IssmDouble avgSMB = 0.0;
     3430        IssmDouble avgP = 0.0;
    34243431        IssmDouble rho_water,rho_ice,desfac,rlaps,rlapslgm;
    34253432        IssmDouble PfacTime,TdiffTime,sealevTime;
     
    34283435        /*Get vertex Lids for later*/
    34293436        this->GetVerticesLidList(&vertexlids[0]);
     3437
     3438        /*Check for smb initialization*/
     3439        this->GetInputValue(&isinitialized,SmbIsInitializedEnum);
    34303440
    34313441        /*Get material parameters :*/
     
    34383448        rlapslgm=this->FindParam(SmbRlapslgmEnum);
    34393449
    3440         IssmDouble time,yts,time_yr;
     3450        IssmDouble time,yts,time_yr,dt;
    34413451        this->parameters->FindParam(&time,TimeEnum);
    34423452        this->parameters->FindParam(&yts,ConstantsYtsEnum);
     3453        this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);          /*transient core time step*/
    34433454        time_yr=floor(time/yts)*yts;
    34443455
     
    34903501        GetInputListOnVertices(&s0t[0],SmbS0tEnum);
    34913502
     3503        //Get accumulated input
     3504        Input *accsumM_input = NULL;
     3505        Input *accsumP_input = NULL;
     3506        Input *accsumSMB_input = NULL;
     3507        if (isinitialized){
     3508                accsumM_input = this->GetInput(SmbAccumulatedMeltEnum);  _assert_(accsumM_input);
     3509                accsumP_input = this->GetInput(SmbAccumulatedPrecipitationEnum);  _assert_(accsumP_input);
     3510                accsumSMB_input = this->GetInput(SmbAccumulatedMassBalanceEnum);  _assert_(accsumSMB_input);
     3511        }
     3512
    34923513        /*measure the surface mass balance*/
    34933514        for(int iv = 0; iv<NUM_VERTICES; iv++){
     
    35073528                        yearlytemperatures[iv]=yearlytemperatures[iv]+(monthlytemperatures[iv*12+month]+273.15)*mavg; // Has to be in Kelvin
    35083529                }
    3509         }
     3530
     3531        }
     3532
     3533        /*Save accumulated inputs {{{*/
     3534        Input *avgM_input = NULL;
     3535        Input *avgP_input = NULL;
     3536        Input *avgSMB_input = NULL;
     3537
     3538        if (isinitialized){
     3539                accsumM_input->GetInputAverage(&accsumM);
     3540                accsumP_input->GetInputAverage(&accsumP);
     3541                accsumSMB_input->GetInputAverage(&accsumSMB);
     3542        }
     3543
     3544        /*}}}*/
    35103545
    35113546        /*Update inputs*/
     
    35833618                        break;
    35843619                default: _error_("Not implemented yet");
     3620        }
     3621
     3622        avgM_input = this->GetInput(SmbMeltEnum);  _assert_(avgM_input);
     3623        avgP_input = this->GetInput(SmbAccumulationEnum);  _assert_(avgP_input);
     3624        avgSMB_input = this->GetInput(SmbMassBalanceEnum);  _assert_(avgSMB_input);
     3625
     3626        avgM_input->GetInputAverage(&avgM);
     3627        avgP_input->GetInputAverage(&avgP);
     3628        avgSMB_input->GetInputAverage(&avgSMB);
     3629
     3630        this->SetElementInput(SmbAccumulatedMassBalanceEnum,accsumSMB+avgSMB*dt);
     3631        this->SetElementInput(SmbAccumulatedPrecipitationEnum,accsumP+avgP*dt);
     3632        this->SetElementInput(SmbAccumulatedMeltEnum,accsumM+avgM*dt);
     3633        if (!isinitialized){
     3634                /*Flag the initialization:*/
     3635                this->SetBoolInput(this->inputs,SmbIsInitializedEnum,true);
    35853636        }
    35863637
Note: See TracChangeset for help on using the changeset viewer.