Changeset 17430


Ignore:
Timestamp:
03/14/14 11:21:54 (11 years ago)
Author:
jbondzio
Message:

CHG: SetActiveNodesLSMx adapted to 3D case with distinction for 2D calculations; ADD: coupling LSM - HO flow approximation

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

Legend:

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

    r17333 r17430  
    3636        bool   isdelta18o;
    3737        bool   isgroundingline;
     38        bool   islevelset;
    3839
    3940        /*Fetch data needed: */
     
    4243        iomodel->Constant(&smb_model,SurfaceforcingsEnum);
    4344        iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
     45        iomodel->Constant(&islevelset,TransientIslevelsetEnum);
    4446
    4547        /*Finite element type*/
     
    8486                iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
    8587                iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
     88        }
     89
     90        if(islevelset){
     91                iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
     92                if(iomodel->meshtype!=Mesh2DhorizontalEnum)
     93                        iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
    8694        }
    8795
     
    748756        if(islevelset){
    749757                _printf0_("   Updating active and non-active nodes for MasstransportAnalysis \n");
    750                 SetActiveNodesLSMx(femmodel->elements);
     758                SetActiveNodesLSMx(femmodel);
    751759        }
    752760        return;
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r17420 r17430  
    122122        bool   control_analysis;
    123123        bool   dakota_analysis;
     124        bool   islevelset;
    124125
    125126        /*Fetch constants needed: */
     
    131132        iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
    132133        iomodel->Constant(&materials_type,MaterialsEnum);
     134        iomodel->Constant(&islevelset,TransientIslevelsetEnum);
    133135
    134136        /*return if no processing required*/
     
    203205        iomodel->FetchDataToInput(elements,LoadingforceYEnum);
    204206        iomodel->FetchDataToInput(elements,DamageDEnum);
    205         iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
    206207
    207208        if(iomodel->meshtype==Mesh3DEnum){
     
    221222                iomodel->FetchDataToInput(elements,PressureEnum,0.);
    222223                if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
     224        }
     225        if(islevelset){
     226                iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
     227                if(iomodel->meshtype!=Mesh2DhorizontalEnum)
     228                        iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
    223229        }
    224230
     
    10331039        if(islevelset){
    10341040                _printf0_("   Updating active and non-active nodes for StressbalanceAnalysis \n");
    1035                 SetActiveNodesLSMx(femmodel->elements);
     1041                SetActiveNodesLSMx(femmodel);
    10361042        }
    10371043        return;
     
    21052111ElementMatrix* StressbalanceAnalysis::CreateKMatrixHO(Element* element){/*{{{*/
    21062112
     2113        /* Check if ice in element */
     2114        if(!element->IsIceInElement()) return NULL;
     2115
    21072116        /*compute all stiffness matrices for this element*/
    21082117        ElementMatrix* Ke1=CreateKMatrixHOViscous(element);
     
    21162125}/*}}}*/
    21172126ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOViscous(Element* element){/*{{{*/
     2127
     2128        /* Check if ice in element */
     2129        if(!element->IsIceInElement()) return NULL;
    21182130
    21192131        /*Intermediaries*/
     
    21892201ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOFriction(Element* element){/*{{{*/
    21902202
     2203        /* Check if ice in element */
     2204        if(!element->IsIceInElement()) return NULL;
     2205
    21912206        if(element->IsFloating() || !element->IsOnBed()) return NULL;
    21922207
     
    22762291ElementVector* StressbalanceAnalysis::CreatePVectorHO(Element* element){/*{{{*/
    22772292
     2293        /* Check if ice in element */
     2294        if(!element->IsIceInElement()) return NULL;
     2295
    22782296        /*Intermediaries */
    22792297        int         dim,meshtype;
     
    23342352ElementVector* StressbalanceAnalysis::CreatePVectorHO(Element* element){/*{{{*/
    23352353
     2354        /* Check if ice in element */
     2355        if(!element->IsIceInElement()) return NULL;
     2356
    23362357        /*compute all load vectors for this element*/
    23372358        ElementVector* pe1=CreatePVectorHODrivingStress(element);
     
    23462367#endif
    23472368ElementVector* StressbalanceAnalysis::CreatePVectorHODrivingStress(Element* element){/*{{{*/
     2369
     2370        /* Check if ice in element */
     2371        if(!element->IsIceInElement()) return NULL;
    23482372
    23492373        /*Intermediaries */
     
    23972421}/*}}}*/
    23982422ElementVector* StressbalanceAnalysis::CreatePVectorHOFront(Element* element){/*{{{*/
     2423
     2424        /* Check if ice in element */
     2425        if(!element->IsIceInElement()) return NULL;
    23992426
    24002427        /*If no front, return NULL*/
  • issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp

    r17250 r17430  
    1010#include "../modules.h"
    1111
    12 void SetActiveNodesLSMx(Elements* elements){/*{{{*/
     12void SetActiveNodesLSMx(FemModel* femmodel){/*{{{*/
    1313
    14         for(int i=0;i<elements->Size();i++){
     14        /* intermediaries */
     15        bool solvein2d=false;
     16        int i,in,meshtype,analysis_type;
     17        Elements* elements = femmodel->elements;
     18
     19        /* find parameters */
     20        femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
     21
     22        for(i=0;i<elements->Size();i++){
    1523                Element    *element  = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
    1624                int         numnodes = element->GetNumberOfNodes();
     
    4048                }
    4149
    42                 for(int in=0;in<numnodes;in++){
     50                if(meshtype!=Mesh2DhorizontalEnum){
     51                        femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
     52                        if(
     53                                        analysis_type==FreeSurfaceBaseAnalysisEnum ||
     54                                        analysis_type==MasstransportAnalysisEnum ||
     55                                        analysis_type==MeltingAnalysisEnum ||
     56                                        analysis_type==L2ProjectionBaseAnalysisEnum ||
     57                                        analysis_type==BalancethicknessAnalysisEnum ||
     58                                        analysis_type==HydrologyDCInefficientAnalysisEnum ||
     59                                        analysis_type==DamageEvolutionAnalysisEnum ||
     60                                        analysis_type==HydrologyDCEfficientAnalysisEnum ||
     61                                        analysis_type==LevelsetAnalysisEnum ||
     62                                        analysis_type==ExtrapolationAnalysisEnum
     63                                        ){ solvein2d=true;}
     64
     65                        if(analysis_type==StressbalanceAnalysisEnum){
     66                                bool isSIA,isSSA;
     67                                femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
     68                                femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
     69                                if(isSIA || isSSA)
     70                                        solvein2d=true;
     71                        }
     72
     73                        if(solvein2d){
     74                                IssmDouble *mask_isonbed = xNew<IssmDouble>(numnodes);
     75                                element->GetInputListOnNodes(&mask_isonbed[0],MeshVertexonbedEnum);
     76                                for(in=0;in<numnodes;in++)       mask[in]*=mask_isonbed[in];
     77                                xDelete<IssmDouble>(mask_isonbed);
     78                        }
     79                }
     80
     81                for(in=0;in<numnodes;in++){
    4382                        Node* node=element->GetNode(in);
    4483                        if(mask[in]==1.){
  • issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h

    r17239 r17430  
    88#include "../../classes/classes.h"
    99
    10 void SetActiveNodesLSMx(Elements* elements);
     10void SetActiveNodesLSMx(FemModel* femmodel);
    1111void GetMaskOfIceVerticesLSMx(FemModel* femmodel);
    1212void SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element);
Note: See TracChangeset for help on using the changeset viewer.