Changeset 17006


Ignore:
Timestamp:
12/04/13 16:59:05 (11 years ago)
Author:
bdef
Message:

BUG: modification in the way the transfer deals with its mask

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

Legend:

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

    r17001 r17006  
    46594659        bool       isefficientlayer;
    46604660        bool       active_element;
    4661         int        transfermethod;
     4661        int        transfermethod,step;
    46624662        IssmDouble sed_trans,sed_thick;
    46634663        IssmDouble leakage,h_max;
     
    46664666        IssmDouble epl_specificstoring[numdof],sedstoring[numdof];
    46674667        IssmDouble epl_head[numdof],sed_head[numdof];
     4668        IssmDouble old_transfer[numdof];
    46684669
    46694670        Input* active_element_input=NULL;
    46704671
     4672               
    46714673        GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    46724674
    46734675        /*Get the flag to know if the efficient layer is present*/
    46744676        this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
     4677
     4678        this->parameters->FindParam(&step,StepEnum);
    46754679
    46764680        if(isefficientlayer){
     
    46854689                case 1:
    46864690
     4691       
    46874692                        active_element_input=inputs->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);
    46884693                        active_element_input->GetInputValue(&active_element);
     
    46984703
    46994704                        if(!active_element){
    4700 
    47014705                                /*No transfer if the EPL is not active*/
    4702                                 for(int i=0;i<numdof;i++){
    4703                                         wh_trans=0.0;
    4704                                         /*Assign output pointer*/
    4705                                         transfer->SetValue(doflist[i],wh_trans,INS_VAL);
    4706                                 }
     4706                                /* for(int i=0;i<numdof;i++){ */
     4707                                /*      wh_trans=0.0; */
     4708                                /*      /\*Assign output pointer*\/ */
     4709                                /*      transfer->SetValue(doflist[i],wh_trans,INS_VAL); */
     4710                                /* } */
    47074711                        }
    47084712                        else{
    4709 
     4713                       
     4714                                //GetInputListOnVertices(&old_transfer[0],WaterTransferEnum);
     4715                       
    47104716                                for(int i=0;i<numdof;i++){
    47114717                                        epl_specificstoring[i]=matpar->GetEplSpecificStoring();         
    47124718                                        sedstoring[i]=matpar->GetSedimentStoring();
    4713                                        
     4719                                        this->GetHydrologyDCInefficientHmax(&h_max,i);
     4720                                               
    47144721                                        /*EPL head higher than sediment head, transfer from the epl to the sediment*/
    47154722                                        if(epl_head[i]>sed_head[i]){
    47164723                                                wh_trans=epl_specificstoring[i]*epl_thickness[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);                               
    4717                                                
     4724
    47184725                                                /*No transfer if the sediment head is allready at the maximum*/
    4719                                                 this->GetHydrologyDCInefficientHmax(&h_max,i);
    4720                                                 if(sed_head[i]>=h_max)wh_trans=0.0;
     4726                                                if(sed_head[i]>=h_max){
     4727                                                        wh_trans=0.0;
     4728                                                }
    47214729                                        }
    47224730                                        /*EPL head lower than sediment head, transfer from the sediment to the epl*/
    47234731                                        else if(epl_head[i]<=sed_head[i]){
    4724                                                 wh_trans=sedstoring[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);                         
     4732                                                wh_trans=sedstoring[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);
    47254733                                        }
     4734
     4735                                        /*Introduce relaxation*/
     4736                                        //wh_trans=old_transfer[i]+0.9*(wh_trans-old_transfer[i]);
     4737                               
    47264738                                        /*Assign output pointer*/
    47274739                                        transfer->SetValue(doflist[i],wh_trans,INS_VAL);
    4728                                         /* if(nodes[i]->id>=54){ */
    4729                                         /*      printf("%i %e %e %e \n",nodes[i]->id-54,wh_trans,sed_head[i],epl_head[i]); */
    4730                                         /* } */
    4731                                         /* else{*/
    4732                                         /*      printf("%i %e %e %e \n",nodes[i]->id,wh_trans,sed_head[i],epl_head[i]); */
    47334740                                }
    47344741                        }
     
    47994806                }
    48004807                /*If epl thickness gets under 0, close the layer*/
    4801                 /* else if(epl_thickness[i]<0.0){ */
    4802                 /*      vec_mask->SetValue(nodes[i]->Sid(),0.,INS_VAL); */
    4803                 /* } */
     4808                else if(epl_thickness[i]<0.0){
     4809                        vec_mask->SetValue(nodes[i]->Sid(),0.,INS_VAL);
     4810                }
    48044811                /*Increase of the efficient system is needed if the epl head reach the maximum value (sediment max value for now)*/
    48054812                this->GetHydrologyDCInefficientHmax(&h_max,i);
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp

    r16904 r17006  
    382382/*FUNCTION Matpar::GetSedimentStoring {{{*/
    383383IssmDouble Matpar::GetSedimentStoring(){
    384         return this->rho_freshwater* this->g* this->sediment_porosity* this->sediment_thickness*
    385     ( this->water_compressibility+( this->sediment_compressibility/ this->sediment_porosity));           
     384        return this->rho_freshwater * this->g * this->sediment_porosity * this->sediment_thickness *
     385    (this->water_compressibility + (this->sediment_compressibility / this->sediment_porosity));         
    386386}               
    387387/*}}}*/
    388388/*FUNCTION Matpar::GetEplSpecificStoring {{{*/
    389389IssmDouble Matpar::GetEplSpecificStoring(){
    390         return this->rho_freshwater* this->g* this->epl_porosity*
    391     ( this->water_compressibility+( this->epl_compressibility/ this->epl_porosity));             
     390        return this->rho_freshwater * this->g * this->epl_porosity *
     391    (this->water_compressibility + (this->epl_compressibility / this->epl_porosity));           
    392392}               
    393393/*}}}*/
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp

    r16963 r17006  
    8080                ug_sed->Copy(ug_sed_main_iter);
    8181               
    82                 //test
    83                 /* uf_sed_sub_iter=uf_sed->Duplicate(); */
    84                 /* uf_sed->Copy(uf_sed_sub_iter); */
    85 
    8682                if(isefficientlayer){
    8783                        ug_epl_main_iter=ug_epl->Duplicate();
    8884                        ug_epl->Copy(ug_epl_main_iter);
    89                         //test
    90                         ug_epl_sub_iter=ug_epl->Duplicate();
    91                         ug_epl->Copy(ug_epl_sub_iter);
    9285                }
    9386
     
    10497                sedconverged=false;
    10598                for(;;){
     99
    106100                        uf_sed_sub_iter=uf_sed->Duplicate();_assert_(uf_sed_sub_iter);
    107101                        uf_sed->Copy(uf_sed_sub_iter);
     
    121115                                if(num_unstable_constraints==0) sedconverged = true;
    122116                                if (sedcount>=hydro_maxiter){
     117                                        //sedconverged=true;
    123118                                        _error_("   maximum number of Sediment iterations (" << hydro_maxiter << ") exceeded");
    124119                                }
     
    128123
    129124                        if(sedconverged){
    130                                 sedconverged=false;
     125                                if(isefficientlayer){
     126                                        /*Updating Elemental Mask*/
     127                                        HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
     128                                        analysis->ElementizeEplMask(femmodel);
     129                                        delete analysis;
     130                                        femmodel->HydrologyTransferx();
     131                                }
     132                                sedconverged=false;     
     133                                /*Checking convegence on the value of the sediment head*/
    131134                                duf=uf_sed_sub_iter->Duplicate();_assert_(duf);
    132135                                uf_sed_sub_iter->Copy(duf);
     
    137140                                if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("convergence criterion is NaN!");
    138141                                if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the EPL is used but empty*/
     142                                if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    139143                                if((ndu_sed/nu_sed)<eps_hyd){
    140144                                        if(VerboseConvergence()) _printf0_("   # Inner sediment convergence achieve \n");
     
    145149
    146150                        if(sedconverged){
    147                                 if(isefficientlayer){
    148                                         /*Updating Nodal Mask*/
    149                                         HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
    150                                         analysis->ElementizeEplMask(femmodel);
    151                                         delete analysis;
    152                                         femmodel->HydrologyTransferx();
    153                                 }
    154151                                femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum);
    155152                                InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum);
     
    166163                        InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
    167164                        InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
    168                         femmodel->HydrologyEPLupdateDomainx();
    169165                        femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
    170166
     
    188184                                //updating mask after the computation of the epl thickness (Allow to close too thin EPL)
    189185                                femmodel->HydrologyEPLupdateDomainx();
     186                                       
    190187                                ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter);
    191                                 ug_epl->Copy(ug_epl_sub_iter);_assert_(ug_epl);
    192                                
     188                                ug_epl->Copy(ug_epl_sub_iter);
    193189                                SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
    194190                                CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
     
    204200                                InputUpdateFromSolutionx(femmodel,ug_epl);
    205201                                ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
    206                                 femmodel->HydrologyEPLupdateDomainx();                 
     202
    207203
    208204                                if (!eplconverged){
     
    210206                                        if(num_unstable_constraints==0) eplconverged = true;
    211207                                        if (eplcount>=hydro_maxiter){
    212                                         /*Hacking to get the results of non converged runs*/
    213                                         //eplconverged = true;
     208                                                //eplconverged =true;
    214209                                                _error_("   maximum number of EPL iterations (" << hydro_maxiter << ") exceeded");
    215210                                        }
     
    220215                                if(eplconverged){
    221216                                        eplconverged=false;
     217                               
    222218                                        dug=ug_epl_sub_iter->Duplicate();_assert_(dug);
    223219                                        ug_epl_sub_iter->Copy(dug);
     
    229225                                        if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("convergence criterion is NaN!");
    230226                                        if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
     227                                        if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    231228                                        if((ndu_epl/nu_epl)<eps_hyd)eplconverged=true;
    232229                                }
     
    234231
    235232                                if(eplconverged){
    236 
    237                                         /*Updating Nodal Mask*/
     233                                        /*Updating Elemental Mask*/
    238234                                        HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
    239235                                        analysis->ElementizeEplMask(femmodel);
    240236                                        delete analysis;
    241237                                        femmodel->HydrologyTransferx();
    242 
     238                                       
    243239                                        InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum);
    244240                                        InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum);
     
    248244                        }
    249245                }
    250                
    251246               
    252247                /*System convergence check*/
     
    303298                hydrocount++;
    304299                if(hydroconverged)break;
    305         }
     300}
    306301       
    307302        InputUpdateFromSolutionx(femmodel,ug_sed);
Note: See TracChangeset for help on using the changeset viewer.