Changeset 26205


Ignore:
Timestamp:
04/22/21 10:46:39 (4 years ago)
Author:
tsantos
Message:

CHG: working on mlho: computing vertically averaged velocities

File:
1 edited

Legend:

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

    r26204 r26205  
    27322732ElementMatrix* StressbalanceAnalysis::CreateKMatrixMLHO(Element* element){/*{{{*/
    27332733       
    2734         _error_("Mono Layer Higher-Order called, not fully tested. If you are sure in using it, comment this line.");
     2734        _error_("Mono Layer Higher-Order called, not fully tested. If you are sure of using it, comment this line.");
    27352735       
    27362736        /* Check if ice in element */
     
    29142914
    29152915        /* Start  looping on the number of gaussian points: */
    2916         Gauss* gauss      = element->NewGauss(5);
     2916        Gauss* gauss      = element->NewGauss(2);
    29172917        Gauss* gauss_base = basalelement->NewGauss();
    29182918        while(gauss->next()){
     
    31923192        switch(domaintype){
    31933193                case Domain2DhorizontalEnum:
     3194                        // itapopo FIXME use basalelement or element only here
    31943195                        basalelement = element;
    31953196                        break;
     
    32163217        IssmDouble* vsx       = xNew<IssmDouble>(numnodes);
    32173218        IssmDouble* vsy       = xNew<IssmDouble>(numnodes);
     3219        IssmDouble* vx        = xNew<IssmDouble>(numnodes);
     3220        IssmDouble* vy        = xNew<IssmDouble>(numnodes);
    32183221        IssmDouble* vz        = xNew<IssmDouble>(numnodes);
    32193222        IssmDouble* vel       = xNew<IssmDouble>(numnodes);
     3223        IssmDouble* n                    = xNew<IssmDouble>(numnodes);
    32203224       
    32213225        /*Use the dof list to index into the solution vector: */
     
    32523256        element->AddBasalInput(VxShearEnum,vshx,element->GetElementType());
    32533257        element->AddBasalInput(VyShearEnum,vshy,element->GetElementType());
    3254 
    3255         /*Get Vz and compute vel (base)*/
    3256         basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.);
    3257         for(i=0;i<numnodes;i++) vel[i]=sqrt(vbx[i]*vbx[i] + vby[i]*vby[i] + vz[i]*vz[i]);
    3258 
     3258       
    32593259        /*Add vx and vy as inputs to the tria element (base velocities): */
    32603260        element->AddBasalInput(VxBaseEnum,vbx,element->GetElementType());
    32613261        element->AddBasalInput(VyBaseEnum,vby,element->GetElementType());
    3262         element->AddBasalInput(VelEnum,vel,element->GetElementType()); //itapopo check this
    32633262       
    32643263        /*Add vx and vy as inputs to the tria element (surface velocities): */
     
    32663265        element->AddBasalInput(VySurfaceEnum,vsy,element->GetElementType());
    32673266
     3267        /*Compute the vertically averaged velocities on each node*/
     3268        basalelement->GetInputListOnNodes(&n[0],MaterialsRheologyNEnum,0.);
     3269   for(i=0;i<numnodes;i++){ //numnodes of the 2D mesh in which the MLHO is written
     3270                vx[i]=vbx[i]+vshx[i]*(n[i]+1)/(n[i]+2);
     3271                vy[i]=vby[i]+vshy[i]*(n[i]+1)/(n[i]+2);
     3272        }
     3273               
     3274        /*Get Vz and compute vel (vertically averaged vel)*/
     3275        basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.);
     3276        for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
     3277
     3278        /*Add vx and vy as inputs to the tria element (vertically averaged velocities): */
     3279        element->AddBasalInput(VxEnum,vx,element->GetElementType());
     3280        element->AddBasalInput(VyEnum,vy,element->GetElementType());
     3281        element->AddBasalInput(VelEnum,vel,element->GetElementType());
     3282
    32683283        /*Free ressources:*/
    32693284        xDelete<IssmDouble>(vel);
     3285        xDelete<IssmDouble>(vx);
     3286        xDelete<IssmDouble>(vy);
    32703287        xDelete<IssmDouble>(vz);
    32713288        xDelete<IssmDouble>(vby);
     
    32773294        xDelete<IssmDouble>(values);
    32783295        xDelete<IssmDouble>(xyz_list);
     3296        xDelete<IssmDouble>(n);
    32793297        xDelete<int>(doflist);
    32803298        if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
Note: See TracChangeset for help on using the changeset viewer.