Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
mmgcommon_private.h
Go to the documentation of this file.
1/* =============================================================================
2** This file is part of the mmg software package for the tetrahedral
3** mesh modification.
4** Copyright (c) Bx INP/Inria/UBordeaux/UPMC, 2004- .
5**
6** mmg is free software: you can redistribute it and/or modify it
7** under the terms of the GNU Lesser General Public License as published
8** by the Free Software Foundation, either version 3 of the License, or
9** (at your option) any later version.
10**
11** mmg is distributed in the hope that it will be useful, but WITHOUT
12** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14** License for more details.
15**
16** You should have received a copy of the GNU Lesser General Public
17** License and of the GNU General Public License along with mmg (in
18** files COPYING.LESSER and COPYING). If not, see
19** <http://www.gnu.org/licenses/>. Please read their terms carefully and
20** use this copy of the mmg distribution only if you accept them.
21** =============================================================================
22*/
23
24#ifndef MMGCOMMON_H
25#define MMGCOMMON_H
26
27#include <assert.h>
28#include <stdlib.h>
29#include <stdio.h>
30#include <limits.h>
31#include <string.h>
32#include <signal.h>
33#include <ctype.h>
34#include <float.h>
35#include <math.h>
36#include <complex.h>
37#include "mmg/common/mmgcmakedefines.h"
38
39#if (defined(__APPLE__) && defined(__MACH__))
40#include <sys/sysctl.h>
41#elif defined(__unix__) || defined(__unix) || defined(unix)
42#include <unistd.h>
43#elif defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
44#include <windows.h>
45#endif
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51#include "eigenv_private.h"
53
54#define MG_STR "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
55
59#define MMG5_TRIA_LMAX 1024
60
64#define MMG5_LMAX 10240
65
67#define MMG5_LPARMAX 200
68
70#define MG_SMSGN(a,b) (((double)(a)*(double)(b) > (0.0)) ? (1) : (0))
71
73#define MMG5_BOXSIZE 500
74
76#define MMG5_MEMMAX 800
77#define MMG5_BITWIZE_MB_TO_B 20
78#define MMG5_MEMPERCENT 0.5
80/* Macro for unset or unititialized mark */
81#define MMG5_UNSET -1
82
83/* reference of the boundary that moves in lagrangian mode */
84#define MMG5_DISPREF 10
85
86/* million */
87#define MMG5_MILLION 1048576
88
89/* numerical accuracy */
90#define MMG5_ANGEDG 0.707106781186548 /*0.573576436351046 */
91#define MMG5_ANGLIM -0.999999
92#define MMG5_ATHIRD 0.333333333333333
93
94#define MMG5_EPSD 1.e-30
95#define MMG5_EPSD2 1.0e-200
96#define MMG5_EPS 1.e-06
97#define MMG5_EPSOK 1.e-15
98#define MMG5_NULKAL 1.e-30
99
100#define MMG5_SQR32 0.866025403784439
101
102#ifndef M_PI
103#define M_PI 3.14159265358979323846
104#define M_PI_2 1.57079632679489661923
105#endif
106
107#define A64TH 0.015625
108#define A16TH 0.0625
109#define A32TH 0.03125
110
111#define MMG5_MEMMIN 38
113#define MMG5_PATHSEP '/'
114
115/* Variables for option initialization */
116#define MMG5_NONSET_MEM -1
117#define MMG5_NONSET_HMIN -1
118#define MMG5_NONSET_HMAX -1
119#define MMG5_NONSET_HSIZ -1
120#define MMG5_NONSET -1
121#define MMG5_HAUSD 0.01
122#define MMG5_HGRAD 0.26236426446
123#define MMG5_HGRADREQ 0.83290912294
124#define MMG5_NOHGRAD -1
125#define MMG5_LAG -1
126#define MMG5_NR -1
127#define MMG5_LS 0.0
128#define MMG5_PROCTREE 32
129#define MMG5_OFF 0
130#define MMG5_ON 1
131#define MMG5_GAP 0.2
132#define MMG5_HMINCOE 0.001
133#define MMG5_HMAXCOE 2
134#define MMG5_HMINMAXGAP 5
135#define MMG5_FEM 1
136#define MMG5_FILESTR_LGTH 128
138/* Macros */
139#define MG_MAX(a,b) (((a) > (b)) ? (a) : (b))
140#define MG_MIN(a,b) (((a) < (b)) ? (a) : (b))
141
142/* tags */
143#define MG_NOTAG (0)
144#define MG_REF (1 << 0)
145#define MG_GEO (1 << 1)
146#define MG_REQ (1 << 2)
147#define MG_NOM (1 << 3)
148#define MG_BDY (1 << 4)
149#define MG_CRN (1 << 5)
150#define MG_NOSURF (1 << 6)
151#define MG_OPNBDY (1 << 7)
152#define MG_OLDPARBDY (1 << 11)
153#define MG_PARBDYBDY (1 << 12)
154#define MG_PARBDY (1 << 13)
155#define MG_NUL (1 << 14)
157/* binary tags for local parameters */
158#define MG_Vert (1 << 0 )
159#define MG_Tria (1 << 1 )
160#define MG_Tetra (1 << 2 )
161#define MG_Edge (1 << 3 )
164#define MG_VOK(ppt) (ppt && ((ppt)->tag < MG_NUL))
165#define MG_EOK(pt) (pt && ((pt)->v[0] > 0))
167#define MG_SIN(tag) ((tag & MG_CRN) || (tag & MG_REQ))
168#define MG_SIN_OR_NOM(tag) ( MG_SIN(tag) || (tag & MG_NOM) )
169#define MG_RID(tag) ( ( !( MG_SIN_OR_NOM(tag)) ) && ( tag & MG_GEO ) )
171#define MG_EDG(tag) ((tag & MG_GEO) || (tag & MG_REF))
172#define MG_GEO_OR_NOM(tag) (( tag & MG_GEO ) || ( tag & MG_NOM ))
173#define MG_EDG_OR_NOM(tag) ( MG_EDG(tag) || (tag & MG_NOM ) )
174#define MG_TRUE_BDY(tag) ( (tag & MG_BDY) && !(tag & MG_PARBDY) )
178#define MG_SET(flag,bit) ((flag) |= (1 << (bit)))
179#define MG_CLR(flag,bit) ((flag) &= ~(1 << (bit)))
180#define MG_GET(flag,bit) ((flag) & (1 << (bit)))
182#define MMG5_KA 7
183#define MMG5_KB 11
185/* file reading */
186#define MMG5_SW 4
187#define MMG5_SD 8
188
192#define _LIBMMG5_RETURN(mesh,sol,met,val)do \
193 { \
194 signal(SIGABRT,SIG_DFL); \
195 signal(SIGFPE,SIG_DFL); \
196 signal(SIGILL,SIG_DFL); \
197 signal(SIGSEGV,SIG_DFL); \
198 signal(SIGTERM,SIG_DFL); \
199 signal(SIGINT,SIG_DFL); \
200 mesh->npi = mesh->np; \
201 mesh->nti = mesh->nt; \
202 mesh->nai = mesh->na; \
203 mesh->nei = mesh->ne; \
204 mesh->xt = 0; \
205 if ( sol ) { sol->npi = sol->np; } \
206 if ( met ) { met->npi = met->np; } \
207 return val; \
208 }while(0)
209
210/* Macros for memory management */
213#define MMG5_CHK_MEM(mesh,size,string,law) do \
214 { \
215 if ( (mesh)->memCur > (mesh)->memMax ) { \
216 fprintf(stderr," ## Error:"); \
217 fprintf(stderr," unable to allocate %s.\n",string); \
218 fprintf(stderr," ## Check the mesh size or "); \
219 fprintf(stderr,"increase maximal authorized memory with the -m option.\n"); \
220 (mesh)->memCur -= (size); \
221 law; \
222 } \
223 }while(0)
224
225static inline
226void * mycalloc(size_t c, size_t s) {
227 char *ptr;
228 ptr = (char *)calloc(c*s+sizeof(size_t),1);
229 if (ptr == NULL)
230 return NULL;
231 else {
232 *((size_t*)ptr)=c*s;
233 ptr+=sizeof(size_t);
234 return (void*)ptr;
235 }
236}
237
238static inline
239void * mymalloc(size_t s) {
240 char *ptr;
241 ptr = (char *)malloc(s+sizeof(size_t));
242 if (ptr == NULL)
243 return NULL;
244 else {
245 *((size_t*)ptr)=s;
246 ptr+=sizeof(size_t);
247 return (void*)ptr;
248 }
249}
250
251static inline
252void * myrealloc(void * ptr_in, size_t s, size_t oldsize) {
253 char *ptr;
254 char *ptr_in_c = (char*)ptr_in;
255
256 if ( !ptr_in ) {
257 assert ( !oldsize );
258 return mymalloc( s );
259 }
260
261 ptr_in_c -= sizeof(size_t);
262 if (oldsize != *((size_t*)ptr_in_c)) {
263 fprintf(stderr, "myrealloc: Error: freed memory mismatch\n");
264 assert(0);
265 }
266 ptr = (char *)realloc(ptr_in_c, s+sizeof(size_t));
267 if (ptr == NULL)
268 return NULL;
269 else {
270 *((size_t*)ptr)=s;
271 ptr+=sizeof(size_t);
272 return (void*)ptr;
273 }
274}
275
276static inline
277size_t myfree(void *ptr) {
278 size_t s;
279 char * ptr_c = (char*)ptr;
280
281 if ( !ptr ) return 0;
282
283 ptr_c = ptr_c-sizeof(size_t);
284 s = *((size_t*)ptr_c);
285 free(ptr_c);
286
287 return s;
288}
289
291#define MMG5_DEL_MEM(mesh,ptr) do \
292 { \
293 size_t size_to_free = myfree(ptr); \
294 (mesh)->memCur -= size_to_free; \
295 ptr = NULL; \
296 }while(0)
297
300#define MMG5_ADD_MEM(mesh,size,message,law) do \
301 { \
302 (mesh)->memCur += (size); \
303 MMG5_CHK_MEM(mesh,size,message,law); \
304 }while(0)
305
307#define MMG5_SAFE_FREE(ptr) do \
308 { \
309 myfree(ptr); \
310 ptr = NULL; \
311 }while(0)
312
314#define MMG5_SAFE_CALLOC(ptr,size,type,law) do \
315 { \
316 ptr = (type*)mycalloc(size,sizeof(type)); \
317 if ( !ptr ) { \
318 perror(" ## Memory problem: calloc"); \
319 law; \
320 } \
321 }while(0)
322
324#define MMG5_SAFE_MALLOC(ptr,size,type,law) do \
325 { \
326 size_t size_to_allocate = (size)*sizeof(type); \
327 ptr = (type*)mymalloc(size_to_allocate); \
328 if ( !ptr ) { \
329 perror(" ## Memory problem: malloc"); \
330 law; \
331 } \
332 }while(0)
333
335#define MMG5_SAFE_REALLOC(ptr,prevSize,newSize,type,message,law) do \
336 { \
337 type* tmp; \
338 size_t size_to_allocate = (newSize)*sizeof(type); \
339 \
340 tmp = (type *)myrealloc((ptr),size_to_allocate,(prevSize)*sizeof(type)); \
341 if ( !tmp ) { \
342 MMG5_SAFE_FREE(ptr); \
343 perror(" ## Memory problem: realloc"); \
344 law; \
345 } \
346 \
347 (ptr) = tmp; \
348 }while(0)
349
351#define MMG5_CHK_INT32_OVERFLOW(wantedGap,oldSiz,coef,shift,law) do \
352 { \
353 /* Check for int32 overflow */ \
354 if ( sizeof(MMG5_int) == sizeof(int32_t) ) { \
355 MMG5_int gap_loc = (MMG5_int)((wantedGap) * (oldSiz)); \
356 if ( !gap_loc ) gap_loc = 1; \
357 \
358 int32_t max_ne = (INT32_MAX-(shift))/(coef); \
359 if ( max_ne < (oldSiz)+gap_loc ) { \
360 /* Detected overflow, target maximal possible size */ \
361 gap_loc = max_ne-(oldSiz); \
362 if ( gap_loc <=0 ) { \
363 /* No possibe realloc without int overflow */ \
364 fprintf(stderr," ## Error: %s: %d: Unable to reallocate adja array" \
365 " without int overflow.\n",__func__,__LINE__); \
366 gap_loc = 0; \
367 law; \
368 } \
369 else { \
370 wantedGap = (float)gap_loc/(float)oldSiz; \
371 printf("wantGap has been modified %15f\n",wantedGap); \
372 wantedGap = (double)gap_loc/(double)oldSiz; \
373 printf("DwantGap has been modified %15fl\n",wantedGap); \
374 } \
375 } \
376 } \
377 }while(0)
378
379
381#define MMG5_SAFE_RECALLOC(ptr,prevSize,newSize,type,message,law) do \
382 { \
383 type* tmp; \
384 size_t size_to_allocate = (newSize)*sizeof(type); \
385 \
386 tmp = (type *)myrealloc((ptr),size_to_allocate,(prevSize)*sizeof(type)); \
387 if ( !tmp ) { \
388 MMG5_SAFE_FREE(ptr); \
389 perror(" ## Memory problem: realloc"); \
390 law; \
391 } \
392 else { \
393 (ptr) = tmp; \
394 assert(ptr); \
395 if ( newSize > prevSize ) { \
396 memset(&((ptr)[prevSize]),0,((newSize)-(prevSize))*sizeof(type)); \
397 } \
398 } \
399 }while(0)
400
404#define MMG5_TAB_RECALLOC(mesh,ptr,initSize,wantedGap,type,message,law) do \
405 { \
406 MMG5_int gap; \
407 \
408 assert ( mesh->memCur < mesh->memMax ); \
409 \
410 gap = (MMG5_int)(floor(wantedGap * initSize)); \
411 if ( !gap ) gap = 1; \
412 \
413 if ( mesh->memMax < mesh->memCur + gap*sizeof(type) ) { \
414 gap = (MMG5_int)((mesh->memMax-mesh->memCur)/sizeof(type)); \
415 if(gap<1) { \
416 fprintf(stderr," ## Error:"); \
417 fprintf(stderr," unable to allocate %s.\n",message); \
418 fprintf(stderr," ## Check the mesh size or "); \
419 fprintf(stderr,"increase maximal authorized memory with the -m option.\n"); \
420 law; \
421 } \
422 } \
423 \
424 MMG5_ADD_MEM(mesh,gap*sizeof(type),message,law); \
425 MMG5_SAFE_RECALLOC((ptr),initSize+1,initSize+gap+1,type,message,law); \
426 initSize = initSize+gap; \
427 }while(0);
428
430#define MMG5_INCREASE_MEM_MESSAGE() do \
431 { \
432 printf(" ## Check the mesh size or increase maximal"); \
433 printf(" authorized memory with the -m option.\n"); \
434 } while(0)
435
436#define MMG5_SAFELL2LCAST(longlongval) (((longlongval) > (LONG_MAX)) ? 0 : ((long)(longlongval)))
437#define MMG5_SAFELL2ICAST(longlongval) (((longlongval) > (INT_MAX)) ? 0 : ((int)(longlongval)))
438
440#define MMG_FREAD(ptr,size,count,stream) do \
441 { \
442 \
443 if ( count != fread(ptr,size,count,stream) ) { \
444 fputs ( "Reading error", stderr ); \
445 return -1; \
446 } \
447 } while(0);
448
450#define CV_VA_NUM_ARGS_HELPER(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
451
453#define CV_VA_NUM_ARGS(...) CV_VA_NUM_ARGS_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
454
461#ifdef MMG_POSIX
462#define MMG_FSCANF(stream,format,...) do \
463 { \
464 int io_count = fscanf(stream,format,__VA_ARGS__); \
465 int args_count = CV_VA_NUM_ARGS(__VA_ARGS__); \
466 if ( args_count != io_count ) { \
467 fprintf (stderr, "Reading error: fscanf counts %d args while %d provided\n",io_count,args_count ); \
468 return -1; \
469 } \
470 } while(0);
471#else
472#define MMG_FSCANF(stream,format,...) do \
473 { \
474 int io_count = fscanf(stream,format,__VA_ARGS__); \
475 int args_count = CV_VA_NUM_ARGS(__VA_ARGS__); \
476 if ( 0 > io_count ) { \
477 fprintf (stderr, "Reading error: fscanf counts %d args\n",io_count); \
478 return -1; \
479 } \
480 } while(0);
481#endif
482
484#ifdef USE_SCOTCH
486static inline
488 if ( mesh->info.imprim > 4 || mesh->info.ddebug ) {
489 if ( mesh->info.mem >= 0 ) {
490 fprintf(stdout," ## Warning: we will overflow the memory asked with \"-m\"");
491 fprintf(stdout," option during Scotch call.\n" );
492 }
493 }
494}
495#endif
502static inline
503void MMG5_excfun(int sigid) {
504 fprintf(stdout,"\n Unexpected error:"); fflush(stdout);
505 switch(sigid) {
506 case SIGABRT:
507 fprintf(stdout," *** potential lack of memory.\n"); break;
508 case SIGFPE:
509 fprintf(stdout," *** Floating-point exception\n"); break;
510 case SIGILL:
511 fprintf(stdout," *** Illegal instruction\n"); break;
512 case SIGSEGV:
513 fprintf(stdout," *** Segmentation fault\n"); break;
514 case SIGTERM:
515 case SIGINT:
516 fprintf(stdout," *** Program killed\n"); break;
517 }
518 exit(EXIT_FAILURE);
519}
520
530#define FUNCTION_POINTER(fproto)\
531 MMG_EXTERN fproto MMG_ASSIGN_NULL
532
533
534
535/* Macro for fortran function generation */
549#define FORTRAN_NAME(nu,nl,pl,pc) \
550 void nu pl; \
551 void nl pl \
552 { nu pc; } \
553 void nl##_ pl \
554 { nu pc; } \
555 void nl##__ pl \
556 { nu pc; } \
557 void nu pl
558
571#define FORTRAN_VARIADIC(nu,nl,pl,body) \
572 void nu pl \
573 { body } \
574 void nl pl \
575 { body } \
576 void nl##_ pl \
577 { body } \
578 void nl##__ pl \
579 { body } \
580
581
582/* Global variables */
583 static const uint8_t MMG5_inxt2[6] = {1,2,0,1,2};
584 static const uint8_t MMG5_iprv2[3] = {2,0,1};
586/* Private structures */
609typedef struct {
610 double b[10][3];
611 double n[6][3];
612 double t[6][3];
616
621typedef struct MMG5_iNode_s {
622 MMG5_int val;
625
626/* Functions declarations */
627 void MMG5_version(MMG5_pMesh,char*);
628 extern void MMG5_nsort(int8_t ,double *,int8_t *);
629 extern void MMG5_nperm(int8_t n,int8_t shift,int8_t stride,double *val,double *oldval,int8_t *perm);
630 extern double MMG5_det3pt1vec(double c0[3],double c1[3],double c2[3],double v[3]);
631 extern double MMG5_det4pt(double c0[3],double c1[3],double c2[3],double c3[3]);
632 int MMG5_devangle(double* n1, double *n2, double crit);
633 extern double MMG5_orvol(MMG5_pPoint point,MMG5_int *v);
634 int MMG5_Add_inode( MMG5_pMesh mesh, MMG5_iNode **liLi, int val );
635 int MMG5_eigenvmatsym2d(MMG5_pMesh mesh,double m[],double lambda[],double v[][2]);
636 int MMG5_eigenvmatsym3d(MMG5_pMesh mesh,double m[],double lambda[],double v[][3]);
637 int MMG5_eigenvmatnonsym2d(MMG5_pMesh mesh,double m[],double lambda[],double v[][2]);
638 int MMG5_eigenvmatnonsym3d(MMG5_pMesh mesh,double m[],double lambda[],double v[][3]);
639 extern void MMG5_bezierEdge(MMG5_pMesh, MMG5_int, MMG5_int, double*, double*, int8_t,double*);
640 int MMG5_buildridmet(MMG5_pMesh,MMG5_pSol,MMG5_int,double,double,double,double*,double[3][3]);
641 extern int MMG5_buildridmetfic(MMG5_pMesh,double*,double*,double,double,double,double*);
642 int MMG5_buildridmetnor(MMG5_pMesh, MMG5_pSol, MMG5_int,double*, double*,double[3][3]);
643 void MMG5_check_hminhmax(MMG5_pMesh mesh, int8_t sethmin, int8_t sethmax);
644 int MMG5_paratmet(double c0[3],double n0[3],double m[6],double c1[3],double n1[3],double mt[6]);
645 void MMG5_transpose3d(double m[3][3]);
646 void MMG5_dotprod(int8_t dim,double *a,double *b,double *result);
647 void MMG5_crossprod3d(double *a,double *b,double *result);
648 void MMG5_mn(double m[6], double n[6], double mn[9] );
649 extern int MMG5_rmtr(double r[3][3],double m[6], double mr[6]);
651 int MMG5_boulep(MMG5_pMesh mesh,MMG5_int start,int ip,MMG5_int*,MMG5_int *list, MMG5_int *tlist);
652 int MMG5_boulec(MMG5_pMesh, MMG5_int*, MMG5_int,int ip,double *tt);
653 int MMG5_boulen(MMG5_pMesh, MMG5_int*, MMG5_int,int ip,double *nn);
654 int MMG5_bouler(MMG5_pMesh, MMG5_int*, MMG5_int,int ip,MMG5_int *,MMG5_int *,int *, int*, int);
655 int MMG5_boulet(MMG5_pMesh mesh,MMG5_int start,int ip,MMG5_int *list,int8_t s,int8_t *opn);
657 extern double MMG5_caltri_ani(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pTria ptt);
658 extern double MMG5_caltri_iso(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pTria ptt);
659 void MMG5_defUninitSize(MMG5_pMesh mesh,MMG5_pSol met,int8_t ismet);
660 void MMG5_displayLengthHisto(MMG5_pMesh,MMG5_int,double*,MMG5_int,MMG5_int,double,
661 MMG5_int,MMG5_int,double,int,double*,MMG5_int*,int8_t);
662 void MMG5_displayLengthHisto_internal( MMG5_int,MMG5_int,MMG5_int,double,
663 MMG5_int,MMG5_int,double, MMG5_int,double*,
664 MMG5_int*,int8_t,int);
665 short MMG5_dikmov(MMG5_pMesh,MMG5_pSol,short*,short,
666 MMG5_int chkmovmesh(MMG5_pMesh,MMG5_pSol,short,MMG5_int*));
667 int MMG5_minQualCheck ( MMG5_int iel, double minqual, double alpha );
669 MMG5_Bezier*,double r[3][3],double gv[2]);
670 void MMG5_fillDefmetregSys( MMG5_int, MMG5_pPoint, int, MMG5_Bezier,double r[3][3],
671 double *, double *, double *, double *);
673 MMG5_int MMG5_grad2metSurf(MMG5_pMesh,MMG5_pSol,MMG5_pTria,MMG5_int,MMG5_int);
675 MMG5_int MMG5_hashFace(MMG5_pMesh,MMG5_Hash*,MMG5_int,MMG5_int,MMG5_int,MMG5_int);
676 int MMG5_hashEdge(MMG5_pMesh mesh,MMG5_Hash *hash,MMG5_int a,MMG5_int b,MMG5_int k);
677 int MMG5_hashUpdate(MMG5_Hash *hash,MMG5_int a,MMG5_int b,MMG5_int k);
678 int MMG5_hashEdgeTag(MMG5_pMesh mesh,MMG5_Hash *hash,MMG5_int a,MMG5_int b,int16_t k);
679 MMG5_int MMG5_hashGet(MMG5_Hash *hash,MMG5_int a,MMG5_int b);
680 int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash,MMG5_int hsiz,MMG5_int hmax);
681 int MMG5_intmetsavedir(MMG5_pMesh mesh, double *m,double *n,double *mr);
682 int MMG5_intridmet(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double,double*,double*);
683 int MMG5_mmgIntmet33_ani(double*,double*,double*,double);
684 int MMG5_ismaniball(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int start, int8_t istart);
685 int MMG5_mmgIntextmet(MMG5_pMesh,MMG5_pSol,MMG5_int,double *,double *);
686 size_t MMG5_memSize(void);
689 int MMG5_mmgHashTria(MMG5_pMesh mesh, MMG5_int *adja, MMG5_Hash*, int chkISO);
691 void MMG5_mmgUsage(char *prog);
692 void MMG5_paramUsage1(void);
693 void MMG5_paramUsage2(void);
694 void MMG5_2d3dUsage(void);
695 void MMG5_lagUsage(void);
696 void MMG5_advancedUsage(void);
697 extern int MMG5_nonUnitNorPts(MMG5_pMesh,MMG5_int,MMG5_int,MMG5_int,double*);
698 extern double MMG5_nonorsurf(MMG5_pMesh mesh,MMG5_pTria pt);
699 extern int MMG5_norpts(MMG5_pMesh,MMG5_int,MMG5_int,MMG5_int,double *);
700 extern int MMG5_nortri(MMG5_pMesh mesh,MMG5_pTria pt,double *n);
701 void MMG5_printTria(MMG5_pMesh mesh,char* fileName);
702 extern int MMG5_rotmatrix(double n[3],double r[3][3]);
703 int MMG5_invmat(double *m,double *mi);
704 int MMG5_invmatg(double m[9],double mi[9]);
705 int MMG5_invmat33(double m[3][3],double mi[3][3]);
706 int MMG5_invmat22(double m[2][2],double mi[2][2]);
708 double MMG5_ridSizeInNormalDir(MMG5_pMesh,int,double*,MMG5_pBezier,double,double);
709 double MMG5_ridSizeInTangentDir(MMG5_pMesh, MMG5_pPoint,MMG5_int,MMG5_int*,double,double);
712 int MMG5_scotchCall(MMG5_pMesh mesh, MMG5_pSol sol,MMG5_pSol fields,MMG5_int*);
717 int MMG5_truncate_met3d(MMG5_pSol met, MMG5_int ip, double isqhmin, double isqhmax);
718 int MMG5_solveDefmetregSys( MMG5_pMesh, double r[3][3], double *, double *,
719 double *, double *, double, double, double);
720 int MMG5_solveDefmetrefSys( MMG5_pMesh,MMG5_pPoint,MMG5_int*, double r[3][3],
721 double *, double *, double *, double *,
722 double, double, double);
724 double MMG5_surftri33_ani(MMG5_pMesh,MMG5_pTria,double*,double*,double*);
726 extern int MMG5_sys33sym(double a[6], double b[3], double r[3]);
727 int MMG5_interpreg_ani(MMG5_pMesh,MMG5_pSol,MMG5_pTria,int8_t,double,double *mr);
728 int MMG5_interp_iso(double *ma,double *mb,double *mp,double t);
729 int MMG5_intersecmet22(MMG5_pMesh mesh, double *m,double *n,double *mr);
732 double MMG2D_quickarea(double a[2],double b[2],double c[2]);
733 void MMG5_build3DMetric(MMG5_pMesh mesh,MMG5_pSol sol,MMG5_int ip,double dbuf[6]);
736 FILE **inm,long *posNodes, long *posElts,
737 long **posNodeData, int *bin, int *iswp,
738 MMG5_int *nelts,int *nsols);
739 int MMG5_check_readedMesh(MMG5_pMesh mesh,MMG5_int nref);
741 const long posNodes,const long posElts,
742 const long *posNodeData,const int bin,
743 const int iswp,const MMG5_int nelts,
744 const int nsols);
745int MMG5_saveMshMesh(MMG5_pMesh,MMG5_pSol*,const char*, int);
747int MMG5_loadSolHeader(const char*,int,FILE**,int*,int*,int*,MMG5_int*,
748 int*,int*,int**,long*,int);
749int MMG5_chkMetricType(MMG5_pMesh mesh,int *type,int*, FILE *inm);
750int MMG5_readFloatSol3D(MMG5_pSol,FILE*,int,int,int);
751int MMG5_readDoubleSol3D(MMG5_pSol,FILE*,int,int,MMG5_int);
752int MMG5_saveSolHeader( MMG5_pMesh,const char*,FILE**,int,int*,MMG5_int*,MMG5_int,
753 int,int,int*,int*,int*);
754int MMG5_saveSolAtTrianglesHeader( MMG5_pMesh,FILE *,int,int,MMG5_int*,int,
755 int,int*,int*,int*);
756int MMG5_saveSolAtTetrahedraHeader( MMG5_pMesh,FILE *,int,int,MMG5_int*,int,
757 int,int*,int*,int*);
758void MMG5_writeDoubleSol3D(MMG5_pMesh,MMG5_pSol,FILE*,int,MMG5_int,int);
761
762int MMG5_defsiz_startingMessage (MMG5_pMesh,MMG5_pSol,const char * funcname );
764int MMG5_sum_reqEdgeLengthsAtPoint ( MMG5_pMesh,MMG5_pSol,MMG5_int ip0,MMG5_int ip1 );
767
772MMG5_int MMG5_gradsiz_ani(MMG5_pMesh mesh,MMG5_pSol met,int *it);
774int MMG5_simred2d(MMG5_pMesh,double*,double*,double dm[2],double dn[2],double vp[2][2]);
775int MMG5_simred3d(MMG5_pMesh mesh,double *m,double *n,double dm[3],double dn[3],double vp[3][3]);
776extern int MMG5_updatemet2d_ani(double *m,double *n,double dm[2],double dn[2],double vp[2][2],int8_t ier );
777int MMG5_updatemet3d_ani(double *m,double *n,double dm[3],double dn[3],double vp[3][3],int8_t ier );
778void MMG5_gradEigenvreq(double *dm,double *dn,double,int8_t,int8_t *);
779int MMG5_updatemetreq_ani(double *n,double dn[2],double vp[2][2]);
780int MMG5_swapbin(int sbin);
781MMG5_int MMG5_swapbin_int(MMG5_int sbin);
782float MMG5_swapf(float sbin);
783double MMG5_swapd(double sbin);
785int MMG5_isLevelSet(MMG5_pMesh,MMG5_int,MMG5_int);
786int MMG5_isSplit(MMG5_pMesh ,MMG5_int ,MMG5_int *,MMG5_int *);
787int MMG5_isNotSplit(MMG5_pMesh ,MMG5_int);
788int MMG5_getStartRef(MMG5_pMesh ,MMG5_int, MMG5_int *);
796int MMG5_chkmaniball(MMG5_pMesh mesh, MMG5_int start, int8_t istart);
798
799/* test functions */
800extern double MMG5_test_mat_error( int8_t nelem,double m1[],double m2[] );
803int MMG5_test_eigenvmatsym2d(MMG5_pMesh mesh,double *mex,double lambdaex[],
804 double vpex[][2]);
805int MMG5_test_eigenvmatnonsym2d(MMG5_pMesh mesh,double *mex,double lambdaex[],
806 double vpex[][2],double ivpex[][2]);
807int MMG5_test_eigenvmatsym3d(MMG5_pMesh mesh,double *mex,double lambdaex[],
808 double vpex[][3]);
809int MMG5_test_eigenvmatnonsym3d(MMG5_pMesh mesh,double *mex,double lambdaex[],
810 double vpex[][3],double ivpex[][3]);
814int MMG5_test_mn();
815extern int MMG5_test_rmtr();
817int MMG5_test_simred2d(MMG5_pMesh mesh,double *mex,double *nex,double *dmex,double *dnex,double vpex[][2]);
818int MMG5_test_simred3d(MMG5_pMesh mesh,double *mex,double *nex,double *dmex,double *dnex,double vpex[][3]);
823
824/* tools */
826void MMG5_mark_usedVertices ( MMG5_pMesh mesh,void (*delPt)(MMG5_pMesh,MMG5_int) );
827void MMG5_keep_subdomainElts ( MMG5_pMesh,int,int (*delElt)(MMG5_pMesh,MMG5_int) );
828
830
831#ifdef __cplusplus
832}
833#endif
834
835#endif
int ier
MMG5_pMesh MMG5_pSol * sol
MMG5_pMesh * mesh
MMG5_pMesh char * filename
int MMG5_test_transpose3d()
Definition: tools.c:236
int MMG5_gradsizreq_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz.c:2322
void MMG5_mmgInit_parameters(MMG5_pMesh mesh)
int MMG5_readFloatSol3D(MMG5_pSol, FILE *, int, int, int)
Definition: inout.c:2220
int MMG5_test_rmtr()
Definition: tools.c:435
int MMG5_minQualCheck(MMG5_int iel, double minqual, double alpha)
Definition: quality.c:343
void MMG5_gradEigenvreq(double *dm, double *dn, double, int8_t, int8_t *)
Definition: anisosiz.c:1883
int MMG5_simred2d(MMG5_pMesh, double *, double *, double dm[2], double dn[2], double vp[2][2])
Definition: anisosiz.c:1326
int MMG5_intridmet(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double, double *, double *)
int MMG5_loadSolHeader(const char *, int, FILE **, int *, int *, int *, MMG5_int *, int *, int *, int **, long *, int)
Definition: inout.c:2080
int MMG5_test_intersecmet33(MMG5_pMesh mesh)
Definition: mettools.c:1047
int MMG5_3dSolTruncature_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: scalem.c:453
short MMG5_dikmov(MMG5_pMesh, MMG5_pSol, short *, short, MMG5_int chkmovmesh(MMG5_pMesh, MMG5_pSol, short, MMG5_int *))
common functions for lagrangian meshing.
Definition: mmg3.c:49
void MMG5_advancedUsage(void)
Definition: libtools.c:302
int MMG5_test_updatemet3d_ani()
Definition: anisosiz.c:1841
void MMG5_mn(double m[6], double n[6], double mn[9])
Definition: tools.c:337
size_t MMG5_memSize(void)
Definition: tools.c:852
int MMG5_countLocalParamAtTri(MMG5_pMesh, MMG5_iNode **)
Definition: apptools.c:142
void MMG5_writeDoubleSol3D(MMG5_pMesh, MMG5_pSol, FILE *, int, MMG5_int, int)
Definition: inout.c:2318
int MMG5_saveSolAtTrianglesHeader(MMG5_pMesh, FILE *, int, int, MMG5_int *, int, int, int *, int *, int *)
Definition: inout.c:2524
int MMG5_gradsizreq_iso(MMG5_pMesh, MMG5_pSol)
Definition: isosiz.c:372
double MMG5_caltri_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
Definition: quality.c:115
double MMG2D_quickarea(double a[2], double b[2], double c[2])
Definition: tools.c:971
void MMG5_build3DMetric(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ip, double dbuf[6])
Definition: inout.c:1528
static void * mycalloc(size_t c, size_t s)
int MMG5_buildridmet(MMG5_pMesh, MMG5_pSol, MMG5_int, double, double, double, double *, double[3][3])
int MMG5_test_simred2d(MMG5_pMesh mesh, double *mex, double *nex, double *dmex, double *dnex, double vpex[][2])
Definition: anisosiz.c:1585
int MMG5_isSplit(MMG5_pMesh, MMG5_int, MMG5_int *, MMG5_int *)
Definition: mmg2.c:411
void MMG5_printSolStats(MMG5_pMesh mesh, MMG5_pSol *sol)
Definition: inout.c:2723
void MMG5_memOption_memSet(MMG5_pMesh mesh)
Definition: tools.c:891
int MMG5_eigenvmatsym3d(MMG5_pMesh mesh, double m[], double lambda[], double v[][3])
Definition: mettools.c:164
float MMG5_swapf(float sbin)
Definition: inout.c:80
double MMG5_nonorsurf(MMG5_pMesh mesh, MMG5_pTria pt)
Definition: tools.c:160
int MMG5_isLevelSet(MMG5_pMesh, MMG5_int, MMG5_int)
Definition: mmg2.c:471
static void * myrealloc(void *ptr_in, size_t s, size_t oldsize)
int MMG5_scotchCall(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol fields, MMG5_int *)
Definition: librnbg.c:231
int MMG5_check_readedMesh(MMG5_pMesh mesh, MMG5_int nref)
Definition: inout.c:526
int MMG5_resetRef_ls(MMG5_pMesh)
Definition: mmg2.c:1188
int MMG5_boundingBox(MMG5_pMesh mesh)
Definition: scalem.c:46
static void MMG5_excfun(int sigid)
double MMG5_test_mat_error(int8_t nelem, double m1[], double m2[])
Definition: tools.c:1123
int MMG5_test_rotmatrix()
Definition: tools.c:512
int MMG5_Add_inode(MMG5_pMesh mesh, MMG5_iNode **liLi, int val)
Definition: apptools.c:68
MMG5_int MMG5_hashFace(MMG5_pMesh, MMG5_Hash *, MMG5_int, MMG5_int, MMG5_int, MMG5_int)
Definition: hash.c:286
int MMG5_updatemetreq_ani(double *n, double dn[2], double vp[2][2])
Definition: anisosiz.c:1914
int MMG5_regnor(MMG5_pMesh mesh)
Definition: analys.c:46
void MMG5_mmgUsage(char *prog)
Definition: libtools.c:210
int MMG5_writeLocalParamAtTri(MMG5_pMesh, MMG5_iNode *, FILE *)
Definition: apptools.c:186
void MMG5_keep_subdomainElts(MMG5_pMesh, int, int(*delElt)(MMG5_pMesh, MMG5_int))
Definition: tools.c:1072
int MMG5_test_crossprod3d()
Definition: tools.c:311
int MMG5_interp_iso(double *ma, double *mb, double *mp, double t)
Definition: intmet.c:484
double MMG5_surftri_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
Definition: isosiz.c:42
int MMG5_rmc(MMG5_pMesh, MMG5_pSol)
Definition: mmg2.c:911
void MMG5_check_hminhmax(MMG5_pMesh mesh, int8_t sethmin, int8_t sethmax)
Definition: scalem.c:89
int MMG5_eigenvmatnonsym2d(MMG5_pMesh mesh, double m[], double lambda[], double v[][2])
Definition: mettools.c:184
int MMG5_compute_meanMetricAtMarkedPoints_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz.c:2205
int MMG5_intersecmet22(MMG5_pMesh mesh, double *m, double *n, double *mr)
Definition: mettools.c:814
void MMG5_paramUsage1(void)
Definition: libtools.c:239
void MMG5_2d3dUsage(void)
Definition: libtools.c:291
static const uint8_t MMG5_iprv2[3]
int MMG5_hashUpdate(MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
Definition: hash.c:400
double MMG5_det3pt1vec(double c0[3], double c1[3], double c2[3], double v[3])
Definition: tools.c:920
int MMG5_truncate_met3d(MMG5_pSol met, MMG5_int ip, double isqhmin, double isqhmax)
Definition: scalem.c:148
int MMG5_mmgIntmet33_ani(double *, double *, double *, double)
Definition: intmet.c:50
double MMG5_det4pt(double c0[3], double c1[3], double c2[3], double c3[3])
Definition: tools.c:932
int MMG5_test_eigenvmatsym3d(MMG5_pMesh mesh, double *mex, double lambdaex[], double vpex[][3])
Definition: mettools.c:456
int MMG5_saveMshMesh(MMG5_pMesh, MMG5_pSol *, const char *, int)
Definition: inout.c:1587
int MMG5_loadMshMesh_part1(MMG5_pMesh mesh, const char *filename, FILE **inm, long *posNodes, long *posElts, long **posNodeData, int *bin, int *iswp, MMG5_int *nelts, int *nsols)
Definition: inout.c:278
int MMG5_mmgIntextmet(MMG5_pMesh, MMG5_pSol, MMG5_int, double *, double *)
int MMG5_test_eigenvmatnonsym2d(MMG5_pMesh mesh, double *mex, double lambdaex[], double vpex[][2], double ivpex[][2])
Definition: mettools.c:379
int MMG5_test_updatemet2d_ani()
Definition: anisosiz.c:1805
int MMG5_boulep(MMG5_pMesh mesh, MMG5_int start, int ip, MMG5_int *, MMG5_int *list, MMG5_int *tlist)
Definition: boulep.c:52
int MMG5_boulet(MMG5_pMesh mesh, MMG5_int start, int ip, MMG5_int *list, int8_t s, int8_t *opn)
Definition: boulep.c:363
void MMG5_version(MMG5_pMesh, char *)
Functions needed by libraries API.
Definition: libtools.c:43
int MMG5_readDoubleSol3D(MMG5_pSol, FILE *, int, int, MMG5_int)
Definition: inout.c:2269
int MMG5_simred3d(MMG5_pMesh mesh, double *m, double *n, double dm[3], double dn[3], double vp[3][3])
Definition: anisosiz.c:1416
int MMG5_boulen(MMG5_pMesh, MMG5_int *, MMG5_int, int ip, double *nn)
Definition: boulep.c:119
void MMG5_mark_pointsOnReqEdge_fromTria(MMG5_pMesh mesh)
Definition: isosiz.c:243
MMG5_int MMG5_swapbin_int(MMG5_int sbin)
Definition: inout.c:61
void MMG5_mark_usedVertices(MMG5_pMesh mesh, void(*delPt)(MMG5_pMesh, MMG5_int))
Definition: tools.c:1018
int MMG5_buildridmetfic(MMG5_pMesh, double *, double *, double, double, double, double *)
MMG5_Bezier * MMG5_pBezier
int MMG5_ismaniball(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int start, int8_t istart)
Definition: mmg2.c:622
int MMG5_isNotSplit(MMG5_pMesh, MMG5_int)
Definition: mmg2.c:447
int MMG5_buildridmetnor(MMG5_pMesh, MMG5_pSol, MMG5_int, double *, double *, double[3][3])
int MMG5_scale_scalarMetric(MMG5_pMesh, MMG5_pSol, double)
Definition: scalem.c:206
void MMG5_mmgDefaultValues(MMG5_pMesh mesh)
Definition: libtools.c:70
int MMG5_nonUnitNorPts(MMG5_pMesh, MMG5_int, MMG5_int, MMG5_int, double *)
Definition: tools.c:127
int MMG5_rmtr(double r[3][3], double m[6], double mr[6])
Definition: tools.c:405
int MMG5_invmat33(double m[3][3], double mi[3][3])
Definition: tools.c:653
int MMG5_saveSolHeader(MMG5_pMesh, const char *, FILE **, int, int *, MMG5_int *, MMG5_int, int, int, int *, int *, int *)
Definition: inout.c:2387
void MMG5_lagUsage(void)
Definition: libtools.c:275
double MMG5_swapd(double sbin)
Definition: inout.c:97
int MMG5_loadVtuMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
void MMG5_defUninitSize(MMG5_pMesh mesh, MMG5_pSol met, int8_t ismet)
Definition: anisosiz.c:228
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
Definition: hash.c:526
int MMG5_resetRef_lssurf(MMG5_pMesh)
Definition: mmg2s.c:129
void MMG5_displayLengthHisto(MMG5_pMesh, MMG5_int, double *, MMG5_int, MMG5_int, double, MMG5_int, MMG5_int, double, int, double *, MMG5_int *, int8_t)
Definition: quality.c:252
int MMG5_paratmet(double c0[3], double n0[3], double m[6], double c1[3], double n1[3], double mt[6])
Definition: mettools.c:1390
int MMG5_hashEdgeTag(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, int16_t k)
Definition: hash.c:437
struct MMG5_iNode_s MMG5_iNode
int MMG5_eigenvmatsym2d(MMG5_pMesh mesh, double m[], double lambda[], double v[][2])
Definition: mettools.c:144
void MMG5_Free_ilinkedList(MMG5_pMesh mesh, MMG5_iNode *liLi)
Definition: apptools.c:120
static const uint8_t MMG5_inxt2[6]
void MMG5_mark_verticesAsUnused(MMG5_pMesh mesh)
Definition: tools.c:994
int MMG5_chkMetricType(MMG5_pMesh mesh, int *type, int *, FILE *inm)
Definition: inout.c:2661
int MMG5_loadMshMesh_part2(MMG5_pMesh mesh, MMG5_pSol *sol, FILE **inm, const long posNodes, const long posElts, const long *posNodeData, const int bin, const int iswp, const MMG5_int nelts, const int nsols)
Definition: inout.c:668
int MMG5_snpval_ls(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg2.c:502
static size_t myfree(void *ptr)
double MMG5_surftri_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
Definition: anisosiz.c:124
int MMG5_updatemet2d_ani(double *m, double *n, double dm[2], double dn[2], double vp[2][2], int8_t ier)
Definition: anisosiz.c:1742
double MMG5_ridSizeInNormalDir(MMG5_pMesh, int, double *, MMG5_pBezier, double, double)
int MMG5_eigenvmatnonsym3d(MMG5_pMesh mesh, double m[], double lambda[], double v[][3])
Definition: mettools.c:209
void MMG5_printTria(MMG5_pMesh mesh, char *fileName)
Definition: tools.c:825
void MMG5_printMetStats(MMG5_pMesh mesh, MMG5_pSol met)
Definition: inout.c:2705
int MMG5_test_mn()
Definition: tools.c:357
int MMG5_devangle(double *n1, double *n2, double crit)
Definition: tools.c:103
int MMG5_elementWeight(MMG5_pMesh, MMG5_pSol, MMG5_pTria, MMG5_pPoint, MMG5_Bezier *, double r[3][3], double gv[2])
Definition: anisomovpt.c:53
int MMG5_sum_reqEdgeLengthsAtPoint(MMG5_pMesh, MMG5_pSol, MMG5_int ip0, MMG5_int ip1)
Definition: isosiz.c:129
int MMG5_MultiMat_init(MMG5_pMesh)
Definition: mmg2.c:326
void MMG5_displayLengthHisto_internal(MMG5_int, MMG5_int, MMG5_int, double, MMG5_int, MMG5_int, double, MMG5_int, double *, MMG5_int *, int8_t, int)
Definition: quality.c:294
void MMG5_dotprod(int8_t dim, double *a, double *b, double *result)
Definition: tools.c:265
int MMG5_test_dotprod()
Definition: tools.c:276
static void MMG5_warnScotch(MMG5_pMesh mesh)
MMG5_int MMG5_hashGet(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
Definition: hash.c:495
int MMG5_solTruncature_iso(MMG5_pMesh mesh, MMG5_pSol met)
Definition: scalem.c:299
void MMG5_paramUsage2(void)
Definition: libtools.c:258
int MMG5_nortri(MMG5_pMesh mesh, MMG5_pTria pt, double *n)
Definition: tools.c:209
int MMG5_interpreg_ani(MMG5_pMesh, MMG5_pSol, MMG5_pTria, int8_t, double, double *mr)
int MMG5_hashEdge(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
Definition: hash.c:345
double MMG5_orvol(MMG5_pPoint point, MMG5_int *v)
Definition: tools.c:951
int MMG5_rotmatrix(double n[3], double r[3][3])
Definition: tools.c:467
int MMG5_sys33sym(double a[6], double b[3], double r[3])
Definition: tools.c:769
int MMG5_updatemet3d_ani(double *m, double *n, double dm[3], double dn[3], double vp[3][3], int8_t ier)
Definition: anisosiz.c:1783
void MMG5_gradation_info(MMG5_pMesh)
Definition: isosiz.c:96
int MMG5_test_invmat33()
Definition: tools.c:1165
double MMG5_ridSizeInTangentDir(MMG5_pMesh, MMG5_pPoint, MMG5_int, MMG5_int *, double, double)
Definition: anisosiz.c:764
int MMG5_defsiz_startingMessage(MMG5_pMesh, MMG5_pSol, const char *funcname)
Definition: isosiz.c:77
void MMG5_transpose3d(double m[3][3])
Definition: tools.c:220
int MMG5_solveDefmetrefSys(MMG5_pMesh, MMG5_pPoint, MMG5_int *, double r[3][3], double *, double *, double *, double *, double, double, double)
int MMG5_gradsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
Definition: isosiz.c:278
int MMG5_test_invmat22()
Definition: tools.c:1140
int MMG5_saveDisp(MMG5_pMesh, MMG5_pSol)
Definition: mmg3.c:112
int MMG5_compute_meanMetricAtMarkedPoints_iso(MMG5_pMesh mesh, MMG5_pSol met)
Definition: isosiz.c:167
int MMG5_invmatg(double m[9], double mi[9])
Definition: tools.c:613
void MMG5_nsort(int8_t, double *, int8_t *)
Definition: tools.c:49
int MMG5_snpval_lssurf(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg2s.c:45
int MMG5_swapbin(int sbin)
Definition: inout.c:42
static void * mymalloc(size_t s)
int MMG5_grad2metSurfreq(MMG5_pMesh, MMG5_pSol, MMG5_pTria, MMG5_int, MMG5_int)
Definition: anisosiz.c:1951
int MMG5_check_setted_hminhmax(MMG5_pMesh mesh)
Definition: scalem.c:116
void MMG5_fillDefmetregSys(MMG5_int, MMG5_pPoint, int, MMG5_Bezier, double r[3][3], double *, double *, double *, double *)
int MMG5_test_simred3d(MMG5_pMesh mesh, double *mex, double *nex, double *dmex, double *dnex, double vpex[][3])
Definition: anisosiz.c:1663
int MMG5_chkmaniball(MMG5_pMesh mesh, MMG5_int start, int8_t istart)
Definition: mmg2.c:1303
void MMG5_crossprod3d(double *a, double *b, double *result)
Definition: tools.c:300
void MMG5_nperm(int8_t n, int8_t shift, int8_t stride, double *val, double *oldval, int8_t *perm)
Definition: tools.c:80
int MMG5_test_eigenvmatsym2d(MMG5_pMesh mesh, double *mex, double lambdaex[], double vpex[][2])
Definition: mettools.c:301
int MMG5_scale_meshAndSol(MMG5_pMesh, MMG5_pSol, MMG5_pSol, double *)
Definition: scalem.c:561
MMG5_int MMG5_gradsiz_ani(MMG5_pMesh mesh, MMG5_pSol met, int *it)
Definition: anisosiz.c:2259
int MMG5_norpts(MMG5_pMesh, MMG5_int, MMG5_int, MMG5_int, double *)
Definition: tools.c:183
int MMG5_mmgHashTria(MMG5_pMesh mesh, MMG5_int *adja, MMG5_Hash *, int chkISO)
Definition: hash.c:58
void MMG5_Set_commonFunc(void)
double MMG5_caltri_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
Definition: quality.c:199
int MMG5_reset_metricAtReqEdges_surf(MMG5_pMesh, MMG5_pSol, int8_t)
Definition: isosiz.c:204
int MMG5_setref_lssurf(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg2s.c:160
int MMG5_chkmanimesh(MMG5_pMesh mesh)
Definition: mmg2.c:1423
int MMG5_invmat22(double m[2][2], double mi[2][2])
Definition: tools.c:745
int MMG5_boulec(MMG5_pMesh, MMG5_int *, MMG5_int, int ip, double *tt)
Definition: boulep.c:199
int MMG5_solveDefmetregSys(MMG5_pMesh, double r[3][3], double *, double *, double *, double *, double, double, double)
int MMG5_2dSolTruncature_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: scalem.c:365
double MMG5_surftri33_ani(MMG5_pMesh, MMG5_pTria, double *, double *, double *)
int MMG5_saveSolAtTetrahedraHeader(MMG5_pMesh, FILE *, int, int, MMG5_int *, int, int, int *, int *, int *)
Definition: inout.c:2593
int MMG5_test_eigenvmatnonsym3d(MMG5_pMesh mesh, double *mex, double lambdaex[], double vpex[][3], double ivpex[][3])
Definition: mettools.c:536
int MMG5_test_intersecmet22(MMG5_pMesh mesh)
Definition: mettools.c:962
void MMG5_bezierEdge(MMG5_pMesh, MMG5_int, MMG5_int, double *, double *, int8_t, double *)
int MMG5_bouler(MMG5_pMesh, MMG5_int *, MMG5_int, int ip, MMG5_int *, MMG5_int *, int *, int *, int)
Definition: boulep.c:287
int MMG5_setref_ls(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg2.c:1224
MMG5_int MMG5_grad2metSurf(MMG5_pMesh, MMG5_pSol, MMG5_pTria, MMG5_int, MMG5_int)
Definition: anisosiz.c:975
double MMG5_caltri33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt)
Definition: quality.c:47
int MMG5_getStartRef(MMG5_pMesh, MMG5_int, MMG5_int *)
Definition: mmg2.c:213
int MMG5_intmetsavedir(MMG5_pMesh mesh, double *m, double *n, double *mr)
Definition: mettools.c:635
int MMG5_invmat(double *m, double *mi)
Definition: tools.c:562
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Definition: libmmgtypes.h:595
int8_t ddebug
Definition: libmmgtypes.h:532
MMG mesh structure.
Definition: libmmgtypes.h:605
MMG5_Info info
Definition: libmmgtypes.h:651
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:270
struct MMG5_iNode_s * nxt
Cell for linked list of integer value.