Changeset 18705


Ignore:
Timestamp:
10/29/14 17:14:07 (10 years ago)
Author:
bdef
Message:

NEW; adding a zigzag lock to the EPL activity

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

Legend:

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

    r18689 r18705  
    689689                        }
    690690                }
     691               
    691692        }
    692693        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
     
    731732        }
    732733        else{
    733                 /*Do not do anything: at least one node is active for this element but this element is not solved for*/
     734                /*Do not do anything: at least one node was active for this element but this element is not solved for*/
    734735        }
    735736        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
  • issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp

    r18689 r18705  
    1717        int         penalty_lock;
    1818        int         hydro_maxiter;
     19        int         *elementactive_counter =NULL;
    1920        bool        isefficientlayer;
    2021        IssmDouble  sedimentlimit;
     
    5657        parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
    5758
     59        if(isefficientlayer==1){
     60                elementactive_counter=xNewZeroInit<int>(iomodel->numberofelements);
     61                parameters->AddObject(new IntVecParam(ElementActiveCounterEnum,elementactive_counter,iomodel->numberofelements));
     62        }
     63       
    5864}/*}}}*/
    5965void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
    6066
    6167        bool   isefficientlayer;
     68        bool   element_active;
    6269        int    hydrology_model;
    63 
     70       
    6471        /*Fetch data needed: */
    6572        iomodel->Constant(&hydrology_model,HydrologyModelEnum);
     
    93100        }
    94101
    95         if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveNodeEnum);
     102        if(isefficientlayer){
     103                iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveNodeEnum);
     104
     105                for(int i=0;i<iomodel->numberofelements;i++){
     106                        Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
     107                        Input* node_mask_input = element->GetInput(HydrologydcMaskEplactiveNodeEnum); _assert_(node_mask_input);
     108                       
     109                        if(node_mask_input->Max()>0.) {
     110                                element_active = true;
     111                        }
     112                        else{
     113                                element_active = false;
     114                        }
     115                        element->AddInput(new BoolInput(HydrologydcMaskEplactiveEltEnum,element_active));
     116                }
     117        }
    96118}/*}}}*/
    97119void HydrologyDCInefficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
     
    661683
    662684        bool     element_active;
     685        bool     old_active;
     686        int      penalty_lock;
     687        int*     elementactive_counter = NULL;
    663688        Element* element=NULL;
    664689
    665690        for(int i=0;i<femmodel->elements->Size();i++){
    666691                element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    667 
    668                 int numvertices = element->GetNumberOfVertices();
    669                 Input* node_mask_input = element->GetInput(HydrologydcMaskEplactiveNodeEnum);
     692                element->parameters->FindParam(&elementactive_counter,NULL,ElementActiveCounterEnum);
     693                element->parameters->FindParam(&penalty_lock,HydrologydcPenaltyLockEnum);
     694               
     695                Input* node_mask_input = element->GetInput(HydrologydcMaskEplactiveNodeEnum); _assert_(node_mask_input);
     696                Input* old_active_input = element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(old_active_input);
     697                old_active_input->GetInputValue(&old_active);
     698               
    670699                if(node_mask_input->Max()>0.) {
    671700                        element_active = true;
     
    674703                        element_active = false;
    675704                }
     705                if(old_active!=element_active){
     706                        elementactive_counter[i]=elementactive_counter[i]+1;
     707                }
     708                if(elementactive_counter[i]>penalty_lock){
     709                        element_active = true;
     710                }
     711                //              femmodel->parameters->SetParam(elementactive_counter,ElementActiveCounterEnum);
    676712                element->AddInput(new BoolInput(HydrologydcMaskEplactiveEltEnum,element_active));
    677713        }
    678714}/*}}}*/
    679715
     716void HydrologyDCInefficientAnalysis::ResetCounter(FemModel* femmodel){/*{{{*/
     717
     718        int*     elementactive_counter = NULL;
     719        Element* element=NULL;
     720       
     721        for(int i=0;i<femmodel->elements->Size();i++){
     722                element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
     723                element->parameters->FindParam(&elementactive_counter,NULL,ElementActiveCounterEnum);
     724
     725                elementactive_counter=0;
     726        }
     727}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h

    r18641 r18705  
    4141                IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input);
    4242                void ElementizeEplMask(FemModel* femmodel);
     43                void ResetCounter(FemModel* femmodel);
    4344};
    4445#endif
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r18662 r18705  
    109109        EplHeadSlopeXEnum,
    110110        EplHeadSlopeYEnum,
     111        ElementActiveCounterEnum,
    111112        HydrologydcMaxIterEnum,
    112113        HydrologydcRelTolEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r18662 r18705  
    117117                case EplHeadSlopeXEnum : return "EplHeadSlopeX";
    118118                case EplHeadSlopeYEnum : return "EplHeadSlopeY";
     119                case ElementActiveCounterEnum : return "ElementActiveCounter";
    119120                case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
    120121                case HydrologydcRelTolEnum : return "HydrologydcRelTol";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r18662 r18705  
    117117              else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
    118118              else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
     119              else if (strcmp(name,"ElementActiveCounter")==0) return ElementActiveCounterEnum;
    119120              else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
    120121              else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
     
    136137              else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
    137138              else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
    138               else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
     142              if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
     143              else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
    143144              else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
    144145              else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
     
    259260              else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
    260261              else if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum;
    261               else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
     265              if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
     266              else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
    266267              else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
    267268              else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
     
    382383              else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
    383384              else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
    384               else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
     388              if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
     389              else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
    389390              else if (strcmp(name,"FlaimAnalysis")==0) return FlaimAnalysisEnum;
    390391              else if (strcmp(name,"FlaimSolution")==0) return FlaimSolutionEnum;
     
    505506              else if (strcmp(name,"Free")==0) return FreeEnum;
    506507              else if (strcmp(name,"Open")==0) return OpenEnum;
    507               else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
     511              if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
     512              else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
    512513              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    513514              else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
     
    628629              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    629630              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    630               else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"J")==0) return JEnum;
     634              if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
     635              else if (strcmp(name,"J")==0) return JEnum;
    635636              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
    636637              else if (strcmp(name,"Step")==0) return StepEnum;
     
    751752              else if (strcmp(name,"BasalforcingsOceanCoef")==0) return BasalforcingsOceanCoefEnum;
    752753              else if (strcmp(name,"BasalforcingsOceanLinDragCoef")==0) return BasalforcingsOceanLinDragCoefEnum;
    753               else if (strcmp(name,"BasalforcingsOceanQuadDragCoef")==0) return BasalforcingsOceanQuadDragCoefEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"BasalforcingsOceanTurningAngle")==0) return BasalforcingsOceanTurningAngleEnum;
     757              if (strcmp(name,"BasalforcingsOceanQuadDragCoef")==0) return BasalforcingsOceanQuadDragCoefEnum;
     758              else if (strcmp(name,"BasalforcingsOceanTurningAngle")==0) return BasalforcingsOceanTurningAngleEnum;
    758759              else if (strcmp(name,"BasalforcingsOceanSsh")==0) return BasalforcingsOceanSshEnum;
    759760              else if (strcmp(name,"BasalforcingsOceanVx")==0) return BasalforcingsOceanVxEnum;
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp

    r17372 r18705  
    222222                                        InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum);
    223223                                        InputUpdateFromSolutionx(femmodel,ug_epl);
     224                                        inefanalysis->ResetCounter(femmodel);
    224225                                        break;
    225226                                }
Note: See TracChangeset for help on using the changeset viewer.