UVMAP can be integrated within other systems relatively easily using C
or C++ depending on how the system stores tria-face connectivity and coordinate
data. Integration requires access to and installation of the UVMAP developer
library package file UVMAP_LIB,*.tar.gz or source
package UVMAP_SRC,*.tar.gz. Installation of package files is described in the
links shown on the CFD Software page and the developer
installation is described specifically in
SimSys Developer_Install
and Setup Instructions (pdf). Please contact
David L. Marcum for assistance. Simple
Makefiles to build the library and
demonstration program are also included for Linux, MacOS, and Windows. Usage of
the SimSys Developer script files, such as simsys_compile, is not required. UVMAP
also allows for integration with external memory allocation routines, malloc,
realloc, and free, and call back functions for registering those routines are
provided.
The
following describes routines to generate a UV coordinate map for a given
tria-face triangulation, find the location of given UV coordinates, and free
the required data structure. The routines using EGADS style data include EG_uvmap_gen, EG_uvmap_find_uv,
and EG_uvmap_def_free. Alternative routines are also
available using AFLR style data, and include uvmap_gen,uvmap_find_uv, and uvmap_def_free.
Generate a UV coordinate map for a given tria-face triangulation (EGADS style data).
int EG_uvmap_gen (int idef, int ntria, int nvert, int set_struct, int verbosity, int *local_idef,
int *tria, double *xyz, double **uv, void **ptr);
| idef | Surface ID label. Not used if set_struct=0. |
| ntria | Number of tria-faces. |
| nvert | Number of nodes/vertices. |
| set_struct | UV mapping data structure flag. If set_struct=1, then create UV mapping data structure. Required to use EG_uvmap_find_uv. If set_struct=0, then do not create UV mapping data structure. |
| verbosity | Message flag. If verbosity=0, then do not output progress information. If verbosity=1, then output progress information to stdout. If verbosity=2, then output progress and additional CPU usage information to stdout. |
| local_idef | Local surface ID label for each tria-face of surface idef (ntria in length). If the surface idef is a virtual/composite surface, then it is composed of one or more local surfaces with differing surface ID labels. If the surface idef is a standard surface, then the local surface ID label need not be set as it is the same as that for surface idef. Not used if set_struct=0. |
| tria | Tria-face connectivity (3*ntria in length). |
| xyz | XYZ coordinates (3*nvert in length). The XYZ coordinates are used only to determine discontinuous locations on the outer and inner (if any) boundary edges. If the XYZ coordinates are NULL on input, then discontinuity on the outer and inner (if any) boundary edges is not considered. |
| ptr | UV mapping data structure. Set ptr to NULL if this is the first call to this routine and use previously set ptr on subsequent calls. Not used if set_struct=0. |
| EGADS_SUCCESS | Normal completion without errors. |
| EGADS_MALLOC | Unable to allocate required memory. |
| EGADS_UVMAP | An error occurred during UV mapping generation. |
| uv | Generated UV coordinates (2*nvert in length). |
| ptr | UV mapping data structure with entry added for surface idef. If the structure ptr is NULL on input, then the structure is allocated and surface idef is added. If the structure ptr is not NULL on input (from a previous call to this routine), then the structure is reallocated and surface idef is added. Not used if set_struct=0. Note that a copy of the local surface ID label, local_idef, connectivity, tria, and UV coordinates, uv, are saved within the UV mapping data structure. Also, note that the tria-face connectivity that is stored within the UV mapping structure may have been reordered for ordering consistency and therefore may differ from that of the input connectivity, tria. |
Find location of given UV coordinates (EGADS style data).
int EG_uvmap_find_uv_w_stuct (int idef, double uv[2], void *ptr,
int *itria, int *local_idef, int ivert[3], double s[3]);
| idef | Surface ID label. |
| uv | UV coordinate location to find (2 in length). |
| ptr | UV mapping data structure. |
| EGADS_SUCCESS | UV coordinate location was found. |
| EGADS_NOTFOUND | UV coordinate location was not found. |
| EGADS_MALLOC | Unable to allocate required memory. |
| EGADS_UVMAP | An error occurred. |
| itria | ria-face index on surface idef of the tria-face that contains the given UV coordinates. |
| local_idef | Local surface ID label of the tria-face that contains the given UV coordinates. If the surface idef is a virtual/composite surface, then it is composed of one or more local surfaces with differing surface ID labels. If the surface idef is a standard surface, then the local surface ID label need not be set. In this case it is the same as that for surface idef. |
| ivert | Node/Vertex of the tria-face that contains the given UV coordinates (3 in length). |
| s | Linear interpolation shape functions for the tria-face that contains the given UV coordinates (3 in length). For example, given data in array data stored at nodes/vertices of the surface mesh, the interpolated value at the location found can be determined from the following expression. data_intp = s[0]*data[ivert[0]-1] + s[1]*data[ivert[1]-1] + s[2]*data[ivert[2]-1]; |
Free UV mapping data structure (EGADS style data).
void EG_uvmap_def_free (void *ptr);
| ptr | UV mapping data structure. |
Generate a UV coordinate map for a given tria-face triangulation (AFLR style data).
INT_uvmap_gen (INT_ idef, INT_ nbface, INT_ nnode, INT_ set_struct, INT_ verbosity, INT_ *idibf, INT_3D **inibf, DOUBLE_3D **x, DOUBLE_2D **u, void **ptr);
| idef | Surface ID label. Not used if set_struct=0. |
| nbface | Number of tria-faces. |
| nnode | Number of nodes/vertices. |
| set_struct | UV mapping data structure flag. If set_struct=1, then create UV mapping data structure. Required to use EG_uvmap_find_uv. If set_struct=0, then do not create UV mapping data structure. |
| verbosity | Message flag. If verbosity=0, then do not output progress information. If verbosity=1, then output progress information to stdout. If verbosity=2, then output progress and additional CPU usage information to stdout. |
| idibf | Local surface ID label for each tria-face of surface idef (nbface+1 in length). If the surface idef is a virtual/composite surface, then it is composed of one or more local surfaces with differing surface ID labels. If the surface idef is a standard surface, then the local surface ID label need not be set as it is the same as that for surface idef. Not used if set_struct=0. |
| inibf | Tria-face connectivity (nbface+1 in length). |
| x | XYZ coordinates (nnode+1 in length). The XYZ coordinates are used only to determine discontinuous locations on the outer and inner (if any) boundary edges. If the XYZ coordinates are NULL on input, then discontinuity on the outer and inner (if any) boundary edges is not considered. |
| ptr | UV mapping data structure. Set ptr to NULL if this is the first call to this routine and use previously set ptr on subsequent calls. Not used if set_struct=0. |
| 0 | UV coordinate location was found. |
| >0 | An error occurred. |
| u | Generated UV coordinates (nnode+1 in length). |
| inibf | Tria-face connectivity (nbface+1 in length). Connectivity may be reordered for ordering consistency. The address may change as input arrays are temporarily reallocated to fill holes if there are inner closed curves. |
| x | XYZ coordinates (nnode+1 in length). The address may change as input arrays are temporarily reallocated to fill holes if there are inner closed curves. |
| ptr | UV mapping data structure with entry added for surface idef. If the structure ptr is NULL on input, then the structure is allocated and surface idef is added. If the structure ptr is not NULL on input (from a previous call to this routine), then the structure is reallocated and surface idef is added. Note that a copy of the local surface ID label, idibf, connectivity, inibf, and UV coordinates, u, are saved within the UV mapping data structure. Also, note that the tria-face connectivity that is stored within the UV mapping structure may have been reordered for ordering consistency and therefore may differ from that of the input connectivity, inibf. Not used if set_struct=0. |
Find location of given UV coordinates (AFLR style data).
INT_ uvmap_find_uv_w_stuct (INT_ idef, double u_[2], void *ptr, INT_ *ibface, INT_ *local_idef, INT_ inode_[3], double s[3]);
| idef | Surface ID label. |
| u_ | UV coordinate location to find (2 in length). |
| ptr | UV mapping data structure. |
| 0 | UV coordinate location was found. |
| -1 | UV coordinate location was not found. |
| >0 | An error occurred. |
| ibface | Tria-face index on surface idef of the tria-face that contains the given UV coordinates. |
| local_idef | Local surface ID label of the tria-face that contains the given UV coordinates. If the surface idef is a virtual/composite surface, then it is composed of one or more local surfaces with differing surface ID labels. If the surface idef is a standard surface, then the local surface ID label need not be set. In this case it is the same as that for surface idef. |
| inode_ | Node/Vertex of the tria-face that contains the given UV coordinates (3 in length). |
| s | Linear interpolation shape functions for the tria-face that contains the given UV coordinates (3 in length). For example, given data in array data stored at nodes/vertices of the surface mesh, the interpolated value at the location found can be determined from the following expression. data_intp = s[0]*data[inode_[0]] + s[1]*data[inode_[1]] + s[2]*data[inode_[2]]; |
Free UV mapping data structure (AFLR style data).
void uvmap_def_free (void *ptr);
| ptr | UV mapping data structure. |