Changeset 22276 for issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
- Timestamp:
- 11/26/17 10:52:08 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
r22241 r22276 32 32 this->refinement_type = cp.refinement_type; 33 33 this->level_max = cp.level_max; 34 this->radius_level_max = cp.radius_level_max;35 34 this->gradation = cp.gradation; 36 35 this->lag = cp.lag; … … 39 38 this->thicknesserror_threshold = cp.thicknesserror_threshold; 40 39 this->deviatoricerror_threshold = cp.deviatoricerror_threshold; 41 this-> max_deviatoricerror = cp.max_deviatoricerror;42 this-> max_thicknesserror = cp.max_thicknesserror;40 this->deviatoricerror_maximum = cp.deviatoricerror_maximum; 41 this->thicknesserror_maximum = cp.thicknesserror_maximum; 43 42 this->sid2index.clear(); 44 43 this->sid2index.resize(cp.sid2index.size()); … … 66 65 this->refinement_type = -1; 67 66 this->level_max = -1; 68 this->radius_level_max = -1;69 67 this->gradation = -1; 70 68 this->lag = -1; … … 73 71 this->thicknesserror_threshold = -1; 74 72 this->deviatoricerror_threshold = -1; 75 this-> max_deviatoricerror= -1;76 this-> max_thicknesserror= -1;73 this->deviatoricerror_maximum = -1; 74 this->thicknesserror_maximum = -1; 77 75 this->sid2index.clear(); 78 76 this->index2sid.clear(); … … 87 85 this->refinement_type = -1; 88 86 this->level_max = -1; 89 this->radius_level_max = -1;90 87 this->gradation = -1; 91 88 this->lag = -1; … … 94 91 this->thicknesserror_threshold = -1; 95 92 this->deviatoricerror_threshold = -1; 96 this-> max_deviatoricerror= -1;97 this-> max_thicknesserror= -1;93 this->deviatoricerror_maximum = -1; 94 this->thicknesserror_maximum = -1; 98 95 this->sid2index.clear(); 99 96 this->index2sid.clear(); … … 139 136 int numberofcriteria =-1; 140 137 int nconformelements = this->sid2index.size(); 141 double gl_ radius_h =-1;142 double gl_ radius_hmax = std::max(this->radius_level_max,this->groundingline_distance);143 double if_ radius_h =-1;144 double if_ radius_hmax = std::max(this->radius_level_max,this->icefront_distance);138 double gl_distance_h =-1; 139 double gl_distance_hmax = this->groundingline_distance; 140 double if_distance_h =-1; 141 double if_distance_hmax = this->icefront_distance; 145 142 double gl_groupdistance =-1; 146 143 double if_groupdistance =-1; … … 163 160 164 161 /*Calculate the maximum of the estimators, if requested{{{*/ 165 if(this->deviatoricerror_threshold>0 && this-> max_deviatoricerror<0){166 for(int i=0;i<nconformelements;i++) this-> max_deviatoricerror=max(this->max_deviatoricerror,deviatoricerror[i]);167 } 168 if(this->thicknesserror_threshold>0 && this-> max_thicknesserror<0){169 for(int i=0;i<nconformelements;i++) this-> max_thicknesserror=max(this->max_thicknesserror,thicknesserror[i]);162 if(this->deviatoricerror_threshold>0 && this->deviatoricerror_maximum<DBL_EPSILON){ 163 for(int i=0;i<nconformelements;i++) this->deviatoricerror_maximum=max(this->deviatoricerror_maximum,deviatoricerror[i]); 164 } 165 if(this->thicknesserror_threshold>0 && this->thicknesserror_maximum<DBL_EPSILON){ 166 for(int i=0;i<nconformelements;i++) this->thicknesserror_maximum=max(this->thicknesserror_maximum,thicknesserror[i]); 170 167 } 171 168 /*}}}*/ … … 181 178 gmesh->Element(this->specialelementsindex[i])->Father()->GetHigherSubElements(sons); 182 179 /*Limits*/ 183 gl_ radius_h = gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());184 if_ radius_h = if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());185 d_maxerror = this->deviatoricerror_threshold*this->max_deviatoricerror;186 t_maxerror = this->thicknesserror_threshold*this->max_thicknesserror;180 gl_distance_h = gl_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level()); 181 if_distance_h = if_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level()); 182 d_maxerror = this->deviatoricerror_threshold*this->deviatoricerror_maximum; 183 t_maxerror = this->thicknesserror_threshold*this->thicknesserror_maximum; 187 184 /*Calculate the distance and error of the group (sons)*/ 188 185 gl_groupdistance=INFINITY;if_groupdistance=INFINITY;deviatoric_grouperror=0;thickness_grouperror=0; … … 196 193 } 197 194 criteria=0; 198 if(this->groundingline_distance>0 && gl_groupdistance<gl_ radius_h)criteria++;199 if(this->icefront_distance>0 && if_groupdistance<if_ radius_h)criteria++;200 if(this->deviatoricerror_threshold>0 && deviatoric_grouperror>d_maxerror ) criteria++;201 if(this->thicknesserror_threshold>0 && thickness_grouperror>t_maxerror ) criteria++;195 if(this->groundingline_distance>0 && gl_groupdistance<gl_distance_h+DBL_EPSILON) criteria++; 196 if(this->icefront_distance>0 && if_groupdistance<if_distance_h+DBL_EPSILON) criteria++; 197 if(this->deviatoricerror_threshold>0 && deviatoric_grouperror>d_maxerror-DBL_EPSILON) criteria++; 198 if(this->thicknesserror_threshold>0 && thickness_grouperror>t_maxerror-DBL_EPSILON) criteria++; 202 199 /*Finally, it keeps the father index if it must be refine*/ 203 200 if(criteria) index.push_back(gmesh->Element(this->specialelementsindex[i])->FatherIndex()); … … 230 227 if(!gmesh->Element(i)->Father()) _error_("father is NULL!\n"); 231 228 /*Limits with lag*/ 232 gl_ radius_h = this->lag*gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());233 if_ radius_h = this->lag*if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());234 d_maxerror = 0.05*this->max_deviatoricerror;//itapopo definir melhor235 t_maxerror = 0.05*this->max_thicknesserror;//itapopo definir melhor229 gl_distance_h = this->lag*gl_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level()); 230 if_distance_h = this->lag*if_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level()); 231 d_maxerror = 0.01*this->deviatoricerror_maximum;//itapopo definir melhor 0.05 232 t_maxerror = 0.01*this->thicknesserror_maximum;//itapopo definir melhor 0.05 236 233 /*Get the sons of the father (sibilings)*/ 237 234 sons.clear(); … … 252 249 /*Verify the criteria*/ 253 250 criteria=0; 254 if(this->groundingline_distance>0 && gl_groupdistance>gl_ radius_h)criteria++;255 if(this->icefront_distance>0 && if_groupdistance>if_ radius_h)criteria++;256 if(this->deviatoricerror_threshold>0 && deviatoric_grouperror<d_maxerror ) criteria++;257 if(this->thicknesserror_threshold>0 && thickness_grouperror<t_maxerror ) criteria++;251 if(this->groundingline_distance>0 && gl_groupdistance>gl_distance_h-DBL_EPSILON) criteria++; 252 if(this->icefront_distance>0 && if_groupdistance>if_distance_h-DBL_EPSILON) criteria++; 253 if(this->deviatoricerror_threshold>0 && deviatoric_grouperror<d_maxerror+DBL_EPSILON) criteria++; 254 if(this->thicknesserror_threshold>0 && thickness_grouperror<t_maxerror+DBL_EPSILON) criteria++; 258 255 /*Now, if the group attends the criteria, unrefine it*/ 259 256 if(criteria==numberofcriteria){ … … 280 277 sid=this->index2sid[gmesh->Element(i)->Index()]; 281 278 if(sid<0) continue; 282 /* Filter: set the region/radiusfor level h*/283 gl_ radius_h = gl_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1,current element level is <level_max284 if_ radius_h = if_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1,current element level is <level_max285 d_maxerror = this->deviatoricerror_threshold*this->max_deviatoricerror;286 t_maxerror = this->thicknesserror_threshold*this->max_thicknesserror;279 /*Set the distance for level h*/ 280 gl_distance_h = gl_distance_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1: current element level is <level_max 281 if_distance_h = if_distance_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1: current element level is <level_max 282 d_maxerror = this->deviatoricerror_threshold*this->deviatoricerror_maximum; 283 t_maxerror = this->thicknesserror_threshold*this->thicknesserror_maximum; 287 284 /*Verify distance and error of the element, if requested*/ 288 285 criteria=0; 289 if(this->groundingline_distance>0 && gl_distance[sid]<gl_ radius_h)criteria++;290 if(this->icefront_distance>0 && if_distance[sid]<if_ radius_h)criteria++;291 if(this->deviatoricerror_threshold>0 && deviatoricerror[sid]>d_maxerror ) criteria++;292 if(this->thicknesserror_threshold>0 && thicknesserror[sid]>t_maxerror ) criteria++;286 if(this->groundingline_distance>0 && gl_distance[sid]<gl_distance_h+DBL_EPSILON) criteria++; 287 if(this->icefront_distance>0 && if_distance[sid]<if_distance_h+DBL_EPSILON) criteria++; 288 if(this->deviatoricerror_threshold>0 && deviatoricerror[sid]>d_maxerror-DBL_EPSILON) criteria++; 289 if(this->thicknesserror_threshold>0 && thicknesserror[sid]>t_maxerror-DBL_EPSILON) criteria++; 293 290 /*Now, if it attends any criterion, keep the element index to refine in next step*/ 294 291 if(criteria)index.push_back(i);
Note:
See TracChangeset
for help on using the changeset viewer.