56 double step,ll1,ll2,o[2],no[2],calold,calnew;
57 MMG5_int k,iel,ip0,ip1,ip2,it1,it2;
59 static int8_t mmgWarn0=0,mmgWarn1=0;
63 ip1 = ip2 = it1 = it2 = 0;
64 calold = calnew = DBL_MAX;
67 for (k=0; k<ilist; k++) {
73 pt = &
mesh->tria[iel];
74 calold =
MG_MIN(MMG2D_caltri(
mesh,met,pt),calold);
81 else if ( ip1 != pt->
v[i2] ) {
86 else if ( ip2 != pt->
v[i2] ) {
89 fprintf(stderr,
"\n ## Warning: %s: at least 1 point at the "
90 "intersection of 3 edges. abort.\n",__func__);
102 else if ( ip1 != pt->
v[i1] ) {
107 else if ( ip2 != pt->
v[i1] ) {
110 fprintf(stderr,
"\n ## Warning: %s: at least 1 point at the "
111 "intersection of 3 edges. abort.\n",__func__);
120 if ( ip1 == 0 || ip2 == 0 ) {
123 fprintf(stderr,
"\n ## Warning: %s: non singular point at end of edge.\n",
130 p0 = &
mesh->point[ip0];
131 p1 = &
mesh->point[ip1];
132 p2 = &
mesh->point[ip2];
136 if ( met->
m && met->
size == 3 ) {
143 ll1 = (p1->
c[0]-p0->
c[0])*(p1->
c[0]-p0->
c[0]) + (p1->
c[1]-p0->
c[1])*(p1->
c[1]-p0->
c[1]);
144 ll2 = (p2->
c[0]-p0->
c[0])*(p2->
c[0]-p0->
c[0]) + (p2->
c[1]-p0->
c[1])*(p2->
c[1]-p0->
c[1]);
160 pt = &
mesh->tria[iel];
168 ppt = &
mesh->point[0];
174 for (k=0; k<ilist; k++) {
177 pt = &
mesh->tria[iel];
181 calnew =
MG_MIN(MMG2D_caltri(
mesh,met,pt0),calnew);
184 if ( calold <
MMG2D_NULKAL && calnew <= calold )
return 0;
186 else if ( improve && calnew < 1.02 * calold )
return 0;
187 else if ( calnew < 0.3 * calold )
return 0;
190 p0 = &
mesh->point[pt->
v[i]];
216 double calold,calnew,vol,volbal,b[2];
220 ppt0 = &
mesh->point[0];
221 pt0 = &
mesh->tria[0];
225 calold = calnew = DBL_MAX;
228 for (k=0; k<ilist; k++) {
234 pt = &
mesh->tria[iel];
237 p0 = &
mesh->point[pt->
v[i]];
238 p1 = &
mesh->point[pt->
v[i1]];
239 p2 = &
mesh->point[pt->
v[i2]];
240 vol = 0.5* fabs((p1->
c[0]-p0->
c[0])*(p2->
c[1]-p0->
c[1]) - (p1->
c[1]-p0->
c[1])*(p2->
c[0]-p0->
c[0]));
253 volbal = 1.0 / volbal;
261 for (k=0; k<ilist; k++) {
264 pt = &
mesh->tria[iel];
271 if (calold <
MMG2D_NULKAL && calnew <= calold)
return 0;
273 else if ( improve && calnew < 1.02 * calold )
return 0;
274 else if ( calnew < 0.3 * calold )
return 0;
277 pt = &
mesh->tria[list[0]/3];
279 p0 = &
mesh->point[pt->
v[i]];