Changeset 16963


Ignore:
Timestamp:
11/27/13 08:35:18 (11 years ago)
Author:
bdef
Message:

BUG:fixing invalid read in hydro

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp

    r16960 r16963  
    5858        /*Retrieve inputs as the initial state for the non linear iteration*/
    5959        GetSolutionFromInputsx(&ug_sed,femmodel);       
    60 
    61         //test
    62         GetSolutionFromInputsx(&uf_sed,femmodel);_assert_(uf_sed);
     60        Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
    6361
    6462        if(isefficientlayer) {
    6563                femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
    6664                GetSolutionFromInputsx(&ug_epl,femmodel);
    67 
    68                 //test
    69                 GetSolutionFromInputsx(&uf_epl,femmodel);_assert_(uf_epl);
    7065
    7166                /*Initialize the transfer input*/
     
    8681               
    8782                //test
    88                 uf_sed_sub_iter=uf_sed->Duplicate();
    89                 uf_sed->Copy(uf_sed_sub_iter);
     83                /* uf_sed_sub_iter=uf_sed->Duplicate(); */
     84                /* uf_sed->Copy(uf_sed_sub_iter); */
    9085
    9186                if(isefficientlayer){
     
    109104                sedconverged=false;
    110105                for(;;){
     106                        uf_sed_sub_iter=uf_sed->Duplicate();_assert_(uf_sed_sub_iter);
     107                        uf_sed->Copy(uf_sed_sub_iter);
    111108                        SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel);
    112109                        CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
     
    115112                        Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
    116113                        delete Kff; delete pf; delete df;
    117                         /* delete uf_sed_sub_iter; */
    118                         /* uf_sed_sub_iter=uf_sed->Duplicate(); */
    119                         /* uf_sed->Copy(uf_sed_sub_iter); */
    120114                        delete ug_sed;
    121115                        Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
     
    133127                        sedcount++;
    134128
    135                         //testing stuff
    136129                        if(sedconverged){
    137130                                sedconverged=false;
    138131                                duf=uf_sed_sub_iter->Duplicate();_assert_(duf);
    139                                 uf_sed_sub_iter->Copy(duf);_assert_(uf_sed_sub_iter);
    140                                 duf->AYPX(uf_sed,-1.0);_assert_(duf);
     132                                uf_sed_sub_iter->Copy(duf);
     133                                duf->AYPX(uf_sed,-1.0);
    141134                                ndu_sed=duf->Norm(NORM_TWO);
     135                                delete duf;
    142136                                nu_sed=uf_sed_sub_iter->Norm(NORM_TWO);
    143137                                if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("convergence criterion is NaN!");
    144138                                if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the EPL is used but empty*/
    145139                                if((ndu_sed/nu_sed)<eps_hyd){
    146                                 if(VerboseConvergence()) _printf0_("   # Inner sediment convergence achieve \n");
     140                                        if(VerboseConvergence()) _printf0_("   # Inner sediment convergence achieve \n");
    147141                                        sedconverged=true;
    148142                                }
    149                                 delete duf;
    150143                        }
    151144                        delete uf_sed_sub_iter;
    152                         uf_sed_sub_iter=uf_sed->Duplicate();_assert_(uf_sed_sub_iter);
    153                         uf_sed->Copy(uf_sed_sub_iter);_assert_(uf_sed);
    154                         //end of the crap
    155145
    156146                        if(sedconverged){
     
    166156                                InputUpdateFromSolutionx(femmodel,ug_sed);
    167157                                InputUpdateFromConstantx(femmodel,sediment_kmax,HydrologySedimentKmaxEnum);
    168                                 delete uf_sed_sub_iter;
    169158                                break;
    170159                        }
     
    199188                                //updating mask after the computation of the epl thickness (Allow to close too thin EPL)
    200189                                femmodel->HydrologyEPLupdateDomainx();
    201 
     190                                ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter);
     191                                ug_epl->Copy(ug_epl_sub_iter);_assert_(ug_epl);
     192                               
    202193                                SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
    203194                                CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
     
    214205                                ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
    215206                                femmodel->HydrologyEPLupdateDomainx();                 
    216                                         /* /\*Updating Nodal Mask*\/ */
    217                                         /* HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); */
    218                                         /* analysis->ElementizeEplMask(femmodel); */
    219                                         /* delete analysis; */
    220                                         /* femmodel->HydrologyTransferx(); */
    221207
    222208                                if (!eplconverged){
     
    231217                                eplcount++;
    232218
    233                                 //testing stuff
     219
    234220                                if(eplconverged){
    235221                                        eplconverged=false;
    236222                                        dug=ug_epl_sub_iter->Duplicate();_assert_(dug);
    237                                         ug_epl_sub_iter->Copy(dug);_assert_(ug_epl_sub_iter);
     223                                        ug_epl_sub_iter->Copy(dug);
    238224                                        dug->AYPX(ug_epl,-1.0);
    239225                                        ndu_epl=dug->Norm(NORM_TWO);
     
    246232                                }
    247233                                delete ug_epl_sub_iter;
    248                                 ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter);
    249                                 ug_epl->Copy(ug_epl_sub_iter);_assert_(ug_epl);
    250                                 //end of the crap
    251234
    252235                                if(eplconverged){
     
    261244                                        InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum);
    262245                                        InputUpdateFromSolutionx(femmodel,ug_epl);
    263                                         delete ug_epl_sub_iter;
    264246                                        break;
    265247                                }
     
    271253                if(!hydroconverged){
    272254                        //compute norm(du)/norm(u)
    273                         dug=ug_sed->Duplicate(); _assert_(dug);
     255                        dug=ug_sed_main_iter->Duplicate(); _assert_(dug);
    274256                        ug_sed_main_iter->Copy(dug);   
    275257                        dug->AYPX(ug_sed,-1.0);
     
    292274                                }
    293275                                else{
    294                                         dug=ug_epl->Duplicate();_assert_(dug);
    295                                         ug_epl_main_iter->Copy(dug);_assert_(ug_epl_main_iter);
     276                                        dug=ug_epl_main_iter->Duplicate();_assert_(dug);
     277                                        ug_epl_main_iter->Copy(dug);
    296278                                        dug->AYPX(ug_epl,-1.0);
    297279                                        ndu_epl=dug->Norm(NORM_TWO);
Note: See TracChangeset for help on using the changeset viewer.