Ignore:
Timestamp:
03/13/14 15:32:02 (11 years ago)
Author:
jbondzio
Message:

BUG: deactivate nodes on non-basal layer for 2d solving process of extrapolation and LSM

File:
1 edited

Legend:

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

    r17428 r17429  
    2929                }
    3030        }
    31        
    3231        if(iomodel->meshtype==Mesh3DEnum){
    3332                iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
     33                iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
    3434        }
    3535}
     
    8686
    8787        /*Intermediaries */
    88         int               meshtype,dim;
     88        int                meshtype,dim;
    8989        int        i,row,col,stabilization;
    9090        bool       extrapolatebydiffusion = true;
     
    110110        IssmDouble*    B      = xNew<IssmDouble>(dim*numnodes);
    111111        IssmDouble*    Bprime = xNew<IssmDouble>(dim*numnodes);
    112         IssmDouble*             dlsf   = xNew<IssmDouble>(dim);
    113         IssmDouble*             normal = xNew<IssmDouble>(dim);
    114         IssmDouble*    D                 = xNew<IssmDouble>(dim*dim);
     112        IssmDouble*             D         = xNew<IssmDouble>(dim*dim);
     113        IssmDouble*             dlsf = xNew<IssmDouble>(dim);
     114        IssmDouble*             normal= xNew<IssmDouble>(dim);
    115115
    116116        /*Retrieve all inputs and parameters*/
     
    162162                                for(col=0;col<dim;col++)
    163163                                        if(row==col)
    164                                                 D[row*dim+col] = D_scalar*normal[row];
     164                                                D[row*dim+col]=D_scalar*normal[row];
    165165                                        else
    166                                                 D[row*dim+col] = 0.;
     166                                                D[row*dim+col]=0.;
    167167                        TripleMultiply(B,dim,numnodes,1,
    168168                                                D,dim,dim,0,
     
    181181                                        for(col=0;col<dim;col++)
    182182                                                if(row==col)
    183                                                         D[row*dim+col] = D_scalar*kappa;
     183                                                        D[row*dim+col]=D_scalar*kappa;
    184184                                                else
    185                                                         D[row*dim+col] = 0.;
     185                                                        D[row*dim+col]=0.;
    186186                                TripleMultiply(Bprime,dim,numnodes,1,
    187187                                                        D,dim,dim,0,
     
    207207        xDelete<IssmDouble>(B);
    208208        xDelete<IssmDouble>(Bprime);
     209        xDelete<IssmDouble>(D);
    209210        xDelete<IssmDouble>(dlsf);
    210211        xDelete<IssmDouble>(normal);
     212        delete gauss;
    211213        if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
    212         delete gauss;
    213214        return Ke;
    214215
     
    224225        /*Fetch number of nodes */
    225226        int numnodes = basalelement->GetNumberOfNodes();
    226         basalelement->FindParam(&meshtype,MeshTypeEnum);
    227227
    228228        /*Initialize Element vector*/
     
    230230        for(i=0;i<numnodes;i++)
    231231                pe->values[i]=0.;
     232
     233        basalelement->FindParam(&meshtype,MeshTypeEnum);
    232234        if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
    233235        return pe;
     
    326328                node=element->GetNode(in);
    327329                levelset_input->GetInputValue(&phi,gauss);
    328                 if(phi<=0.){
    329                         /* if ice, set dirichlet BC */
    330                         extvar_input->GetInputValue(&value,gauss);
    331                         node->ApplyConstraint(1,value);
    332                 }
    333                 else {
    334                         /* no ice, set no spc */
    335                         node->DofInFSet(0);
     330                if(node->IsActive()){
     331                        if(phi<=0.){
     332                                /* if ice, set dirichlet BC */
     333                                extvar_input->GetInputValue(&value,gauss);
     334                                node->ApplyConstraint(1,value);
     335                        }
     336                        else {
     337                                /* no ice, set no spc */
     338                                node->DofInFSet(0);
     339                        }
    336340                }
    337341        }
Note: See TracChangeset for help on using the changeset viewer.