Changeset 15214


Ignore:
Timestamp:
06/07/13 14:48:34 (12 years ago)
Author:
bdef
Message:

BUG:fix on the EPL mask definition

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r15196 r15214  
    47034703
    47044704                /*Compute SurfaceLogVelMisfit:
    4705                  *                 [        vel + eps     ] 2
     4705                 *        4         [        vel + eps     ] 2
    47064706                 * J = 4 \bar{v}^2 | log ( -----------  ) | 
    47074707                 *                 [       vel   + eps    ]
     
    61786178                water_input->GetInputValue(&water_load,gauss);
    61796179                transfer_input->GetInputValue(&transfer,gauss);
    6180                 scalar = Jdet*gauss->weight*(water_load-transfer);
     6180                scalar = Jdet*gauss->weight*(water_load+transfer);
    61816181                if(reCast<bool,IssmDouble>(dt)) scalar = scalar*dt;
    61826182                for(int i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
     
    62366236                /*Loading term*/
    62376237                transfer_input->GetInputValue(&transfer,gauss);
    6238                 scalar = Jdet*gauss->weight*transfer;
     6238                scalar = Jdet*gauss->weight*(-transfer);
    62396239                if(reCast<bool,IssmDouble>(dt)) scalar = scalar*dt;
    62406240                for(int i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
     
    64186418        this->inputs->GetInputValue(&converged,ConvergedEnum);
    64196419
     6420        /*Get inputs*/
     6421        if(isefficientlayer){
     6422                GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum);
     6423        }
    64206424        if(converged){
    64216425                this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
    64226426                this->parameters->FindParam(&kmax,HydrologySedimentKmaxEnum);
    64236427                this->parameters->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
    6424 
    6425                 if(isefficientlayer)GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum);
     6428               
    64266429               
    64276430                kappa=kmax*pow(10.,penalty_factor);
     
    64416444                }
    64426445        }
     6446        else{
     6447                for(int i=0;i<NUMVERTICES;i++){
     6448                        if(isefficientlayer){
     6449                                if(activeEpl[i]==1.0)activate[i]=1.0;
     6450                        }                               
     6451                }
     6452        }
     6453
    64436454        /*Add input to the element: */
    6444         if(isefficientlayer) this->inputs->AddInput(new TriaP1Input(HydrologydcMaskEplactiveEnum,activate));
     6455        if(isefficientlayer) this->inputs->AddInput(new TriaP1Input(HydrologydcMaskEplactiveEnum,&activate[0]));
    64456456        this->inputs->AddInput(new TriaP1Input(SedimentHeadEnum,values));
    64466457        this->inputs->AddInput(new TriaP1Input(SedimentHeadResidualEnum,residual));
    64476458
     6459        /*              if(id==1717){
     6460                        printf("6 \n");
     6461                        Input* EplMask=inputs->GetInput(HydrologydcMaskEplactiveEnum);
     6462                        EplMask->Echo();
     6463                }
     6464        */
    64486465        /*Free ressources:*/
    64496466        xDelete<int>(doflist);
     
    65066523                                _error_("no case higher than 3 for SedimentlimitFlag");
    65076524                }
    6508 
    65096525                /*Assign output pointer*/
    65106526                *ph_max=h_max;
     
    65206536        int        transfermethod;
    65216537        IssmDouble sed_trans,sed_thick;
    6522         IssmDouble leakage;
     6538        IssmDouble leakage,h_max;
    65236539        IssmDouble activeEpl[numdof];
    65246540        IssmDouble wh_trans[numdof]={0.0};
     
    65346550                /*Also get the flag to the transfer method*/
    65356551                this->parameters->FindParam(&transfermethod,HydrologydcTransferFlagEnum);
    6536                
     6552
    65376553                /*Switch between the different transfer methods cases*/
    65386554                switch(transfermethod){
     
    65526568                       
    65536569                        for(int i=0;i<numdof;i++){
    6554                        
    6555                                 if(activeEpl[i]==0.0)break;
    6556                                
     6570                                if(activeEpl[i]==0.0)continue;
     6571               
    65576572                                if(sed_head[i]>epl_head[i]){
    65586573                                        storing[i]=matpar->GetSedimentStoring();
    6559                                         wh_trans[i]=sed_trans*storing[i]*(sed_head[i]-epl_head[i])/(leakage*sed_thick);
     6574                                        wh_trans[i]=sed_trans*storing[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick);
    65606575                                }
    65616576                                else{
     6577                                        this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
    65626578                                        storing[i]=matpar->GetEplStoring();
    6563                                         wh_trans[i]=sed_trans*storing[i]*(sed_head[i]-epl_head[i])/(leakage*sed_thick);
     6579                                        wh_trans[i]=sed_trans*storing[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick);
     6580                                        if(sed_head[i]>h_max){
     6581                                                wh_trans[i]=0.0;
     6582                                        }
     6583                                        if((sed_head[i]+wh_trans[i])>h_max){
     6584                                                wh_trans[i]=h_max-sed_head[i];
     6585                                        }
    65646586                                }
     6587                                transfer->SetValue(doflist[i],wh_trans[i],INS_VAL);
    65656588                        }
    65666589                        break;
     
    65706593        }
    65716594        /*Assign output pointer*/
    6572         transfer->SetValues(numdof,doflist,&wh_trans[0],ADD_VAL);
     6595        /*transfer->SetValues(numdof,doflist,&wh_trans[0],INS_VAL);*/
    65736596}
    65746597
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp

    r15183 r15214  
    7373                femmodel->UpdateConstraintsx();
    7474                femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
    75                 femmodel->HydrologyTransferx();
    76 
     75                /*              femmodel->HydrologyTransferx();
     76                 */
    7777                /*Iteration on the sediment layer*/
    7878                for(;;){
     79                        femmodel->HydrologyTransferx();
    7980                        femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &sediment_kmax);
    8081                        CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
     
    117118                /*Iteration on the EPL layer*/
    118119                for(;;){
     120                        femmodel->HydrologyTransferx();
    119121                        femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df,NULL);
    120122                        CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
Note: See TracChangeset for help on using the changeset viewer.