37 MMG5_int k,kk,pp,l,ll,mins,mins1,maxs,maxs1;
38 MMG5_int *hcode,*link,inival,hsize,iadr;
50 printf(
" Exit program.\n");
58 if (
sizeof(MMG5_int) == 8 ) {
65 for (k=0; k<=
mesh->
nt; k++)
69 for (k=1; k<=
mesh->
nt; k++) {
72 if ( !pt->
v[0] )
continue;
76 if ( pt->
v[i1] < pt->
v[i2] ) {
86 key = (
KTA*(int64_t)mins +
KTB*(int64_t)maxs)%hsize+1;
90 link[iadr] = hcode[key];
96 for (l=3*
mesh->
nt; l>0; l--) {
97 if ( link[l] >= 0 )
continue;
104 mins =
M_MIN(pt->
v[i1],pt->
v[i2]);
105 maxs =
M_MAX(pt->
v[i1],pt->
v[i2]);
112 while ( ll != inival ) {
118 if ( pt1->
v[i1] < pt1->
v[i2] ) {
127 if ( mins1 == mins && maxs1 == maxs ) {
129 if ( pp != 0 ) link[pp] = link[ll];
160 MMG5_int k,kk,pp,l,ll,mins,mins1,maxs,maxs1,iadr;
161 MMG5_int *hcode,*link,hsize,inival;
173 fprintf(stderr,
"\n ## Warning: %s: no re-build of adjacencies of quadrangles. "
174 "mesh->adjq must be freed to enforce analysis.\n",__func__);
180 fprintf(stdout,
" ** SETTING QUAD ADJACENCY\n");
184 fprintf(stderr,
" Exit program.\n");
195 if (
sizeof(MMG5_int) == 8 ) {
209 if ( !
MG_EOK(pq) )
continue;
210 for (i=0; i<4; i++) {
213 if ( pq->
v[i1] < pq->
v[i2] ) {
223 key = (
KTA*(int64_t)mins +
KTB*(int64_t)maxs)%hsize+1;
227 link[iadr] = hcode[key];
233 if (
mesh->
info.
ddebug ) fprintf(stdout,
" h- stage 2: adjacencies\n");
235 for (l=iadr; l>0; l--) {
236 if ( link[l] >= 0 )
continue;
245 if ( pq->
v[i1] < pq->
v[i2] ) {
258 while ( ll != inival ) {
265 if ( pq1->
v[i1] < pq1->
v[i2] ) {
274 if ( mins1 == mins && maxs1 == maxs ) {
276 if ( pp != 0 ) link[pp] = link[ll];
292 for (k=1; k<=
mesh->
nt; k++) {
294 if ( !
MG_EOK(pt) )
continue;
297 for (i=0; i<3; i++) {
310 if ( !
MG_EOK(pq) )
continue;
313 for (i=0; i<4; i++) {
314 assert ( hcode[i] >= 0 );
368 for (k=1; k<=
mesh->
nt; k++) {
370 if ( !
MG_EOK(pt) )
continue;
378 for ( ia = 0; ia < 3; ++ia ) {
379 pt->
tag[ia] &= ~MG_REQ;
385 if ( !
mesh->
na )
return 1;
390 printf(
" ## Error: %s: Unable to allocate edge hash table\n.",__func__);
395 for (k=1; k<=
mesh->
na; k++) {
398 fprintf(stderr,
"\n ## Error: %s: unable to hash edge %" MMG5_PRId
" %" MMG5_PRId
".\n",__func__,
405 for (k=1; k<=
mesh->
nt; k++) {
407 if ( !
MG_EOK(pt) )
continue;
409 for (i=0; i<3; i++) {
425 if ( !
MG_EOK(pq) )
continue;
427 for (i=0; i<4; i++) {
463 MMG5_int k,*adja,natmp,iel;
470 for (k=1; k<=
mesh->
nt; k++) {
472 if ( !
MG_EOK(pt) )
continue;
476 for (i=0; i<3; i++) {
480 if ( iel && pt->
ref <= pt1->
ref )
continue;
489 for (k=1; k<=
mesh->
nt; k++) {
491 if ( !
MG_EOK(pt) )
continue;
495 for (i=0; i<3; i++) {
499 if ( iel && pt->
ref <= pt1->
ref )
continue;
516 for (k=1; k<=
mesh->
na; k++) {
545 MMG5_int np,ned,nt,k,iel,nbl,isol,isolnew,memWarn,nc;
546 MMG5_int iadr,iadrnew,iadrv,*adjav,*adja,*adjanew,voy;
554 fprintf(stderr,
"\n ## Warning: %s: hashing problem. Exit program.\n",
561 for (k=1; k<=
mesh->
np; k++) {
563 if ( !
MG_VOK(ppt) )
continue;
569 ppt->
tag &= ~MG_NOSURF;
579 fprintf(stderr,
"\n ## Warning: %s: unexpected edge table..."
580 " Ignored data.\n",__func__);
587 fprintf(stderr,
"\n ## Warning: %s: unable to build quad adjacencies."
588 " Quad edges will be ignored.\n",__func__);
594 for (k=1; k<=
mesh->
nt; k++) {
596 if ( !
MG_EOK(pt) )
continue;
599 for (i=0; i<3; i++) {
603 pt->
tag[i] &= ~MG_REQ;
604 pt->
tag[i] &= ~MG_NOSURF;
608 if ( (!iel) || (pt->
ref > pt1->
ref) ) {
625 if ( !
MG_EOK(pq) )
continue;
628 for (i=0; i<4; i++) {
637 if ( (!iel) || (pq->
ref > pq1->
ref) ) {
660 printf(
" -- Attempt to allocate a smallest edge table...\n");
664 fprintf(stderr,
"\n ## Warning: %s: uncomplete mesh.\n",
677 for (k=1; k<=
mesh->
nt; k++) {
679 if ( !
MG_EOK(pt) )
continue;
683 for (i=0; i<3; i++) {
688 if ( !iel || (pt->
ref > pt1->
ref) ||
708 if ( !
MG_EOK(pq) )
continue;
712 for (i=0; i<4; i++) {
724 if ( !iel || (pq->
ref > pq1->
ref) ||
742 for (k=1; k<=
mesh->
na; k++) {
744 if ( !ped->
a )
continue;
752 for (k=1; k<=
mesh->
nt; k++) {
754 if ( !
MG_EOK(pt) )
continue;
768 iadrnew = 3*(nbl-1) + 1;
772 adjanew[i] = adja[i];
773 if ( !adja[i] )
continue;
774 iadrv = 3*(adja[i]/3-1)+1;
777 adjav[adja[i]%3] = 3*nbl + voy;
793 assert( pq && pq1 &&
MG_EOK(pq1) );
798 while ( ++k < mesh->nquad );
804 if ( !
MG_EOK(pq) )
continue;
815 for (k=1; k<=
mesh->
np; k++) {
817 if ( !
MG_VOK(ppt) )
continue;
818 isol = k *
sol->size;
819 isolnew = nbl *
sol->size;
821 for (i=0; i<
sol->size; i++)
822 sol->m[isolnew + i] =
sol->m[isol + i];
827 if ( met && met->
m ) {
829 for (k=1; k<=
mesh->
np; k++) {
831 if ( !
MG_VOK(ppt) )
continue;
832 isol = k * met->
size;
833 isolnew = nbl * met->
size;
835 for (i=0; i<met->
size; i++)
836 met->
m[isolnew + i] = met->
m[isol + i];
844 for (k=1; k<=
mesh->
np; k++) {
846 if ( !
MG_VOK(ppt) )
continue;
852 assert ( ppt->
tmp == nbl );
866 for(k=1 ; k<=
mesh->
np ; k++)
889 fprintf(stdout,
" NUMBER OF VERTICES %8" MMG5_PRId
" CORNERS %8" MMG5_PRId
"\n",
mesh->
np,nc);
890 fprintf(stdout,
" NUMBER OF TRIANGLES %8" MMG5_PRId
"\n",
mesh->
nt);
892 fprintf(stdout,
" NUMBER OF QUADRILATERALS %8" MMG5_PRId
"\n",
mesh->
nquad);
895 fprintf(stdout,
" NUMBER OF EDGES %8" MMG5_PRId
"\n",
mesh->
na);
898 if ( memWarn )
return 0;
MMG5_pMesh MMG5_pSol * sol
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
MMG5_int MMG5_hashGet(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
int MMG5_hashEdge(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
int MMG2D_bdryEdge(MMG5_pMesh mesh)
int MMG2D_hashQuad(MMG5_pMesh mesh)
int MMG2D_assignEdge(MMG5_pMesh mesh)
int MMG2D_hashTria(MMG5_pMesh mesh)
int MMG2D_pack(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met)
MMG5_int MMG2D_indPt(MMG5_pMesh mesh, MMG5_int kp)
static const unsigned int MMG2D_idir[5]
static const uint8_t MMG2D_idir_q[4][2]
idir[i]: vertices of edge i for a quad
void MMG2D_keep_only1Subdomain(MMG5_pMesh mesh, int nsd)
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
#define MMG5_ADD_MEM(mesh, size, message, law)
static const uint8_t MMG5_iprv2[3]
static const uint8_t MMG5_inxt2[6]
#define MMG5_SAFE_FREE(ptr)
#define MMG5_DEL_MEM(mesh, ptr)
Structure to store edges of a MMG mesh.
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Structure to store points of a MMG mesh.