ANSYS ICEM CFD™ Topology Library Description

Last revised on August 6 2003.

 Contents:

Introduction

The topological information characterizing structured meshes of one or more blocks is written in a file named topo_mulcad_out. This file contains information such as the number of blocks in the model, the block size, the block-to-block connectivity, etc.

The topology library topolib.a contains routines to access the information present in the topology file. To use these routines, application codes must be linked to the topology library located in the directory /$ICEM_ACN/icemcfd/output-interfaces/lib..

This chapter describes the functions of the topology library. Unless otherwise specified, the return code ier is equal to zero when the function is executed successfully. Most functions are available for both the FORTRAN and C programming interface.
 
 

Open, Read and Close
 
 

C ier = tp_open(filename);
FORTRAN call topopen(filename, len, iunit, ier)

 
 filename char filename of topology file
 len int length of string filename
 iunit int FORTRAN unit number
 ier int return code
The functiontp_openopens the topology file for reading. It must be called before any other function of the topology library.
__________________________


C tp_close();
FORTRAN call topclse(iunit)
 iunit int FORTRAN unit number
The functiontp_closecloses the topology file. It should be the last function called from the topology library.
__________________________


C ier = tp_read();
FORTRAN call topreas(iunit, ier)
 iunit int FORTRAN unit number
 ier int return code
The function tp_read reads the topology file and stores the information in memory. This routine must be called once, immediately after opening the topology file.
___________________________


C ier = tp_init(filename);
FORTRAN call topinit(filename, len, ier)
 filename char filename of topology file
 len int length of string filename
 ier int return code
The function tp_initopens, reads and closes a topology file. It can be used instead of the sequence tp_open(), tp_read()and tp_close().
 



 

Number of entities of each topological type

Use the functions listed in the following table to request the number of entities of each topological type.
 

Information sought
C functions
FORTRAN functions
Number of domains, ndom ndom = tp_ndom(); ndom = gtndom()
Number of faces, nfac nfac = tp_nfac(); nfac = gtnfac()
Number of subfaces,nsfac nsfac = tp_nsfac(); nsfac = gtnsfac()
Number of edge entities, nar nar = tp_nar(); nar = gtnar()
Number of vertices, nvert nvert = tp_nvert(); nvert = gtvtx()
Number of free subfaces, nfsf nfsf = tp_nfsf(); nfsf = gtnfsf()

Domain Information
 

C type_deg = tp_domain_type(domain);
FORTRAN type_deg = nytpdeg (domain)
 domain int domain number
 type_deg int type of domain degeneration

This function returns the type of degenerated domain, type_deg.

The types of domain degeneration are:

___________________________

Range of a structured domain, imin(3), imax(3):
 

C ier = tp_domain_range(domain, imin, imax);
FORTRAN call dmrange(domain,imin, imax, ier)
 domain int domain number
 imin(3) int minimum i, j, k indices
 imax(3) int maximum i, j, k indices
 ier int return code
___________________________

Edge entities of a structured domain, edgees:
 

C nedgee = tp_edges_of_domain(domain, edgees);
FORTRAN call edgofdm(domain,nedgee, edgees, ier)
 domain int domain number
 edgee int number of edge entities in domain
 edgees int list of edge entities
 ier int return code
If an error occurs while executing the C function, the returned value for nedgee is -1.
___________________________




Vertices of a structured domain, vertices:
 

C ier = tp_vertex_of_domain(domain, vertices);
FORTRAN call vtofdm(domain, vertices, ier)
 domain int domain number
 vertices int list of vertice numbers
 ier int return code
This function returns the 8 corner vertices of a domain size NI*NJ*NK in the following order:
        (1, 1,  1), (NI, 1,  1), (1, NJ,  1), (NI, NJ,  1),
     (1, 1, NK), (NI, 1, NK), (1, NJ, NK), (NI, NJ, NK)

Face Information

Global face number face_no of a domain face:
 

C face_no = tp_dom(domain, face);
FORTRAN face_no = gtdom(domain, face)
 domain int domain number
 face int face index, 1 <= face <= 6
 face_no int 1<= face_no <=ndom*6
___________________________

Coordinate type for a face of a domain,tcor:
 

C ier = tp_face_side(domain, face, tcor);
FORTRAN call gtfside(domain, face, tcor, ier)
 domain int domain number
 face int face index, 1<=face<=6
 tcor int -1=IMIN, -2=JMIN, -3=KMIN,  +1=IMAX, +2=JMAX, +3KMAX
 ier int return code
_________________________

Coordinate type for a face of a domain,tcor. This function is similar to tp_face_side except that it does not return the error code.
 

C tcor = tp_tcor(face, domain);
FORTRAN tcor = ntcor(face, domain)
 domain int domain number
 face int face index, 1 <= face <= 6
 face_no int -1=IMIN, -2=JMIN, -3=KMIN,  +1=IMAX, +2=JMAX, +3=KMAX
___________________________

Range of a face of a structured domain,imin(3), imax(3):
 

C ier = tp_f_domain_face_range(domain, face_type, imin, imax);
FORTRAN call gtfside(domain, face_type, imin, imax, ier)

 
domain int domain number
face_type int 1<= face_type<=6 for IMIN to IMAX
imin(3) int minimum i, j, k indices
imax(3) int maximum i, j, k indices
ier int return code
___________________________

List of subfaces composing the face of coordinate type face_type, within a domain:
 

C nsub = tp_subface_of_face(domain, face_type, subfaces);
FORTRAN call sfoface(domain, face_type, nsub, subfaces, ier)
domain int domain number
face_type int 1<= face_type<=6 for IMIN to IMAX
nsub int number of subfaces on face
subfaces(*) int array of subfaces
ier int return code
input:  integer domain          domain number
        integer face_type       1<=face_type<=6, for face IMIN to KMAX 
output: integer nsub            number of subfaces on face
        integer subfaces(*)     array of subfaces
        integer ier             return code

Subface Information

Dimension of a subface, dimension(2):
 

C ier = tp_subface_dimension(subface, dimension);
FORTRAN call gtsfacd(subface, dimension, ier)
 subface int subface number
 dimension(2) int  dimension of a subface 
 ier int return code
___________________________

Range of a subface within a structured domain, imin(3), imax(3):
 

C ier = tp_subface_range(domain, subface, imin, imax);
FORTRAN call gtsreg(domain, subface, imin, imax, ier)
domain int domain number
subface int subface number
imin(3) int minimum i, j, k indices
imax(3) int maximum i, j, k indices
ier int return code
___________________________

Region of a subface within a structured domain, first(3), last(3):
 

C ier = tp_subface_points(domain, subface, first, last);
FORTRAN call sregion(domain, subface, first, last, ier)
domain int domain number
subface int subface number
first(3) int i, j, k coordinates of first point
last(3) int  i, j, k coordinates of last point
ier int return code
According to the orientation definition, it is not necessary that ifirst(n)<=ilast(n).
___________________________

Three points of a subface within a structured domain, p1(3), p2(3), p3(3):

The three points are transformed from the local subface coordinates (1,1), (m,1), (1,n), where m*n is the dimension of the subface.
 

C ier = tp_subface_3_points(domain, subface, p1, p2, p3);
FORTRAN call sfspann(domain, subface, p1, p2, p3, ier)

 
domain int domain number
subface int subface number
p1(3) int i, j, k coordinates of first point
p2(3) int i, j, k coordinates of second point
p3(3) int i, j, k coordinates of third point
ier int return code

The three points are transformed from the local subface coordinates (1,1), (m,1), (1,n), where m*n is the dimension of the subface. The first and last points of the subface may be found from these 3 points:

                            first = p1
                last  = p1 + (p2-p1) + (p3-p1)
___________________________

Node dimension vector ndim of a subface within a domain:
 

C ier = tp_gsfdims(domain, subface, ndim[3][3]);
FORTRAN call gsfdims(domain, subface, ndim, ier)

 
domain int domain number
subface int subface number
ndim(3,3) int ndim (dir, 1)  index of 1st node in direction dir:  1<=dir<=3 
ndim (dir, 2)  number of points in direction dir:  1<=dir<=3 
ndim(dir, 3) coordinates type for direction dir
     -1, 1 means direction -i, i 
     -2, 2 means direction -j, j 
     -3, 3 means direction -k, k
ier int return code
In C, the indices must be reversed, so the coordinate types are in ndim[2][dir], the indices of the 1st node in ndim[0][dir] and the number of points in ndim[1][dir]. Note that the third direction is not used, since subfaces are two-dimensional entities.
___________________________




Cell dimension vector cdim of a subface within a domain:
 

C ier = tp_gcldims(domain, subface, cdim[3][3]);
FORTRAN call gcldims(domain, subface, cdim, ier)
domain int domain number
subface int subface number
cdim(3,3) int cdim (dir, 1)  index of 1st cell in direction dir:  1<=dir<=3 
cdim (dir, 2)  number of cells in direction dir:  1<=dir<=3 
cdim(dir, 3) coordinate type for direction dir
     -1, 1 means direction -i, i 
     -2, 2 means direction -j, j 
     -3, 3 means direction -k, k
ier int return code
In C, the indices must be reversed. The coordinate types are in cdim[2][dir], the indices of the 1st cell in cdim[0][dir] and the number of points in cdim[1][dir]. Note that the third direction is not used, since subfaces are two-dimensional entities.
___________________________

List of edge entities composing an edge of a subface:
 

C ier = tp_edge_of_subface(subface, edge, nedgee, edgees);
FORTRAN call edgofsf(subface, edge, nedgee, edgees, ier)
subface int subface number
edge int edge of subface (1<=edge<=4)
nedgee int number of edge entities
edgees int array of edge entities
ier int return code

The sign of the edge entity numbers in the list determine the flow direction of the edge entities within the edges. The convention for edge numbering and directions are shown below.

(... Figure missing... )

_________________________





Coordinate type of a subface within a domain:
 

C ier = tp_subface_side(domain, subface, tcor);
FORTRAN call gtside(domain, subface, tcor, ier)
domain int domain number
subface int subface number
tcor int coordinates type 
-1=IMIN, -2=JMIN, -3=KMIN 
+1=IMAX, +2=JMAX, +3=KMAX
ier int return code

__________________________




Coordinate type name for a subface of a domain:
 

C ier = tp_face_name(domain, subface, coorname);
FORTRAN call gtside(domain, subface, coorname, ier)
domain int domain number
subface int subface number
coorname char*4 coordinate type name: 
IMIN, IMAX, JMIN, JMAX, KMIN, KMAX
ier int return code
___________________________

List of domain(s) sharing a subface:
 

C ier = tp_domains_of_subface(subface, ndom, domains);
FORTRAN call gtdomnr(subface, ndom, domains, ier)
subface int subface number
ndom int number of domains sharing the subface 
(1 means wall, 2 means block interface)
domains(2) int list of domain numbers
ier int return code
___________________________





Boundary condition code of a subface, bc_code:
 

C ier = tp_subface_bc_code(subface, bc_code);
FORTRAN call gtsfcode(subface, bc_code, ier)
subface int domain number
bc_code int boundary condition code
ier int return code



 

Edge Entity Information
 

Name of an edge entity, entname:
 

C ier = tp_entity_name(edgee, entname);
FORTRAN call entname(edgee, entname, ier)
edgee int edge entity number
entname char* edge entity name
ier int return code

__________________________





Number of an edge entity, edgee:
 

C edgee = tp_entity_number(edgee, entname);
FORTRAN call entnumber(entname, edgee)
entname char* edge entity name
edgee int edge entity number
________________________

 
 

Range of an edge entity within a structured domain, imin(3), imax(3):
 

C ier = tp_edge_entity_range(domain, edgee, imin, imax);
FORTRAN call edgrnge(domain, edgee, imin, imax, ier)
domain int domain number
edgee int edge entity number
imin(3) int minimum i, j, k indices
imax(3) int maximum i, j, k indices
ier int return code
__________________________





Region of an edge entity within a structured domain, ifirst(3), ilast(3):
 

C ier = tp_edge_points(domain, edgee, first, last);
FORTRAN call edgpnts(domain, edgee, first, last, ier)
domain int domain number
edgee int edge entity number
first(3) int i, j, k coordinates of first point
last(3) int i, j, k coordinates of last point
ier int return code
According to the orientation definition, it is not necessary that ifirst(n)<=ilast(n).
___________________________





Dimension vector ndim of an edge entity within a domain:
 

C ier = tp_edgdims(domain, subface, edgee, ndim[3][3]);
FORTRAN call edgdims(domain, subface, edgee, ndim, ier)
domain int domain number wherein lies the subface
subface int subface number wherein lies the edge entity
edgee int edge entity number
ndim(3)(3) int ndim (dir, 1): index of first node in direction dir, 1<=dir<=3 
ndim (dir, 2):  number of points in direction dir, 1<= dir<=3 
ndim (dir, 3): coordinate type for direction dir:
            -1,1 means direction -i, i
                         -2, 2 means direction -j, j
                         -3, 3 means direction -k, k
ier int return code

In C, the indices must be reversed, so the coordinate types are in ndim[2][dir], the indices of the 1st node in ndim[0][dir] and the number of points in ndim[1][dir]. Note that only the first direction is meaningful here since edge entities are one-dimensional.

___________________________





Dimension vector ndim of an edge entity within a subface:
 

C ier = tp_edge_in_subface(subface, edgee, ndim[3][2]);
FORTRAN call edginsf(subface, edgee, ndim, ier)
subface int subface number wherein lies the edge entity
edgee int edge entity number
ndim(2)(3) int ndim (dir, 1): index of first node in direction dir, 1<=dir<=2 
ndim (dir, 2):    number of points in direction dir, 1<= dir<=2 
ndim (dir, 3):   coordinate type for direction dir:
             -1,1 means direction -u, u
                          -2, 2 means direction -v, v
ier int return code
In C, the indices must be reversed, so the coordinate types are in ndim[2][dir], the indices of the 1st node in ndim[0][dir] and the number of points in ndim[1][dir].

( figure missing ... )

___________________________





Vertices of an edge entity, vertex:
 

C ier = tp_vertex(edgee, vertex[2]);
FORTRAN call vertex(edgee, vertex, ier)
edgee int edge entity number
vertex(2) int vertices of an edge entity
ier int return code
___________________________





Start or end vertex of an edge entity, vertex:
 

C vertex = tp_get_vertex(index, edgee);
FORTRAN vertex = gtvertx(index, edgee)
index int 1 for start, 2 for end
edgee int edge entity number
vertex int start or end vertex
ier int return code
___________________________




List of subfaces sharing an edge entity, subfaces:
 

C nsub = tp_subface_of_edge(edgee, subfaces);
FORTRAN call sfofed(edgee, nsub, subfaces, ier)
edgee int edge entity number
nsub int number of subfaces
subfaces int array of subfaces sharing edgee
ier int return code
If an error occurs while executing this function, the returned value for nsub is -1.
___________________________




List of domains sharing an edge entity, domains:
 

C ndom = tp_domains_of_edge(edgee, domains);
FORTRAN not available
edgee int edge entity number
domains int array of domains  sharing edgee
If an error occurs while executing this function, the returned value for ndom is -1.
 



 


Vertice Information

Coordinates i,j,k, of a vertex in a domain,ijk(3):
 

C ier = tp_vertex_pnt(domain, vertex, ijk);
FORTRAN call vtxpnt(domain, vertex, ijk, ier)
domain int domain number
vertex int vertex number
ijk(3) int coordinates i, j, k of vertex no. vertex
ier int return code: 
-1:  error code 
-2:  not a vertex of the domain
___________________________





Description of a vertex within and edge entity, ndim(2):
 

C ier = tp_vertex_in_edge(domain, vertex, ndim);
FORTRAN call vtxined(domain, vertex, ndim, ier)
domain int domain number
vertex int vertex number
ndim(2) int ndim(0):  index of first node 
ndim(1):  coordinate type: 
                -1,1 means direction -s, s
ier int return code


Node Information

Global (not merged) node number of a node in a certain domain, nod_posit:
 

C nod_posit = tp_node_position(domain,i,j,k);
FORTRAN nod_posit = ndposit(domain,i,j,k)
domain int domain number
i, j, k int indices of the node
nod_posit int 1<=nod_posit<=nnodes in_model


 
 

Free Subface Information

Number of loops, nloop:
 

C nloop = tp_nloop();
FORTRAN nloop = gtnloop()
___________________________





Number of prescribed curves, ncurve:
 

C ncurve = tp_npc();
FORTRAN ncurve = gtnpc()
___________________________




Number of prescribed points, npoint:
 

C npoint = tp_npp();
FORTRAN npoint = gtnpp()
___________________________




Number of edge entities for the outer loop of a free subface, nedgee:
 

C nedgee = tp_fsf_edge_numbers(free_subface);
FORTRAN nedgee = gtneds(free_subface)
free_subface int  free subface number 
___________________________




Edge entity number for an edge of the outer loop of a free subface, edgee:
 

C edgee = tp_fsf_entl(free_subface, edge_index);
FORTRAN edgee = gtentl(free_subface, edge_index)
free_subface int free subface number
edge_index int rank in list of edges
___________________________

Array of loop numbers for a free subface, loops:
 

C ier = tp_fsf_loop_numbes(free_subface, loops);
FORTRAN call gtfsflo(free_subface, loops, ier)
free_subface int  free subface number 
loops(*) int array of loop numbers
ier int return code
___________________________

Free subfaces data:
 

C ier = tp_fsf_data(free_subface,info_no, data);
FORTRAN call gtfsfda(free_subface, info_no,data, ier)
free_subface int free subface number
info_no int 1<=info_no<=3
data int information requested
ier int return code
The data returned is function of the info_no given as input:
        info_no                 data 
           1                                number of loops in the free subface 
                    2                                number of prescribed curves in the free subface
                    3                                number of prescribed points in the free subface
___________________________

Array of loop status for a free subface, status:
 

C ier = tp_fsf_loop_status(free_subface,status);
FORTRAN call gtfsfls(free_subface, status, ier)

 
free_subface int subface number
status(*) int status of all loops on the free subface
ier int return code
___________________________

Array of prescribed curve numbers for a free subface, curve:
 

C ier= tp_fsf_curve_numbers(free_subface,curve);
FORTRAN call gtfsfpc(free_subface, curve, ier)
free_subface int free subface number
curve(*) int array of prescribed curve numbers
ier int return code
___________________________

Array of prescribed point coordinates for a free subface, coord:
 

C ier= tp_fsf_point_data(free_subface,coord);
FORTRAN call gtfsfpp(free_subface, coord, ier)
free_subface int free subface number
coord(*) int prescribed point's 3D coordinates
ier int return code



Grid Connectivity Information

Number of shared subfaces (block interfaces) in the entire mesh:
 

C nshared = tp_n_shared_sf();
FORTRAN  not available
nshared int number of shared subfaces 
___________________________

List of shared subfaces (block interfaces) in the entire mesh:
 

C ier= tp_shared_sf(subfaces);
FORTRAN call blintsf(nshared, subfaces, ier)
nshared int number of shared subfaces
subfaces(*) int array of shared subfaces
ier int return code
___________________________

Number of subface(s) of a domain shared with other domain(s), nadsub:
 

C nadsub= tp_ndomad(domain,ier);
FORTRAN nadsub = gndomad(domain, ier)
domain int domain number 
ier int return code
___________________________

Number of edge entity(ies) of a domain shared with other domain(s), nedge:
 

C nedgee= tp_nsubad(domain,ier);
FORTRAN nedgee = gnsubad(domain, ier)
domain int domain number 
ier int return code
___________________________

Sum of subface(s) and edge entity(ies) of a domain shared with other domain(s), ndomad:
 
 

C ndomad= tp_ndom_nsub_ad(domain);
FORTRAN ndomad = ndomad(domain, ier)
domain int domain number 
ier int return code
___________________________

Face and subface numbers of block interfaces of a given domain, domface, subface: The arrays are allocated to nadsub, the number of interfaces for this domain. The value of nadsub is found using the function tp_ndomad.
 

C ier = tp_gsdomad(domain, face, subface);
FORTRAN call gsdomad(domain,nadsub,face,subface,ier)
domain int domain number
nadsub int number of shared subfaces
face(nadsub) int array of face index [1,6] in domain
subface(nadsub) int array of subface numbers
ier int return code
___________________________

One-to-one face connectivity of a domain: All arrays are allocated to nadsub, the number of interfaces for this domain. The value of nadsub is found using function tp_ndomad.
 

C ier = tp_domad(domain, dimension, face, adj_domain, adj_face, subface);
FORTRAN call gdomad(domain, nadsub, face, subface, adj_domain, adj_face, ier)

 
domain int  domain number
dummy int unused parameter
dimension int dimension of connecting objects (=3)
face(nadsub) int face of domain wherein lies subface
subface(nadsub) int list of shared subfaces
adj_domain(nadsub) int adjacent domains
adj_face(nadsub) int face of adj_domain wherein lies subface
ier int return code
This routine is similar to tp_gsdomad()with more functionality.
___________________________

Connectivity information, domad_record(5): For each domain the connectivity information is stored in the array domad(5,ndomad), where ndomad is the return value of the function tp_ndom_nsub_ad(domain). The following function returns the connectivity information for one interface of a domain:
 

C ier=tp_domad_record(domain,irec,domad_record);
FORTRAN call domadv(domain, irec, domad_record, ier)
domain int domain number
irec int record index, 1<=irec<=ndomad
domad_record(5) int connectivity information
ier int return code

The meaning of domad_record(5) is different for face connectivity and edge connectivity:
 

Field
Connectivity by
Face Edge
domad_record(1)
face index, [1,6]
subface of domain * -1
domad_record(2)
adjacent domain
adjacent domain number
domad_record(3)
adjacent face index, [1,6]
subface of adjacent domain *-1
domad_record(4)
shared subface number
shared edge entity number
domad_record(5)
not used yet
not used yet
___________________________




One-to-one edge entity connectivity of a domain: All arrays are allocated to nedgee, the number of shared edge entities for this domain. The value of nedgee is found using function tp_nsubad.
 

C ier=tp_domad(domain,dimension,subface,adj_domain,adj_subface,edgee);
FORTRAN call gsubfad(domain, dummy, subface, adj_domain, adj_subface, edgee, ier)
domain int  domain number
dummy int unused parameter
dimension int dimension of connecting objects (=2)
subface(nadsub) int subfaces of domain wherein lies edgee
adj_domain(nadsub) int adjacent domains
adj_subface(nadsub) int subface of adj_domain wherein lies subface
edgee(nedgee) int shared edge entities
ier int return code

Superdomain Information

Global coordinates of a 3D domain within a 3D superdomain:
 

C ier=tp_global_coord(domain,global_coord,dimension);
FORTRAN call gloco(domain, global_coord, ier)
domain int domain number
dimension int  domain dimension (=3)
global_coord(3) int i, j, k coordinates of first domain point 
ier int return code
___________________________

Global coordinates of a 2D domain within a 2D superdomain:
 

C ier=tp_global_coord(domain,global_coord,dimension);
FORTRAN call gloco2d(domain, global_coord, ier)
domain int domain number
dimension int  domain dimension (=2)
global_coord(3) int i, j, k coordinates of first domain point 
ier int return code




Linear Domain Information

Number of edge entities in the linear domain, nedgee:
 

C nedgee=tp_nedge_of_lin_domain(domain);
FORTRAN not available
domain int domain number
If an error occurs while executing this function, the returned value for nedgee is -1.
___________________________

List of edge entities in the linear domain, edgees:
 

C nedgee=tp_nedge_of_lin_domain(domain, edgees);
FORTRAN call edofldm(domain,nedgee, edgees, ier)
domain int domain number
edgee int number of edge entities
edgees(*) int list of edge entities
ier int return code
___________________________

List of edge entities in the linear domain, vertices:
 

C ier=tp_vtx_of_lin_domain(domain, vertices);
FORTRAN call edofldm(domain, vertices, ier)

 
domain int  domain number
vertices(*) int list of vertices 
ier int return code



Quadratic Mesh

Update the topology information (in memory) to be consistent with a quadratic mesh:
 

C (void) tp_quad_elements();
FORTRAN call topquad()

C: (void)tp_quad_elements();

FORTRAN: call topquad()

The topology file is always written for a linear mesh even if the mesh is saved with the option "quadratic". For a linear structured mesh of NI*NJ*NK nodes, the corresponding quadratic mesh has (2*NI -1) * (2*NJ -1) * (2*NK -1) nodes. However, the distinction between linear and quadratic is not included in the topology file. As a result, functions such as tp_domain_rangereturn the size of the linear grid, even if the mesh is quadratic.

This problem is easily corrected by callingtp_quad_elements, immediately after reading the topology file ( tp_read). The function tp_quad_elementsupdates the topology information (the in-memory copy) to reflect the higher order elements. If the function tp_domain_range is called after updating the topology, the correct range of (2*NI-1), (2*NJ-1), (2*NK-1) will be found.
 




Error Handling

When the topology library detects an error, it records the error message and returns an error code in the form of an integer smaller than zero. Only the last detected error message is recorded. To obtain the error message, the C function tp_error_print()may be called. It prints the error message to the standard output (stdout). Similarly, the functiontp_error_exit() prints the error message to the standard output and exit the program.

The error handling in the fortran interface is a bit different than for the C interface. In the Fortran interface the topology library returns and error code integer smaller than zero, and automatically prints the error message to the standard output.
 


Non-Matching Grids

Group number of a topological entity, group_number:
 

C ier=tp_entity_group(entity_type,entity_number,group_number);
FORTRAN call gtentgr(entity_type, entity_number, group_number, ier)

 
entity_type int  domain=1, subface=2, edge ent.=3
entity_number int domain subface or edge ent. number
group_number int group number
ier int return code
___________________________

List of twin edge entities of an edge,edge_twins: The twin edge entities are defined as edge entities having the same entity name and the same geometry, but different edge entity number and possibly different number of  nodes. Twin edges belong to different entity groups.
 

C ier=tp_twin_edges(edgee, ntwin, edge_twins);
FORTRAN call gttwedg(edgee, ntwin, edge_twins, ier)
edgee int  edge entity number
ntwin int number of twin edges of edgee
edge_twins int list of twin edges of edgee
ier int return code
___________________________

List of twin subfaces of a subface, sf_twins: The twin subfaces are defined as subfaces with the same geometrical edges but belonging to different entity groups. Twin subfaces have the same intrinsic orientation.
 

C ier=tp_twin _subfaces(subface,ntwin,sf_twins);
FORTRAN call gtttwsf(subface, ntwin, sf_twins, ier)

 
subface int  subface number
ntwin int number of twin subfaces of subface
sf_twins int list of twin subfaces of subface
ier int return code



 

Periodic Data

Number of periodic pairs of a topological entity type, npair:
 


C npair=tp_n_periodic_pair(entity_type);
FORTRAN call gtnpair(entity_type, npair, ier)

entity_type int  subface=2, edge ent.=3, vertex=4
npair int number of periodic pairs
ier int return code
___________________________

Lists of periodic data of a topological entity type, list1, list2:
 


C ier=tp_periodic_data(entity_type, npair, list1, list2);
FORTRAN call gtperdt(entity_type, npair, list1, list2, ier)

entity_type int  subface=2, edge ent.=3, vertex=4
npair int number of periodic pairs
list1(*) int list of entities
list2(*) int list of periodic twins of list1
ier int return code