Changeset 17162
- Timestamp:
- 01/23/14 14:58:36 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r17030 r17162 117 117 /*Intermediaries*/ 118 118 int meshtype; 119 bool active_element;120 119 Element* basalelement; 121 Input* active_element_input=NULL;122 120 123 121 /*Get basal element*/ … … 134 132 } 135 133 136 /* active_element_input=basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); */137 /* active_element_input->GetInputValue(&active_element); */138 139 134 /*Check that all nodes are active, else return empty matrix*/ 140 135 if(!basalelement->AllActive()) { 141 //if(!active_element){142 136 if(meshtype!=Mesh2DhorizontalEnum){ 143 137 basalelement->DeleteMaterials(); … … 210 204 /*Intermediaries*/ 211 205 int meshtype; 212 bool active_element;213 206 Element* basalelement; 214 Input* active_element_input=NULL;215 216 207 217 208 /*Get basal element*/ … … 227 218 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 228 219 } 229 /* active_element_input=basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); */230 /* active_element_input->GetInputValue(&active_element); */231 232 220 /*Check that all nodes are active, else return empty matrix*/ 233 221 if(!basalelement->AllActive()) { 234 //if(!active_element){235 222 if(meshtype!=Mesh2DhorizontalEnum){ 236 223 basalelement->DeleteMaterials(); … … 312 299 313 300 void HydrologyDCEfficientAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 314 int meshtype; 301 302 int meshtype,i; 303 Element* basalelement=NULL; 304 315 305 element->FindParam(&meshtype,MeshTypeEnum); 316 switch(meshtype){ 317 case Mesh2DhorizontalEnum: 318 element->InputUpdateFromSolutionOneDof(solution,EplHeadEnum); 319 break; 320 case Mesh3DEnum: 321 element->InputUpdateFromSolutionOneDofCollapsed(solution,EplHeadEnum); 322 break; 323 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 324 } 325 }/*}}}*/ 306 307 if(meshtype!=Mesh2DhorizontalEnum){ 308 if(!element->IsOnBed()) return; 309 basalelement=element->SpawnBasalElement(); 310 } 311 else{ 312 basalelement = element; 313 } 314 315 /*Intermediary*/ 316 int* doflist = NULL; 317 318 /*Fetch number of nodes for this finite element*/ 319 int numnodes = basalelement->GetNumberOfNodes(); 320 321 /*Fetch dof list and allocate solution vector*/ 322 basalelement->GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 323 324 IssmDouble* eplHeads = xNew<IssmDouble>(numnodes); 325 IssmDouble* eplOldHeads = xNew<IssmDouble>(numnodes); 326 IssmDouble Stepping; 327 328 329 /*Use the dof list to index into the solution vector: */ 330 for(i=0;i<numnodes;i++){ 331 eplHeads[i]=solution[doflist[i]]; 332 if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector"); 333 } 334 335 /*Get previous water head*/ 336 basalelement->GetInputListOnNodes(&eplOldHeads[0],EplHeadOldEnum); 337 338 for(i=0;i<numnodes;i++) { 339 eplHeads[i] = eplOldHeads[i]+0.8*(eplHeads[i]-eplOldHeads[i]); 340 } 341 /*Add input to the element: */ 342 element->AddBasalInput(EplHeadEnum,eplHeads,P1Enum); 343 344 /*Free ressources:*/ 345 xDelete<IssmDouble>(eplHeads); 346 xDelete<IssmDouble>(eplOldHeads); 347 xDelete<int>(doflist); 348 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 349 } /*}}}*/ 326 350 327 351 /*Intermediaries*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r17158 r17162 1566 1566 name==SedimentHeadOldEnum || 1567 1567 name==SedimentHeadEnum || 1568 name==EplHeadEnum || 1568 1569 name==EplHeadOldEnum || 1569 name==EplHeadEnum ||1570 1570 name==HydrologydcEplThicknessOldEnum || 1571 1571 name==HydrologydcEplInitialThicknessEnum || … … 4725 4725 const int numdof = NDOF1 *NUMVERTICES; 4726 4726 int *doflist = NULL; 4727 int analysis_type; 4727 4728 bool isefficientlayer; 4728 4729 bool active_element; 4729 int transfermethod ,step;4730 int transfermethod; 4730 4731 IssmDouble leakage,h_max; 4731 4732 IssmDouble wh_trans,sed_thick; 4733 IssmDouble epl_specificstoring,sedstoring; 4732 4734 IssmDouble activeEpl[numdof],epl_thickness[numdof]; 4733 IssmDouble epl_specificstoring[numdof],sedstoring[numdof];4734 4735 IssmDouble epl_head[numdof],sed_head[numdof]; 4735 IssmDouble old_transfer[numdof],sed_trans[numdof];4736 IssmDouble preceding_transfer[numdof],sed_trans[numdof]; 4736 4737 4737 4738 Input* active_element_input=NULL; 4738 4739 4740 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 4739 4741 4740 4742 GetDofList(&doflist,NoneApproximationEnum,GsetEnum); … … 4742 4744 /*Get the flag to know if the efficient layer is present*/ 4743 4745 this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 4744 4745 this->parameters->FindParam(&step,StepEnum);4746 4746 4747 4747 if(isefficientlayer){ 4748 4748 /*Also get the flag to the transfer method*/ 4749 4749 this->parameters->FindParam(&transfermethod,HydrologydcTransferFlagEnum); 4750 4750 4751 4751 /*Switch between the different transfer methods cases*/ 4752 4752 switch(transfermethod){ … … 4755 4755 break; 4756 4756 case 1: 4757 4758 4757 4759 4758 active_element_input=inputs->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 4760 4759 active_element_input->GetInputValue(&active_element); 4761 4760 4762 GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); 4761 GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); 4763 4762 GetInputListOnVertices(&sed_trans[0],HydrologydcSedimentTransmitivityEnum); 4764 4763 GetInputListOnVertices(&epl_head[0],EplHeadEnum); … … 4773 4772 } 4774 4773 else{ 4774 GetInputListOnVertices(&preceding_transfer[0],WaterTransferEnum); 4775 sedstoring=matpar->GetSedimentStoring(); 4776 epl_specificstoring=matpar->GetEplSpecificStoring(); 4777 4778 for(int i=0;i<numdof;i++){ 4779 this->GetHydrologyDCInefficientHmax(&h_max,i); 4775 4780 4776 GetInputListOnVertices(&old_transfer[0],WaterTransferEnum);4777 4778 for(int i=0;i<numdof;i++){4779 epl_specificstoring[i]=matpar->GetEplSpecificStoring();4780 sedstoring[i]=matpar->GetSedimentStoring();4781 this->GetHydrologyDCInefficientHmax(&h_max,i);4782 4783 //avoiding transfer at first time4784 if(epl_head[i]==0.0)epl_head[i]=sed_head[i];4785 4781 /*EPL head higher than sediment head, transfer from the epl to the sediment*/ 4786 4782 if(epl_head[i]>sed_head[i]){ 4787 wh_trans=epl_specificstoring [i]*epl_thickness[i]*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick);4783 wh_trans=epl_specificstoring*epl_thickness[i]*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick); 4788 4784 /*No transfer if the sediment head is allready at the maximum*/ 4789 4785 if(sed_head[i]>=h_max){ … … 4791 4787 } 4792 4788 } 4793 /* EPL head lower than sediment head, transfer from the sediment to the epl*/4789 /* EPL head lower than sediment head, transfer from the sediment to the epl */ 4794 4790 else if(epl_head[i]<=sed_head[i]){ 4795 wh_trans=sedstoring [i]*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick);4791 wh_trans=sedstoring*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick); 4796 4792 } 4797 4798 /*Introduce relaxation*/ 4799 // wh_trans=old_transfer[i]+0.66*(wh_trans-old_transfer[i]); 4800 4801 /* if(this->Id()==27){ */ 4802 /* printf("old %e, transfer is %e ,eplhead %e, sedhead %e, factor %e \n",old_transfer[i],wh_trans,epl_head[i],sed_head[i],epl_specificstoring[i]*epl_thickness[i]*sed_trans[i]); */ 4803 /* } */ 4804 4793 4794 /*Relaxation stuff*/ 4795 wh_trans=preceding_transfer[i]+0.8*(wh_trans-preceding_transfer[i]); 4796 4805 4797 /*Assign output pointer*/ 4806 4798 transfer->SetValue(doflist[i],wh_trans,INS_VAL); 4807 4808 4809 4799 } 4810 4800 } … … 4846 4836 int i,j; 4847 4837 const int numdof = NDOF1 *NUMVERTICES; 4838 IssmDouble init_thick; 4848 4839 IssmDouble h_max; 4849 4840 IssmDouble sedheadmin; … … 4857 4848 Input* active_element_input=NULL; 4858 4849 4850 init_thick = matpar->GetEplInitialThickness(); 4851 4859 4852 active_element_input=inputs->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 4860 4853 active_element_input->GetInputValue(&active_element); … … 4876 4869 } 4877 4870 4878 /*If mask was alread one, keep one*/4871 /*If mask was already one, keep one*/ 4879 4872 else if(old_active[i]>0.){ 4880 4873 vec_mask->SetValue(nodes[i]->Sid(),1.,INS_VAL); 4881 }4882 /*If epl thickness gets under 0, close the layer*/4883 else if(epl_thickness[i]<0.0){4884 vec_mask->SetValue(nodes[i]->Sid(),0.,INS_VAL);4874 /*If epl thickness gets under , close the layer*/ 4875 if(epl_thickness[i]<0.001*init_thick){ 4876 vec_mask->SetValue(nodes[i]->Sid(),0.,INS_VAL); 4877 } 4885 4878 } 4886 4879 /*Increase of the efficient system is needed if the epl head reach the maximum value (sediment max value for now)*/ 4887 4880 this->GetHydrologyDCInefficientHmax(&h_max,i); 4888 //if(eplhead[i]>=h_max && this->AnyActive()){4889 4881 if(eplhead[i]>=h_max && active_element){ 4890 4882 for(j=0;j<numdof;j++){ … … 4895 4887 if(sedhead[j] == sedheadmin){ 4896 4888 vec_mask->SetValue(nodes[j]->Sid(),1.,INS_VAL); 4897 // break;4898 4889 } 4899 4890 } … … 4908 4899 const int numdof = NDOF1 *NUMVERTICES; 4909 4900 bool isefficientlayer; 4901 bool active_element; 4910 4902 IssmDouble n,A,dt,init_thick; 4911 4903 IssmDouble rho_water,rho_ice; … … 4913 4905 IssmDouble EPL_N,epl_conductivity; 4914 4906 IssmDouble activeEpl[numdof],thickness[numdof]; 4915 IssmDouble eplhead[numdof], old_thickness[numdof];4907 IssmDouble eplhead[numdof],old_eplhead[numdof]; 4916 4908 IssmDouble epl_slopeX[numdof],epl_slopeY[numdof]; 4909 IssmDouble preceding_thickness[numdof],old_thickness[numdof]; 4917 4910 IssmDouble ice_thickness[numdof],bed[numdof]; 4918 4911 4919 bool active_element;4920 4912 Input* active_element_input=NULL; 4921 4913 … … 4925 4917 4926 4918 if(isefficientlayer){ 4919 4927 4920 /*For now, assuming just one way to compute EPL thickness*/ 4928 4921 rho_water = matpar->GetRhoWater(); … … 4935 4928 A = material->GetAbar(); 4936 4929 4937 // GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveNodeEnum);4938 4939 4930 active_element_input=inputs->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 4940 4931 active_element_input->GetInputValue(&active_element); … … 4947 4938 GetInputListOnVertices(&bed[0],BedEnum); 4948 4939 4949 //if(!this->AnyActive()){4950 4940 if(!active_element){ 4951 4941 /*Keeping thickness to initial value if EPL is not active*/ 4952 for(int i=0;i<numdof;i++){ 4942 for(int i=0;i<numdof;i++){ 4953 4943 thickness[i]=init_thick; 4954 4944 } 4955 4945 } 4956 4946 else{ 4957 for(int i=0;i<numdof;i++){ 4958 /*Compute first the effective pressure in the EPL*/ 4959 EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i]))); 4960 if(EPL_N<0.0)EPL_N=0.0; 4961 /*Get then the square of the gradient of EPL heads*/ 4962 EPLgrad2 = (epl_slopeX[i]*epl_slopeX[i]+epl_slopeY[i]*epl_slopeY[i]); 4947 GetInputListOnVertices(&preceding_thickness[0],HydrologydcEplThicknessEnum); 4948 for(int i=0;i<numdof;i++){ 4949 4950 /*Compute first the effective pressure in the EPL*/ 4951 EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i]))); 4952 if(EPL_N<0.0)EPL_N=0.0; 4953 /*Get then the square of the gradient of EPL heads*/ 4954 EPLgrad2 = (epl_slopeX[i]*epl_slopeX[i]+epl_slopeY[i]*epl_slopeY[i]); 4955 4956 /*And proceed to the real thing*/ 4957 thickness[i] = old_thickness[i]*(1+((rho_water*gravity*dt)/(rho_ice*latentheat))*epl_conductivity*EPLgrad2-2.0*(A*dt/(pow(n,n)))*(pow(EPL_N,n))); 4963 4958 4964 /*And proceed to the real thing*/ 4965 thickness[i] = old_thickness[i]*(1+((rho_water*gravity*dt)/(rho_ice*latentheat))*epl_conductivity*EPLgrad2-2.0*(A*dt/(pow(n,n)))*(pow(EPL_N,n))); 4966 // thickness[i] = old_thickness[i]+0.66*(thickness[i]-old_thickness[i]); 4967 /* if(this->Id()==27){ */ 4968 /* printf("old %e, thickness is %e ,eplhead %e, slopeX %e, slopeY %e\n",old_thickness[i],thickness[i],eplhead[i],epl_slopeX[i],epl_slopeY[i]); */ 4969 /*}*/ 4959 /*Relaxation stuff*/ 4960 thickness[i] = preceding_thickness[i]+0.8*(thickness[i]-preceding_thickness[i]); 4970 4961 } 4971 4962 } -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r17140 r17162 1423 1423 void FemModel::HydrologyTransferx(void){ /*{{{*/ 1424 1424 1425 Vector<IssmDouble>* transferg=NULL; 1425 Vector<IssmDouble>* transferg=NULL; 1426 1426 1427 1427 /*Vector allocation*/ … … 1429 1429 1430 1430 for (int i=0;i<elements->Size();i++){ 1431 1431 1432 Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i)); 1432 1433 element->GetHydrologyTransfer(transferg); … … 1440 1441 } 1441 1442 /*}}}*/ 1443 1442 1444 void FemModel::HydrologyEPLThicknessx(void){ /*{{{*/ 1443 1445 -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
r17030 r17162 34 34 35 35 bool sedconverged,eplconverged,hydroconverged; 36 bool transfered; 36 37 bool isefficientlayer; 37 38 int constraints_converged; … … 43 44 IssmDouble ndu_sed,nu_sed; 44 45 IssmDouble ndu_epl,nu_epl; 46 IssmDouble SedConv,EplConv; 45 47 46 48 /*Recover parameters: */ … … 51 53 52 54 /*FIXME, hardcoded, put on an enum*/ 53 hydro_maxiter=1 50;55 hydro_maxiter=100; 54 56 55 57 hydrocount=1; … … 78 80 sedcount=1; 79 81 eplcount=1; 82 SedConv=1.0; 83 EplConv=1.0; 80 84 81 85 /*If there is two layers we need an outer loop value to compute convergence*/ … … 129 133 /*Update Elemental Mask and compute transfer*/ 130 134 if(isefficientlayer){ 131 HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); 132 analysis->ElementizeEplMask(femmodel); 133 delete analysis; 134 femmodel->HydrologyTransferx(); 135 if(SedConv<0.3){ 136 HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); 137 analysis->ElementizeEplMask(femmodel); 138 delete analysis; 139 femmodel->HydrologyTransferx(); 140 transfered=true; 141 } 142 else{ 143 transfered=false; 144 } 135 145 } 136 146 /*Checking convegence on the value of the sediment head*/ … … 144 154 if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the layer is empty*/ 145 155 if(VerboseConvergence()) _printf0_(setw(50) << left << " Inner Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n"); 156 SedConv = ndu_sed/nu_sed*100; 146 157 if((ndu_sed/nu_sed)<eps_hyd){ 147 158 if(VerboseConvergence()) _printf0_(" # Inner sediment convergence achieve \n"); … … 149 160 } 150 161 delete uf_sed_sub_iter; 151 if(sedconverged ){162 if(sedconverged && transfered){ 152 163 femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum); 153 164 InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum); … … 161 172 /* {{{ *//*Now dealing with the EPL in the same way*/ 162 173 if(isefficientlayer){ 163 164 174 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 165 175 /*updating mask*/ … … 170 180 171 181 eplconverged=false; 182 172 183 for(;;){ 184 173 185 ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter); 174 186 ug_epl->Copy(ug_epl_sub_iter); 187 188 if(EplConv<0.3){ 189 /* {{{ *//*Retriev the EPL head slopes and compute EPL Thickness*/ 190 if(VerboseSolution()) _printf0_("computing EPL Head slope...\n"); 191 femmodel->SetCurrentConfiguration(L2ProjectionEPLAnalysisEnum); 192 femmodel->UpdateConstraintsL2ProjectionEPLx(); 193 femmodel->parameters->SetParam(EplHeadSlopeXEnum,InputToL2ProjectEnum); 194 solutionsequence_linear(femmodel); 195 femmodel->parameters->SetParam(EplHeadSlopeYEnum,InputToL2ProjectEnum); 196 solutionsequence_linear(femmodel); 197 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 198 femmodel->HydrologyEPLThicknessx(); 199 200 //updating mask after the computation of the epl thickness (Allow to close too thin EPL) 201 femmodel->HydrologyEPLupdateDomainx(); 202 /* }}} */ 175 203 176 /*Loop on the epl layer to deal with the penalization, have been removed TO CHECK*/ 177 204 /*Update Elemental Mask and compute transfer*/ 205 HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); 206 analysis->ElementizeEplMask(femmodel); 207 delete analysis; 208 femmodel->HydrologyTransferx(); 209 transfered=true; 210 } 211 else{ 212 transfered=false; 213 } 214 178 215 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 179 216 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum); … … 189 226 InputUpdateFromSolutionx(femmodel,ug_epl); 190 227 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 191 192 /* {{{ *//*Start by retrieving the EPL head slopes and compute EPL Thickness*/ 193 if(VerboseSolution()) _printf0_("computing EPL Head slope...\n"); 194 femmodel->SetCurrentConfiguration(L2ProjectionEPLAnalysisEnum); 195 femmodel->UpdateConstraintsL2ProjectionEPLx(); 196 femmodel->parameters->SetParam(EplHeadSlopeXEnum,InputToL2ProjectEnum); 197 solutionsequence_linear(femmodel); 198 femmodel->parameters->SetParam(EplHeadSlopeYEnum,InputToL2ProjectEnum); 199 solutionsequence_linear(femmodel); 200 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 201 femmodel->HydrologyEPLThicknessx(); 202 203 //updating mask after the computation of the epl thickness (Allow to close too thin EPL) 204 femmodel->HydrologyEPLupdateDomainx(); 205 /* }}} */ 206 207 /*Update Elemental Mask and compute transfer*/ 208 HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); 209 analysis->ElementizeEplMask(femmodel); 210 delete analysis; 211 femmodel->HydrologyTransferx(); 212 228 213 229 dug=ug_epl_sub_iter->Duplicate();_assert_(dug); 214 230 ug_epl_sub_iter->Copy(dug); … … 220 236 if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/ 221 237 if(VerboseConvergence()) _printf0_(setw(50) << left << " Inner EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n"); 238 EplConv=ndu_epl/nu_epl*100; 222 239 if((ndu_epl/nu_epl)<eps_hyd) eplconverged=true; 223 240 if (eplcount>=hydro_maxiter){ 224 241 _error_(" maximum number of EPL iterations (" << hydro_maxiter << ") exceeded"); 225 242 } 243 226 244 eplcount++; 227 245 228 246 delete ug_epl_sub_iter; 229 if(eplconverged){ 247 if(eplconverged && transfered){ 248 if(VerboseSolution()) _printf0_("eplconverged...\n"); 230 249 InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum); 231 250 InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum); … … 259 278 if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/ 260 279 if (!xIsNan<IssmDouble>(eps_hyd)){ 261 if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd *10)){280 if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd)){ 262 281 if (VerboseConvergence()) _printf0_(setw(50) << left << " Converged after, " << hydrocount << " iterations \n"); 263 282 hydroconverged=true;
Note:
See TracChangeset
for help on using the changeset viewer.