Changeset 17261


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

CHG: Add coupling LSM - masstransport - ice dynamics. Order of transient computation is now: stressbalance - moving boundary - masstransport on new domain

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

Legend:

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

    r17212 r17261  
    4949        /* Intermediaries */
    5050        bool save_results;
     51        int extvar_enum;
     52   femmodel->parameters->FindParam(&extvar_enum, ExtrapolationVariableEnum);
     53
    5154        /*activate formulation: */
    5255        femmodel->SetCurrentConfiguration(ExtrapolationAnalysisEnum);
    5356
    54         if(VerboseSolution()) _printf0_("extrapolation: call computational core:\n");
     57        if(VerboseSolution()) _printf0_("extrapolation of " << EnumToStringx(extvar_enum) << ": call computational core:\n");
    5558        solutionsequence_linear(femmodel);
    5659
    57         /*recover parameters: */
    58         femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    59         if(save_results){
    60                 if(VerboseSolution()) _printf0_("   Warning: Adding extrapolated variable to results\n");
    61                
    62                 int outputs;
    63                 femmodel->parameters->FindParam(&outputs, ExtrapolationVariableEnum);
    64                 femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
    65         }
    6660
    6761}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r17250 r17261  
    6666        /*parameters: */
    6767        bool save_results;
     68       
     69        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    6870
    6971        /*activate formulation: */
    7072        femmodel->SetCurrentConfiguration(LevelsetAnalysisEnum);
    71 
    72         /*recover parameters: */
    73         femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    7473
    7574        if(VerboseSolution()) _printf0_("call computational core:\n");
     
    199198        xDelete<IssmDouble>(Bprime);
    200199        delete gauss;
     200
     201//      Ke->Echo();
    201202        return Ke;
    202203}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r17212 r17261  
    231231ElementMatrix* MasstransportAnalysis::CreateKMatrix(Element* element){/*{{{*/
    232232
     233        /* Check if ice in element */
     234        if(!element->IsIceInElement()) return NULL;
     235
    233236        if(!element->IsOnBed()) return NULL;
    234237        Element* basalelement = element->SpawnBasalElement();
     
    252255}/*}}}*/
    253256ElementMatrix* MasstransportAnalysis::CreateKMatrixCG(Element* element){/*{{{*/
     257
     258        /* Check if ice in element */
     259        if(!element->IsIceInElement()) return NULL;
    254260
    255261        /*Intermediaries */
     
    365371ElementMatrix* MasstransportAnalysis::CreateKMatrixDG(Element* element){/*{{{*/
    366372
     373        /* Check if ice in element */
     374        if(!element->IsIceInElement()) return NULL;
     375
    367376        /*Intermediaries */
    368377        int        meshtype;
     
    437446}/*}}}*/
    438447ElementVector* MasstransportAnalysis::CreatePVector(Element* element){/*{{{*/
     448
     449        /* Check if ice in element */
     450        if(!element->IsIceInElement()) return NULL;
    439451
    440452        if(!element->IsOnBed()) return NULL;
     
    460472ElementVector* MasstransportAnalysis::CreatePVectorCG(Element* element){/*{{{*/
    461473
     474        /* Check if ice in element */
     475        if(!element->IsIceInElement()) return NULL;
     476
    462477        /*Intermediaries */
    463478        IssmDouble  Jdet,dt;
     
    505520}/*}}}*/
    506521ElementVector* MasstransportAnalysis::CreatePVectorDG(Element* element){/*{{{*/
     522
     523        /* Check if ice in element */
     524        if(!element->IsIceInElement()) return NULL;
    507525
    508526        /*Intermediaries */
     
    693711}/*}}}*/
    694712void MasstransportAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
    695         /*Default, do nothing*/
     713//      _printf0_("   Updating active and non-active nodes for MasstransportAnalysis \n");
     714//      SetActiveNodesLSMx(femmodel->elements);
    696715        return;
    697716}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r17253 r17261  
    10451045        /*Default, do nothing*/
    10461046        _printf0_("   Updating active and non-active nodes for StressbalanceAnalysis \n");
    1047         //SetActiveNodesLSMx(femmodel->elements);
     1047//      SetActiveNodesLSMx(femmodel->elements);
    10481048        return;
    10491049}/*}}}*/
     
    13931393
    13941394        /*If no front, return NULL*/
    1395         if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
     1395        if(!element->IsIcefront()) return NULL;
    13961396
    13971397        /*Intermediaries*/
     
    14161416        IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
    14171417        element->GetVerticesCoordinates(&xyz_list);
    1418         element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
     1418//      element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
     1419        element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
    14191420        element->NormalSection(&normal[0],xyz_list_front);
    14201421
     
    18061807
    18071808        /*If no front, return NULL*/
    1808         if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
     1809        if(!element->IsIcefront()) return NULL;
    18091810
    18101811        /*Intermediaries*/
     
    22622263
    22632264        /*If no front, return NULL*/
    2264         if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
     2265        if(!element->IsIcefront()) return NULL;
    22652266
    22662267        /*Intermediaries*/
     
    30793080
    30803081        /*If no front, return NULL*/
    3081         if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
     3082        if(!element->IsIcefront()) return NULL;
    30823083
    30833084        /*Intermediaries*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r17248 r17261  
    19761976                                name==MaskGroundediceLevelsetEnum ||
    19771977                                name==MaskIceLevelsetEnum ||
     1978                                name==IceMaskNodeActivationEnum ||
    19781979                                name==GradientEnum ||
    19791980                                name==OldGradientEnum  ||
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17257 r17261  
    16211621                                name==MaskGroundediceLevelsetEnum ||
    16221622                                name==MaskIceLevelsetEnum ||
     1623                                name==IceMaskNodeActivationEnum ||
    16231624                                name==SurfaceSlopeXEnum ||
    16241625                                name==SurfaceSlopeYEnum ||
  • issm/trunk-jpl/src/c/cores/transient_core.cpp

    r17250 r17261  
    122122                        stressbalance_core(femmodel);
    123123                }
    124 
    125                 if(ismasstransport){
    126                         if(VerboseSolution()) _printf0_("   computing new thickness\n");
    127                         masstransport_core(femmodel);
    128                         if(VerboseSolution()) _printf0_("   updating vertices positions\n");
    129                         femmodel->UpdateVertexPositionsx();
    130                 }
    131 
     124               
    132125                if(isgroundingline){
    133126                        if(VerboseSolution()) _printf0_("   computing new grounding line position\n");
     
    153146                        /* extrapolate required variables */
    154147                        Analysis* extanalysis = new ExtrapolationAnalysis();
    155                         int vars[2] = {VxEnum, VyEnum};
    156                         for(int iv=0;iv<2;iv++){
     148                        const int nvars=2;
     149                        int vars[nvars] = {VxEnum, VyEnum};
     150                        for(int iv=0;iv<nvars;iv++){
    157151                                femmodel->parameters->SetParam(vars[iv],ExtrapolationVariableEnum);
    158152                                extanalysis->Core(femmodel);
     
    166160                        /* update vertices included for next calculation */
    167161                        GetMaskOfIceVerticesLSMx(femmodel);
     162
     163                        /* add computation domain mask to outputs */
     164                        int outputs[1] = {IceMaskNodeActivationEnum};
     165                        femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
     166
     167                }
     168
     169                if(ismasstransport){
     170                        if(VerboseSolution()) _printf0_("   computing new thickness\n");
     171                        masstransport_core(femmodel);
     172                        if(VerboseSolution()) _printf0_("   updating vertices positions\n");
     173                        femmodel->UpdateVertexPositionsx();
    168174                }
    169175
Note: See TracChangeset for help on using the changeset viewer.