source:
issm/oecreview/Archive/14312-15392/ISSM-15351-15352.diff@
15393
Last change on this file since 15393 was 15393, checked in by , 12 years ago | |
---|---|
File size: 8.6 KB |
-
TabularUnified ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
8 8 #include "../modules/modules.h" 9 9 10 10 void solutionsequence_hydro_nonlinear(FemModel* femmodel){ 11 12 11 /*solution : */ 13 12 Vector<IssmDouble>* ug_sed=NULL; 14 13 Vector<IssmDouble>* ug_epl=NULL; 15 14 Vector<IssmDouble>* uf=NULL; 16 Vector<IssmDouble>* old_uf=NULL;17 Vector<IssmDouble>* aged_ug_sed=NULL;18 Vector<IssmDouble>* aged_ug_epl=NULL;15 Vector<IssmDouble>* uf_int_iter=NULL; 16 Vector<IssmDouble>* ug_sed_main_iter=NULL; 17 Vector<IssmDouble>* ug_epl_main_iter=NULL; 19 18 Vector<IssmDouble>* ys=NULL; 20 19 Vector<IssmDouble>* dug=NULL; 21 20 Vector<IssmDouble>* old_ug=NULL; 21 22 22 Matrix<IssmDouble>* Kff=NULL; 23 23 Matrix<IssmDouble>* Kfs=NULL; 24 24 Vector<IssmDouble>* pf=NULL; … … 33 33 IssmDouble sediment_kmax,time; 34 34 IssmDouble eps_hyd; 35 35 IssmDouble ndu_sed,nu_sed; 36 IssmDouble ndu_epl,nu_epl; 36 IssmDouble ndu_epl,nu_epl; 37 37 38 38 /*Recover parameters: */ 39 39 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);//FIXME 40 40 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 41 41 femmodel->parameters->FindParam(&eps_hyd,HydrologydcRelTolEnum); 42 42 femmodel->parameters->FindParam(&time,TimeEnum); 43 hydro_maxiter=1 00;43 hydro_maxiter=150; 44 44 hydrocount=1; 45 45 46 46 /*Iteration on the two layers*/ … … 56 56 sedcount=1; 57 57 eplcount=1; 58 58 //save pointer to old velocity 59 delete aged_ug_sed;60 aged_ug_sed=ug_sed;59 delete ug_sed_main_iter; 60 ug_sed_main_iter=ug_sed; 61 61 if(isefficientlayer){ 62 delete aged_ug_epl;63 aged_ug_epl=ug_epl;62 delete ug_epl_main_iter; 63 ug_epl_main_iter=ug_epl; 64 64 } 65 65 66 66 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); … … 77 77 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum); 78 78 Reduceloadx(pf,Kfs,ys); delete Kfs; 79 79 delete uf; 80 Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);81 delete old_uf; old_uf=uf->Duplicate();82 if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting aged_ug_sed*/80 Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters); 81 delete uf_int_iter; uf_int_iter=uf->Duplicate(); 82 if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/ 83 83 delete Kff; delete pf; delete df; 84 84 85 85 Mergesolutionfromftogx(&ug_sed,uf,ys,femmodel->nodes,femmodel->parameters); delete ys; … … 119 119 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum); 120 120 Reduceloadx(pf,Kfs,ys); delete Kfs; 121 121 delete uf; 122 Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);123 delete old_uf; old_uf=uf->Duplicate();122 Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters); 123 delete uf_int_iter; uf_int_iter=uf->Duplicate(); 124 124 if(eplcount>1) delete ug_epl; 125 125 delete Kff;delete pf; 126 126 delete df; 127 127 Mergesolutionfromftogx(&ug_epl,uf,ys,femmodel->nodes,femmodel->parameters); delete ys; 128 128 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl); 129 //femmodel->HydrologyEPLupdateDomainx();130 129 ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 130 femmodel->HydrologyEPLupdateDomainx(); 131 131 132 132 if (!eplconverged){ 133 133 if(VerboseConvergence()) _printf0_(" # EPL unstable constraints = " << num_unstable_constraints << "\n"); … … 137 137 } 138 138 } 139 139 eplcount++; 140 140 141 141 if(eplconverged){ 142 142 InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,eplconverged,ConvergedEnum); 143 143 InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,MeltingOffsetEnum); 144 144 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl); 145 //femmodel->HydrologyEPLupdateDomainx();146 145 break; 147 146 } 148 147 } … … 151 150 if(!hydroconverged){ 152 151 //compute norm(du)/norm(u) 153 152 dug=ug_sed->Duplicate(); _assert_(dug); 154 aged_ug_sed->Copy(dug);153 ug_sed_main_iter->Copy(dug); 155 154 dug->AYPX(ug_sed,-1.0); 156 ndu_sed=dug->Norm(NORM_TWO); nu_sed= aged_ug_sed->Norm(NORM_TWO);155 ndu_sed=dug->Norm(NORM_TWO); nu_sed=ug_sed_main_iter->Norm(NORM_TWO); 157 156 if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("Sed convergence criterion is NaN!"); 158 157 if (!xIsNan<IssmDouble>(eps_hyd)){ 159 158 if (!isefficientlayer){ 160 159 if ((ndu_sed/nu_sed)<eps_hyd){ 161 if(VerboseConvergence()) _printf0_(setw(50) << left << " Converged \n");160 if(VerboseConvergence()) _printf0_(setw(50) << left << " Converged after, " << hydrocount << " iterations \n"); 162 161 hydroconverged=true; 163 162 } 164 163 else{ … … 168 167 } 169 168 else{ 170 169 dug=ug_epl->Duplicate();_assert_(dug); 171 aged_ug_epl->Copy(dug);_assert_(aged_ug_epl);170 ug_epl_main_iter->Copy(dug);_assert_(ug_epl_main_iter); 172 171 dug->AYPX(ug_epl,-1.0); 173 172 ndu_epl=dug->Norm(NORM_TWO); 174 nu_epl= aged_ug_epl->Norm(NORM_TWO);173 nu_epl=ug_epl_main_iter->Norm(NORM_TWO); 175 174 176 175 if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!"); 177 176 if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/ 178 if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)< eps_hyd){179 if (VerboseConvergence()) _printf0_(setw(50) << left << " Converged \n");177 if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd*10)){ 178 if (VerboseConvergence()) _printf0_(setw(50) << left << " Converged after, " << hydrocount << " iterations \n"); 180 179 hydroconverged=true; 181 180 } 182 181 else{ … … 201 200 delete ug_epl; 202 201 delete ug_sed; 203 202 delete uf; 204 delete old_uf;205 delete aged_ug_sed;206 delete aged_ug_epl;203 delete uf_int_iter; 204 delete ug_sed_main_iter; 205 delete ug_epl_main_iter; 207 206 delete dug; 208 209 207 } -
TabularUnified ../trunk-jpl/src/c/classes/FemModel.cpp
852 852 element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i)); 853 853 element->CreateKMatrix(Kff_temp,NULL); 854 854 } 855 855 856 for (i=0;i<this->loads->Size();i++){ 856 857 load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i)); 857 858 if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff_temp,NULL); … … 871 872 element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i)); 872 873 element->CreateKMatrix(Kff,Kfs); 873 874 } 875 874 876 for (i=0;i<this->loads->Size();i++){ 875 877 load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i)); 876 878 if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs); -
TabularUnified ../trunk-jpl/src/c/classes/Elements/Tria.cpp
6131 6131 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6132 6132 6133 6133 gauss->GaussPoint(ig); 6134 6135 6134 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6136 6135 6137 6136 /*Diffusivity*/ … … 6156 6155 &Ke->values[0],1); 6157 6156 } 6158 6157 } 6159 6160 6158 /*Clean up and return*/ 6161 6159 delete gauss; 6162 6160 return Ke; … … 6243 6241 6244 6242 /* Start looping on the number of gaussian points: */ 6245 6243 gauss=new GaussTria(2); 6246 6247 6244 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6248 6245 6249 6246 gauss->GaussPoint(ig); 6250 6251 6247 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6252 6248 GetNodalFunctions(basis, gauss); 6253 6249 … … 6310 6306 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6311 6307 6312 6308 gauss->GaussPoint(ig); 6313 6314 6309 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6315 6310 GetNodalFunctions(basis, gauss); 6316 6311 … … 6690 6685 6691 6686 /*Increase of the efficient system is needed if the epl head reach the maximum value (sediment max value for now)*/ 6692 6687 this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]); 6693 if(eplhead[i]>=h_max && this->AnyActive()){ 6688 if(eplhead[i]>=h_max && this->AnyActive()){ 6694 6689 for(j=0;j<numdof;j++){ 6695 6690 if(old_active[j]>0.){ 6696 6691 vec_mask->SetValue(nodes[i]->Sid(),1.,INS_VAL);
Note:
See TracBrowser
for help on using the repository browser.