mmgpy 0.1.0__cp312-cp312-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mmgpy might be problematic. Click here for more details.

Files changed (68) hide show
  1. bin/concrt140.dll +0 -0
  2. bin/mmg.dll +0 -0
  3. bin/mmg2d.dll +0 -0
  4. bin/mmg2d.exe +0 -0
  5. bin/mmg3d.dll +0 -0
  6. bin/mmg3d.exe +0 -0
  7. bin/mmgs.dll +0 -0
  8. bin/mmgs.exe +0 -0
  9. bin/msvcp140.dll +0 -0
  10. bin/msvcp140_1.dll +0 -0
  11. bin/msvcp140_2.dll +0 -0
  12. bin/msvcp140_atomic_wait.dll +0 -0
  13. bin/msvcp140_codecvt_ids.dll +0 -0
  14. bin/vcruntime140.dll +0 -0
  15. bin/vcruntime140_1.dll +0 -0
  16. include/mmg/common/libmmgtypes.h +687 -0
  17. include/mmg/common/libmmgtypesf.h +762 -0
  18. include/mmg/common/mmg_export.h +47 -0
  19. include/mmg/common/mmgcmakedefines.h +46 -0
  20. include/mmg/common/mmgcmakedefinesf.h +29 -0
  21. include/mmg/common/mmgversion.h +54 -0
  22. include/mmg/libmmg.h +67 -0
  23. include/mmg/libmmgf.h +42 -0
  24. include/mmg/mmg2d/libmmg2d.h +2761 -0
  25. include/mmg/mmg2d/libmmg2df.h +3263 -0
  26. include/mmg/mmg2d/mmg2d_export.h +34 -0
  27. include/mmg/mmg3d/libmmg3d.h +3444 -0
  28. include/mmg/mmg3d/libmmg3df.h +4041 -0
  29. include/mmg/mmg3d/mmg3d_export.h +34 -0
  30. include/mmg/mmgs/libmmgs.h +2560 -0
  31. include/mmg/mmgs/libmmgsf.h +3028 -0
  32. include/mmg/mmgs/mmgs_export.h +34 -0
  33. lib/cmake/mmg/FindElas.cmake +57 -0
  34. lib/cmake/mmg/FindSCOTCH.cmake +373 -0
  35. lib/cmake/mmg/MmgTargets-release.cmake +49 -0
  36. lib/cmake/mmg/MmgTargets.cmake +127 -0
  37. lib/cmake/mmg/mmgConfig.cmake +43 -0
  38. lib/mmg.lib +0 -0
  39. lib/mmg2d.lib +0 -0
  40. lib/mmg3d.lib +0 -0
  41. lib/mmgs.lib +0 -0
  42. mmgpy/__init__.py +3 -0
  43. mmgpy/_mmgpy.cp312-win_amd64.pyd +0 -0
  44. mmgpy/_mmgpy.pyi +31 -0
  45. mmgpy/_version.py.in +4 -0
  46. mmgpy/mmg2d.dll +0 -0
  47. mmgpy/mmg2d.lib +0 -0
  48. mmgpy/mmg3d.dll +0 -0
  49. mmgpy/mmg3d.lib +0 -0
  50. mmgpy/mmgs.dll +0 -0
  51. mmgpy/mmgs.lib +0 -0
  52. mmgpy/py.typed +0 -0
  53. mmgpy-0.1.0.data/scripts/mmg2d.dll +0 -0
  54. mmgpy-0.1.0.data/scripts/mmg2d.exe +0 -0
  55. mmgpy-0.1.0.data/scripts/mmg2d.lib +0 -0
  56. mmgpy-0.1.0.data/scripts/mmg3d.dll +0 -0
  57. mmgpy-0.1.0.data/scripts/mmg3d.exe +0 -0
  58. mmgpy-0.1.0.data/scripts/mmg3d.lib +0 -0
  59. mmgpy-0.1.0.data/scripts/mmgs.dll +0 -0
  60. mmgpy-0.1.0.data/scripts/mmgs.exe +0 -0
  61. mmgpy-0.1.0.data/scripts/mmgs.lib +0 -0
  62. mmgpy-0.1.0.dist-info/METADATA +52 -0
  63. mmgpy-0.1.0.dist-info/RECORD +68 -0
  64. mmgpy-0.1.0.dist-info/WHEEL +5 -0
  65. mmgpy-0.1.0.dist-info/licenses/LICENSE +19 -0
  66. share/man/man1/mmg2d.1.gz +0 -0
  67. share/man/man1/mmg3d.1.gz +0 -0
  68. share/man/man1/mmgs.1.gz +0 -0
@@ -0,0 +1,4041 @@
1
+ ! /* This file is automatically generated by the"genheader.c" code
2
+ ! ** and the "genfort.pl" script (scripts directory).
3
+ ! ** Do not modified it by hand, it will be discarded.
4
+ ! **
5
+ ! ** This scripts recopy the macros of the libmmg*.h file
6
+ ! ** and convert enumerations into macros.
7
+ ! **
8
+ ! ** Note: "genfort.pl" is automatically called by the "genheader.c"
9
+ ! ** executable code.
10
+ ! **
11
+ ! ** See the "libmmg*.h" file for a correct displaying of the documentation.
12
+ ! */
13
+
14
+ #include "mmg/common/libmmgtypesf.h"
15
+
16
+ ! /* ===========================================================================
17
+ ! ** This file is part of the mmg software package for the tetrahedral
18
+ ! ** mesh modification.
19
+ ! ** Copyright (c) Bx INP/CNRS/Inria/UBordeaux/UPMC, 2004-
20
+ ! **
21
+ ! ** mmg is free software: you can redistribute it and/or modify it
22
+ ! ** under the terms of the GNU Lesser General Public License as published
23
+ ! ** by the Free Software Foundation, either version 3 of the License, or
24
+ ! ** (at your option) any later version.
25
+ ! **
26
+ ! ** mmg is distributed in the hope that it will be useful, but WITHOUT
27
+ ! ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
28
+ ! ** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
29
+ ! ** License for more details.
30
+ ! **
31
+ ! ** You should have received a copy of the GNU Lesser General Public
32
+ ! ** License and of the GNU General Public License along with mmg (in
33
+ ! ** files COPYING.LESSER and COPYING). If not, see
34
+ ! ** <http://www.gnu.org/licenses/>. Please read their terms carefully and
35
+ ! ** use this copy of the mmg distribution only if you accept them.
36
+ ! ** ===========================================================================
37
+ ! */
38
+
39
+
40
+ ! /*
41
+ ! * This file defines the C and Fortran headers of the mmg3d API, and
42
+ ! * their Doxygen documentation.
43
+ ! *
44
+ ! * NOTES FOR DEVELOPERS:
45
+ ! *
46
+ ! * - The Fortran headers are generated from comment lines that start with '* >'.
47
+ ! * They must match the C declarations.
48
+ ! *
49
+ ! * - We cannot handle enum types in the Fortran version so enums are replaced
50
+ ! * by ints in both versions.
51
+ ! *
52
+ ! * - To keep the genheader program working, don't break line between an enum
53
+ ! * name and the opening brace (it creates errors under windows)
54
+ ! *
55
+ ! * - Since Mmg version 5,
56
+ ! * -- data structures and parameters that are common between mmg3d, mmg2d
57
+ ! * and mmgs use the MMG5_ prefix;
58
+ ! * -- API functions should have an MMG3D_, MMG2D_, or MMGS_ prefix,
59
+ ! * depending on the library; and
60
+ ! * -- some MMG5_ API functions exists but they are common to the
61
+ ! * three libraries.
62
+ ! *
63
+ ! */
64
+
65
+
66
+ ! /**
67
+ ! *
68
+ ! * \file mmg3d/libmmg3d.h
69
+ ! * \ingroup API
70
+ ! * \brief API headers and documentation for the mmg3d library, for volumetric meshes in 3D
71
+ ! * \author Algiane Froehly (Inria/UBordeaux)
72
+ ! * \version 5
73
+ ! * \date 01 2014
74
+ ! * \copyright GNU Lesser General Public License.
75
+ ! *
76
+ ! * These are the API functions for the mmg3d library. These functions allow to
77
+ ! * load and save meshes and data defined on meshes; add, extract, or modify mesh
78
+ ! * data; and to call the library functions that perform remeshing, level-set
79
+ ! * discretization, and Lagrangian motion.
80
+ ! *
81
+ ! * Meshes are here defined in terms of vertices and three-dimensional objects:
82
+ ! * tetrahedra and prisms. Optionally lower-dimensional entities can be present:
83
+ ! * triangles, quadrilaterals and edges. All of these \a entities can have a
84
+ ! * \a reference: an integer value that can serve as a group identifier. In
85
+ ! * addition mesh entities can have \a attributes such as "ridge" or "required".
86
+ ! *
87
+ ! * Data defined on meshes can be for example functions that are meant for
88
+ ! * level-set discretization, metric tensors that will govern edge lengths, and
89
+ ! * vector fields governing lagrangian motion. These data can be scalar, vector,
90
+ ! * or (symmetric) tensor-valued; and there can be more than one data item
91
+ ! * associated with a mesh entity. These data are often referred to as \a
92
+ ! * solutions.
93
+ ! *
94
+ ! * Three of the functions here are referred to as "programs", because they
95
+ ! * perform the tasks for which Mmg is meant: remeshing, level-set discretization
96
+ ! * and Lagrangian motion. The other functions merely serve to load and save data
97
+ ! * and to perform pre- and post-processing. These programs actually behave much
98
+ ! * like independent programs: they send diagnostic output to stdout and in rare
99
+ ! * cases they may call the exit() function.
100
+ ! *
101
+ ! *
102
+ ! * \htmlonly
103
+ ! * <h2 class="groupheader">Examples</h2>
104
+ ! * \endhtmlonly
105
+ ! *
106
+ ! * A very simple example code for mesh adaptation with automatic parsing of .mesh files
107
+ ! * \dontinclude libexamples/mmg3d/adaptation_example0/example0_a/main.c
108
+ ! * \skipline BEGIN_EXAMPLE
109
+ ! * \until END_EXAMPLE
110
+ ! *
111
+ ! * Mesh adaptation example in which get/set functions are used to provide input to
112
+ ! * the library and to extract the output mesh.
113
+ ! * \include libexamples/mmg3d/adaptation_example0/example0_b/main.c
114
+ ! *
115
+ ! * Fortran example.
116
+ ! * \include libexamples/mmg3d/adaptation_example0_fortran/example0_a/main.F90
117
+ ! *
118
+ ! * Another Fortran example.
119
+ ! * \include libexamples/mmg3d/adaptation_example0_fortran/example0_b/main.F90
120
+ ! *
121
+ ! * Mesh adaptation example.
122
+ ! * \include libexamples/mmg3d/adaptation_example1/main.c
123
+ ! *
124
+ ! * Another mesh adaptation example.
125
+ ! * \include libexamples/mmg3d/adaptation_example2/main.c
126
+ ! *
127
+ ! * Isosurface discretization example (with metric)
128
+ ! * \include libexamples/mmg3d/IsosurfDiscretization_lsAndMetric/main.c
129
+ ! *
130
+ ! * Lagrangian motion example.
131
+ ! * \include libexamples/mmg3d/LagrangianMotion_example0/main.c
132
+ ! */
133
+
134
+
135
+ #ifndef MMG3DLIB_H
136
+ #define MMG3DLIB_H
137
+
138
+ ! #ifdef __cplusplus
139
+ ! extern "C" {
140
+ ! #endif
141
+
142
+ ! #include "mmg/common/libmmgtypes.h"
143
+ ! #include "mmg/mmg3d/mmg3d_export.h"
144
+
145
+ ! /**
146
+ ! * Maximum array size when storing adjacent vertices (or ball) of a vertex.
147
+ ! */
148
+
149
+ #define MMG3D_LMAX 10240
150
+
151
+ ! /**
152
+ ! * \enum MMG3D_Param
153
+ ! * \brief Input parameters for the mmg library.
154
+ ! *
155
+ ! * These are the input parameters for the mmg3d library functions. Options prefixed by
156
+ ! * \a MMG3D_IPARAM require integer values and options prefixed by
157
+ ! * \a MMG3D_DPARAM require real values. They can be set with the
158
+ ! * \ref MMG3D_Set_iparameter and \ref MMG3D_Set_dparameter functions,
159
+ ! * respectively.
160
+ ! *
161
+ ! */
162
+
163
+ ! /*!< [-1..10] Level of verbosity */
164
+ #define MMG3D_IPARAM_verbose 0
165
+ ! /*!< [n/-1] Max memory size in MB or keep the default value */
166
+ #define MMG3D_IPARAM_mem 1
167
+ ! /*!< [1/0] Turn on/off debug mode */
168
+ #define MMG3D_IPARAM_debug 2
169
+ ! /*!< [1/0] Turn on/off angle detection */
170
+ #define MMG3D_IPARAM_angle 3
171
+ ! /*!< [1/0] Enable level-set discretization (volume and surfaces) */
172
+ #define MMG3D_IPARAM_iso 4
173
+ ! /*!< [1/0] Enable level-set discretization on the surfaces only */
174
+ #define MMG3D_IPARAM_isosurf 5
175
+ ! /*!< [1/0] Do not attempt to make the mesh suitable for finite-element computations */
176
+ #define MMG3D_IPARAM_nofem 6
177
+ ! /*!< [1/0] Preserve triangles at interface of 2 domains with the same reference */
178
+ #define MMG3D_IPARAM_opnbdy 7
179
+ ! /*!< [-1/0/1/2] Enable Lagrangian motion */
180
+ #define MMG3D_IPARAM_lag 8
181
+ ! /*!< [1/0] Optimize mesh keeping its initial edge sizes */
182
+ #define MMG3D_IPARAM_optim 9
183
+ ! /*!< [1/0] Strong mesh optimization for LES computations */
184
+ #define MMG3D_IPARAM_optimLES 10
185
+ ! /*!< [1/0] Avoid/allow vertex insertion */
186
+ #define MMG3D_IPARAM_noinsert 11
187
+ ! /*!< [1/0] Avoid/allow edge or face flipping */
188
+ #define MMG3D_IPARAM_noswap 12
189
+ ! /*!< [1/0] Avoid/allow vertex relocation */
190
+ #define MMG3D_IPARAM_nomove 13
191
+ ! /*!< [1/0] Avoid/allow surface modifications */
192
+ #define MMG3D_IPARAM_nosurf 14
193
+ ! /*!< [0/1] Enable regularization of normals */
194
+ #define MMG3D_IPARAM_nreg 15
195
+ ! /*!< [0/1] Enable boundary regularization by moving vertices */
196
+ #define MMG3D_IPARAM_xreg 16
197
+ ! /*!< [n] Number of local parameters (which will be set with \ref MMG3D_Set_localParameter) */
198
+ #define MMG3D_IPARAM_numberOfLocalParam 17
199
+ ! /*!< [n] Number of base references for bubble removal (requires \ref MMG3D_DPARAM_rmc) */
200
+ #define MMG3D_IPARAM_numberOfLSBaseReferences 18
201
+ ! /*!< [n] Number of materials in level-set mode */
202
+ #define MMG3D_IPARAM_numberOfMat 19
203
+ ! /*!< [0/n] Save only the subdomain (reference) n (0==all subdomains) */
204
+ #define MMG3D_IPARAM_numsubdomain 20
205
+ ! /*!< [1/0] Turn on/off renumbering with Scotch */
206
+ #define MMG3D_IPARAM_renum 21
207
+ ! /*!< [1/0] Turn on/off anisotropic metric creation when no metric is provided */
208
+ #define MMG3D_IPARAM_anisosize 22
209
+ ! /*!< [n] Max number of vertices per PROctree cell (DELAUNAY) */
210
+ #define MMG3D_IPARAM_octree 23
211
+ ! /*!< [0/1] Allow/avoid overwriting of sizes at required vertices (advanced usage) */
212
+ #define MMG3D_IPARAM_nosizreq 24
213
+ ! /*!< [0/n] Isosurface boundary material reference */
214
+ #define MMG3D_IPARAM_isoref 25
215
+ ! /*!< [val] Value for angle detection (degrees) */
216
+ #define MMG3D_DPARAM_angleDetection 26
217
+ ! /*!< [val] Minimal edge length */
218
+ #define MMG3D_DPARAM_hmin 27
219
+ ! /*!< [val] Maximal edge length */
220
+ #define MMG3D_DPARAM_hmax 28
221
+ ! /*!< [val] Constant edge length */
222
+ #define MMG3D_DPARAM_hsiz 29
223
+ ! /*!< [val] Global Hausdorff distance (on all boundaries in the mesh) */
224
+ #define MMG3D_DPARAM_hausd 30
225
+ ! /*!< [val] Gradation */
226
+ #define MMG3D_DPARAM_hgrad 31
227
+ ! /*!< [val] Gradation on required entites (advanced usage) */
228
+ #define MMG3D_DPARAM_hgradreq 32
229
+ ! /*!< [val] Function value where the level set is to be discretized */
230
+ #define MMG3D_DPARAM_ls 33
231
+ ! /*!< [val] Relaxation parameter for boundary regularization (0<val<1) */
232
+ #define MMG3D_DPARAM_xreg 34
233
+ ! /*!< [-1/val] Remove small disconnected components in level-set mode */
234
+ #define MMG3D_DPARAM_rmc 35
235
+ ! /*!< [n] Number of parameters */
236
+ #define MMG3D_PARAM_size 36
237
+
238
+ ! /*--------------------------- function headers ---------------------------*/
239
+ ! /* Initialization functions */
240
+ ! /* init structures */
241
+ ! /**
242
+ ! * \brief Initialize a mesh structure and optionally the associated solution and metric structures.
243
+ ! *
244
+ ! * \param starter dummy argument used to initialize the variadic argument
245
+ ! * list
246
+ ! * \param ... variadic arguments that depend on the library function that you
247
+ ! * want to call.
248
+ ! *
249
+ ! * For the MMG3D_mmg3dlib function, you need
250
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
251
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh, MMG5_ARG_ppMet
252
+ ! * MMG5_ARG_ppMet, &your_metric,MMG5_ARG_end).
253
+ ! *
254
+ ! * For the MMG3D_mmg3dls function, you need
255
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
256
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh, MMG5_ARG_ppLs,
257
+ ! * &your_level_set,MMG5_ARG_end).
258
+ ! *
259
+ ! * For the MMG3D_mmg3dmov function, you must call
260
+ ! * : MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
261
+ ! * MMG5_ARG_ppMet,&empty_metric,MMG5_ARG_ppDisp, &your_displacement,
262
+ ! * MMG5_ARG_end).
263
+ ! *
264
+ ! * Here, \a your_mesh is a \ref MMG5_pMesh, \a your_metric \a your_level_set and
265
+ ! * \a your_displacement are \ref MMG5_pSol.
266
+ ! *
267
+ ! * \return 1 on success, 0 on failure
268
+ ! *
269
+ ! * This function allocates and initializes MMG structures. All structures of
270
+ ! * types MMG5_pMesh and MMG5_pSol that will be given as arguments to Mmg
271
+ ! * functions must be initialized with this function.
272
+ ! *
273
+ ! * \remark No fortran interface to allow variadic arguments.
274
+ ! *
275
+ ! * \warning detected bugs:
276
+ ! * - some vertices along open boundaries end up with a normal (while they should not)
277
+ ! *
278
+ ! */
279
+
280
+ ! LIBMMG3D_EXPORT int MMG3D_Init_mesh(const int starter,...);
281
+
282
+ ! /**
283
+ ! * \param mesh pointer to the mesh structure.
284
+ ! * \param sol pointer to the sol structure.
285
+ ! *
286
+ ! * \brief Initialize file names to their default values.
287
+ ! *
288
+ ! * This function initializes all file names to their default values.
289
+ ! *
290
+ ! * \remark Fortran interface:
291
+ ! */
292
+ INTERFACE
293
+ SUBROUTINE MMG3D_INIT_FILENAMES(mesh,sol)
294
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
295
+ END SUBROUTINE
296
+ END INTERFACE
297
+ ! *
298
+ ! */
299
+
300
+ ! LIBMMG3D_EXPORT void MMG3D_Init_fileNames(MMG5_pMesh mesh, MMG5_pSol sol);
301
+
302
+ ! /**
303
+ ! * \brief Initialize parameters to their default values
304
+ ! *
305
+ ! * \param mesh pointer to the mesh structure.
306
+ ! *
307
+ ! * Initialization of the input parameters (stored in the Info structure).
308
+ ! *
309
+ ! * \remark Fortran interface:
310
+ ! */
311
+ INTERFACE
312
+ SUBROUTINE MMG3D_INIT_PARAMETERS(mesh)
313
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
314
+ END SUBROUTINE
315
+ END INTERFACE
316
+ ! *
317
+ ! */
318
+
319
+ ! LIBMMG3D_EXPORT void MMG3D_Init_parameters(MMG5_pMesh mesh);
320
+
321
+ ! /* init file names */
322
+ ! /**
323
+ ! * \param mesh pointer to the mesh structure.
324
+ ! * \param meshin input mesh name.
325
+ ! * \return 1.
326
+ ! *
327
+ ! * \brief Set the name of input mesh.
328
+ ! *
329
+ ! * \remark Fortran interface:
330
+ ! */
331
+ INTERFACE
332
+ SUBROUTINE MMG3D_SET_INPUTMESHNAME(mesh,meshin,strlen0,retval)
333
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
334
+ CHARACTER(LEN=*), INTENT(IN) :: meshin
335
+ INTEGER, INTENT(IN) :: strlen0
336
+ INTEGER, INTENT(OUT) :: retval
337
+ END SUBROUTINE
338
+ END INTERFACE
339
+ ! *
340
+ ! */
341
+
342
+ ! LIBMMG3D_EXPORT int MMG3D_Set_inputMeshName(MMG5_pMesh mesh,const char* meshin);
343
+
344
+ ! /**
345
+ ! * \param mesh pointer to the mesh structure.
346
+ ! * \param meshout name of the output mesh file.
347
+ ! * \return 1.
348
+ ! *
349
+ ! * \brief Set the name of output mesh file.
350
+ ! *
351
+ ! * \remark Fortran interface:
352
+ ! */
353
+ INTERFACE
354
+ SUBROUTINE MMG3D_SET_OUTPUTMESHNAME(mesh,meshout,strlen0,retval)
355
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
356
+ CHARACTER(LEN=*), INTENT(IN) :: meshout
357
+ INTEGER, INTENT(IN) :: strlen0
358
+ INTEGER, INTENT(OUT) :: retval
359
+ END SUBROUTINE
360
+ END INTERFACE
361
+ ! *
362
+ ! */
363
+
364
+ ! LIBMMG3D_EXPORT int MMG3D_Set_outputMeshName(MMG5_pMesh mesh, const char* meshout);
365
+
366
+ ! /**
367
+ ! * \param mesh pointer to the mesh structure.
368
+ ! * \param sol pointer to the sol structure.
369
+ ! * \param solin name of the input solution file.
370
+ ! * \return 1.
371
+ ! *
372
+ ! * \brief Set the name of input solution file.
373
+ ! *
374
+ ! * \remark Fortran interface:
375
+ ! */
376
+ INTERFACE
377
+ SUBROUTINE MMG3D_SET_INPUTSOLNAME(mesh,sol,solin,strlen0,retval)
378
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
379
+ CHARACTER(LEN=*), INTENT(IN) :: solin
380
+ INTEGER, INTENT(IN) :: strlen0
381
+ INTEGER, INTENT(OUT) :: retval
382
+ END SUBROUTINE
383
+ END INTERFACE
384
+ ! *
385
+ ! */
386
+
387
+ ! LIBMMG3D_EXPORT int MMG3D_Set_inputSolName(MMG5_pMesh mesh,MMG5_pSol sol,
388
+ ! const char* solin);
389
+
390
+ ! /**
391
+ ! * \param mesh pointer to the mesh structure.
392
+ ! * \param sol pointer to the sol structure.
393
+ ! * \param solout name of the output solution file.
394
+ ! * \return 0 if failed, 1 otherwise.
395
+ ! *
396
+ ! * \brief Set the name of the output solution file.
397
+ ! *
398
+ ! * \remark Fortran interface:
399
+ ! */
400
+ INTERFACE
401
+ SUBROUTINE MMG3D_SET_OUTPUTSOLNAME(mesh,sol,solout,strlen0,retval)
402
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
403
+ CHARACTER(LEN=*), INTENT(IN) :: solout
404
+ INTEGER, INTENT(IN) :: strlen0
405
+ INTEGER, INTENT(OUT) :: retval
406
+ END SUBROUTINE
407
+ END INTERFACE
408
+ ! *
409
+ ! */
410
+
411
+ ! LIBMMG3D_EXPORT int MMG3D_Set_outputSolName(MMG5_pMesh mesh,MMG5_pSol sol,
412
+ ! const char* solout);
413
+
414
+ ! /**
415
+ ! * \param mesh pointer to the mesh structure.
416
+ ! * \param fparamin name of the input parameter file.
417
+ ! * \return 1.
418
+ ! *
419
+ ! * \brief Set the name of the input parameter file.
420
+ ! *
421
+ ! * \remark Fortran interface:
422
+ ! */
423
+ INTERFACE
424
+ SUBROUTINE MMG3D_SET_INPUTPARAMNAME(mesh,fparamin,strlen0,retval)
425
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
426
+ CHARACTER(LEN=*), INTENT(IN) :: fparamin
427
+ INTEGER, INTENT(IN) :: strlen0
428
+ INTEGER, INTENT(OUT) :: retval
429
+ END SUBROUTINE
430
+ END INTERFACE
431
+ ! *
432
+ ! */
433
+
434
+ ! LIBMMG3D_EXPORT int MMG3D_Set_inputParamName(MMG5_pMesh mesh, const char* fparamin);
435
+
436
+
437
+ ! /* init structure sizes */
438
+ ! /**
439
+ ! * \brief Initialize a solution field.
440
+ ! * \param mesh pointer to the mesh structure.
441
+ ! * \param sol pointer to the sol structure.
442
+ ! * \param typEntity type of entities on which the solution is defined (vertices, triangles, ...).
443
+ ! * See \ref MMG5_entities for the defined entity types. Currently only \ref MMG5_Vertex
444
+ ! * is supported.
445
+ ! * \param np number of solutions.
446
+ ! * \param typSol type of solution (scalar, vectorial, ...,
447
+ ! * see \ref MMG5_type for possible values).
448
+ ! * \return 0 if failed, 1 otherwise.
449
+ ! *
450
+ ! * Initialize a solution field: set dimension, types and number of data.
451
+ ! * To use to initialize a metric, a level-set or a displacement field.
452
+ ! *
453
+ ! * \remark Fortran interface:
454
+ ! */
455
+ INTERFACE
456
+ SUBROUTINE MMG3D_SET_SOLSIZE(mesh,sol,typEntity,np,typSol,retval)
457
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
458
+ INTEGER(MMG5F_INT), INTENT(IN):: np
459
+ INTEGER, INTENT(IN) :: typEntity,typSol
460
+ INTEGER, INTENT(OUT) :: retval
461
+ END SUBROUTINE
462
+ END INTERFACE
463
+ ! *
464
+ ! */
465
+
466
+ ! LIBMMG3D_EXPORT int MMG3D_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity,
467
+ ! MMG5_int np, int typSol);
468
+
469
+ ! /**
470
+ ! * \brief Initialize an array of solution values defined at vertices
471
+ ! * \param mesh pointer to the mesh structure.
472
+ ! * \param sol pointer to an allocatable sol structure.
473
+ ! * \param nsols number of solutions per entity
474
+ ! * \param nentities number of vertices
475
+ ! * \param typSol Array of size nsols listing the type of the solutions
476
+ ! * (scalar, vectorial, ..., see \ref MMG5_type for possible values).
477
+ ! * \return 0 if failed, 1 otherwise.
478
+ ! *
479
+ ! * Initialize a solution field defined at vertices: set dimension,
480
+ ! * types and number of data values. (not used by Mmg itself).
481
+ ! *
482
+ ! * \remark Fortran interface:
483
+ ! */
484
+ INTERFACE
485
+ SUBROUTINE MMG3D_SET_SOLSATVERTICESSIZE(mesh,sol,nsols,nentities,typSol,retval)
486
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
487
+ INTEGER, INTENT(IN) :: nsols
488
+ INTEGER(MMG5F_INT), INTENT(IN):: nentities
489
+ INTEGER, INTENT(IN) :: typSol(*)
490
+ INTEGER, INTENT(OUT) :: retval
491
+ END SUBROUTINE
492
+ END INTERFACE
493
+ ! *
494
+ ! */
495
+
496
+ ! LIBMMG3D_EXPORT int MMG3D_Set_solsAtVerticesSize(MMG5_pMesh mesh, MMG5_pSol *sol,int nsols,
497
+ ! MMG5_int nentities, int *typSol);
498
+
499
+ ! /**
500
+ ! * \brief Set the number of vertices, tetrahedra, prisms, triangles, quadrilaterals,
501
+ ! * and edges of a mesh.
502
+ ! * \param mesh pointer to the mesh structure.
503
+ ! * \param np number of vertices.
504
+ ! * \param ne number of tetrahedra.
505
+ ! * \param nprism number of prisms.
506
+ ! * \param nt number of triangles.
507
+ ! * \param nquad number of quads.
508
+ ! * \param na number of edges.
509
+ ! * \return 0 if failed, 1 otherwise.
510
+ ! *
511
+ ! * This function sets the number of vertices, tetrahedra, prisms, triangles,
512
+ ! * quadrilaterals and edges of the mesh and allocates the associated arrays. If
513
+ ! * called again, it will reset the whole mesh to reallocate it at the new size
514
+ ! *
515
+ ! * \remark Fortran interface:
516
+ ! */
517
+ INTERFACE
518
+ SUBROUTINE MMG3D_SET_MESHSIZE(mesh,np,ne,nprism,nt,nquad,na,retval)
519
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
520
+ INTEGER(MMG5F_INT) :: np,ne,nprism,nt,nquad,na
521
+ INTEGER, INTENT(OUT) :: retval
522
+ END SUBROUTINE
523
+ END INTERFACE
524
+ ! *
525
+ ! */
526
+
527
+ ! LIBMMG3D_EXPORT int MMG3D_Set_meshSize(MMG5_pMesh mesh,MMG5_int np,MMG5_int ne,MMG5_int nprism,
528
+ ! MMG5_int nt,MMG5_int nquad,MMG5_int na);
529
+
530
+ ! /* init structure data */
531
+ ! /**
532
+ ! * \brief Set the coordinates of a single vertex.
533
+ ! * \param mesh pointer to the mesh structure.
534
+ ! * \param c0 coordinate of the vertex along the first dimension.
535
+ ! * \param c1 coordinate of the vertex along the second dimension.
536
+ ! * \param c2 coordinate of the vertex along the third dimension.
537
+ ! * \param ref vertex reference.
538
+ ! * \param pos position of the vertex in the mesh.
539
+ ! * \return 1.
540
+ ! *
541
+ ! * This function sets the coordinates of a vertex \a c0, \a c1,\a c2 and reference \a ref
542
+ ! * at position \a pos in mesh structure (from 1 to nb_vertices included).
543
+ ! *
544
+ ! * \remark Fortran interface:
545
+ ! */
546
+ INTERFACE
547
+ SUBROUTINE MMG3D_SET_VERTEX(mesh,c0,c1,c2,ref,pos,retval)
548
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
549
+ REAL(KIND=8), INTENT(IN) :: c0,c1,c2
550
+ INTEGER(MMG5F_INT), INTENT(IN):: ref,pos
551
+ INTEGER, INTENT(OUT) :: retval
552
+ END SUBROUTINE
553
+ END INTERFACE
554
+ ! *
555
+ ! */
556
+
557
+ ! LIBMMG3D_EXPORT int MMG3D_Set_vertex(MMG5_pMesh mesh, double c0, double c1,
558
+ ! double c2, MMG5_int ref,MMG5_int pos);
559
+
560
+ ! /**
561
+ ! * \brief Set all vertex coordinates and references in a mesh structure
562
+ ! *
563
+ ! * \param mesh pointer to the mesh structure.
564
+ ! * \param vertices array of vertex coordinates in the order \f$[x_1, y_1, z_1, x_2, \ldots, z_N]\f$
565
+ ! * where \f$N\f$ is the number of vertices in the mesh.
566
+ ! * \param refs array of vertex references.
567
+ ! * The reference of vertex \f$i\f$ is stored in refs[\f$i-1\f$].
568
+ ! * \return 1.
569
+ ! *
570
+ ! * This function sets the coordinates and references of all vertices in a mesh
571
+ ! * structure. The number of vertices in the mesh must have been set before.
572
+ ! *
573
+ ! * \remark Fortran interface: (commentated in order to allow to pass
574
+ ! * \%val(0) instead of the refs array)
575
+ ! *
576
+ ! */
577
+ INTERFACE
578
+ ! SUBROUTINE MMG3D_SET_VERTICES(mesh,vertices,refs,retval)
579
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
580
+ ! REAL(KIND=8), INTENT(IN) :: vertices(*)
581
+ ! INTEGER(MMG5F_INT),INTENT(IN) :: refs(*)
582
+ ! INTEGER, INTENT(OUT) :: retval
583
+ ! END SUBROUTINE
584
+ END INTERFACE
585
+ ! *
586
+ ! */
587
+
588
+ ! LIBMMG3D_EXPORT int MMG3D_Set_vertices(MMG5_pMesh mesh, double *vertices,MMG5_int *refs);
589
+
590
+ ! /**
591
+ ! * \brief set a single tetrahedron's vertices
592
+ ! *
593
+ ! * \param mesh pointer to the mesh structure.
594
+ ! * \param v0 first vertex of tetrahedron.
595
+ ! * \param v1 second vertex of tetrahedron.
596
+ ! * \param v2 third vertex of tetrahedron.
597
+ ! * \param v3 fourth vertex of tetrahedron.
598
+ ! * \param ref tetrahedron reference.
599
+ ! * \param pos tetrahedron position in the mesh.
600
+ ! * \return 0 if failed, 1 otherwise.
601
+ ! *
602
+ ! * Assign the vertices \a v0, \a v1,\a v2,\a v3 and reference
603
+ ! * \a ref to the tetrahedron at position \a pos in the mesh structure.
604
+ ! * \a pos ranges from 1 to nb_tetra included.
605
+ ! *
606
+ ! * \remark Fortran interface:
607
+ ! */
608
+ INTERFACE
609
+ SUBROUTINE MMG3D_SET_TETRAHEDRON(mesh,v0,v1,v2,v3,ref,pos,retval)
610
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
611
+ INTEGER(MMG5F_INT), INTENT(IN):: v0,v1,v2,v3,pos
612
+ INTEGER(MMG5F_INT), INTENT(IN):: ref
613
+ INTEGER, INTENT(OUT) :: retval
614
+ END SUBROUTINE
615
+ END INTERFACE
616
+ ! *
617
+ ! */
618
+
619
+ ! LIBMMG3D_EXPORT int MMG3D_Set_tetrahedron(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1,
620
+ ! MMG5_int v2, MMG5_int v3, MMG5_int ref, MMG5_int pos);
621
+
622
+ ! /**
623
+ ! * \brief Set the vertices and references of all tetrahedra in a mesh structure
624
+ ! *
625
+ ! * \param mesh pointer to the mesh structure.
626
+ ! * \param tetra vertices of the tetras of the mesh given.
627
+ ! * The vertices of the \f$i^{th}\f$ tetrahedron are given by
628
+ ! * tetra[(i-1)*4] to tetra[(i-1)*4+3] included.
629
+ ! * \param refs array of the tetrahedra references.
630
+ ! * The references of the \f$i^{th}\f$ tetrahedron is given by refs[i-1].
631
+ ! * \return 0 if failed, 1 otherwise.
632
+ ! *
633
+ ! * This function sets the vertices and references of all tetrahedra in a mesh.
634
+ ! *
635
+ ! * \remark Fortran interface: (commentated in
636
+ ! * order to allow to pass \%val(0) instead of the refs array)
637
+ ! *
638
+ ! */
639
+ INTERFACE
640
+ ! SUBROUTINE MMG3D_SET_TETRAHEDRA(mesh,tetra,refs,retval)
641
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
642
+ ! INTEGER(MMG5F_INT), DIMENSION(*), INTENT(IN) :: tetra
643
+ ! INTEGER(MMG5F_INT), DIMENSION(*), INTENT(IN) :: refs
644
+ ! INTEGER, INTENT(OUT) :: retval
645
+ ! END SUBROUTINE
646
+ END INTERFACE
647
+ ! *
648
+ ! */
649
+
650
+ ! LIBMMG3D_EXPORT int MMG3D_Set_tetrahedra(MMG5_pMesh mesh, MMG5_int *tetra,
651
+ ! MMG5_int *refs);
652
+
653
+ ! /**
654
+ ! * \brief Set the vertices and reference of a single prism in a mesh.
655
+ ! *
656
+ ! * \param mesh pointer to the mesh structure.
657
+ ! * \param v0 first vertex of prism.
658
+ ! * \param v1 second vertex of prism.
659
+ ! * \param v2 third vertex of prism.
660
+ ! * \param v3 fourth vertex of prism.
661
+ ! * \param v4 fifth vertex of prism.
662
+ ! * \param v5 sixth vertex of prism.
663
+ ! * \param ref prism reference.
664
+ ! * \param pos prism position in the mesh.
665
+ ! * \return 0 if failed, 1 otherwise.
666
+ ! *
667
+ ! * This function sets the six vertices \a v0, \a v1,\a v2,\a v3,\a v4,\a v5 and reference
668
+ ! * \a ref for the prism at position \a pos in the mesh structure (from 1 to nb_prisms included).
669
+ ! *
670
+ ! * \remark Fortran interface:
671
+ ! */
672
+ INTERFACE
673
+ SUBROUTINE MMG3D_SET_PRISM(mesh,v0,v1,v2,v3,v4,v5,ref,pos,retval)
674
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
675
+ INTEGER(MMG5F_INT), INTENT(IN):: v0,v1,v2,v3,v4,v5,ref,pos
676
+ INTEGER, INTENT(OUT) :: retval
677
+ END SUBROUTINE
678
+ END INTERFACE
679
+ ! *
680
+ ! */
681
+
682
+ ! LIBMMG3D_EXPORT int MMG3D_Set_prism(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1,
683
+ ! MMG5_int v2, MMG5_int v3, MMG5_int v4, MMG5_int v5, MMG5_int ref, MMG5_int pos);
684
+
685
+ ! /**
686
+ ! * \brief Set the vertices and references of all prisms in a mesh.
687
+ ! *
688
+ ! * \param mesh pointer to the mesh structure.
689
+ ! * \param prisms vertices of the prisms of the mesh
690
+ ! * Vertices of the \f$i^{th}\f$ prism are stored in prism[(i-1)*6]
691
+ ! * to prism[(i-1)*6+5] included.
692
+ ! * \param refs array of the prisms references.
693
+ ! * The references of the \f$i^{th}\f$ prism is stored in refs[i-1].
694
+ ! * \return 0 if failed, 1 otherwise.
695
+ ! *
696
+ ! * This function sets the vertices and references of all prisms in a mesh.
697
+ ! *
698
+ ! * \remark Fortran interface: (commentated in
699
+ ! * order to allow to pass \%val(0) instead of the refs array)
700
+ ! *
701
+ ! */
702
+ INTERFACE
703
+ ! SUBROUTINE MMG3D_SET_PRISMS(mesh,prisms,refs,retval)
704
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
705
+ ! INTEGER(MMG5F_INT), DIMENSION(*), INTENT(IN) :: prisms
706
+ ! INTEGER(MMG5F_INT), DIMENSION(*), INTENT(IN) :: refs
707
+ ! INTEGER, INTENT(OUT) :: retval
708
+ ! END SUBROUTINE
709
+ END INTERFACE
710
+ ! *
711
+ ! */
712
+
713
+ ! LIBMMG3D_EXPORT int MMG3D_Set_prisms(MMG5_pMesh mesh, MMG5_int *prisms,
714
+ ! MMG5_int *refs);
715
+
716
+ ! /**
717
+ ! * \brief Set the vertices and reference of a single triangle in a mesh.
718
+ ! *
719
+ ! * \param mesh pointer to the mesh structure.
720
+ ! * \param v0 first vertex of triangle.
721
+ ! * \param v1 second vertex of triangle.
722
+ ! * \param v2 third vertex of triangle.
723
+ ! * \param ref triangle reference.
724
+ ! * \param pos triangle position in the mesh.
725
+ ! * \return 0 if failed, 1 otherwise.
726
+ ! *
727
+ ! * This function defines a triangle of vertices \a v0, \a v1, \a v2 and reference \a ref
728
+ ! * at position \a pos in mesh structure (from 1 to nb_triangle included).
729
+ ! *
730
+ ! * \remark Fortran interface:
731
+ ! */
732
+ INTERFACE
733
+ SUBROUTINE MMG3D_SET_TRIANGLE(mesh,v0,v1,v2,ref,pos,retval)
734
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
735
+ INTEGER(MMG5F_INT), INTENT(IN) :: v0,v1,v2,ref,pos
736
+ INTEGER, INTENT(OUT) :: retval
737
+ END SUBROUTINE
738
+ END INTERFACE
739
+ ! *
740
+ ! */
741
+
742
+ ! LIBMMG3D_EXPORT int MMG3D_Set_triangle(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1,
743
+ ! MMG5_int v2, MMG5_int ref,MMG5_int pos);
744
+
745
+ ! /**
746
+ ! * \brief Set the vertices and references of all triangles in a mesh.
747
+ ! *
748
+ ! * \param mesh pointer to the mesh structure.
749
+ ! * \param tria pointer to the array of the tria vertices
750
+ ! * Vertices of the \f$i^{th}\f$ tria are stored in tria[(i-1)*3]\@3.
751
+ ! * \param refs pointer to the array of the triangle references.
752
+ ! * refs[i-1] is the ref of the \f$i^{th}\f$ tria.
753
+ ! * \return 0 if failed, 1 otherwise.
754
+ ! *
755
+ ! * This function sets the vertices and references of all triangles in a mesh.
756
+ ! *
757
+ ! * \remark Fortran interface: (commentated in
758
+ ! * order to allow to pass \%val(0) instead of the refs array)
759
+ ! *
760
+ ! */
761
+ INTERFACE
762
+ ! SUBROUTINE MMG3D_SET_TRIANGLES(mesh,tria,refs,retval)
763
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
764
+ ! INTEGER(MMG5F_INT),DIMENSION(*), INTENT(IN) :: tria
765
+ ! INTEGER(MMG5F_INT),DIMENSION(*), INTENT(IN) :: refs
766
+ ! INTEGER, INTENT(OUT) :: retval
767
+ ! END SUBROUTINE
768
+ END INTERFACE
769
+ ! *
770
+ ! */
771
+
772
+ ! LIBMMG3D_EXPORT int MMG3D_Set_triangles(MMG5_pMesh mesh, MMG5_int *tria, MMG5_int *refs);
773
+
774
+ ! /**
775
+ ! * \brief Set the vertices and reference of a single quadrilateral in a mesh.
776
+ ! *
777
+ ! * \param mesh pointer to the mesh structure.
778
+ ! * \param v0 first vertex of quadrilateral.
779
+ ! * \param v1 second vertex of quadrilateral.
780
+ ! * \param v2 third vertex of quadrilateral.
781
+ ! * \param v3 fourth vertex of quadrilateral.
782
+ ! * \param ref quadrilateral reference.
783
+ ! * \param pos quadrilateral position in the mesh.
784
+ ! * \return 0 if failed, 1 otherwise.
785
+ ! *
786
+ ! * Set a quadrilateral of vertices \a v0, \a v1, \a v2, \a v3 and reference \a ref
787
+ ! * at position \a pos in mesh structure (from 1 to nb_quadrangles included).
788
+ ! *
789
+ ! * \remark Fortran interface:
790
+ ! */
791
+ INTERFACE
792
+ SUBROUTINE MMG3D_SET_QUADRILATERAL(mesh,v0,v1,v2,v3,ref,pos,retval)
793
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
794
+ INTEGER(MMG5F_INT), INTENT(IN):: v0,v1,v2,v3,ref,pos
795
+ INTEGER, INTENT(OUT) :: retval
796
+ END SUBROUTINE
797
+ END INTERFACE
798
+ ! *
799
+ ! */
800
+
801
+ ! LIBMMG3D_EXPORT int MMG3D_Set_quadrilateral(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1,
802
+ ! MMG5_int v2, MMG5_int v3, MMG5_int ref,MMG5_int pos);
803
+
804
+ ! /**
805
+ ! * \brief Set the vertices and references of all quadrilaterals in a mesh.
806
+ ! *
807
+ ! * \param mesh pointer to the mesh structure.
808
+ ! * \param quads pointer to the array of the quads vertices
809
+ ! * Vertices of the \f$i^{th}\f$ quadra are stored in quads[(i-1)*3]\@3.
810
+ ! * \param refs pointer to the array of the quadrilateral references.
811
+ ! * refs[i-1] is the ref of the \f$i^{th}\f$ quadra.
812
+ ! * \return 0 if failed, 1 otherwise.
813
+ ! *
814
+ ! * \remark Fortran interface: (commentated in
815
+ ! * order to allow to pass \%val(0) instead of the refs array)
816
+ ! *
817
+ ! */
818
+ INTERFACE
819
+ ! SUBROUTINE MMG3D_SET_QUADRILATERALS(mesh,quads,refs,retval)
820
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
821
+ ! INTEGER(MMG5F_INT),DIMENSION(*), INTENT(IN) :: quads
822
+ ! INTEGER(MMG5F_INT),DIMENSION(*), INTENT(IN) :: refs
823
+ ! INTEGER, INTENT(OUT) :: retval
824
+ ! END SUBROUTINE
825
+ END INTERFACE
826
+ ! *
827
+ ! */
828
+
829
+ ! LIBMMG3D_EXPORT int MMG3D_Set_quadrilaterals(MMG5_pMesh mesh, MMG5_int *quads, MMG5_int *refs);
830
+
831
+ ! /**
832
+ ! * \brief Set the vertices and reference of a single edge in a mesh.
833
+ ! *
834
+ ! * \param mesh pointer to the mesh structure.
835
+ ! * \param v0 first extremity of the edge.
836
+ ! * \param v1 second extremity of the edge.
837
+ ! * \param ref edge reference.
838
+ ! * \param pos edge position in the mesh.
839
+ ! * \return 0 if failed, 1 otherwise.
840
+ ! *
841
+ ! * Set edges of extremities \a v0, \a v1 and reference \a ref at
842
+ ! * position \a pos in mesh structure (from 1 to nb_edges included)
843
+ ! *
844
+ ! * \remark Fortran interface:
845
+ ! */
846
+ INTERFACE
847
+ SUBROUTINE MMG3D_SET_EDGE(mesh,v0,v1,ref,pos,retval)
848
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
849
+ INTEGER(MMG5F_INT), INTENT(IN):: v0,v1,ref,pos
850
+ INTEGER, INTENT(OUT) :: retval
851
+ END SUBROUTINE
852
+ END INTERFACE
853
+ ! *
854
+ ! */
855
+
856
+ ! LIBMMG3D_EXPORT int MMG3D_Set_edge(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int ref,MMG5_int pos);
857
+
858
+ ! /**
859
+ ! * \brief Assign the "corner" attribute to a vertex.
860
+ ! *
861
+ ! * \param mesh pointer to the mesh structure.
862
+ ! * \param k vertex index.
863
+ ! * \return 1.
864
+ ! *
865
+ ! * Set the "corner" attribute at vertex \a k. This affects how the vertex is
866
+ ! * treated during remeshing.
867
+ ! *
868
+ ! * \remark Fortran interface:
869
+ ! */
870
+ INTERFACE
871
+ SUBROUTINE MMG3D_SET_CORNER(mesh,k,retval)
872
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
873
+ INTEGER(MMG5F_INT), INTENT(IN):: k
874
+ INTEGER, INTENT(OUT) :: retval
875
+ END SUBROUTINE
876
+ END INTERFACE
877
+ ! *
878
+ ! */
879
+
880
+ ! LIBMMG3D_EXPORT int MMG3D_Set_corner(MMG5_pMesh mesh, MMG5_int k);
881
+
882
+ ! /**
883
+ ! * \brief Remove the "corner" attribute from a vertex.
884
+ ! *
885
+ ! * \param mesh pointer to the mesh structure.
886
+ ! * \param k vertex index.
887
+ ! * \return 1.
888
+ ! *
889
+ ! * Remove corner attribute from vertex \a k (from 1 to the number of vertices included).
890
+ ! *
891
+ ! * \remark Fortran interface
892
+ ! *
893
+ ! */
894
+ INTERFACE
895
+ SUBROUTINE MMG3D_UNSET_CORNER(mesh,k,retval)
896
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
897
+ INTEGER(MMG5F_INT), INTENT(IN):: k
898
+ INTEGER, INTENT(OUT) :: retval
899
+ END SUBROUTINE
900
+ END INTERFACE
901
+ ! *
902
+ ! */
903
+
904
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_corner(MMG5_pMesh mesh, MMG5_int k);
905
+
906
+ ! /**
907
+ ! * \brief Assign the "required" attribute to a vertex.
908
+ ! *
909
+ ! * \param mesh pointer to the mesh structure.
910
+ ! * \param k vertex index.
911
+ ! * \return 1.
912
+ ! *
913
+ ! * Set vertex \a k as required (\a k from 1 to nb_vertices included). This
914
+ ! * prevents the remesher from moving the vertex.
915
+ ! *
916
+ ! * \remark Fortran interface:
917
+ ! */
918
+ INTERFACE
919
+ SUBROUTINE MMG3D_SET_REQUIREDVERTEX(mesh,k,retval)
920
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
921
+ INTEGER(MMG5F_INT), INTENT(IN):: k
922
+ INTEGER, INTENT(OUT) :: retval
923
+ END SUBROUTINE
924
+ END INTERFACE
925
+ ! *
926
+ ! */
927
+
928
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredVertex(MMG5_pMesh mesh, MMG5_int k);
929
+
930
+ ! /**
931
+ ! * \brief Remove required attribute from a vertex.
932
+ ! *
933
+ ! * \param mesh pointer to the mesh structure.
934
+ ! * \param k vertex index.
935
+ ! * \return 1.
936
+ ! *
937
+ ! * This function removes the required attribute from vertex \a k.
938
+ ! *
939
+ ! * \remark Fortran interface:
940
+ ! */
941
+ INTERFACE
942
+ SUBROUTINE MMG3D_UNSET_REQUIREDVERTEX(mesh,k,retval)
943
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
944
+ INTEGER(MMG5F_INT), INTENT(IN):: k
945
+ INTEGER, INTENT(OUT) :: retval
946
+ END SUBROUTINE
947
+ END INTERFACE
948
+ ! *
949
+ ! */
950
+
951
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredVertex(MMG5_pMesh mesh, MMG5_int k);
952
+
953
+ ! /**
954
+ ! * \brief Assign the "required" attribute to a tetrahedron.
955
+ ! *
956
+ ! * \param mesh pointer to the mesh structure.
957
+ ! * \param k element index.
958
+ ! * \return 1.
959
+ ! *
960
+ ! * Set element \a k as required (\a k from 1 to nb_tetra included).
961
+ ! *
962
+ ! * \remark Fortran interface:
963
+ ! */
964
+ INTERFACE
965
+ SUBROUTINE MMG3D_SET_REQUIREDTETRAHEDRON(mesh,k,retval)
966
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
967
+ INTEGER(MMG5F_INT), INTENT(IN):: k
968
+ INTEGER, INTENT(OUT) :: retval
969
+ END SUBROUTINE
970
+ END INTERFACE
971
+ ! *
972
+ ! */
973
+
974
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredTetrahedron(MMG5_pMesh mesh, MMG5_int k);
975
+
976
+ ! /**
977
+ ! * \brief Remove the "required" attribute from a tetrahedron.
978
+ ! *
979
+ ! * \param mesh pointer to the mesh structure.
980
+ ! * \param k element index.
981
+ ! * \return 1.
982
+ ! *
983
+ ! * Remove required attribute from element \a k (\a k from 1 to
984
+ ! * nb_tetra included).
985
+ ! *
986
+ ! * \remark Fortran interface:
987
+ ! */
988
+ INTERFACE
989
+ SUBROUTINE MMG3D_UNSET_REQUIREDTETRAHEDRON(mesh,k,retval)
990
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
991
+ INTEGER(MMG5F_INT), INTENT(IN):: k
992
+ INTEGER, INTENT(OUT) :: retval
993
+ END SUBROUTINE
994
+ END INTERFACE
995
+ ! *
996
+ ! */
997
+
998
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredTetrahedron(MMG5_pMesh mesh, MMG5_int k);
999
+
1000
+ ! /**
1001
+ ! * \brief Assign the "required" attribute to multiple tetrahedra.
1002
+ ! *
1003
+ ! * \param mesh pointer to the mesh structure.
1004
+ ! * \param reqIdx array of the indices of the required elements.
1005
+ ! * \param nreq number of required elements
1006
+ ! * \return 1.
1007
+ ! *
1008
+ ! * Determine which tetrahedra have the "required" attribute.
1009
+ ! *
1010
+ ! * \remark Fortran interface:
1011
+ ! */
1012
+ INTERFACE
1013
+ SUBROUTINE MMG3D_SET_REQUIREDTETRAHEDRA(mesh,reqIdx,nreq,retval)
1014
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1015
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: reqIdx
1016
+ INTEGER(MMG5F_INT), INTENT(IN) :: nreq
1017
+ INTEGER, INTENT(OUT) :: retval
1018
+ END SUBROUTINE
1019
+ END INTERFACE
1020
+ ! *
1021
+ ! */
1022
+
1023
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredTetrahedra(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq);
1024
+
1025
+ ! /**
1026
+ ! * \brief Remove the "required" attribute from multiple tetrahedra.
1027
+ ! *
1028
+ ! * \param mesh pointer to the mesh structure.
1029
+ ! * \param reqIdx array of the indices of the required elements.
1030
+ ! * \param nreq number of required elements
1031
+ ! * \return 1.
1032
+ ! *
1033
+ ! * Remove required attribute from a list of Tetra whose indices are contained in
1034
+ ! * array \a reqIdx.
1035
+ ! *
1036
+ ! * \remark Fortran interface:
1037
+ ! */
1038
+ INTERFACE
1039
+ SUBROUTINE MMG3D_UNSET_REQUIREDTETRAHEDRA(mesh,reqIdx,nreq,retval)
1040
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1041
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: reqIdx
1042
+ INTEGER(MMG5F_INT), INTENT(IN) :: nreq
1043
+ INTEGER, INTENT(OUT) :: retval
1044
+ END SUBROUTINE
1045
+ END INTERFACE
1046
+ ! *
1047
+ ! */
1048
+
1049
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredTetrahedra(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq);
1050
+
1051
+ ! /**
1052
+ ! * \brief Assign the "required" attribute to a single triangle.
1053
+ ! *
1054
+ ! * \param mesh pointer to the mesh structure.
1055
+ ! * \param k triangle index.
1056
+ ! * \return 1.
1057
+ ! *
1058
+ ! * Set triangle \a k as required (\a k from 1 to nb_tria included).
1059
+ ! *
1060
+ ! * \remark Fortran interface:
1061
+ ! */
1062
+ INTERFACE
1063
+ SUBROUTINE MMG3D_SET_REQUIREDTRIANGLE(mesh,k,retval)
1064
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1065
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1066
+ INTEGER, INTENT(OUT) :: retval
1067
+ END SUBROUTINE
1068
+ END INTERFACE
1069
+ ! *
1070
+ ! */
1071
+
1072
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredTriangle(MMG5_pMesh mesh, MMG5_int k);
1073
+
1074
+ ! /**
1075
+ ! * \brief Remove the "required" attribute from a single triangle.
1076
+ ! *
1077
+ ! * \param mesh pointer to the mesh structure.
1078
+ ! * \param k triangle index.
1079
+ ! * \return 1.
1080
+ ! *
1081
+ ! * Remove required attribute from triangle \a k.
1082
+ ! *
1083
+ ! * \remark Fortran interface:
1084
+ ! */
1085
+ INTERFACE
1086
+ SUBROUTINE MMG3D_UNSET_REQUIREDTRIANGLE(mesh,k,retval)
1087
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1088
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1089
+ INTEGER, INTENT(OUT) :: retval
1090
+ END SUBROUTINE
1091
+ END INTERFACE
1092
+ ! *
1093
+ ! */
1094
+
1095
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredTriangle(MMG5_pMesh mesh, MMG5_int k);
1096
+
1097
+ ! /**
1098
+ ! * \brief Assign the "required" attribute to multiple triangles.
1099
+ ! *
1100
+ ! * \param mesh pointer to the mesh structure.
1101
+ ! * \param reqIdx array of the indices of the required triangles.
1102
+ ! * \param nreq number of required triangles
1103
+ ! * \return 1.
1104
+ ! *
1105
+ ! * \remark Fortran interface:
1106
+ ! */
1107
+ INTERFACE
1108
+ SUBROUTINE MMG3D_SET_REQUIREDTRIANGLES(mesh,reqIdx,nreq,retval)
1109
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1110
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: reqIdx
1111
+ INTEGER(MMG5F_INT), INTENT(IN) :: nreq
1112
+ INTEGER, INTENT(OUT) :: retval
1113
+ END SUBROUTINE
1114
+ END INTERFACE
1115
+ ! *
1116
+ ! */
1117
+
1118
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredTriangles(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq);
1119
+
1120
+ ! /**
1121
+ ! * \brief Remove the "required" attribute from multiple triangles.
1122
+ ! *
1123
+ ! * \param mesh pointer to the mesh structure.
1124
+ ! * \param reqIdx array of the indices of the required trias.
1125
+ ! * \param nreq number of required trias
1126
+ ! * \return 1.
1127
+ ! *
1128
+ ! * \remark Fortran interface:
1129
+ ! */
1130
+ INTERFACE
1131
+ SUBROUTINE MMG3D_UNSET_REQUIREDTRIANGLES(mesh,reqIdx,nreq,retval)
1132
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1133
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: reqIdx
1134
+ INTEGER(MMG5F_INT), INTENT(IN) :: nreq
1135
+ INTEGER, INTENT(OUT) :: retval
1136
+ END SUBROUTINE
1137
+ END INTERFACE
1138
+ ! *
1139
+ ! */
1140
+
1141
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredTriangles(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq);
1142
+
1143
+ ! /**
1144
+ ! * \brief Assign the "parallel" attribute to a single triangle.
1145
+ ! *
1146
+ ! * \param mesh pointer to the mesh structure.
1147
+ ! * \param k triangle index.
1148
+ ! * \return 1.
1149
+ ! *
1150
+ ! * Set triangle \a k as parallel (triangle at the interface between two
1151
+ ! * processors, ie, this triangle is required). (\a k from 1 to nb_tria included).
1152
+ ! *
1153
+ ! * \remark Fortran interface:
1154
+ ! */
1155
+ INTERFACE
1156
+ SUBROUTINE MMG3D_SET_PARALLELTRIANGLE(mesh,k,retval)
1157
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1158
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1159
+ INTEGER, INTENT(OUT) :: retval
1160
+ END SUBROUTINE
1161
+ END INTERFACE
1162
+ ! *
1163
+ ! */
1164
+
1165
+ ! LIBMMG3D_EXPORT int MMG3D_Set_parallelTriangle(MMG5_pMesh mesh, MMG5_int k);
1166
+
1167
+ ! /**
1168
+ ! * \brief Remove the "parallel" attribute from a single triangle.
1169
+ ! *
1170
+ ! * \param mesh pointer to the mesh structure.
1171
+ ! * \param k triangle index.
1172
+ ! * \return 1.
1173
+ ! *
1174
+ ! * Remove parallel attribute from triangle \a k (i.e. triangles aren't preserved
1175
+ ! * anymore). (\a k from 1 to nb_tria included).
1176
+ ! *
1177
+ ! * \remark Fortran interface:
1178
+ ! */
1179
+ INTERFACE
1180
+ SUBROUTINE MMG3D_UNSET_PARALLELTRIANGLE(mesh,k,retval)
1181
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1182
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1183
+ INTEGER, INTENT(OUT) :: retval
1184
+ END SUBROUTINE
1185
+ END INTERFACE
1186
+ ! *
1187
+ ! */
1188
+
1189
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_parallelTriangle(MMG5_pMesh mesh, MMG5_int k);
1190
+
1191
+ ! /**
1192
+ ! * \brief Assign the "parallel" attribute to multiple triangles.
1193
+ ! *
1194
+ ! * \param mesh pointer to the mesh structure
1195
+ ! * \param parIdx array of indices of triangles
1196
+ ! * \param npar number of triangles
1197
+ ! * \return 1.
1198
+ ! *
1199
+ ! * Set the parallel triangles (triangles at the interface between processors, i.e.
1200
+ ! * these triangles are required).
1201
+ ! *
1202
+ ! * \remark Fortran interface:
1203
+ ! */
1204
+ INTERFACE
1205
+ SUBROUTINE MMG3D_SET_PARALLELTRIANGLES(mesh,parIdx,npar,retval)
1206
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1207
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: parIdx
1208
+ INTEGER(MMG5F_INT), INTENT(IN) :: npar
1209
+ INTEGER, INTENT(OUT) :: retval
1210
+ END SUBROUTINE
1211
+ END INTERFACE
1212
+ ! *
1213
+ ! */
1214
+
1215
+ ! LIBMMG3D_EXPORT int MMG3D_Set_parallelTriangles(MMG5_pMesh mesh, MMG5_int *parIdx, MMG5_int npar);
1216
+
1217
+ ! /**
1218
+ ! * \brief Remove the "parallel" attribute from multiple triangles.
1219
+ ! *
1220
+ ! * \param mesh pointer to the mesh structure.
1221
+ ! * \param parIdx array of the indices of triangles
1222
+ ! * \param npar number of triangles
1223
+ ! * \return 1.
1224
+ ! *
1225
+ ! * Remove parallel attributes from triangles (i.e.
1226
+ ! * triangles aren't preserved anymore).
1227
+ ! *
1228
+ ! * \remark Fortran interface:
1229
+ ! */
1230
+ INTERFACE
1231
+ SUBROUTINE MMG3D_UNSET_PARALLELTRIANGLES(mesh,parIdx,npar,retval)
1232
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1233
+ INTEGER(MMG5F_INT), DIMENSION(*),INTENT(IN) :: parIdx
1234
+ INTEGER(MMG5F_INT), INTENT(IN) :: npar
1235
+ INTEGER, INTENT(OUT) :: retval
1236
+ END SUBROUTINE
1237
+ END INTERFACE
1238
+ ! *
1239
+ ! */
1240
+
1241
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_parallelTriangles(MMG5_pMesh mesh, MMG5_int *parIdx, MMG5_int npar);
1242
+
1243
+ ! /**
1244
+ ! * \brief Assign the "ridge" attribute to a single edge.
1245
+ ! *
1246
+ ! * \param mesh pointer to the mesh structure.
1247
+ ! * \param k edge index.
1248
+ ! * \return 1.
1249
+ ! *
1250
+ ! * Set the "ridge" attribute at edge \a k. This affects how the remesher treats
1251
+ ! * the edge and the adjacent triangles or tetrahedra.
1252
+ ! *
1253
+ ! * \remark Fortran interface:
1254
+ ! */
1255
+ INTERFACE
1256
+ SUBROUTINE MMG3D_SET_RIDGE(mesh,k,retval)
1257
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1258
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1259
+ INTEGER, INTENT(OUT) :: retval
1260
+ END SUBROUTINE
1261
+ END INTERFACE
1262
+ ! *
1263
+ ! */
1264
+
1265
+ ! LIBMMG3D_EXPORT int MMG3D_Set_ridge(MMG5_pMesh mesh, MMG5_int k);
1266
+
1267
+ ! /**
1268
+ ! * \brief Remove the "ridge" attribute from a single edge.
1269
+ ! *
1270
+ ! * \param mesh pointer to the mesh structure.
1271
+ ! * \param k edge index.
1272
+ ! * \return 1.
1273
+ ! *
1274
+ ! * Remove ridge attribute at edge \a k.
1275
+ ! *
1276
+ ! * \remark Fortran interface:
1277
+ ! */
1278
+ INTERFACE
1279
+ SUBROUTINE MMG3D_UNSET_RIDGE(mesh,k,retval)
1280
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1281
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1282
+ INTEGER, INTENT(OUT) :: retval
1283
+ END SUBROUTINE
1284
+ END INTERFACE
1285
+ ! *
1286
+ ! */
1287
+
1288
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_ridge(MMG5_pMesh mesh, MMG5_int k);
1289
+
1290
+ ! /**
1291
+ ! * \brief Assign the "required" attribute to a single edge.
1292
+ ! *
1293
+ ! * \param mesh pointer to the mesh structure.
1294
+ ! * \param k edge index.
1295
+ ! * \return 1.
1296
+ ! *
1297
+ ! * Set edge \a k as required.
1298
+ ! *
1299
+ ! * \remark Fortran interface:
1300
+ ! */
1301
+ INTERFACE
1302
+ SUBROUTINE MMG3D_SET_REQUIREDEDGE(mesh,k,retval)
1303
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1304
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1305
+ INTEGER, INTENT(OUT) :: retval
1306
+ END SUBROUTINE
1307
+ END INTERFACE
1308
+ ! *
1309
+ ! */
1310
+
1311
+ ! LIBMMG3D_EXPORT int MMG3D_Set_requiredEdge(MMG5_pMesh mesh, MMG5_int k);
1312
+
1313
+ ! /**
1314
+ ! * \brief Remove the "required" attribute from a single edge.
1315
+ ! *
1316
+ ! * \param mesh pointer to the mesh structure.
1317
+ ! * \param k edge index.
1318
+ ! * \return 1.
1319
+ ! *
1320
+ ! * Remove required attribute from edge \a k.
1321
+ ! *
1322
+ ! * \remark Fortran interface:
1323
+ ! */
1324
+ INTERFACE
1325
+ SUBROUTINE MMG3D_UNSET_REQUIREDEDGE(mesh,k,retval)
1326
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1327
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1328
+ INTEGER, INTENT(OUT) :: retval
1329
+ END SUBROUTINE
1330
+ END INTERFACE
1331
+ ! *
1332
+ ! */
1333
+
1334
+ ! LIBMMG3D_EXPORT int MMG3D_Unset_requiredEdge(MMG5_pMesh mesh, MMG5_int k);
1335
+
1336
+ ! /**
1337
+ ! * \brief Set the normal orientation at a single vertex.
1338
+ ! *
1339
+ ! * \param mesh pointer to the mesh structure.
1340
+ ! * \param k vertex index
1341
+ ! * \param n0 x componant of the normal at vertex \a k.
1342
+ ! * \param n1 y componant of the normal at vertex \a k.
1343
+ ! * \param n2 z componant of the normal at vertex \a k.
1344
+ ! *
1345
+ ! * \return 1 if success.
1346
+ ! *
1347
+ ! * Set normal (n0,n1,n2) at vertex \a k.
1348
+ ! *
1349
+ ! * \remark Fortran interface:
1350
+ ! */
1351
+ INTERFACE
1352
+ SUBROUTINE MMG3D_SET_NORMALATVERTEX(mesh,k,n0,n1,n2,retval)
1353
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1354
+ INTEGER(MMG5F_INT), INTENT(IN):: k
1355
+ REAL(KIND=8), INTENT(IN) :: n0,n1,n2
1356
+ INTEGER, INTENT(OUT) :: retval
1357
+ END SUBROUTINE
1358
+ END INTERFACE
1359
+ ! *
1360
+ ! */
1361
+
1362
+ ! LIBMMG3D_EXPORT int MMG3D_Set_normalAtVertex(MMG5_pMesh mesh, MMG5_int k, double n0, double n1,
1363
+ ! double n2) ;
1364
+
1365
+ ! /**
1366
+ ! * \brief Set a single element of a scalar solution structure.
1367
+ ! *
1368
+ ! * \param met pointer to the sol structure.
1369
+ ! * \param s solution scalar value.
1370
+ ! * \param pos position of the solution in the mesh.
1371
+ ! * \return 0 if failed, 1 otherwise.
1372
+ ! *
1373
+ ! * Set scalar value \a s at position \a pos in solution structure
1374
+ ! * (pos from 1 to nb_vertices included).
1375
+ ! *
1376
+ ! * \remark Fortran interface:
1377
+ ! */
1378
+ INTERFACE
1379
+ SUBROUTINE MMG3D_SET_SCALARSOL(met,s,pos,retval)
1380
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1381
+ REAL(KIND=8), INTENT(IN) :: s
1382
+ INTEGER(MMG5F_INT), INTENT(IN):: pos
1383
+ INTEGER, INTENT(OUT) :: retval
1384
+ END SUBROUTINE
1385
+ END INTERFACE
1386
+ ! *
1387
+ ! */
1388
+
1389
+ ! LIBMMG3D_EXPORT int MMG3D_Set_scalarSol(MMG5_pSol met, double s,MMG5_int pos);
1390
+
1391
+ ! /**
1392
+ ! * \brief Set the values of all elements of a scalar solution structure.
1393
+ ! *
1394
+ ! * \param met pointer to the sol structure.
1395
+ ! * \param s array of the scalar solutions values.
1396
+ ! * s[i-1] is the solution at vertex i.
1397
+ ! * \return 0 if failed, 1 otherwise.
1398
+ ! *
1399
+ ! * Set scalar solutions at mesh vertices.
1400
+ ! *
1401
+ ! * \remark Fortran interface:
1402
+ ! */
1403
+ INTERFACE
1404
+ SUBROUTINE MMG3D_SET_SCALARSOLS(met,s,retval)
1405
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1406
+ REAL(KIND=8),DIMENSION(*), INTENT(IN) :: s
1407
+ INTEGER, INTENT(OUT) :: retval
1408
+ END SUBROUTINE
1409
+ END INTERFACE
1410
+ ! *
1411
+ ! */
1412
+
1413
+ ! LIBMMG3D_EXPORT int MMG3D_Set_scalarSols(MMG5_pSol met, double *s);
1414
+
1415
+ ! /**
1416
+ ! * \brief Set a single element of a vector solution structure.
1417
+ ! *
1418
+ ! * \param met pointer to the sol structure.
1419
+ ! * \param vx x value of the vectorial solution.
1420
+ ! * \param vy y value of the vectorial solution.
1421
+ ! * \param vz z value of the vectorial solution.
1422
+ ! * \param pos position of the solution in the mesh (begin to 1).
1423
+ ! * \return 0 if failed, 1 otherwise.
1424
+ ! *
1425
+ ! * Set vectorial value \f$(v_x,v_y,v_z)\f$ at position \a pos in solution
1426
+ ! * structure. (pos from 1 to nb_vertices included).
1427
+ ! *
1428
+ ! * \remark Fortran interface:
1429
+ ! */
1430
+ INTERFACE
1431
+ SUBROUTINE MMG3D_SET_VECTORSOL(met,vx,vy,vz,pos,retval)
1432
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1433
+ REAL(KIND=8), INTENT(IN) :: vx,vy,vz
1434
+ INTEGER(MMG5F_INT), INTENT(IN):: pos
1435
+ INTEGER, INTENT(OUT) :: retval
1436
+ END SUBROUTINE
1437
+ END INTERFACE
1438
+ ! *
1439
+ ! */
1440
+
1441
+ ! LIBMMG3D_EXPORT int MMG3D_Set_vectorSol(MMG5_pSol met, double vx,double vy, double vz,
1442
+ ! MMG5_int pos);
1443
+
1444
+ ! /**
1445
+ ! * \brief Set all elements of a vector solution structure.
1446
+ ! *
1447
+ ! * \param met pointer to the sol structure.
1448
+ ! * \param sols array of the vectorial solutions
1449
+ ! * sols[3*(i-1)]\@3 is the solution at vertex i
1450
+ ! * \return 0 if failed, 1 otherwise.
1451
+ ! *
1452
+ ! * Set vectorial solutions at mesh vertices
1453
+ ! *
1454
+ ! * \remark Fortran interface:
1455
+ ! */
1456
+ INTERFACE
1457
+ SUBROUTINE MMG3D_SET_VECTORSOLS(met,sols,retval)
1458
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1459
+ REAL(KIND=8),DIMENSION(*), INTENT(IN) :: sols
1460
+ INTEGER, INTENT(OUT) :: retval
1461
+ END SUBROUTINE
1462
+ END INTERFACE
1463
+ ! *
1464
+ ! */
1465
+
1466
+ ! LIBMMG3D_EXPORT int MMG3D_Set_vectorSols(MMG5_pSol met, double *sols);
1467
+
1468
+ ! /**
1469
+ ! * \brief Set a single element of a tensor solution structure.
1470
+ ! *
1471
+ ! * \param met pointer to the sol structure.
1472
+ ! * \param m11 value of the tensorial solution at position (1,1) in the tensor
1473
+ ! * \param m12 value of the tensorial solution at position (1,2) in the tensor
1474
+ ! * \param m13 value of the tensorial solution at position (1,3) in the tensor
1475
+ ! * \param m22 value of the tensorial solution at position (2,2) in the tensor
1476
+ ! * \param m23 value of the tensorial solution at position (2,3) in the tensor
1477
+ ! * \param m33 value of the tensorial solution at position (3,3) in the tensor
1478
+ ! * \param pos position of the solution in the mesh (begin to 1).
1479
+ ! * \return 0 if failed, 1 otherwise.
1480
+ ! *
1481
+ ! * Set tensorial values at position \a pos in solution
1482
+ ! * structure. (pos from 1 to nb_vertices included).
1483
+ ! *
1484
+ ! * \remark Fortran interface:
1485
+ ! */
1486
+ INTERFACE
1487
+ SUBROUTINE MMG3D_SET_TENSORSOL(met,m11,m12,m13,m22,m23,m33,pos,retval)
1488
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1489
+ REAL(KIND=8), INTENT(IN) :: m11,m12,m13,m22,m23,m33
1490
+ INTEGER(MMG5F_INT), INTENT(IN):: pos
1491
+ INTEGER, INTENT(OUT) :: retval
1492
+ END SUBROUTINE
1493
+ END INTERFACE
1494
+ ! *
1495
+ ! */
1496
+
1497
+ ! LIBMMG3D_EXPORT int MMG3D_Set_tensorSol(MMG5_pSol met, double m11,double m12, double m13,
1498
+ ! double m22,double m23, double m33, MMG5_int pos);
1499
+
1500
+ ! /**
1501
+ ! * \brief Set all elements of a tensor solution structure.
1502
+ ! *
1503
+ ! * \param met pointer to the sol structure.
1504
+ ! * \param sols array of the tensorial solutions.
1505
+ ! * sols[6*(i-1)]\@6 is the solution at vertex i
1506
+ ! * \return 0 if failed, 1 otherwise.
1507
+ ! *
1508
+ ! * Set tensorial values by array.
1509
+ ! *
1510
+ ! * \remark Fortran interface:
1511
+ ! */
1512
+ INTERFACE
1513
+ SUBROUTINE MMG3D_SET_TENSORSOLS(met,sols,retval)
1514
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
1515
+ REAL(KIND=8),DIMENSION(*), INTENT(IN) :: sols
1516
+ INTEGER, INTENT(OUT) :: retval
1517
+ END SUBROUTINE
1518
+ END INTERFACE
1519
+ ! *
1520
+ ! */
1521
+
1522
+ ! LIBMMG3D_EXPORT int MMG3D_Set_tensorSols(MMG5_pSol met, double *sols);
1523
+
1524
+ ! /**
1525
+ ! * \brief Set a single element of one out of multiple solution fields that are defined on vertices.
1526
+ ! *
1527
+ ! * \param sol pointer to the array of solutions
1528
+ ! * \param i position of the solution field that we want to set.
1529
+ ! * \param s solution(s) at mesh vertex \a pos.
1530
+ ! * \param pos index of the vertex on which we set the solution.
1531
+ ! *
1532
+ ! * \return 0 if failed, 1 otherwise.
1533
+ ! *
1534
+ ! * Set values of the solution at the ith field of the solution array and at
1535
+ ! * position \a pos (\a pos from 1 to \a nb_vertices included and \a i from 1 to \a
1536
+ ! * nb_sols).
1537
+ ! *
1538
+ ! * \remark Fortran interface:
1539
+ ! */
1540
+ INTERFACE
1541
+ SUBROUTINE MMG3D_SET_ITHSOL_INSOLSATVERTICES(sol,i,s,pos,retval)
1542
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: sol
1543
+ INTEGER, INTENT(IN) :: i
1544
+ INTEGER(MMG5F_INT), INTENT(IN) :: pos
1545
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: s
1546
+ INTEGER, INTENT(OUT) :: retval
1547
+ END SUBROUTINE
1548
+ END INTERFACE
1549
+ ! *
1550
+ ! */
1551
+
1552
+ ! LIBMMG3D_EXPORT int MMG3D_Set_ithSol_inSolsAtVertices(MMG5_pSol sol,int i, double* s,MMG5_int pos);
1553
+
1554
+ ! /**
1555
+ ! * \brief Set all elements of one out of multiple solution fields that are defined on vertices.
1556
+ ! *
1557
+ ! * \param sol pointer to the array of solutions
1558
+ ! * \param i position of the solution field that we want to set.
1559
+ ! * \param s array of the solutions at mesh vertices. The solution at vertex \a k
1560
+ ! * is given by s[k-1] for a scalar sol, s[3*(k-1)]\@3 for a vectorial solution
1561
+ ! * and s[6*(k-1)]\@6 for a tensor solution.
1562
+ ! *
1563
+ ! * \return 0 if failed, 1 otherwise.
1564
+ ! *
1565
+ ! * Set values of the ith field of the solution array by array (\a i from 1 to \a
1566
+ ! * nb_sols).
1567
+ ! *
1568
+ ! * \remark Fortran interface:
1569
+ ! */
1570
+ INTERFACE
1571
+ SUBROUTINE MMG3D_SET_ITHSOLS_INSOLSATVERTICES(sol,i,s,retval)
1572
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: sol
1573
+ INTEGER, INTENT(IN) :: i
1574
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: s
1575
+ INTEGER, INTENT(OUT) :: retval
1576
+ END SUBROUTINE
1577
+ END INTERFACE
1578
+ ! *
1579
+ ! */
1580
+
1581
+ ! LIBMMG3D_EXPORT int MMG3D_Set_ithSols_inSolsAtVertices(MMG5_pSol sol,int i, double* s);
1582
+
1583
+ ! /**
1584
+ ! * \brief Finish providing mesh data without using the API functions.
1585
+ ! *
1586
+ ! * \param mesh pointer to the mesh structure.
1587
+ ! *
1588
+ ! * To mark as ended a mesh given without using the API functions (for example,
1589
+ ! * mesh given by mesh->point[i] = 0 ...). This function performs verifications,
1590
+ ! * e.g. to make sure that all tetrahedra are consistently oriented.
1591
+ ! *
1592
+ ! * \remark Fortran interface:
1593
+ ! */
1594
+ INTERFACE
1595
+ SUBROUTINE MMG3D_SET_HANDGIVENMESH(mesh)
1596
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1597
+ END SUBROUTINE
1598
+ END INTERFACE
1599
+ ! *
1600
+ ! */
1601
+
1602
+ ! LIBMMG3D_EXPORT void MMG3D_Set_handGivenMesh(MMG5_pMesh mesh);
1603
+
1604
+ ! /* check init */
1605
+ ! /**
1606
+ ! * \brief Check if the number of given entities match with mesh and sol size
1607
+ ! *
1608
+ ! * \param mesh pointer to the mesh structure.
1609
+ ! * \param met pointer to the sol structure.
1610
+ ! * \return 0 if failed, 1 otherwise.
1611
+ ! *
1612
+ ! * Check if the number of given entities match with mesh and sol size
1613
+ ! * (not mandatory) and check mesh datas.
1614
+ ! *
1615
+ ! * \remark Fortran interface:
1616
+ ! */
1617
+ INTERFACE
1618
+ SUBROUTINE MMG3D_CHK_MESHDATA(mesh,met,retval)
1619
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,met
1620
+ INTEGER, INTENT(OUT) :: retval
1621
+ END SUBROUTINE
1622
+ END INTERFACE
1623
+ ! *
1624
+ ! */
1625
+
1626
+ ! LIBMMG3D_EXPORT int MMG3D_Chk_meshData(MMG5_pMesh mesh, MMG5_pSol met);
1627
+
1628
+ ! /* functions to set parameters
1629
+ ! *
1630
+ ! * NOTE iparam and dparam are int rather than enum MMG3D_Param because
1631
+ ! * genheader cannot handle enums in function arguments; i.e. the Fortran
1632
+ ! * API will break.
1633
+ ! */
1634
+
1635
+
1636
+ ! /**
1637
+ ! * \brief set an integer parameter of the remesher
1638
+ ! *
1639
+ ! * \param mesh pointer to the mesh structure.
1640
+ ! * \param sol pointer to the sol structure (unused).
1641
+ ! * \param iparam integer parameter to set (see \ref MMG3D_Param for a
1642
+ ! * list of parameters that can be set).
1643
+ ! * \param val value for the parameter.
1644
+ ! * \return 0 if failed, 1 otherwise.
1645
+ ! *
1646
+ ! * This function sets the integer parameter \a iparam to value \a val.
1647
+ ! *
1648
+ ! * \remark Fortran interface:
1649
+ ! */
1650
+ INTERFACE
1651
+ SUBROUTINE MMG3D_SET_IPARAMETER(mesh,sol,iparam,val,retval)
1652
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1653
+ MMG5_DATA_PTR_T :: sol
1654
+ INTEGER, INTENT(IN) :: iparam
1655
+ INTEGER(MMG5F_INT), INTENT(IN) :: val
1656
+ INTEGER, INTENT(OUT) :: retval
1657
+ END SUBROUTINE
1658
+ END INTERFACE
1659
+ ! *
1660
+ ! */
1661
+
1662
+ ! LIBMMG3D_EXPORT int MMG3D_Set_iparameter(MMG5_pMesh mesh,MMG5_pSol sol, int iparam,
1663
+ ! MMG5_int val);
1664
+
1665
+ ! /**
1666
+ ! * \brief set a real-valued parameter of the remesher
1667
+ ! *
1668
+ ! * \param mesh pointer to the mesh structure.
1669
+ ! * \param sol pointer to the sol structure (unused).
1670
+ ! * \param dparam double parameter to set (see \ref MMG3D_Param for a
1671
+ ! * list of parameters that can be set).
1672
+ ! * \param val value of the parameter.
1673
+ ! * \return 0 if failed, 1 otherwise.
1674
+ ! *
1675
+ ! * This function sets the double parameter \a dparam to value \a val.
1676
+ ! *
1677
+ ! * \remark Fortran interface:
1678
+ ! */
1679
+ INTERFACE
1680
+ SUBROUTINE MMG3D_SET_DPARAMETER(mesh,sol,dparam,val,retval)
1681
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1682
+ MMG5_DATA_PTR_T :: sol
1683
+ INTEGER, INTENT(IN) :: dparam
1684
+ REAL(KIND=8), INTENT(IN) :: val
1685
+ INTEGER, INTENT(OUT) :: retval
1686
+ END SUBROUTINE
1687
+ END INTERFACE
1688
+ ! *
1689
+ ! */
1690
+
1691
+ ! LIBMMG3D_EXPORT int MMG3D_Set_dparameter(MMG5_pMesh mesh,MMG5_pSol sol, int dparam,
1692
+ ! double val);
1693
+ ! /**
1694
+ ! * \brief set a local parameter
1695
+ ! *
1696
+ ! * \param mesh pointer to the mesh structure
1697
+ ! * \param sol pointer to the sol structure
1698
+ ! * \param typ type of entity (triangle, edge,...)
1699
+ ! * \param ref reference of the entity
1700
+ ! * \param hmin minimal edge size
1701
+ ! * \param hmax maximal edge size
1702
+ ! * \param hausd Hausdorff distance
1703
+ ! * \return 0 if failed, 1 otherwise.
1704
+ ! *
1705
+ ! * Set local parameters: set the Hausdorff distance, minimum edge length, and
1706
+ ! * maximum edge length for all entities of type \a typ and reference \a ref.
1707
+ ! *
1708
+ ! * \remark Fortran interface:
1709
+ ! */
1710
+ INTERFACE
1711
+ SUBROUTINE MMG3D_SET_LOCALPARAMETER(mesh,sol,typ,ref,&
1712
+ hmin,hmax,hausd,retval)
1713
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
1714
+ INTEGER, INTENT(IN) :: typ
1715
+ INTEGER(MMG5F_INT), INTENT(IN):: ref
1716
+ REAL(KIND=8), INTENT(IN) :: hmin,hmax,hausd
1717
+ INTEGER, INTENT(OUT) :: retval
1718
+ END SUBROUTINE
1719
+ END INTERFACE
1720
+ ! *
1721
+ ! */
1722
+
1723
+ ! LIBMMG3D_EXPORT int MMG3D_Set_localParameter(MMG5_pMesh mesh, MMG5_pSol sol, int typ,
1724
+ ! MMG5_int ref,double hmin,double hmax,double hausd);
1725
+
1726
+ ! /**
1727
+ ! * \brief Set the reference mapping for the elements of reference
1728
+ ! * \a ref in level-set discretization mode.
1729
+ ! *
1730
+ ! * \param mesh pointer to the mesh structure
1731
+ ! * \param sol pointer to the sol structure
1732
+ ! * \param ref input tetrahedron reference
1733
+ ! * \param split MMG5_MMAT_NoSplit if the entity must not be splitted, MMG5_MMAT_Split otherwise
1734
+ ! * \param rmin reference for the negative side after LS discretization
1735
+ ! * \param rplus reference for the positive side after LS discretization
1736
+ ! * \return 0 if failed, 1 otherwise.
1737
+ ! *
1738
+ ! * \remark Fortran interface:
1739
+ ! */
1740
+ INTERFACE
1741
+ SUBROUTINE MMG3D_SET_MULTIMAT(mesh,sol,ref,split,rmin,rplus,retval)
1742
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
1743
+ INTEGER, INTENT(IN) :: split
1744
+ INTEGER(MMG5F_INT), INTENT(IN):: ref,rmin,rplus
1745
+ INTEGER, INTENT(OUT) :: retval
1746
+ END SUBROUTINE
1747
+ END INTERFACE
1748
+ ! *
1749
+ ! * With this function you can determine which references will be given to the
1750
+ ! * tetrahedra on both sides of the level set, after discretization. Negative and
1751
+ ! * positive here refer to volumes where the function is smaller or larger,
1752
+ ! * respectively, than the isovalue of the level set.
1753
+ ! */
1754
+
1755
+ ! LIBMMG3D_EXPORT int MMG3D_Set_multiMat(MMG5_pMesh mesh, MMG5_pSol sol,MMG5_int ref,int split,
1756
+ ! MMG5_int rmin, MMG5_int rplus);
1757
+
1758
+ ! /**
1759
+ ! * \brief Set a new level-set base reference.
1760
+ ! *
1761
+ ! * \param mesh pointer to the mesh structure.
1762
+ ! * \param sol pointer to the sol structure.
1763
+ ! * \param br new level-set base reference.
1764
+ ! * \return 0 if failed, 1 otherwise.
1765
+ ! *
1766
+ ! * Set a new level-set base reference of ref \a br in LS discretization
1767
+ ! * mode. Base references are boundary conditions to which implicit domains can
1768
+ ! * be attached. All implicit volumes that are not attached to listed base
1769
+ ! * references are deleted as spurious volumes by the \a rmc option.
1770
+ ! *
1771
+ ! * \remark Fortran interface:
1772
+ ! */
1773
+ INTERFACE
1774
+ SUBROUTINE MMG3D_SET_LSBASEREFERENCE(mesh,sol,br,retval)
1775
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
1776
+ INTEGER(MMG5F_INT) :: br
1777
+ INTEGER, INTENT(OUT) :: retval
1778
+ END SUBROUTINE
1779
+ END INTERFACE
1780
+ ! *
1781
+ ! */
1782
+
1783
+ ! LIBMMG3D_EXPORT int MMG3D_Set_lsBaseReference(MMG5_pMesh mesh, MMG5_pSol sol,MMG5_int br);
1784
+
1785
+
1786
+ ! /** recover data */
1787
+ ! /**
1788
+ ! * \brief Get the number of vertices, tetrahedra, prisms, triangles,
1789
+ ! * quadrilaterals and edges of the mesh.
1790
+ ! *
1791
+ ! * \param mesh pointer to the mesh structure.
1792
+ ! * \param np pointer to the number of vertices.
1793
+ ! * \param ne pointer to the number of tetrahedra.
1794
+ ! * \param nprism pointer to the number of prisms.
1795
+ ! * \param nt pointer to the number of triangles.
1796
+ ! * \param nquad pointer to the number of quads.
1797
+ ! * \param na pointer to the number of edges.
1798
+ ! * \return 1.
1799
+ ! *
1800
+ ! * \remark Fortran interface:
1801
+ ! */
1802
+ INTERFACE
1803
+ SUBROUTINE MMG3D_GET_MESHSIZE(mesh,np,ne,nprism,nt,nquad,na,retval)
1804
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1805
+ INTEGER(MMG5F_INT) :: np,ne,nprism,nt,nquad,na
1806
+ INTEGER, INTENT(OUT) :: retval
1807
+ END SUBROUTINE
1808
+ END INTERFACE
1809
+ ! *
1810
+ ! */
1811
+
1812
+ ! LIBMMG3D_EXPORT int MMG3D_Get_meshSize(MMG5_pMesh mesh, MMG5_int* np, MMG5_int* ne,MMG5_int *nprism, MMG5_int* nt,
1813
+ ! MMG5_int* nquad, MMG5_int* na);
1814
+
1815
+ ! /**
1816
+ ! * \brief Get the number of elements, dimension, and type of a solution structure.
1817
+ ! *
1818
+ ! * \param mesh pointer to the mesh structure.
1819
+ ! * \param sol pointer to the sol structure.
1820
+ ! * \param typEntity pointer to the type of entities to which solutions
1821
+ ! * are applied (see \ref MMG5_entities for possible values)
1822
+ ! * \param np pointer to the number of solutions.
1823
+ ! * \param typSol pointer to the type of the solutions
1824
+ ! * (scalar, vectorial, ..., see \ref MMG5_type for possible values)
1825
+ ! * \return 1.
1826
+ ! *
1827
+ ! * \remark Fortran interface:
1828
+ ! */
1829
+ INTERFACE
1830
+ SUBROUTINE MMG3D_GET_SOLSIZE(mesh,sol,typEntity,np,typSol,retval)
1831
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
1832
+ INTEGER :: typEntity,typSol
1833
+ INTEGER(MMG5F_INT) :: np
1834
+ INTEGER, INTENT(OUT) :: retval
1835
+ END SUBROUTINE
1836
+ END INTERFACE
1837
+ ! *
1838
+ ! */
1839
+
1840
+ ! LIBMMG3D_EXPORT int MMG3D_Get_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int* typEntity,
1841
+ ! MMG5_int* np,int* typSol);
1842
+
1843
+ ! /**
1844
+ ! * \brief Get the number of elements, type, and dimensions of several solutions defined on vertices.
1845
+ ! *
1846
+ ! * \param mesh pointer to the mesh structure.
1847
+ ! * \param sol pointer to an array of sol structure.
1848
+ ! * \param nsols pointer to the number of solutions per entity.
1849
+ ! * \param nentities pointer to the number of solutions.
1850
+ ! * \param typSol array of size MMG5_NSOLS_MAX to store type of each solution
1851
+ ! * (scalar, vectorial, ..., see \ref MMG5_type for possible values).
1852
+ ! *
1853
+ ! * \return 1.
1854
+ ! *
1855
+ ! * \remark Fortran interface:
1856
+ ! */
1857
+ INTERFACE
1858
+ SUBROUTINE MMG3D_GET_SOLSATVERTICESSIZE(mesh,sol,nsols,nentities,typSol,retval)
1859
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
1860
+ INTEGER :: nsols
1861
+ INTEGER(MMG5F_INT) :: nentities
1862
+ INTEGER :: typSol(*)
1863
+ INTEGER, INTENT(OUT) :: retval
1864
+ END SUBROUTINE
1865
+ END INTERFACE
1866
+ ! *
1867
+ ! */
1868
+
1869
+ ! LIBMMG3D_EXPORT int MMG3D_Get_solsAtVerticesSize(MMG5_pMesh mesh, MMG5_pSol* sol,int *nsols,
1870
+ ! MMG5_int* nentities,int* typSol);
1871
+
1872
+ ! /**
1873
+ ! * \brief Get the coordinates \a c0, \a c1,\a c2 and reference \a ref of the
1874
+ ! * next vertex of \a mesh.
1875
+ ! *
1876
+ ! * \param mesh pointer to the mesh structure.
1877
+ ! * \param c0 pointer to the coordinate of the vertex along the first
1878
+ ! * dimension.
1879
+ ! * \param c1 pointer to the coordinate of the vertex along the second
1880
+ ! * dimension.
1881
+ ! * \param c2 pointer to the coordinate of the vertex along the third
1882
+ ! * dimension.
1883
+ ! * \param ref pointer to the vertex reference.
1884
+ ! * \param isCorner pointer to the flag saying if vertex is corner.
1885
+ ! * \param isRequired pointer to the flag saying if vertex is required.
1886
+ ! * \return 1.
1887
+ ! *
1888
+ ! * This function retrieves the coordinates \a c0, \a c1,\a c2 and reference \a
1889
+ ! * ref of the next vertex of a mesh. It is meant to be used in a loop over all
1890
+ ! * vertices. When this function has been called as many times as there are
1891
+ ! * vertices, the internal loop counter will be reset. To obtain data for a
1892
+ ! * specific vertex, the \ref MMG3D_GetByIdx_vertex function can be used instead.
1893
+ ! *
1894
+ ! * \remark Fortran interface:
1895
+ ! */
1896
+ INTERFACE
1897
+ SUBROUTINE MMG3D_GET_VERTEX(mesh,c0,c1,c2,ref,isCorner,isRequired, &
1898
+ retval)
1899
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1900
+ REAL(KIND=8), INTENT(OUT) :: c0,c1,c2
1901
+ INTEGER(MMG5F_INT) :: ref
1902
+ INTEGER :: isCorner,isRequired
1903
+ INTEGER, INTENT(OUT) :: retval
1904
+ END SUBROUTINE
1905
+ END INTERFACE
1906
+ ! *
1907
+ ! */
1908
+
1909
+ ! LIBMMG3D_EXPORT int MMG3D_Get_vertex(MMG5_pMesh mesh, double* c0, double* c1, double* c2,
1910
+ ! MMG5_int* ref,int* isCorner, int* isRequired);
1911
+
1912
+ ! /**
1913
+ ! * \brief Get the coordinates and reference of a specific vertex in the mesh.
1914
+ ! *
1915
+ ! * \param mesh pointer to the mesh structure.
1916
+ ! * \param c0 pointer to the coordinate of the vertex along the first dimension.
1917
+ ! * \param c1 pointer to the coordinate of the vertex along the second dimension.
1918
+ ! * \param c2 pointer to the coordinate of the vertex along the third dimension.
1919
+ ! * \param ref pointer to the vertex reference.
1920
+ ! * \param isCorner pointer to the flag saying if vertex is corner.
1921
+ ! * \param isRequired pointer to the flag saying if vertex is required.
1922
+ ! * \param idx index of vertex to get.
1923
+ ! * \return 1.
1924
+ ! *
1925
+ ! * Get coordinates \a c0, \a c1, \a c2 and reference \a ref of
1926
+ ! * vertex \a idx of mesh.
1927
+ ! *
1928
+ ! * \remark Fortran interface:
1929
+ ! */
1930
+ INTERFACE
1931
+ SUBROUTINE MMG3D_GETBYIDX_VERTEX(mesh,c0,c1,c2,ref,isCorner,isRequired,idx,retval)
1932
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1933
+ REAL(KIND=8), INTENT(OUT) :: c0,c1,c2
1934
+ INTEGER(MMG5F_INT) :: ref,idx
1935
+ INTEGER :: isCorner,isRequired
1936
+ INTEGER, INTENT(OUT) :: retval
1937
+ END SUBROUTINE
1938
+ END INTERFACE
1939
+ ! *
1940
+ ! */
1941
+
1942
+ ! LIBMMG3D_EXPORT int MMG3D_GetByIdx_vertex(MMG5_pMesh mesh, double* c0, double* c1, double* c2, MMG5_int* ref,
1943
+ ! int* isCorner, int* isRequired,MMG5_int idx);
1944
+
1945
+ ! /**
1946
+ ! * \brief Get the coordinates and references of all vertices in the mesh.
1947
+ ! *
1948
+ ! * \param mesh pointer to the mesh structure.
1949
+ ! * \param vertices pointer to the array of coordinates.
1950
+ ! * The coordinates of the \f$i^{th}\f$ vertex are stored in
1951
+ ! * vertices[(i-1)*3]\@3.
1952
+ ! * \param refs pointer to the array of the vertex references.
1953
+ ! * The ref of the \f$i^th\f$ vertex is stored in refs[i-1].
1954
+ ! * \param areCorners pointer to the array of the flags saying if
1955
+ ! * vertices are corners.
1956
+ ! * areCorners[i-1]=1 if the \f$i^{th}\f$ vertex is corner.
1957
+ ! * \param areRequired pointer to the array of flags saying if vertices
1958
+ ! * are required. areRequired[i-1]=1 if the \f$i^{th}\f$ vertex is required.
1959
+ ! * \return 1.
1960
+ ! *
1961
+ ! * \remark Fortran interface: (commentated in order to allow to pass \%val(0)
1962
+ ! * instead of the refs, areCorners or areRequired arrays)
1963
+ ! *
1964
+ ! */
1965
+ INTERFACE
1966
+ ! SUBROUTINE MMG3D_GET_VERTICES(mesh,vertices,refs,areCorners,&
1967
+ ! areRequired,retval)
1968
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
1969
+ ! REAL(KIND=8),DIMENSION(*), INTENT(OUT) :: vertices
1970
+ ! INTEGER(MMG5F_INT), DIMENSION(*) :: refs
1971
+ ! INTEGER, DIMENSION(*) :: areCorners,areRequired
1972
+ ! INTEGER, INTENT(OUT) :: retval
1973
+ ! END SUBROUTINE
1974
+ END INTERFACE
1975
+ ! *
1976
+ ! */
1977
+
1978
+ ! LIBMMG3D_EXPORT int MMG3D_Get_vertices(MMG5_pMesh mesh, double* vertices, MMG5_int* refs,
1979
+ ! int* areCorners, int* areRequired);
1980
+
1981
+ ! /**
1982
+ ! * \brief Get the vertices and reference of the next tetrahedron in the mesh.
1983
+ ! *
1984
+ ! * \param mesh pointer to the mesh structure.
1985
+ ! * \param v0 pointer to the first vertex of tetrahedron.
1986
+ ! * \param v1 pointer to the second vertex of tetrahedron.
1987
+ ! * \param v2 pointer to the third vertex of tetrahedron.
1988
+ ! * \param v3 pointer to the fourth vertex of tetrahedron.
1989
+ ! * \param ref pointer to the tetrahedron reference.
1990
+ ! * \param isRequired pointer to the flag saying if tetrahedron is
1991
+ ! * required.
1992
+ ! * \return 0 if failed, 1 otherwise.
1993
+ ! *
1994
+ ! * This function retrieves the vertices \a v0, \a v1, \a v2, \a v3 and reference
1995
+ ! * \a ref of the next tetrahedron of \a mesh. It is meant to be called in a loop
1996
+ ! * over all tetrahedra. When it has been called as many times as there are
1997
+ ! * tetrahedra, the internal loop counter will be reset.
1998
+ ! *
1999
+ ! * \remark Fortran interface:
2000
+ ! */
2001
+ INTERFACE
2002
+ SUBROUTINE MMG3D_GET_TETRAHEDRON(mesh,v0,v1,v2,v3,ref,isRequired,&
2003
+ retval)
2004
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2005
+ INTEGER(MMG5F_INT), INTENT(OUT):: v0,v1,v2,v3
2006
+ INTEGER(MMG5F_INT) :: ref
2007
+ INTEGER :: isRequired
2008
+ INTEGER, INTENT(OUT) :: retval
2009
+ END SUBROUTINE
2010
+ END INTERFACE
2011
+ ! *
2012
+ ! */
2013
+
2014
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tetrahedron(MMG5_pMesh mesh, MMG5_int* v0, MMG5_int* v1, MMG5_int* v2,
2015
+ ! MMG5_int* v3,MMG5_int* ref, int* isRequired);
2016
+
2017
+ ! /**
2018
+ ! * \brief Get the vertices and reference of all tetrahedra in the mesh.
2019
+ ! *
2020
+ ! * \param mesh pointer to the mesh structure.
2021
+ ! * \param tetra pointer to the array where the vertices are to be stored.
2022
+ ! * Vertices of the \f$i^{th}\f$ tetra are stored in tetra[(i-1)*4] to tetra[(i-1)*4+3]
2023
+ ! * \param refs pointer to the array of the tetrahedron references.
2024
+ ! * References of the \f$i^{th}\f$ tetra is stored in refs[i-1].
2025
+ ! * \param areRequired pointer to the array of the flags saying if the
2026
+ ! * tetrahedra are required. areRequired[i-1]=1 if the \f$i^{th}\f$ tetrahedron
2027
+ ! * is required.
2028
+ ! * \return 0 if failed, 1 otherwise.
2029
+ ! *
2030
+ ! * \remark Fortran interface: (commentated in order to allow to pass \%val(0)
2031
+ ! * instead of the refs, areCorners or areRequired arrays)
2032
+ ! *
2033
+ ! */
2034
+ INTERFACE
2035
+ ! SUBROUTINE MMG3D_GET_TETRAHEDRA(mesh,tetra,refs,areRequired,&
2036
+ ! retval)
2037
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2038
+ ! INTEGER(MMG5F_INT), DIMENSION(*),INTENT(OUT) :: tetra
2039
+ ! INTEGER(MMG5F_INT), DIMENSION(*) :: refs
2040
+ ! INTEGER, DIMENSION(*) :: areRequired
2041
+ ! INTEGER, INTENT(OUT) :: retval
2042
+ ! END SUBROUTINE
2043
+ END INTERFACE
2044
+ ! *
2045
+ ! */
2046
+
2047
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tetrahedra(MMG5_pMesh mesh, MMG5_int* tetra,MMG5_int* refs,
2048
+ ! int* areRequired);
2049
+
2050
+ ! /**
2051
+ ! * \brief Get the vertices and reference of the next prism in the mesh.
2052
+ ! *
2053
+ ! * \param mesh pointer to the mesh structure.
2054
+ ! * \param v0 pointer to the first vertex of prism.
2055
+ ! * \param v1 pointer to the second vertex of prism.
2056
+ ! * \param v2 pointer to the third vertex of prism.
2057
+ ! * \param v3 pointer to the fourth vertex of prism.
2058
+ ! * \param v4 pointer to the fifth vertex of prism.
2059
+ ! * \param v5 pointer to the sixth vertex of prism.
2060
+ ! * \param ref pointer to the prism reference.
2061
+ ! * \param isRequired pointer to the flag saying if prism is
2062
+ ! * required.
2063
+ ! * \return 0 if failed, 1 otherwise.
2064
+ ! *
2065
+ ! * This function retrieves the vertices \a v0, \a v1, \a v2, \a v3, \a v4, \a v5
2066
+ ! * and reference \a ref of the next prism of \a mesh. It is meant to be called
2067
+ ! * in a loop over all prisms. When it has been called as many times as there are
2068
+ ! * prisms, the internal loop counter will be reset.
2069
+ ! *
2070
+ ! * \remark Fortran interface:
2071
+ ! */
2072
+ INTERFACE
2073
+ SUBROUTINE MMG3D_GET_PRISM(mesh,v0,v1,v2,v3,v4,v5,ref,isRequired,&
2074
+ retval)
2075
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2076
+ INTEGER(MMG5F_INT), INTENT(OUT) :: v0,v1,v2,v3,v4,v5
2077
+ INTEGER(MMG5F_INT) :: ref
2078
+ INTEGER :: isRequired
2079
+ INTEGER, INTENT(OUT) :: retval
2080
+ END SUBROUTINE
2081
+ END INTERFACE
2082
+ ! *
2083
+ ! */
2084
+
2085
+ ! LIBMMG3D_EXPORT int MMG3D_Get_prism(MMG5_pMesh mesh, MMG5_int* v0, MMG5_int* v1, MMG5_int* v2,
2086
+ ! MMG5_int* v3,MMG5_int* v4,MMG5_int* v5,MMG5_int* ref, int* isRequired);
2087
+
2088
+ ! /**
2089
+ ! * \brief Get the vertices and references of all prisms in the mesh.
2090
+ ! *
2091
+ ! * \param mesh pointer to the mesh structure.
2092
+ ! * \param prisms pointer to the array where the vertices are to be stored
2093
+ ! * Vertices of the \f$i^{th}\f$ prism are stored in prisms[(i-1)*6] to prisms[(i-1)*6+5].
2094
+ ! * \param refs pointer to the array of the prism references.
2095
+ ! * The reference of the \f$i^{th}\f$ prism is stored in refs[i-1].
2096
+ ! * \param areRequired pointer to the array of the flags saying if the
2097
+ ! * prisms are required. areRequired[i-1]=1 if the \f$i^{th}\f$ prism
2098
+ ! * is required.
2099
+ ! * \return 0 if failed, 1 otherwise.
2100
+ ! *
2101
+ ! * \remark Fortran interface: (commentated in order to allow to pass \%val(0)
2102
+ ! * instead of the refs, areCorners or areRequired arrays)
2103
+ ! *
2104
+ ! */
2105
+ INTERFACE
2106
+ ! SUBROUTINE MMG3D_GET_PRISMS(mesh,prisms,refs,areRequired,&
2107
+ ! retval)
2108
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2109
+ ! INTEGER(MMG5F_INT), DIMENSION(*),INTENT(OUT) :: prisms
2110
+ ! INTEGER(MMG5F_INT), DIMENSION(*) :: refs
2111
+ ! INTEGER, DIMENSION(*) :: areRequired
2112
+ ! INTEGER, INTENT(OUT) :: retval
2113
+ ! END SUBROUTINE
2114
+ END INTERFACE
2115
+ ! *
2116
+ ! */
2117
+
2118
+ ! LIBMMG3D_EXPORT int MMG3D_Get_prisms(MMG5_pMesh mesh, MMG5_int* prisms,MMG5_int* refs,
2119
+ ! int* areRequired);
2120
+
2121
+ ! /**
2122
+ ! * \brief Get the vertices and reference of the next triangle in the mesh.
2123
+ ! *
2124
+ ! * \param mesh pointer to the mesh structure.
2125
+ ! * \param v0 pointer to the first vertex of triangle.
2126
+ ! * \param v1 pointer to the second vertex of triangle.
2127
+ ! * \param v2 pointer to the third vertex of triangle.
2128
+ ! * \param ref pointer to the triangle reference.
2129
+ ! * \param isRequired pointer to the flag saying if triangle is required.
2130
+ ! * \return 0 if failed, 1 otherwise.
2131
+ ! *
2132
+ ! * This function retrieves the vertices \a v0, \a v1, \a v2, and reference \a
2133
+ ! * ref of the next triangle of \a mesh. It is meant to be called in a loop over
2134
+ ! * all triangles. When it has been called as many times as there are triangles,
2135
+ ! * the internal loop counter will be reset.
2136
+ ! *
2137
+ ! * \remark Fortran interface:
2138
+ ! */
2139
+ INTERFACE
2140
+ SUBROUTINE MMG3D_GET_TRIANGLE(mesh,v0,v1,v2,ref,isRequired,retval)
2141
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2142
+ INTEGER(MMG5F_INT), INTENT(OUT) :: v0,v1,v2
2143
+ INTEGER(MMG5F_INT) :: ref
2144
+ INTEGER :: isRequired
2145
+ INTEGER, INTENT(OUT) :: retval
2146
+ END SUBROUTINE
2147
+ END INTERFACE
2148
+ ! *
2149
+ ! */
2150
+
2151
+ ! LIBMMG3D_EXPORT int MMG3D_Get_triangle(MMG5_pMesh mesh, MMG5_int* v0, MMG5_int* v1, MMG5_int* v2, MMG5_int* ref,
2152
+ ! int* isRequired);
2153
+
2154
+ ! /**
2155
+ ! * \brief Get the vertices and references of all triangles in the mesh.
2156
+ ! *
2157
+ ! * \param mesh pointer to the mesh structure.
2158
+ ! * \param tria pointer to the array where the vertices are to be stored
2159
+ ! * Vertices of the \f$i^{th}\f$ triangle are stored in tria[(i-1)*3] to tria[(i-1)*3+2].
2160
+ ! * \param refs pointer to the array where the references are to be stored.
2161
+ ! * refs[i-1] is the reference of the \f$i^{th}\f$ triangle.
2162
+ ! * \param areRequired pointer to array of the flags saying if triangles
2163
+ ! * are required. areRequired[i-1]=1 if the \f$i^{th}\f$ tria
2164
+ ! * is required.
2165
+ ! * \return 0 if failed, 1 otherwise.
2166
+ ! *
2167
+ ! * \remark Fortran interface: (Commentated in order to allow to pass \%val(0)
2168
+ ! * instead of the refs or areRequired arrays)
2169
+ ! *
2170
+ ! */
2171
+ INTERFACE
2172
+ ! SUBROUTINE MMG3D_GET_TRIANGLES(mesh,tria,refs,areRequired,retval)
2173
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2174
+ ! INTEGER(MMG5F_INT), DIMENSION(*),INTENT(OUT) :: tria
2175
+ ! INTEGER(MMG5F_INT), DIMENSION(*) :: refs
2176
+ ! INTEGER, DIMENSION(*) :: areRequired
2177
+ ! INTEGER, INTENT(OUT) :: retval
2178
+ ! END SUBROUTINE
2179
+ END INTERFACE
2180
+ ! *
2181
+ ! */
2182
+
2183
+ ! LIBMMG3D_EXPORT int MMG3D_Get_triangles(MMG5_pMesh mesh, MMG5_int* tria, MMG5_int* refs,
2184
+ ! int* areRequired);
2185
+
2186
+ ! /**
2187
+ ! * \brief Get the vertices and reference of the next quadrilateral of the mesh.
2188
+ ! *
2189
+ ! * \param mesh pointer to the mesh structure.
2190
+ ! * \param v0 pointer to the first vertex of quadrilateral.
2191
+ ! * \param v1 pointer to the second vertex of quadrilateral.
2192
+ ! * \param v2 pointer to the third vertex of quadrilateral.
2193
+ ! * \param v3 pointer to the fourth vertex of quadrilateral.
2194
+ ! * \param ref pointer to the quadrilateral reference.
2195
+ ! * \param isRequired pointer to the flag saying if quadrilateral is required.
2196
+ ! * \return 0 if failed, 1 otherwise.
2197
+ ! *
2198
+ ! * Get the vertices \a v0,\a v1,\a v2,\a v3 and reference \a ref of the next
2199
+ ! * quadrilateral of mesh. This function is meant to be called in a loop over all
2200
+ ! * quadrilaterals. When it has been called as many times as there are
2201
+ ! * quadrilaterals, the internal loop counter will be reset.
2202
+ ! *
2203
+ ! * \remark Fortran interface:
2204
+ ! */
2205
+ INTERFACE
2206
+ SUBROUTINE MMG3D_GET_QUADRILATERAL(mesh,v0,v1,v2,v3,ref,isRequired,retval)
2207
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2208
+ INTEGER(MMG5F_INT), INTENT(OUT) :: v0,v1,v2,v3,ref
2209
+ INTEGER :: isRequired
2210
+ INTEGER, INTENT(OUT) :: retval
2211
+ END SUBROUTINE
2212
+ END INTERFACE
2213
+ ! *
2214
+ ! */
2215
+
2216
+ ! LIBMMG3D_EXPORT int MMG3D_Get_quadrilateral(MMG5_pMesh mesh, MMG5_int* v0, MMG5_int* v1, MMG5_int* v2,MMG5_int* v3,
2217
+ ! MMG5_int* ref, int* isRequired);
2218
+
2219
+ ! /**
2220
+ ! * \brief Get the vertices and references of all quadrilaterals of the mesh.
2221
+ ! *
2222
+ ! * \param mesh pointer to the mesh structure.
2223
+ ! * \param quads pointer to the array where the vertices will be stored.
2224
+ ! * Vertices of the \f$i^{th}\f$ quadrilateral are stored in quads[(i-1)*4] to quads[(i-1)*4+3].
2225
+ ! * \param refs pointer to the array of the quadrilaterals references.
2226
+ ! * refs[i-1] is the ref of the \f$i^{th}\f$ quadrilateral.
2227
+ ! * \param areRequired pointer to array of the flags saying if quadrilaterals
2228
+ ! * are required. areRequired[i-1]=1 if the \f$i^{th}\f$ quadrilateral
2229
+ ! * is required.
2230
+ ! * \return 0 if failed, 1 otherwise.
2231
+ ! *
2232
+ ! * \remark Fortran interface: (Commentated in order to allow to pass \%val(0)
2233
+ ! * instead of the refs or areRequired arrays)
2234
+ ! *
2235
+ ! */
2236
+ INTERFACE
2237
+ ! SUBROUTINE MMG3D_GET_QUADRILATERALS(mesh,quads,refs,areRequired,retval)
2238
+ ! MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2239
+ ! INTEGER(MMG5F_INT), DIMENSION(*),INTENT(OUT) :: quads
2240
+ ! INTEGER(MMG5F_INT), DIMENSION(*) :: refs
2241
+ ! INTEGER, DIMENSION(*) :: areRequired
2242
+ ! INTEGER, INTENT(OUT) :: retval
2243
+ ! END SUBROUTINE
2244
+ END INTERFACE
2245
+ ! *
2246
+ ! */
2247
+
2248
+ ! LIBMMG3D_EXPORT int MMG3D_Get_quadrilaterals(MMG5_pMesh mesh, MMG5_int* quads, MMG5_int* refs,
2249
+ ! int* areRequired);
2250
+
2251
+ ! /**
2252
+ ! * \brief Get the vertices and reference of the next edge in the mesh.
2253
+ ! *
2254
+ ! * \param mesh pointer to the mesh structure.
2255
+ ! * \param e0 pointer to the first extremity of the edge.
2256
+ ! * \param e1 pointer to the second extremity of the edge.
2257
+ ! * \param ref pointer to the edge reference.
2258
+ ! * \param isRidge pointer to the flag saying if the edge is ridge.
2259
+ ! * \param isRequired pointer to the flag saying if the edge is required.
2260
+ ! * \return 0 if failed, 1 otherwise.
2261
+ ! *
2262
+ ! * This function retrieves the extremities \a e0, \a e1 and reference \a ref of
2263
+ ! * next edge of \a mesh. It is meant to be called in a loop over all edges. When
2264
+ ! * it has been called as many times as there are edges in the mesh, the internal
2265
+ ! * edge counter will be reset.
2266
+ ! *
2267
+ ! * \remark Fortran interface:
2268
+ ! */
2269
+ INTERFACE
2270
+ SUBROUTINE MMG3D_GET_EDGE(mesh,e0,e1,ref,isRidge,isRequired,retval)
2271
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2272
+ INTEGER(MMG5F_INT), INTENT(OUT) :: e0,e1
2273
+ INTEGER(MMG5F_INT) :: ref
2274
+ INTEGER :: isRidge,isRequired
2275
+ INTEGER, INTENT(OUT) :: retval
2276
+ END SUBROUTINE
2277
+ END INTERFACE
2278
+ ! *
2279
+ ! */
2280
+
2281
+ ! LIBMMG3D_EXPORT int MMG3D_Get_edge(MMG5_pMesh mesh, MMG5_int* e0, MMG5_int* e1, MMG5_int* ref,
2282
+ ! int* isRidge, int* isRequired);
2283
+
2284
+ ! /**
2285
+ ! * \brief Set the vertices and references of all edges in a mesh.
2286
+ ! *
2287
+ ! * \param mesh pointer to the mesh structure.
2288
+ ! * \param edges pointer to the array of edges.
2289
+ ! * The vertices of the \f$i^{th}\f$ edge should be given in edges[(i-1)*2] and edges[(i-1)*2+1].
2290
+ ! * \param refs edges references. refs[i-1] is the ref of the \f$i^{th}\f$ edge.
2291
+ ! * \return 0 if failed, 1 otherwise.
2292
+ ! *
2293
+ ! * \remark Fortran interface:
2294
+ ! */
2295
+ INTERFACE
2296
+ SUBROUTINE MMG3D_SET_EDGES(mesh,edges,refs,retval)
2297
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2298
+ INTEGER(MMG5F_INT), INTENT(IN) :: edges(*)
2299
+ INTEGER(MMG5F_INT), INTENT(IN) :: refs(*)
2300
+ INTEGER, INTENT(OUT) :: retval
2301
+ END SUBROUTINE
2302
+ END INTERFACE
2303
+ ! *
2304
+ ! */
2305
+
2306
+ ! LIBMMG3D_EXPORT int MMG3D_Set_edges(MMG5_pMesh mesh, MMG5_int *edges, MMG5_int* refs);
2307
+
2308
+ ! /**
2309
+ ! * \brief Get the vertices and references of all edges in a mesh.
2310
+ ! *
2311
+ ! * \param mesh pointer to the mesh structure.
2312
+ ! * \param edges pointer to the array of edges.
2313
+ ! * The vertices of the \f$i^{th}\f$ edge are stored in edges[(i-1)*2] and edges[(i-1)*2+1].
2314
+ ! * \param refs edges references. refs[i-1] is the ref of the \f$i^{th}\f$ edge.
2315
+ ! * \param areRidges 1 if the edge is a ridge, 0 otherwise.
2316
+ ! * \param areRequired 1 if the edge is required, 0 otherwise.
2317
+ ! * \return 0 if failed, 1 otherwise.
2318
+ ! *
2319
+ ! * \remark Fortran interface:
2320
+ ! */
2321
+ INTERFACE
2322
+ SUBROUTINE MMG3D_GET_EDGES(mesh,edges,refs,areRidges,areRequired,retval)
2323
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2324
+ INTEGER(MMG5F_INT), INTENT(IN) :: edges(*)
2325
+ INTEGER(MMG5F_INT), INTENT(OUT):: refs(*)
2326
+ INTEGER, INTENT(OUT) :: areRequired(*),areRidges(*)
2327
+ INTEGER, INTENT(OUT) :: retval
2328
+ END SUBROUTINE
2329
+ END INTERFACE
2330
+ ! *
2331
+ ! */
2332
+
2333
+ ! LIBMMG3D_EXPORT int MMG3D_Get_edges(MMG5_pMesh mesh,MMG5_int *edges,MMG5_int* refs,
2334
+ ! int *areRidges,int *areRequired);
2335
+
2336
+ ! /**
2337
+ ! * \brief Get the normal orientation at a single mesh vertex.
2338
+ ! *
2339
+ ! * \param mesh pointer to the mesh structure.
2340
+ ! * \param k vertex index
2341
+ ! * \param n0 x componant of the normal at vertex \a k.
2342
+ ! * \param n1 y componant of the normal at vertex \a k.
2343
+ ! * \param n2 z componant of the normal at vertex \a k.
2344
+ ! *
2345
+ ! * \return 1 if success.
2346
+ ! *
2347
+ ! * This function retrieves the normal (n0,n1,n2) at vertex \a k.
2348
+ ! *
2349
+ ! * \remark Fortran interface:
2350
+ ! */
2351
+ INTERFACE
2352
+ SUBROUTINE MMG3D_GET_NORMALATVERTEX(mesh,k,n0,n1,n2,retval)
2353
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2354
+ INTEGER(MMG5F_INT), INTENT(IN):: k
2355
+ REAL(KIND=8) :: n0,n1,n2
2356
+ INTEGER, INTENT(OUT) :: retval
2357
+ END SUBROUTINE
2358
+ END INTERFACE
2359
+ ! *
2360
+ ! */
2361
+
2362
+ ! LIBMMG3D_EXPORT int MMG3D_Get_normalAtVertex(MMG5_pMesh mesh, MMG5_int k, double *n0, double *n1,
2363
+ ! double *n2) ;
2364
+
2365
+ ! /**
2366
+ ! * \brief Get the quality measure of a single tetrahedron in the mesh.
2367
+ ! *
2368
+ ! * \param mesh pointer to the mesh structure.
2369
+ ! * \param met pointer to the metric structure (may be NULL for an isotropic metric).
2370
+ ! * \param k index of the tetrahedron for which we want to get the quality (from 1 to
2371
+ ! * the number of tetrahedra included)
2372
+ ! * \return the computed quality or 0 in case of failure.
2373
+ ! *
2374
+ ! * This function returns the quality measure of tetrahedron \a k. Quality values
2375
+ ! * range from 0 (degenerate) to 1 (best attainable). The function returns 0
2376
+ ! * if the tetrahedron is flat or has a negative volume, and also if \a k is out
2377
+ ! * of range. In the latter case it will also print a diagnostic message to
2378
+ ! * standard output.
2379
+ ! *
2380
+ ! * \remark Fortran interface:
2381
+ ! */
2382
+ INTERFACE
2383
+ SUBROUTINE MMG3D_GET_TETRAHEDRONQUALITY(mesh,met,k,retval)
2384
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,met
2385
+ INTEGER(MMG5F_INT), INTENT(IN):: k
2386
+ REAL(KIND=8), INTENT(OUT) :: retval
2387
+ END SUBROUTINE
2388
+ END INTERFACE
2389
+ ! *
2390
+ ! */
2391
+
2392
+ ! LIBMMG3D_EXPORT double MMG3D_Get_tetrahedronQuality(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k);
2393
+
2394
+ ! /**
2395
+ ! * \brief Get the next element of a scalar solution structure defined at vertices.
2396
+ ! *
2397
+ ! * \param met pointer to the sol structure.
2398
+ ! * \param s pointer to the scalar solution value.
2399
+ ! * \return 0 if failed, 1 otherwise.
2400
+ ! *
2401
+ ! * This function retrieves the solution \a s of the next vertex of \a mesh. It
2402
+ ! * is meant to be called in a loop over all vertices. When it has been called as
2403
+ ! * many times as there are vertices in the mesh, the internal loop counter will
2404
+ ! * be reset.
2405
+ ! *
2406
+ ! * \remark Fortran interface:
2407
+ ! */
2408
+ INTERFACE
2409
+ SUBROUTINE MMG3D_GET_SCALARSOL(met,s,retval)
2410
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2411
+ REAL(KIND=8), INTENT(OUT) :: s
2412
+ INTEGER, INTENT(OUT) :: retval
2413
+ END SUBROUTINE
2414
+ END INTERFACE
2415
+ ! *
2416
+ ! */
2417
+
2418
+ ! LIBMMG3D_EXPORT int MMG3D_Get_scalarSol(MMG5_pSol met, double* s);
2419
+
2420
+ ! /**
2421
+ ! * \brief Get all elements of a scalar solution structure defined at vertices.
2422
+ ! *
2423
+ ! * \param met pointer to the sol structure.
2424
+ ! * \param s array of the scalar solutions at mesh vertices.
2425
+ ! * The solution at vertex i will be stored in s[i-1].
2426
+ ! * \return 0 if failed, 1 otherwise.
2427
+ ! *
2428
+ ! * \remark Fortran interface:
2429
+ ! */
2430
+ INTERFACE
2431
+ SUBROUTINE MMG3D_GET_SCALARSOLS(met,s,retval)
2432
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2433
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: s
2434
+ INTEGER, INTENT(OUT) :: retval
2435
+ END SUBROUTINE
2436
+ END INTERFACE
2437
+ ! *
2438
+ ! */
2439
+
2440
+ ! LIBMMG3D_EXPORT int MMG3D_Get_scalarSols(MMG5_pSol met, double* s);
2441
+
2442
+ ! /**
2443
+ ! * \brief Get the next element of a vector solution structure.
2444
+ ! *
2445
+ ! * \param met pointer to the sol structure.
2446
+ ! * \param vx x value of the vectorial solution.
2447
+ ! * \param vy y value of the vectorial solution.
2448
+ ! * \param vz z value of the vectorial solution.
2449
+ ! * \return 0 if failed, 1 otherwise.
2450
+ ! *
2451
+ ! * This function retrieves the next vector-valued element \f$(v_x,v_y,vz)\f$ of
2452
+ ! * the solution. It is meant to be called in a loop over all elements. When it
2453
+ ! * has been called as many times as there are elements in the solution, the
2454
+ ! * internal loop counter will be reset.
2455
+ ! *
2456
+ ! * \remark Fortran interface:
2457
+ ! */
2458
+ INTERFACE
2459
+ SUBROUTINE MMG3D_GET_VECTORSOL(met,vx,vy,vz,retval)
2460
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2461
+ REAL(KIND=8), INTENT(OUT) :: vx,vy,vz
2462
+ INTEGER, INTENT(OUT) :: retval
2463
+ END SUBROUTINE
2464
+ END INTERFACE
2465
+ ! *
2466
+ ! */
2467
+
2468
+ ! LIBMMG3D_EXPORT int MMG3D_Get_vectorSol(MMG5_pSol met, double* vx, double* vy, double* vz);
2469
+
2470
+ ! /**
2471
+ ! * \brief Get all elements of a vector solution structure.
2472
+ ! *
2473
+ ! * \param met pointer to the sol structure.
2474
+ ! * \param sols array of the solutions at mesh vertices. sols[3*(i-1)]\@3 is
2475
+ ! * the solution at vertex i.
2476
+ ! * \return 0 if failed, 1 otherwise.
2477
+ ! *
2478
+ ! * Get vectorial solutions at mesh vertices
2479
+ ! *
2480
+ ! * \remark Fortran interface:
2481
+ ! */
2482
+ INTERFACE
2483
+ SUBROUTINE MMG3D_GET_VECTORSOLS(met,sols,retval)
2484
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2485
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: sols
2486
+ INTEGER, INTENT(OUT) :: retval
2487
+ END SUBROUTINE
2488
+ END INTERFACE
2489
+ ! *
2490
+ ! */
2491
+
2492
+ ! LIBMMG3D_EXPORT int MMG3D_Get_vectorSols(MMG5_pSol met, double* sols);
2493
+
2494
+ ! /**
2495
+ ! * \brief Get the next element of a tensor solution structure.
2496
+ ! *
2497
+ ! * \param met pointer to the sol structure.
2498
+ ! * \param m11 pointer to the position (1,1) in the solution tensor.
2499
+ ! * \param m12 pointer to the position (1,2) in the solution tensor.
2500
+ ! * \param m13 pointer to the position (1,3) in the solution tensor.
2501
+ ! * \param m22 pointer to the position (2,2) in the solution tensor.
2502
+ ! * \param m23 pointer to the position (2,3) in the solution tensor.
2503
+ ! * \param m33 pointer to the position (3,3) in the solution tensor.
2504
+ ! * \return 0 if failed, 1 otherwise.
2505
+ ! *
2506
+ ! * This function retrieves the next element
2507
+ ! * \f$(m_{11},m_{12},m_{13},m_{22},m_{23},m_{33})\f$ of a tensor-valued solution
2508
+ ! * field. It is meant to be called in a loop over all vertices. When it has
2509
+ ! * been called as many times as there are elements in the solution, the internal
2510
+ ! * loop counter will be reset.
2511
+ ! *
2512
+ ! * \remark Fortran interface:
2513
+ ! */
2514
+ INTERFACE
2515
+ SUBROUTINE MMG3D_GET_TENSORSOL(met,m11,m12,m13,m22,m23,m33,retval)
2516
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2517
+ REAL(KIND=8), INTENT(OUT) :: m11,m12,m13,m22,m23,m33
2518
+ INTEGER, INTENT(OUT) :: retval
2519
+ END SUBROUTINE
2520
+ END INTERFACE
2521
+ ! *
2522
+ ! */
2523
+
2524
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tensorSol(MMG5_pSol met, double *m11,double *m12, double *m13,
2525
+ ! double *m22,double *m23, double *m33);
2526
+
2527
+ ! /**
2528
+ ! * \brief Get all elements of a tensor solution field.
2529
+ ! *
2530
+ ! * \param met pointer to the sol structure.
2531
+ ! * \param sols array of the solutions at mesh vertices.
2532
+ ! * The solution at vertex \a i will be stored in sols[6*(i-1)] to sols[6*(i-1)+5].
2533
+ ! * \return 0 if failed, 1 otherwise.
2534
+ ! *
2535
+ ! * \remark Fortran interface:
2536
+ ! */
2537
+ INTERFACE
2538
+ SUBROUTINE MMG3D_GET_TENSORSOLS(met,sols,retval)
2539
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: met
2540
+ REAL(KIND=8), DIMENSION(*), INTENT(OUT) :: sols
2541
+ INTEGER, INTENT(OUT) :: retval
2542
+ END SUBROUTINE
2543
+ END INTERFACE
2544
+ ! *
2545
+ ! */
2546
+
2547
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tensorSols(MMG5_pSol met, double *sols);
2548
+
2549
+ ! /**
2550
+ ! * \brief Get one out of several solutions at a specific vertex.
2551
+ ! *
2552
+ ! * \param sol pointer to the array of solutions
2553
+ ! * \param i position of the solution field that we want to get.
2554
+ ! * \param s solution(s) at mesh vertex \a pos. The required size
2555
+ ! * of this array depends on the type of solution.
2556
+ ! * \param pos index of the vertex on which we get the solution.
2557
+ ! *
2558
+ ! * \return 0 if failed, 1 otherwise.
2559
+ ! *
2560
+ ! * Get values of the ith field of the solution array at vertex \a pos.
2561
+ ! * (pos from 1 to nb_vertices included and \a i from 1 to \a nb_sols).
2562
+ ! * The type of solution is inferred from \a sol.
2563
+ ! *
2564
+ ! * \remark Fortran interface:
2565
+ ! */
2566
+ INTERFACE
2567
+ SUBROUTINE MMG3D_GET_ITHSOL_INSOLSATVERTICES(sol,i,s,pos,retval)
2568
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: sol
2569
+ INTEGER, INTENT(IN) :: i
2570
+ INTEGER(MMG5F_INT), INTENT(IN) :: pos
2571
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: s
2572
+ INTEGER, INTENT(OUT) :: retval
2573
+ END SUBROUTINE
2574
+ END INTERFACE
2575
+ ! *
2576
+ ! */
2577
+
2578
+ ! LIBMMG3D_EXPORT int MMG3D_Get_ithSol_inSolsAtVertices(MMG5_pSol sol,int i, double* s,MMG5_int pos);
2579
+
2580
+ ! /**
2581
+ ! * \brief Get one out of several solutions at all vertices in the mesh.
2582
+ ! *
2583
+ ! * \param sol pointer to the array of solutions
2584
+ ! * \param i position of the solution field that we want to get.
2585
+ ! * \param s array of the solutions at mesh vertices. The solution at vertex \a k
2586
+ ! * is given by s[k-1] for a scalar sol, s[3*(k-1)]\@3 for a vectorial solution
2587
+ ! * and s[6*(k-1)]\@6 for a tensor solution.
2588
+ ! *
2589
+ ! * \return 0 if failed, 1 otherwise.
2590
+ ! *
2591
+ ! * This function retrieves the values of the solution at the ith field of the
2592
+ ! * solution array (\a i from 1 to \a nb_sols).
2593
+ ! *
2594
+ ! * \remark Fortran interface:
2595
+ ! */
2596
+ INTERFACE
2597
+ SUBROUTINE MMG3D_GET_ITHSOLS_INSOLSATVERTICES(sol,i,s,retval)
2598
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: sol
2599
+ INTEGER, INTENT(IN) :: i
2600
+ REAL(KIND=8), DIMENSION(*),INTENT(OUT) :: s
2601
+ INTEGER, INTENT(OUT) :: retval
2602
+ END SUBROUTINE
2603
+ END INTERFACE
2604
+ ! *
2605
+ ! */
2606
+
2607
+ ! LIBMMG3D_EXPORT int MMG3D_Get_ithSols_inSolsAtVertices(MMG5_pSol sol,int i, double* s);
2608
+
2609
+ ! /**
2610
+ ! * \brief Get the value of an integer parameter of the remesher.
2611
+ ! *
2612
+ ! * \param mesh pointer to the mesh structure.
2613
+ ! * \param iparam integer parameter to get (see \ref MMG3D_Param for a
2614
+ ! * list of parameters that can be set).
2615
+ ! * \return The value of integer parameter.
2616
+ ! *
2617
+ ! * Get the value of integer parameter \a iparam.
2618
+ ! *
2619
+ ! * \remark Fortran interface:
2620
+ ! */
2621
+ INTERFACE
2622
+ SUBROUTINE MMG3D_GET_IPARAMETER(mesh,iparam,retval)
2623
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2624
+ INTEGER(MMG5F_INT), INTENT(IN):: iparam
2625
+ INTEGER, INTENT(OUT) :: retval
2626
+ END SUBROUTINE
2627
+ END INTERFACE
2628
+ ! *
2629
+ ! */
2630
+
2631
+ ! LIBMMG3D_EXPORT int MMG3D_Get_iparameter(MMG5_pMesh mesh, MMG5_int iparam);
2632
+
2633
+ ! /**
2634
+ ! * \brief Add a tetrahedron to the mesh.
2635
+ ! *
2636
+ ! * \param mesh pointer to the mesh structure.
2637
+ ! * \param v0 first vertex of tetrahedron.
2638
+ ! * \param v1 second vertex of tetrahedron.
2639
+ ! * \param v2 third vertex of tetrahedron.
2640
+ ! * \param v3 fourth vertex of tetrahedron.
2641
+ ! * \param ref tetrahedron reference.
2642
+ ! *
2643
+ ! * This function adds a tetrahedron with vertices \a v0, \a v1, \a v2, \a v3 and reference
2644
+ ! * \a ref at the first available position of the mesh.
2645
+ ! *
2646
+ ! * \return 0 if unable to create the tetrahedron, the unit-offset index of the new tet if it
2647
+ ! * has strictly positive volume, a negative index if it has a zero or negative volume.
2648
+ ! *
2649
+ ! * \remark Fortran interface:
2650
+ ! */
2651
+ INTERFACE
2652
+ SUBROUTINE MMG3D_ADD_TETRAHEDRON(mesh,v0,v1,v2,v3,ref,retval)
2653
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2654
+ INTEGER(MMG5F_INT), INTENT(IN):: v0,v1,v2,v3,ref
2655
+ INTEGER, INTENT(OUT) :: retval
2656
+ END SUBROUTINE
2657
+ END INTERFACE
2658
+ ! *
2659
+ ! */
2660
+
2661
+ ! LIBMMG3D_EXPORT int MMG3D_Add_tetrahedron(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1,
2662
+ ! MMG5_int v2, MMG5_int v3, MMG5_int ref);
2663
+
2664
+ ! /**
2665
+ ! * \brief Add a vertex to the mesh.
2666
+ ! *
2667
+ ! * \param mesh pointer to the mesh structure.
2668
+ ! * \param c0 x coor of the new vertex
2669
+ ! * \param c1 y coor of the new vertex
2670
+ ! * \param c2 z coor of the new vertex
2671
+ ! * \param ref vertex reference.
2672
+ ! *
2673
+ ! * \return 0 if unable to create the vertex, the index of the new vertex
2674
+ ! * otherwise.
2675
+ ! *
2676
+ ! * This function adds a vertex with coordinates \a c0 \a c1 \a c2 and reference
2677
+ ! * \a ref at the first available position of the mesh.
2678
+ ! *
2679
+ ! * \remark Fortran interface:
2680
+ ! */
2681
+ INTERFACE
2682
+ SUBROUTINE MMG3D_ADD_VERTEX(mesh,c0,c1,c2,ref,retval)
2683
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
2684
+ REAL(KIND=8), INTENT(IN) :: c0,c1,c2
2685
+ INTEGER(MMG5F_INT), INTENT(IN) :: ref
2686
+ INTEGER(MMG5F_INT), INTENT(OUT) :: retval
2687
+ END SUBROUTINE
2688
+ END INTERFACE
2689
+ ! *
2690
+ ! */
2691
+
2692
+ ! LIBMMG3D_EXPORT MMG5_int MMG3D_Add_vertex(MMG5_pMesh mesh, double c0, double c1,
2693
+ ! double c2, MMG5_int ref);
2694
+
2695
+ ! /* input/output functions */
2696
+ ! /**
2697
+ ! * \brief Load a mesh (in .mesh/.mesb format) from file.
2698
+ ! *
2699
+ ! * \param mesh pointer to the mesh structure.
2700
+ ! * \param filename name of the file.
2701
+ ! *
2702
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2703
+ ! * format...), 1 if success.
2704
+ ! *
2705
+ ! * Read mesh data.
2706
+ ! *
2707
+ ! * \remark Fortran interface:
2708
+ ! */
2709
+ INTERFACE
2710
+ SUBROUTINE MMG3D_LOADMESH(mesh,filename,strlen0,retval)
2711
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
2712
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2713
+ INTEGER, INTENT(IN) :: strlen0
2714
+ INTEGER, INTENT(OUT) :: retval
2715
+ END SUBROUTINE
2716
+ END INTERFACE
2717
+ ! *
2718
+ ! */
2719
+
2720
+ ! LIBMMG3D_EXPORT int MMG3D_loadMesh(MMG5_pMesh mesh,const char *filename);
2721
+
2722
+ ! /**
2723
+ ! * \brief Load a mesh and possibly a solution in .msh format from file.
2724
+ ! *
2725
+ ! * \param mesh pointer to the mesh structure.
2726
+ ! * \param sol pointer to the solution structure.
2727
+ ! * \param filename name of file.
2728
+ ! *
2729
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2730
+ ! * format...), 1 if success.
2731
+ ! *
2732
+ ! * This function reads a mesh and 0 or 1 data fields in MSH file format (.msh
2733
+ ! * extension). We read only low-order vertices, edges, triangles, quadrangles,
2734
+ ! * tetrahedra and prisms.
2735
+ ! *
2736
+ ! * \remark Fortran interface:
2737
+ ! */
2738
+ INTERFACE
2739
+ SUBROUTINE MMG3D_LOADMSHMESH(mesh,sol,filename,strlen0,retval)
2740
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2741
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2742
+ INTEGER, INTENT(IN) :: strlen0
2743
+ INTEGER, INTENT(OUT) :: retval
2744
+ END SUBROUTINE
2745
+ END INTERFACE
2746
+ ! *
2747
+ ! */
2748
+
2749
+ ! LIBMMG3D_EXPORT int MMG3D_loadMshMesh(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename);
2750
+
2751
+ ! /**
2752
+ ! * \brief Load a mesh and possibly a solution in VTU (VTK) format from file.
2753
+ ! *
2754
+ ! * \param mesh pointer to the mesh structure.
2755
+ ! * \param met pointer to the metric structure or the NULL pointer.
2756
+ ! * \param sol pointer to the level-set structure or the NULL pointer.
2757
+ ! * \param filename name of file.
2758
+ ! *
2759
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2760
+ ! * format...), 1 if success.
2761
+ ! *
2762
+ ! * This function reads a mesh and 0 or 1 data field in VTU (VTK) file format (.vtu
2763
+ ! * extension). We read only low-order vertices, edges, tria, quadra, tetra and
2764
+ ! * prisms. Point and cell references must be stored in PointData or CellData
2765
+ ! * whose names contain the "medit:ref" keyword.
2766
+ ! *
2767
+ ! * \remark Fortran interface:
2768
+ ! */
2769
+ INTERFACE
2770
+ SUBROUTINE MMG3D_LOADVTUMESH(mesh,met,sol,filename,strlen0,retval)
2771
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met,sol
2772
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2773
+ INTEGER, INTENT(IN) :: strlen0
2774
+ INTEGER, INTENT(OUT) :: retval
2775
+ END SUBROUTINE
2776
+ END INTERFACE
2777
+ ! *
2778
+ ! */
2779
+
2780
+ ! LIBMMG3D_EXPORT int MMG3D_loadVtuMesh(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pSol sol,const char *filename);
2781
+
2782
+ ! /**
2783
+ ! * \brief Load a mesh and multiple solutions in VTU (VTK) format from file.
2784
+ ! *
2785
+ ! * \param mesh pointer to the mesh structure.
2786
+ ! * \param sol pointer to the solution structure.
2787
+ ! * \param filename name of file.
2788
+ ! *
2789
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2790
+ ! * format...), 1 if success.
2791
+ ! *
2792
+ ! * This functionreads a mesh and a list of data in VTU file format (.vtu extension). We read
2793
+ ! * only low-order vertices, edges, tria, quadra, tetra and prisms. Point and cell
2794
+ ! * references must be stored in PointData or CellData whose names contains the
2795
+ ! * "medit:ref" keyword.
2796
+ ! *
2797
+ ! * \remark Fortran interface:
2798
+ ! */
2799
+ INTERFACE
2800
+ SUBROUTINE MMG3D_LOADVTUMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
2801
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2802
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2803
+ INTEGER, INTENT(IN) :: strlen0
2804
+ INTEGER, INTENT(OUT) :: retval
2805
+ END SUBROUTINE
2806
+ END INTERFACE
2807
+ ! *
2808
+ ! */
2809
+
2810
+ ! LIBMMG3D_EXPORT int MMG3D_loadVtuMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
2811
+
2812
+ ! /**
2813
+ ! * \brief Load a mesh and possibly a solution from a file in VTK format.
2814
+ ! *
2815
+ ! * \param mesh pointer to the mesh structure.
2816
+ ! * \param met pointer to the metric structure or the NULL pointer.
2817
+ ! * \param sol pointer to the level-set structure or the NULL pointer.
2818
+ ! * \param filename name of file.
2819
+ ! *
2820
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2821
+ ! * format...), 1 if success.
2822
+ ! *
2823
+ ! * This function reads a mesh and 0 or 1 data fields in VTK file format (.vtu extension). We read
2824
+ ! * only low-order vertices, edges, tria, quadra, tetra and prisms. Point and cell
2825
+ ! * references must be stored in PointData or CellData whose names contain the
2826
+ ! * "medit:ref" keyword.
2827
+ ! *
2828
+ ! * \remark Fortran interface:
2829
+ ! */
2830
+ INTERFACE
2831
+ SUBROUTINE MMG3D_LOADVTKMESH(mesh,met,sol,filename,strlen0,retval)
2832
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met,sol
2833
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2834
+ INTEGER, INTENT(IN) :: strlen0
2835
+ INTEGER, INTENT(OUT) :: retval
2836
+ END SUBROUTINE
2837
+ END INTERFACE
2838
+ ! *
2839
+ ! */
2840
+
2841
+ ! LIBMMG3D_EXPORT int MMG3D_loadVtkMesh(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pSol sol,const char *filename);
2842
+
2843
+ ! /**
2844
+ ! * \brief Load a mesh and multiple solutions from a file in VTK format.
2845
+ ! *
2846
+ ! * \param mesh pointer to the mesh structure.
2847
+ ! * \param sol pointer to the solution structure.
2848
+ ! * \param filename name of file.
2849
+ ! *
2850
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2851
+ ! * format...), 1 if success.
2852
+ ! *
2853
+ ! * Read mesh and a list of data in VTK file format (.vtu extension). We read
2854
+ ! * only low-order vertices, edges, tria, quadra, tetra and prisms. Point and cell
2855
+ ! * references must be stored in PointData or CellData whose names contains the
2856
+ ! * "medit:ref" keyword.
2857
+ ! *
2858
+ ! * \remark Fortran interface:
2859
+ ! */
2860
+ INTERFACE
2861
+ SUBROUTINE MMG3D_LOADVTKMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
2862
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2863
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2864
+ INTEGER, INTENT(IN) :: strlen0
2865
+ INTEGER, INTENT(OUT) :: retval
2866
+ END SUBROUTINE
2867
+ END INTERFACE
2868
+ ! *
2869
+ ! */
2870
+
2871
+ ! LIBMMG3D_EXPORT int MMG3D_loadVtkMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
2872
+
2873
+ ! /**
2874
+ ! * \brief Load a mesh and all data from a file in MSH format.
2875
+ ! *
2876
+ ! * \param mesh pointer to the mesh structure.
2877
+ ! * \param sol pointer to a list of solution structures.
2878
+ ! * \param filename name of file.
2879
+ ! *
2880
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2881
+ ! * format...), 1 if success.
2882
+ ! *
2883
+ ! * Read mesh and a list of data in MSH file format (.msh extension). We read only
2884
+ ! * low-order vertices, edges, tria, quadra, tetra and prisms.
2885
+ ! *
2886
+ ! * \remark Fortran interface:
2887
+ ! */
2888
+ INTERFACE
2889
+ SUBROUTINE MMG3D_LOADMSHMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
2890
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2891
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2892
+ INTEGER, INTENT(IN) :: strlen0
2893
+ INTEGER, INTENT(OUT) :: retval
2894
+ END SUBROUTINE
2895
+ END INTERFACE
2896
+ ! *
2897
+ ! */
2898
+
2899
+ ! LIBMMG3D_EXPORT int MMG3D_loadMshMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
2900
+
2901
+ ! /**
2902
+ ! * \brief Read mesh data in a format determined by the filename extension.
2903
+ ! *
2904
+ ! * \param mesh pointer to the mesh structure.
2905
+ ! * \param met pointer to the metric structure or the NULL pointer.
2906
+ ! * \param sol pointer to the level-set structure or the NULL pointer.
2907
+ ! * \param filename name of file.
2908
+ ! *
2909
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient memory, file
2910
+ ! * format...), 1 if success.
2911
+ ! *
2912
+ ! * \remark Fortran interface:
2913
+ ! */
2914
+ INTERFACE
2915
+ SUBROUTINE MMG3D_LOADGENERICMESH(mesh,met,sol,filename,strlen0,retval)
2916
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met,sol
2917
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2918
+ INTEGER, INTENT(IN) :: strlen0
2919
+ INTEGER, INTENT(OUT) :: retval
2920
+ END SUBROUTINE
2921
+ END INTERFACE
2922
+ ! *
2923
+ ! */
2924
+
2925
+ ! LIBMMG3D_EXPORT int MMG3D_loadGenericMesh(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pSol sol,const char *filename);
2926
+
2927
+ ! /**
2928
+ ! * \brief Save a mesh in .mesh/.meshb format.
2929
+ ! *
2930
+ ! * \param mesh pointer to the mesh structure.
2931
+ ! * \param filename pointer to the name of file.
2932
+ ! * \return 0 if failed, 1 otherwise.
2933
+ ! *
2934
+ ! * \remark Fortran interface:
2935
+ ! */
2936
+ INTERFACE
2937
+ SUBROUTINE MMG3D_SAVEMESH(mesh,filename,strlen0,retval)
2938
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
2939
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2940
+ INTEGER, INTENT(IN) :: strlen0
2941
+ INTEGER, INTENT(OUT) :: retval
2942
+ END SUBROUTINE
2943
+ END INTERFACE
2944
+ ! *
2945
+ ! */
2946
+
2947
+ ! LIBMMG3D_EXPORT int MMG3D_saveMesh(MMG5_pMesh mesh, const char *filename);
2948
+
2949
+ ! /**
2950
+ ! * \brief Save a mesh in MSH format, ascii or binary depending on the filename extension.
2951
+ ! *
2952
+ ! * \param mesh pointer to the mesh structure.
2953
+ ! * \param sol pointer to the solution structure.
2954
+ ! * \param filename name of file.
2955
+ ! * \return 0 if failed, 1 otherwise.
2956
+ ! *
2957
+ ! * Write mesh and 0 or 1 data in MSH file format (.msh extension). Write binary
2958
+ ! * file for .mshb extension and ASCII for .msh one.
2959
+ ! *
2960
+ ! * \remark Fortran interface:
2961
+ ! */
2962
+ INTERFACE
2963
+ SUBROUTINE MMG3D_SAVEMSHMESH(mesh,sol,filename,strlen0,retval)
2964
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2965
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2966
+ INTEGER, INTENT(IN) :: strlen0
2967
+ INTEGER, INTENT(OUT) :: retval
2968
+ END SUBROUTINE
2969
+ END INTERFACE
2970
+ ! *
2971
+ ! */
2972
+
2973
+ ! LIBMMG3D_EXPORT int MMG3D_saveMshMesh(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename);
2974
+
2975
+ ! /**
2976
+ ! * \brief Save a mesh and data in MSH format, ascii or binary depending on the filename extension.
2977
+ ! *
2978
+ ! * \param mesh pointer to the mesh structure.
2979
+ ! * \param sol pointer to the solution structure.
2980
+ ! * \param filename name of file.
2981
+ ! * \return 0 if failed, 1 otherwise.
2982
+ ! *
2983
+ ! * Write mesh and a list of data fields (that are considered as solutions and
2984
+ ! * not metrics, thus, we do nothing over the ridge vertices) in MSH file format
2985
+ ! * (.msh extension). Save file in ASCII format for .msh extension, in binary
2986
+ ! * format for .mshb one.
2987
+ ! *
2988
+ ! * \remark Fortran interface:
2989
+ ! */
2990
+ INTERFACE
2991
+ SUBROUTINE MMG3D_SAVEMSHMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
2992
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
2993
+ CHARACTER(LEN=*), INTENT(IN) :: filename
2994
+ INTEGER, INTENT(IN) :: strlen0
2995
+ INTEGER, INTENT(OUT) :: retval
2996
+ END SUBROUTINE
2997
+ END INTERFACE
2998
+ ! *
2999
+ ! */
3000
+
3001
+ ! LIBMMG3D_EXPORT int MMG3D_saveMshMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
3002
+
3003
+ ! /**
3004
+ ! * \brief Save a mesh and optionally one solution in VTK format.
3005
+ ! *
3006
+ ! * \param mesh pointer to the mesh structure.
3007
+ ! * \param sol pointer to the solution structure.
3008
+ ! * \param filename name of file.
3009
+ ! * \return 0 if failed, 1 otherwise.
3010
+ ! *
3011
+ ! * Write mesh and 0 or 1 data in Vtk file format (.vtk extension).
3012
+ ! *
3013
+ ! * \remark Fortran interface:
3014
+ ! */
3015
+ INTERFACE
3016
+ SUBROUTINE MMG3D_SAVEVTKMESH(mesh,sol,filename,strlen0,retval)
3017
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3018
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3019
+ INTEGER, INTENT(IN) :: strlen0
3020
+ INTEGER, INTENT(OUT) :: retval
3021
+ END SUBROUTINE
3022
+ END INTERFACE
3023
+ ! *
3024
+ ! */
3025
+
3026
+ ! LIBMMG3D_EXPORT int MMG3D_saveVtkMesh(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename);
3027
+
3028
+ ! /**
3029
+ ! * \brief Save a mesh and multiple data fields in VTK format.
3030
+ ! *
3031
+ ! * \param mesh pointer to the mesh structure.
3032
+ ! * \param sol pointer to the solution structure.
3033
+ ! * \param filename name of file.
3034
+ ! * \return 0 if failed, 1 otherwise.
3035
+ ! *
3036
+ ! * Write mesh and a list of data fields in Vtk file format (.vtk extension).
3037
+ ! *
3038
+ ! * \remark Fortran interface:
3039
+ ! */
3040
+ INTERFACE
3041
+ SUBROUTINE MMG3D_SAVEVTKMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
3042
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3043
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3044
+ INTEGER, INTENT(IN) :: strlen0
3045
+ INTEGER, INTENT(OUT) :: retval
3046
+ END SUBROUTINE
3047
+ END INTERFACE
3048
+ ! *
3049
+ ! */
3050
+
3051
+ ! LIBMMG3D_EXPORT int MMG3D_saveVtkMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
3052
+
3053
+ ! /**
3054
+ ! * \brief Save a mesh and optionally one data field in VTU format.
3055
+ ! *
3056
+ ! * \param mesh pointer to the mesh structure.
3057
+ ! * \param sol pointer to the solution structure.
3058
+ ! * \param filename name of file.
3059
+ ! * \return 0 if failed, 1 otherwise.
3060
+ ! *
3061
+ ! * Write mesh and 0 or 1 data in vtu Vtk file format (.vtu extension).
3062
+ ! *
3063
+ ! * \remark Fortran interface:
3064
+ ! */
3065
+ INTERFACE
3066
+ SUBROUTINE MMG3D_SAVEVTUMESH(mesh,sol,filename,strlen0,retval)
3067
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3068
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3069
+ INTEGER, INTENT(IN) :: strlen0
3070
+ INTEGER, INTENT(OUT) :: retval
3071
+ END SUBROUTINE
3072
+ END INTERFACE
3073
+ ! *
3074
+ ! */
3075
+
3076
+ ! LIBMMG3D_EXPORT int MMG3D_saveVtuMesh(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename);
3077
+
3078
+ ! /**
3079
+ ! * \brief Save a mesh and multiple data fields in VTU format.
3080
+ ! *
3081
+ ! * \param mesh pointer to the mesh structure.
3082
+ ! * \param sol pointer to the solution structure.
3083
+ ! * \param filename name of file.
3084
+ ! * \return 0 if failed, 1 otherwise.
3085
+ ! *
3086
+ ! * Write mesh and a list of data fields in vtu Vtk file format (.vtu extension).
3087
+ ! *
3088
+ ! * \remark Fortran interface:
3089
+ ! */
3090
+ INTERFACE
3091
+ SUBROUTINE MMG3D_SAVEVTUMESH_AND_ALLDATA(mesh,sol,filename,strlen0,retval)
3092
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3093
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3094
+ INTEGER, INTENT(IN) :: strlen0
3095
+ INTEGER, INTENT(OUT) :: retval
3096
+ END SUBROUTINE
3097
+ END INTERFACE
3098
+ ! *
3099
+ ! */
3100
+
3101
+ ! LIBMMG3D_EXPORT int MMG3D_saveVtuMesh_and_allData(MMG5_pMesh mesh,MMG5_pSol *sol,const char *filename);
3102
+
3103
+ ! /**
3104
+ ! * \brief Save data in Tetgen's Triangle format.
3105
+ ! *
3106
+ ! * \param mesh pointer to the mesh structure.
3107
+ ! * \param filename name of the readed file.
3108
+ ! * \return 0 or -1 if fail, 1 otherwise.
3109
+ ! *
3110
+ ! * Save mesh data in Triangle (or equivalent to Tetgen in 3D) file format.
3111
+ ! *
3112
+ ! * \remark Fortran interface:
3113
+ ! */
3114
+ INTERFACE
3115
+ SUBROUTINE MMG3D_SAVETETGENMESH(mesh,filename,strlen0,retval)
3116
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
3117
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3118
+ INTEGER, INTENT(IN) :: strlen0
3119
+ INTEGER, INTENT(OUT) :: retval
3120
+ END SUBROUTINE
3121
+ END INTERFACE
3122
+ ! *
3123
+ ! */
3124
+
3125
+ ! LIBMMG3D_EXPORT int MMG3D_saveTetgenMesh(MMG5_pMesh ,const char *);
3126
+
3127
+ ! /**
3128
+ ! * \brief Save mesh data in a file whose format depends on the filename extension.
3129
+ ! *
3130
+ ! * \param mesh pointer to the mesh structure.
3131
+ ! * \param filename name of file.
3132
+ ! * \return 0 if failed, 1 otherwise.
3133
+ ! *
3134
+ ! * \remark Fortran interface:
3135
+ ! */
3136
+ INTERFACE
3137
+ SUBROUTINE MMG3D_SAVEGENERICMESH(mesh,sol,filename,strlen0,retval)
3138
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3139
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3140
+ INTEGER, INTENT(IN) :: strlen0
3141
+ INTEGER, INTENT(OUT) :: retval
3142
+ END SUBROUTINE
3143
+ END INTERFACE
3144
+ ! *
3145
+ ! */
3146
+
3147
+ ! LIBMMG3D_EXPORT int MMG3D_saveGenericMesh(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename);
3148
+
3149
+ ! /**
3150
+ ! * \brief Load a metric field (or other solution).
3151
+ ! *
3152
+ ! * \param mesh pointer to the mesh structure.
3153
+ ! * \param met pointer to the sol structure.
3154
+ ! * \param filename name of file.
3155
+ ! *
3156
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient
3157
+ ! * memory, file format...), 1 if successful.
3158
+ ! *
3159
+ ! * Load metric field. The solution file must contains only 1 solution: the
3160
+ ! * metric
3161
+ ! *
3162
+ ! * \remark Fortran interface:
3163
+ ! */
3164
+ INTERFACE
3165
+ SUBROUTINE MMG3D_LOADSOL(mesh,met,filename,strlen0,retval)
3166
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3167
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3168
+ INTEGER, INTENT(IN) :: strlen0
3169
+ INTEGER, INTENT(OUT) :: retval
3170
+ END SUBROUTINE
3171
+ END INTERFACE
3172
+ ! *
3173
+ ! */
3174
+
3175
+ ! LIBMMG3D_EXPORT int MMG3D_loadSol(MMG5_pMesh mesh,MMG5_pSol met, const char *filename);
3176
+
3177
+ ! /**
3178
+ ! * \brief Load one or more solutions in a solution file in medit file format.
3179
+ ! *
3180
+ ! * \param mesh pointer to the mesh structure.
3181
+ ! * \param sol pointer to the solutions array
3182
+ ! * \param filename name of file.
3183
+ ! *
3184
+ ! * \return 0 if file is not found, -1 if fail for another reason (insufficient
3185
+ ! * memory, file format...), 1 if successful.
3186
+ ! *
3187
+ ! * \remark Fortran interface:
3188
+ ! */
3189
+ INTERFACE
3190
+ SUBROUTINE MMG3D_LOADALLSOLS(mesh,sol,filename,strlen0,retval)
3191
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3192
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3193
+ INTEGER, INTENT(IN) :: strlen0
3194
+ INTEGER, INTENT(OUT) :: retval
3195
+ END SUBROUTINE
3196
+ END INTERFACE
3197
+ ! *
3198
+ ! */
3199
+
3200
+ ! LIBMMG3D_EXPORT int MMG3D_loadAllSols(MMG5_pMesh mesh,MMG5_pSol *sol, const char* filename);
3201
+
3202
+ ! /**
3203
+ ! * \brief Write isotropic or anisotropic metric.
3204
+ ! *
3205
+ ! * \param mesh pointer to the mesh structure.
3206
+ ! * \param met pointer to the sol structure.
3207
+ ! * \param filename name of file.
3208
+ ! * \return 0 if failed, 1 otherwise.
3209
+ ! *
3210
+ ! * \remark Fortran interface:
3211
+ ! */
3212
+ INTERFACE
3213
+ SUBROUTINE MMG3D_SAVESOL(mesh,met,filename,strlen0,retval)
3214
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3215
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3216
+ INTEGER, INTENT(IN) :: strlen0
3217
+ INTEGER, INTENT(OUT) :: retval
3218
+ END SUBROUTINE
3219
+ END INTERFACE
3220
+ ! *
3221
+ ! */
3222
+
3223
+ ! LIBMMG3D_EXPORT int MMG3D_saveSol(MMG5_pMesh mesh,MMG5_pSol met, const char *filename);
3224
+
3225
+ ! /**
3226
+ ! * \brief Save 1 or more solutions in medit solution file format
3227
+ ! *
3228
+ ! * \param mesh pointer to the mesh structure.
3229
+ ! * \param sol pointer to the solutions array
3230
+ ! * \param filename name of the solution file.
3231
+ ! * \return 0 or -1 if fail, 1 otherwise.
3232
+ ! *
3233
+ ! * \remark Fortran interface:
3234
+ ! */
3235
+ INTERFACE
3236
+ SUBROUTINE MMG3D_SAVEALLSOLS(mesh,sol,filename,strlen0,retval)
3237
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3238
+ CHARACTER(LEN=*), INTENT(IN) :: filename
3239
+ INTEGER, INTENT(IN) :: strlen0
3240
+ INTEGER, INTENT(OUT) :: retval
3241
+ END SUBROUTINE
3242
+ END INTERFACE
3243
+ ! *
3244
+ ! */
3245
+
3246
+ ! LIBMMG3D_EXPORT int MMG3D_saveAllSols(MMG5_pMesh mesh,MMG5_pSol *sol ,const char *filename);
3247
+
3248
+ ! /**
3249
+ ! * \brief Deallocate an array of solution fields
3250
+ ! *
3251
+ ! * \param mesh pointer to the mesh structure.
3252
+ ! * \param sol pointer to an array of solution structure (that stores solution fields).
3253
+ ! * \return 1
3254
+ ! *
3255
+ ! * \remark Fortran interface:
3256
+ ! */
3257
+ INTERFACE
3258
+ SUBROUTINE MMG3D_Free_allSols(mesh,sol,retval)
3259
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh,sol
3260
+ INTEGER, INTENT(OUT) :: retval
3261
+ END SUBROUTINE
3262
+ END INTERFACE
3263
+ ! *
3264
+ ! */
3265
+
3266
+ ! LIBMMG3D_EXPORT int MMG3D_Free_allSols(MMG5_pMesh mesh,MMG5_pSol *sol);
3267
+
3268
+ ! /* deallocations */
3269
+ ! /**
3270
+ ! * \brief Deallocations before return.
3271
+ ! *
3272
+ ! * \param starter dummy argument used to initialize the variadic argument
3273
+ ! * list.
3274
+ ! * \param ... variadic arguments that depend on the library function that you
3275
+ ! * have call.
3276
+ ! *
3277
+ ! * For the MMG3D_mmg3dlib function, you need
3278
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3279
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3280
+ ! * MMG5_ARG_ppMet,&your_metric,MMG5_ARG_end).
3281
+ ! *
3282
+ ! * For the MMG3D_mmg3dls function, you need
3283
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3284
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh, MMG5_ARG_ppLs,
3285
+ ! * &your_level_set,MMG5_ARG_end).
3286
+ ! *
3287
+ ! * For the MMG3D_mmg3dmov function, you must call
3288
+ ! * : MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3289
+ ! * MMG5_ARG_ppMet,&empty_metric,MMG5_ARG_ppDisp, &your_displacement,
3290
+ ! * MMG5_ARG_end).
3291
+ ! *
3292
+ ! * \return 1 if success, 0 if fail
3293
+ ! *
3294
+ ! * \remark we pass the structures by reference in order to have argument
3295
+ ! * compatibility between the library call from a Fortran code and a C code.
3296
+ ! *
3297
+ ! * \remark no Fortran interface to allow variadic args.
3298
+ ! *
3299
+ ! */
3300
+
3301
+ ! LIBMMG3D_EXPORT int MMG3D_Free_all(const int starter,...);
3302
+
3303
+ ! /**
3304
+ ! * \brief Structure deallocations before return.
3305
+ ! *
3306
+ ! * \param starter dummy argument used to initialize the variadic argument
3307
+ ! * list.
3308
+ ! * \param ... variadic arguments that depend on the library function that you
3309
+ ! * have call.
3310
+ ! *
3311
+ ! * For the MMG3D_mmg3dlib function, you need
3312
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3313
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3314
+ ! * MMG5_ARG_ppMet,&your_metric,MMG5_ARG_end).
3315
+ ! *
3316
+ ! * For the MMG3D_mmg3dls function, you need
3317
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3318
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh, MMG5_ARG_ppLs,
3319
+ ! * &your_level_set,MMG5_ARG_end).
3320
+ ! *
3321
+ ! * For the \ref MMG3D_mmg3dmov function, you must call
3322
+ ! * : MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3323
+ ! * MMG5_ARG_ppMet,&empty_metric,MMG5_ARG_ppDisp, &your_displacement,
3324
+ ! * MMG5_ARG_end).
3325
+ ! *
3326
+ ! * \return 0 if fail, 1 if success
3327
+ ! *
3328
+ ! * \remark we pass the structures by reference in order to have argument
3329
+ ! * compatibility between the library call from a Fortran code and a C code.
3330
+ ! *
3331
+ ! * \remark No fortran interface to allow variadic arguments.
3332
+ ! *
3333
+ ! * \remark no Fortran interface to allow variadic args.
3334
+ ! *
3335
+ ! */
3336
+
3337
+ ! LIBMMG3D_EXPORT int MMG3D_Free_structures(const int starter,...);
3338
+
3339
+ ! /**
3340
+ ! * \brief Structure deallocations before return.
3341
+ ! *
3342
+ ! * \param starter dummy argument used to initialize the variadic argument
3343
+ ! * list.
3344
+ ! * \param ... variadic arguments that depend on the library function that you
3345
+ ! * have call.
3346
+ ! *
3347
+ ! * For the MMG3D_mmg3dlib function, you need
3348
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3349
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3350
+ ! * MMG5_ARG_ppMet,&your_metric,MMG5_ARG_end).
3351
+ ! *
3352
+ ! * For the MMG3D_mmg3dls function, you need
3353
+ ! * to call the \ref MMG3D_Init_mesh function with the following arguments :
3354
+ ! * MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh, MMG5_ARG_ppLs,
3355
+ ! * &your_level_set,MMG5_ARG_end).
3356
+ ! *
3357
+ ! * For the \ref MMG3D_mmg3dmov function, you must call
3358
+ ! * : MMG3D_Init_mesh(MMG5_ARG_start,MMG5_ARG_ppMesh, &your_mesh,
3359
+ ! * MMG5_ARG_ppMet,&empty_metric,MMG5_ARG_ppDisp, &your_displacement,
3360
+ ! * MMG5_ARG_end).
3361
+ ! *
3362
+ ! * \return 0 if fail, 1 if success
3363
+ ! *
3364
+ ! * \remark we pass the structures by reference in order to have argument
3365
+ ! * compatibility between the library call from a Fortran code and a C code.
3366
+ ! *
3367
+ ! * \remark No fortran interface to allow variadic arguments.
3368
+ ! *
3369
+ ! */
3370
+
3371
+ ! LIBMMG3D_EXPORT int MMG3D_Free_names(const int starter,...);
3372
+
3373
+ ! /* library */
3374
+ ! /**
3375
+ ! * \brief Main "program" for the mesh adaptation library.
3376
+ ! *
3377
+ ! * \param mesh pointer to the mesh structure.
3378
+ ! * \param met pointer to the sol (metric) structure.
3379
+ ! * \return \ref MMG5_SUCCESS if success, \ref MMG5_LOWFAILURE if fail but a
3380
+ ! * conform mesh is saved or \ref MMG5_STRONGFAILURE if fail and we can't save
3381
+ ! * the mesh.
3382
+ ! *
3383
+ ! * \remark Fortran interface:
3384
+ ! */
3385
+ INTERFACE
3386
+ SUBROUTINE MMG3D_MMG3DLIB(mesh,met,retval)
3387
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3388
+ INTEGER, INTENT(OUT) :: retval
3389
+ END SUBROUTINE
3390
+ END INTERFACE
3391
+ ! *
3392
+ ! */
3393
+
3394
+ ! LIBMMG3D_EXPORT int MMG3D_mmg3dlib(MMG5_pMesh mesh, MMG5_pSol met );
3395
+
3396
+ ! /**
3397
+ ! * \brief Main "program" for the level-set discretization library.
3398
+ ! *
3399
+ ! * \param mesh pointer to the mesh structure.
3400
+ ! * \param sol pointer to the sol (level-set) structure.
3401
+ ! * \param met pointer to a sol structure (metric), optional.
3402
+ ! * \return \ref MMG5_SUCCESS if success, \ref MMG5_LOWFAILURE if fail but a
3403
+ ! * conform mesh is saved or \ref MMG5_STRONGFAILURE if fail and we can't save
3404
+ ! * the mesh.
3405
+ ! *
3406
+ ! * Main program for the level-set discretization library. If a metric \a met is
3407
+ ! * provided, use it to adapt the mesh.
3408
+ ! *
3409
+ ! * \remark Fortran interface:
3410
+ ! */
3411
+ INTERFACE
3412
+ SUBROUTINE MMG3D_MMG3DLS(mesh,sol,met,retval)
3413
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
3414
+ MMG5_DATA_PTR_T :: met
3415
+ INTEGER, INTENT(OUT) :: retval
3416
+ END SUBROUTINE
3417
+ END INTERFACE
3418
+ ! *
3419
+ ! */
3420
+
3421
+ ! LIBMMG3D_EXPORT int MMG3D_mmg3dls(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met );
3422
+
3423
+ ! /**
3424
+ ! * \brief Main program for the rigid-body movement library.
3425
+ ! *
3426
+ ! * \param mesh pointer to the mesh structure.
3427
+ ! * \param met pointer to the sol (output metric) structure.
3428
+ ! * \param disp pointer to a sol (displacement for the lagrangian motion
3429
+ ! * mode) structure.
3430
+ ! * \return \ref MMG5_SUCCESS if success, \ref MMG5_LOWFAILURE if fail but a
3431
+ ! * conform mesh is saved or \ref MMG5_STRONGFAILURE if fail and we can't save
3432
+ ! * the mesh.
3433
+ ! *
3434
+ ! * \remark Fortran interface:
3435
+ ! */
3436
+ INTERFACE
3437
+ SUBROUTINE MMG3D_MMG3DMOV(mesh,met,disp,retval)
3438
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met,disp
3439
+ INTEGER, INTENT(OUT) :: retval
3440
+ END SUBROUTINE
3441
+ END INTERFACE
3442
+ ! *
3443
+ ! */
3444
+
3445
+ ! LIBMMG3D_EXPORT int MMG3D_mmg3dmov(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol disp );
3446
+
3447
+ ! /** Tools for the library */
3448
+ ! /**
3449
+ ! * \brief Print the default parameters values.
3450
+ ! *
3451
+ ! * \param mesh pointer to the mesh structure.
3452
+ ! * \return 0 if fail, 1 if success.
3453
+ ! *
3454
+ ! * \remark Fortran interface:
3455
+ ! */
3456
+ INTERFACE
3457
+ SUBROUTINE MMG3D_DEFAULTVALUES(mesh,retval)
3458
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
3459
+ INTEGER, INTENT(OUT) :: retval
3460
+ END SUBROUTINE
3461
+ END INTERFACE
3462
+ ! *
3463
+ ! */
3464
+
3465
+ ! LIBMMG3D_EXPORT int MMG3D_defaultValues(MMG5_pMesh mesh);
3466
+
3467
+ ! /**
3468
+ ! * \brief Store command-line arguments.
3469
+ ! *
3470
+ ! * \param argc number of command line arguments.
3471
+ ! * \param argv command line arguments.
3472
+ ! * \param mesh pointer to the mesh structure.
3473
+ ! * \param met pointer to a metric
3474
+ ! * \param sol pointer to a level-set or displacement
3475
+ ! * \return 1 if we want to run Mmg after, 0 if not or if fail.
3476
+ ! *
3477
+ ! * \remark no matching fortran function.
3478
+ ! *
3479
+ ! */
3480
+
3481
+ ! LIBMMG3D_EXPORT int MMG3D_parsar(int argc,char *argv[],MMG5_pMesh mesh,MMG5_pSol met,MMG5_pSol sol);
3482
+
3483
+ ! /**
3484
+ ! * \brief Read a file containing Local parameters (.mmg3d extension)
3485
+ ! *
3486
+ ! * \param mesh pointer to the mesh structure.
3487
+ ! * \param met pointer to the sol structure.
3488
+ ! * \return 1.
3489
+ ! *
3490
+ ! * Read local parameters file. This file must have the same name as
3491
+ ! * the mesh with the \a .mmg3d extension or must be named \a
3492
+ ! * DEFAULT.mmg3d.
3493
+ ! *
3494
+ ! * \remark Fortran interface:
3495
+ ! */
3496
+ INTERFACE
3497
+ SUBROUTINE MMG3D_PARSOP(mesh,met,retval)
3498
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3499
+ INTEGER, INTENT(OUT) :: retval
3500
+ END SUBROUTINE
3501
+ END INTERFACE
3502
+ ! *
3503
+ ! */
3504
+
3505
+ ! LIBMMG3D_EXPORT int MMG3D_parsop(MMG5_pMesh mesh,MMG5_pSol met);
3506
+
3507
+ ! /**
3508
+ ! * \brief Print help for mmg3d options.
3509
+ ! *
3510
+ ! * \param prog pointer to the program name.
3511
+ ! * \param return 1 if success, 0 if fail.
3512
+ ! *
3513
+ ! * \remark Fortran interface:
3514
+ ! */
3515
+ INTERFACE
3516
+ SUBROUTINE MMG3D_USAGE(prog,strlen0,retval)
3517
+ CHARACTER(LEN=*), INTENT(IN) :: prog
3518
+ INTEGER, INTENT(IN) :: strlen0
3519
+ INTEGER, INTENT(OUT) :: retval
3520
+ END SUBROUTINE
3521
+ END INTERFACE
3522
+ ! *
3523
+ ! */
3524
+
3525
+ ! LIBMMG3D_EXPORT int MMG3D_usage(char *prog);
3526
+
3527
+ ! /**
3528
+ ! * \brief Store the info structure in the mesh structure.
3529
+ ! *
3530
+ ! * \param mesh pointer to the mesh structure.
3531
+ ! * \param info pointer to the info structure.
3532
+ ! * \return 1.
3533
+ ! *
3534
+ ! * \remark Fortran interface:
3535
+ ! */
3536
+ INTERFACE
3537
+ SUBROUTINE MMG3D_STOCKOPTIONS(mesh,info,retval)
3538
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,info
3539
+ INTEGER, INTENT(OUT) :: retval
3540
+ END SUBROUTINE
3541
+ END INTERFACE
3542
+ ! *
3543
+ ! */
3544
+
3545
+ ! LIBMMG3D_EXPORT int MMG3D_stockOptions(MMG5_pMesh mesh, MMG5_Info *info);
3546
+
3547
+ ! /**
3548
+ ! * \brief Recover the info structure stored in the mesh structure.
3549
+ ! *
3550
+ ! * \param mesh pointer to the mesh structure.
3551
+ ! * \param info pointer to the info structure.
3552
+ ! *
3553
+ ! * \remark Fortran interface:
3554
+ ! */
3555
+ INTERFACE
3556
+ SUBROUTINE MMG3D_DESTOCKOPTIONS(mesh,info)
3557
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,info
3558
+ END SUBROUTINE
3559
+ END INTERFACE
3560
+ ! *
3561
+ ! */
3562
+
3563
+ ! LIBMMG3D_EXPORT void MMG3D_destockOptions(MMG5_pMesh mesh, MMG5_Info *info);
3564
+
3565
+ ! /** Checks */
3566
+ ! /**
3567
+ ! * \brief Search invalid elements (in term of quality or edge length) in a mesh.
3568
+ ! *
3569
+ ! * \param mesh pointer to the mesh structure.
3570
+ ! * \param met pointer to the sol structure (metric).
3571
+ ! * \param sol pointer to the sol structure (ls or displacement).
3572
+ ! * \param critmin minimum quality for elements.
3573
+ ! * \param lmin minimum edge length.
3574
+ ! * \param lmax maximum ede length.
3575
+ ! * \param eltab array of invalid elements.
3576
+ ! * \param metRidTyp Type of storage of ridges metrics: 0 for classic storage
3577
+ ! * (before the MMG5_defsiz call), 1 for special storage (after this call).
3578
+ ! *
3579
+ ! * \remark Fortran interface:
3580
+ ! */
3581
+ INTERFACE
3582
+ SUBROUTINE MMG3D_MMG3DCHECK(mesh,met,sol,critmin,lmin,lmax,eltab,&
3583
+ metridtyp,retval)
3584
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met,sol
3585
+ REAL(KIND=8), INTENT(IN) :: critmin,lmin,lmax
3586
+ INTEGER(MMG5F_INT),DIMENSION(*), INTENT(OUT) :: eltab
3587
+ INTEGER, INTENT(IN) :: metridtyp
3588
+ INTEGER, INTENT(OUT) :: retval
3589
+ END SUBROUTINE
3590
+ END INTERFACE
3591
+ ! *
3592
+ ! */
3593
+
3594
+ ! LIBMMG3D_EXPORT int MMG3D_mmg3dcheck(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pSol sol,double critmin,
3595
+ ! double lmin, double lmax, MMG5_int *eltab,int8_t metRidTyp);
3596
+
3597
+ ! /**
3598
+ ! * \brief List bad elements.
3599
+ ! *
3600
+ ! * \param mesh pointer to the mesh structure.
3601
+ ! * \param met pointer to the sol structure.
3602
+ ! * \param critmin minimum quality for elements.
3603
+ ! * \param eltab pointer to the array of invalid elements.
3604
+ ! * \param metRidTyp Type of storage of ridges metrics: 0 for classic storage
3605
+ ! * (before the MMG5_defsiz call), 1 for special storage (after this call).
3606
+ ! *
3607
+ ! * Store elements which have worse quality than \a critmin in \a eltab,
3608
+ ! * \a eltab is allocated and could contain \a mesh->ne elements.
3609
+ ! *
3610
+ ! * \remark Fortran interface:
3611
+ ! */
3612
+ INTERFACE
3613
+ SUBROUTINE MMG3D_SEARCHQUA(mesh,met,critmin,eltab,metridtyp)
3614
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3615
+ REAL(KIND=8), INTENT(IN) :: critmin
3616
+ INTEGER(MMG5F_INT),DIMENSION(*), INTENT(OUT) :: eltab
3617
+ INTEGER, INTENT(IN) :: metridtyp
3618
+ END SUBROUTINE
3619
+ END INTERFACE
3620
+ ! *
3621
+ ! */
3622
+
3623
+ ! LIBMMG3D_EXPORT void MMG3D_searchqua(MMG5_pMesh mesh, MMG5_pSol met, double critmin,
3624
+ ! MMG5_int *eltab,int8_t metRidTyp);
3625
+
3626
+ ! /**
3627
+ ! * \brief List edges that are too short or too long.
3628
+ ! *
3629
+ ! * \param mesh pointer to the mesh structure.
3630
+ ! * \param met pointer to the sol structure.
3631
+ ! * \param lmin minimum edge length.
3632
+ ! * \param lmax maximum ede length.
3633
+ ! * \param eltab array of invalid elements.
3634
+ ! * \param metRidTyp Type of storage of ridges metrics: 0 for classic storage
3635
+ ! * (before the MMG5_defsiz call), 1 for special storage (after this call).
3636
+ ! *
3637
+ ! * \return 1 if success, 0 otherwise.
3638
+ ! *
3639
+ ! * Store in \a eltab elements which have edge lengths shorter than \a lmin
3640
+ ! * or longer than \a lmax, \a eltab is allocated and could contain
3641
+ ! * \a mesh->ne elements.
3642
+ ! *
3643
+ ! * \remark Fortran interface:
3644
+ ! */
3645
+ INTERFACE
3646
+ SUBROUTINE MMG3D_SEARCHLEN(mesh,met,lmin,lmax,eltab,metridtyp,retval)
3647
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3648
+ REAL(KIND=8), INTENT(IN) :: lmin,lmax
3649
+ INTEGER(MMG5F_INT),DIMENSION(*), INTENT(OUT) :: eltab
3650
+ INTEGER, INTENT(IN) :: metridtyp
3651
+ INTEGER, INTENT(OUT) :: retval
3652
+ END SUBROUTINE
3653
+ END INTERFACE
3654
+ ! *
3655
+ ! *
3656
+ ! */
3657
+
3658
+ ! LIBMMG3D_EXPORT int MMG3D_searchlen(MMG5_pMesh mesh, MMG5_pSol met, double lmin,
3659
+ ! double lmax,MMG5_int *eltab,int8_t metRidTyp);
3660
+
3661
+ ! /** Utils */
3662
+ ! /**
3663
+ ! * \brief Return adjacent elements of a tetrahedron.
3664
+ ! *
3665
+ ! * \param mesh pointer to the mesh structure.
3666
+ ! * \param kel tetrahedron index.
3667
+ ! * \param listet pointer to the array of the 4 tetra adjacent to \a kel.
3668
+ ! * (the index is 0 if there is no adjacent)
3669
+ ! * \return 1.
3670
+ ! *
3671
+ ! * Find the indices of the 4 adjacent elements of tetrahedron \a
3672
+ ! * kel. \f$listet[i] = 0\f$ if the \f$i^{th}\f$ face has no adjacent element
3673
+ ! * (so we are on a boundary face).
3674
+ ! *
3675
+ ! * \remark Fortran interface:
3676
+ ! */
3677
+ INTERFACE
3678
+ SUBROUTINE MMG3D_GET_ADJATET(mesh,kel,listet,retval)
3679
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
3680
+ INTEGER(MMG5F_INT), INTENT(IN) :: kel
3681
+ INTEGER(MMG5F_INT), DIMENSION(4), INTENT(OUT) :: listet
3682
+ INTEGER, INTENT(OUT) :: retval
3683
+ END SUBROUTINE
3684
+ END INTERFACE
3685
+ ! *
3686
+ ! */
3687
+
3688
+ ! LIBMMG3D_EXPORT int MMG3D_Get_adjaTet(MMG5_pMesh mesh,MMG5_int kel, MMG5_int listet[4]);
3689
+
3690
+ ! /**
3691
+ ! * \brief Compute the length of an edge according to the size prescription.
3692
+ ! *
3693
+ ! * \param ca pointer to the coordinates of the first edge's extremity.
3694
+ ! * \param cb pointer to the coordinates of the second edge's extremity.
3695
+ ! * \param ma pointer to the metric associated to the first edge's
3696
+ ! * extremity.
3697
+ ! * \param mb pointer to the metric associated to the second edge's
3698
+ ! * extremity.
3699
+ ! * \return edge length.
3700
+ ! *
3701
+ ! * Compute the length of edge \f$[ca,cb]\f$ (with \a ca and \a cb
3702
+ ! * coordinates of edge endpoints) according to the size
3703
+ ! * prescription.
3704
+ ! *
3705
+ ! * \remark Fortran interface:
3706
+ ! */
3707
+ INTERFACE
3708
+ SUBROUTINE MMG3D_LENEDGCOOR(ca,cb,sa,sb,retval)
3709
+ REAL(KIND=8), INTENT(IN) :: ca,cb,sa,sb
3710
+ REAL(KIND=8), INTENT(OUT) :: retval
3711
+ END SUBROUTINE
3712
+ END INTERFACE
3713
+ ! *
3714
+ ! */
3715
+
3716
+ ! LIBMMG3D_EXPORT extern double (*MMG3D_lenedgCoor)(double *ca,double *cb,double *sa,double *sb);
3717
+
3718
+ ! /**
3719
+ ! * \brief Create array of adjacency.
3720
+ ! *
3721
+ ! * \param mesh pointer to the mesh structure.
3722
+ ! * \param pack we pack the mesh at function begining if \f$pack=1\f$.
3723
+ ! * \return 0 if failed, 1 otherwise.
3724
+ ! *
3725
+ ! * Create array of adjacency. Set pack variable to 0 for a compact
3726
+ ! * mesh and to 1 for a mesh that need to be packed.
3727
+ ! *
3728
+ ! * \remark Fortran interface:
3729
+ ! */
3730
+ INTERFACE
3731
+ SUBROUTINE MMG3D_HASHTETRA(mesh,pack,retval)
3732
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh
3733
+ INTEGER, INTENT(IN) :: pack
3734
+ INTEGER, INTENT(OUT) :: retval
3735
+ END SUBROUTINE
3736
+ END INTERFACE
3737
+ ! *
3738
+ ! */
3739
+
3740
+ ! LIBMMG3D_EXPORT int MMG3D_hashTetra(MMG5_pMesh mesh, int pack);
3741
+
3742
+ ! /**
3743
+ ! * \brief Compute isotropic size map according to the mean of the length of the
3744
+ ! * edges passing through a vertex.
3745
+ ! *
3746
+ ! * \param mesh pointer to the mesh structure
3747
+ ! * \param met pointer to the sol structure
3748
+ ! * \return 1 if success
3749
+ ! *
3750
+ ! * \remark Fortran interface:
3751
+ ! */
3752
+ INTERFACE
3753
+ SUBROUTINE MMG3D_DOSOL(mesh,met,retval)
3754
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3755
+ INTEGER, INTENT(OUT) :: retval
3756
+ END SUBROUTINE
3757
+ END INTERFACE
3758
+ ! *
3759
+ ! */
3760
+
3761
+ ! LIBMMG3D_EXPORT extern int (*MMG3D_doSol)(MMG5_pMesh mesh,MMG5_pSol met);
3762
+
3763
+ ! /**
3764
+ ! * \brief Compute a constant size map according to the hsiz, hmin and hmax parameters.
3765
+ ! *
3766
+ ! * \param mesh pointer to the mesh structure
3767
+ ! * \param met pointer to the sol structure
3768
+ ! * \return 1 if success
3769
+ ! *
3770
+ ! * This function computes a constant size map according to mesh->info.hsiz,
3771
+ ! * mesh->info.hmin and mesh->info.hmax. It updates these 3 values if not
3772
+ ! * compatible.
3773
+ ! *
3774
+ ! * \remark Fortran interface:
3775
+ ! */
3776
+ INTERFACE
3777
+ SUBROUTINE MMG3D_SET_CONSTANTSIZE(mesh,met,retval)
3778
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3779
+ INTEGER, INTENT(OUT) :: retval
3780
+ END SUBROUTINE
3781
+ END INTERFACE
3782
+ ! *
3783
+ ! */
3784
+
3785
+ ! LIBMMG3D_EXPORT int MMG3D_Set_constantSize(MMG5_pMesh mesh,MMG5_pSol met);
3786
+
3787
+ ! /**
3788
+ ! * \brief Swap the m22 and m23 values of the metric.
3789
+ ! *
3790
+ ! * \param mesh pointer to the mesh structure
3791
+ ! * \param met pointer to the sol structure
3792
+ ! * \return 1 if success
3793
+ ! *
3794
+ ! * Switch the m22 and m23 value of the metric to allow to pass from the API
3795
+ ! * storage to the medit storage.
3796
+ ! *
3797
+ ! * \remark Fortran interface:
3798
+ ! */
3799
+ INTERFACE
3800
+ SUBROUTINE MMG3D_SWITCH_METRICSTORAGE(mesh,met,retval)
3801
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3802
+ INTEGER, INTENT(OUT) :: retval
3803
+ END SUBROUTINE
3804
+ END INTERFACE
3805
+ ! *
3806
+ ! */
3807
+
3808
+ ! LIBMMG3D_EXPORT int MMG3D_switch_metricStorage(MMG5_pMesh mesh, MMG5_pSol met);
3809
+
3810
+
3811
+ ! /** To associate function pointers without calling MMG3D_mmg3dlib */
3812
+ ! /**
3813
+ ! * \brief Set function pointers for caltet, lenedg, lenedgCoor defsiz, gradsiz...
3814
+ ! * depending if the metric that was read is anisotropic or isotropic
3815
+ ! *
3816
+ ! * \param mesh pointer to the mesh structure (unused).
3817
+ ! * \param met pointer to the sol structure (unused).
3818
+ ! *
3819
+ ! * \remark Fortran interface:
3820
+ ! */
3821
+ INTERFACE
3822
+ SUBROUTINE MMG3D_SETFUNC(mesh,met)
3823
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,met
3824
+ END SUBROUTINE
3825
+ END INTERFACE
3826
+ ! *
3827
+ ! */
3828
+
3829
+ ! LIBMMG3D_EXPORT void MMG3D_setfunc(MMG5_pMesh mesh,MMG5_pSol met);
3830
+
3831
+ ! /**
3832
+ ! * \brief Get the number of non-boundary triangles.
3833
+ ! *
3834
+ ! * \param mesh pointer to the mesh structure.
3835
+ ! * \param nb_tria pointer to the number of non-boundary triangles.
3836
+ ! * \return 0 if failed, 1 otherwise.
3837
+ ! *
3838
+ ! * Get the number of non-boundary triangles (for DG methods for example).
3839
+ ! * A triangle is
3840
+ ! * boundary if it is located at the interface of 2 domains with different
3841
+ ! * references or if it belongs to one tetra only.
3842
+ ! * Append these triangles to the list of triangles.
3843
+ ! *
3844
+ ! * \warning reallocates the triangle array and appends the internal triangles.
3845
+ ! * This may modify the behaviour of other functions.
3846
+ ! *
3847
+ ! * \remark Fortran interface:
3848
+ ! */
3849
+ INTERFACE
3850
+ SUBROUTINE MMG3D_GET_NUMBEROFNONBDYTRIANGLESS(mesh,nb_tria,retval)
3851
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
3852
+ INTEGER(MMG5F_INT), INTENT(OUT) :: nb_tria
3853
+ INTEGER, INTENT(OUT) :: retval
3854
+ END SUBROUTINE
3855
+ END INTERFACE
3856
+ ! *
3857
+ ! */
3858
+
3859
+ ! LIBMMG3D_EXPORT int MMG3D_Get_numberOfNonBdyTriangles(MMG5_pMesh mesh, MMG5_int* nb_tria);
3860
+
3861
+ ! /**
3862
+ ! * \brief Get vertices and reference of a non-boundary triangle.
3863
+ ! *
3864
+ ! * \param mesh pointer to the mesh structure.
3865
+ ! * \param v0 pointer to the firts vertex of the triangle
3866
+ ! * \param v1 pointer to the second vertex of the triangle.
3867
+ ! * \param v2 pointer to the third vertex of the triangle.
3868
+ ! * \param ref pointer to the triangle reference.
3869
+ ! * \param idx index of the non-boundary triangle to get (between 1 and nb_tria)
3870
+ ! * \return 0 if failed, 1 otherwise.
3871
+ ! *
3872
+ ! * Get vertices and reference \a ref of the idx^th non-boundary
3873
+ ! * triangle (for DG methods for example). A tria is boundary if it is located at
3874
+ ! * the interface of 2 domains with different references or if it belongs to one
3875
+ ! * tetra only.
3876
+ ! *
3877
+ ! * \remark Fortran interface:
3878
+ ! */
3879
+ INTERFACE
3880
+ SUBROUTINE MMG3D_GET_NONBDYTRIANGLE(mesh,v0,v1,v2,ref,idx,retval)
3881
+ MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
3882
+ INTEGER(MMG5F_INT), INTENT(OUT):: v0,v1,v2
3883
+ INTEGER(MMG5F_INT) :: ref
3884
+ INTEGER(MMG5F_INT), INTENT(IN) :: idx
3885
+ INTEGER, INTENT(OUT) :: retval
3886
+ END SUBROUTINE
3887
+ END INTERFACE
3888
+ ! *
3889
+ ! */
3890
+
3891
+ ! LIBMMG3D_EXPORT int MMG3D_Get_nonBdyTriangle(MMG5_pMesh mesh, MMG5_int* v0, MMG5_int* v1, MMG5_int* v2, MMG5_int* ref, MMG5_int idx);
3892
+
3893
+ ! /**
3894
+ ! * \brief Get a tetrahedron given one of its triangles and the index by which it
3895
+ ! * refers to this triangle (DEPRECATED).
3896
+ ! *
3897
+ ! * \param mesh pointer to the mesh structure.
3898
+ ! * \param ktri index of the boundary triangle.
3899
+ ! * \param ktet pointer to an integer that will contains the tetra index.
3900
+ ! * \param iface pointer to the triangle in \a ktet.
3901
+ ! *
3902
+ ! * \return 0 if fail, 1 otherwise
3903
+ ! *
3904
+ ! * Fill \a ktet by the index of a tetrahedron to which belongs a boundary triangle
3905
+ ! * and \a iface by the index of the triangle in the tetra.
3906
+ ! *
3907
+ ! * \warning will be deprecated in release 5.5
3908
+ ! *
3909
+ ! * \remark Fortran interface:
3910
+ ! */
3911
+ INTERFACE
3912
+ SUBROUTINE MMG3D_GET_TETFROMTRIA(mesh,ktri,ktet,iface,retval)
3913
+ MMG5_DATA_PTR_T, INTENT(IN) :: mesh
3914
+ INTEGER(MMG5F_INT), INTENT(IN) :: ktri
3915
+ INTEGER(MMG5F_INT), INTENT(OUT) :: ktet
3916
+ INTEGER, INTENT(OUT) :: iface
3917
+ INTEGER, INTENT(OUT) :: retval
3918
+ END SUBROUTINE
3919
+ END INTERFACE
3920
+ ! *
3921
+ ! */
3922
+
3923
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tetFromTria(MMG5_pMesh mesh, MMG5_int ktri, MMG5_int *ktet, int *iface);
3924
+
3925
+ ! /**
3926
+ ! * \brief Get two tetrahedra given a triangle and face indices.
3927
+ ! *
3928
+ ! * \param mesh pointer to the mesh structure.
3929
+ ! * \param ktri index of the boundary triangle.
3930
+ ! * \param ktet array of size 2 that will contain the indices of the tetra
3931
+ ! * (filled by the function).
3932
+ ! * \param iface pointer to an array of size 2 that will contains the indices
3933
+ ! * of the faces of the tetras \a ktet[i] that corresponds to the boundary tria
3934
+ ! * \a ktri.
3935
+ ! *
3936
+ ! * \return 0 if fail, 1 otherwise
3937
+ ! *
3938
+ ! * Fill \a ktet by the indices of the tetrahedra that have a boundary triangle
3939
+ ! * and \a iface by the indices of the faces of the tetras that correspond to the
3940
+ ! * triangle. Fill ktet[1] and iface[1] by 0 if the triangle belongs to 1 tetrahedron only.
3941
+ ! *
3942
+ ! * \remark Fortran interface:
3943
+ ! */
3944
+ INTERFACE
3945
+ SUBROUTINE MMG3D_GET_TETSFROMTRIA(mesh,ktri,ktet,iface,retval)
3946
+ MMG5_DATA_PTR_T, INTENT(IN) :: mesh
3947
+ INTEGER(MMG5F_INT), INTENT(IN) :: ktri
3948
+ INTEGER(MMG5F_INT), DIMENSION(2), INTENT(OUT):: ktet
3949
+ INTEGER, DIMENSION(2), INTENT(OUT) :: iface
3950
+ INTEGER, INTENT(OUT) :: retval
3951
+ END SUBROUTINE
3952
+ END INTERFACE
3953
+ ! *
3954
+ ! */
3955
+
3956
+ ! LIBMMG3D_EXPORT int MMG3D_Get_tetsFromTria(MMG5_pMesh mesh, MMG5_int ktri, MMG5_int ktet[2], int iface[2]);
3957
+
3958
+ ! /**
3959
+ ! * \brief Compute the real eigenvalues and eigenvectors of a symmetric matrix
3960
+ ! *
3961
+ ! * \param m upper part of a symmetric matrix diagonalizable in |R
3962
+ ! * \param lambda array of the metric eigenvalues
3963
+ ! * \param vp array of the metric eigenvectors
3964
+ ! *
3965
+ ! * \return the order of the eigenvalues
3966
+ ! *
3967
+ ! * Compute the real eigenvalues and eigenvectors of a symmetric matrix m whose
3968
+ ! * upper part is provided (m11, m12, m13, m22, m23, m33 in this order).
3969
+ ! *
3970
+ ! * lambda[0] is the eigenvalue associated to the eigenvector ( v[0][0], v[0,1], v[0,2] )
3971
+ ! * in C and to the eigenvector v(1,:) in fortran
3972
+ ! *
3973
+ ! * lambda[1] is the eigenvalue associated to the eigenvector ( v[1][0], v[1,1], v[1,2] )
3974
+ ! * in C and to the eigenvector v(2,:) in fortran
3975
+ ! *
3976
+ ! * lambda[2] is the eigenvalue associated to the eigenvector ( v[2][0], v[2,1], v[2,2] )
3977
+ ! * in C and to the eigenvector v(3,:) in fortran
3978
+ ! *
3979
+ ! * \remark Fortran interface:
3980
+ ! */
3981
+ INTERFACE
3982
+ SUBROUTINE MMG3D_COMPUTE_EIGENV(m,lambda,vp,retval)
3983
+ REAL(KIND=8), INTENT(IN) :: m(*)
3984
+ REAL(KIND=8), INTENT(OUT) :: lambda(*),vp(*)
3985
+ INTEGER, INTENT(OUT) :: retval
3986
+ END SUBROUTINE
3987
+ END INTERFACE
3988
+ ! *
3989
+ ! */
3990
+
3991
+ ! LIBMMG3D_EXPORT int MMG3D_Compute_eigenv(double m[6],double lambda[3],double vp[3][3]);
3992
+
3993
+ ! /**
3994
+ ! * \brief Clean data (triangles and edges) linked to isosurface.
3995
+ ! *
3996
+ ! * \param mesh pointer to the mesh structure
3997
+ ! *
3998
+ ! * \return 1 if successful, 0 otherwise.
3999
+ ! *
4000
+ ! * \remark Fortran interface:
4001
+ ! */
4002
+ INTERFACE
4003
+ SUBROUTINE MMG3D_CLEAN_ISOSURF(mesh,retval)
4004
+ MMG5_DATA_PTR_T, INTENT(IN) :: mesh
4005
+ INTEGER, INTENT(OUT) :: retval
4006
+ END SUBROUTINE
4007
+ END INTERFACE
4008
+ ! *
4009
+ ! */
4010
+
4011
+ ! LIBMMG3D_EXPORT int MMG3D_Clean_isoSurf(MMG5_pMesh mesh);
4012
+
4013
+ ! /**
4014
+ ! * \brief Free the solution structure of a given mesh.
4015
+ ! *
4016
+ ! * \param mesh pointer to the mesh structure
4017
+ ! * \param sol pointer to the solution structure
4018
+ ! *
4019
+ ! * \remark Fortran interface:
4020
+ ! */
4021
+ INTERFACE
4022
+ SUBROUTINE MMG3D_FREE_SOLUTIONS(mesh,sol)
4023
+ MMG5_DATA_PTR_T, INTENT(INOUT) :: mesh,sol
4024
+ END SUBROUTINE
4025
+ END INTERFACE
4026
+ ! *
4027
+ ! */
4028
+
4029
+ ! LIBMMG3D_EXPORT void MMG3D_Free_solutions(MMG5_pMesh mesh,MMG5_pSol sol);
4030
+
4031
+
4032
+ ! /**
4033
+ ! * Set common pointer functions between mmgs and mmg3d to the matching mmg3d
4034
+ ! * functions.
4035
+ ! */
4036
+ ! LIBMMG3D_EXPORT void MMG3D_Set_commonFunc(void);
4037
+ ! #ifdef __cplusplus
4038
+ ! }
4039
+ ! #endif
4040
+
4041
+ #endif