Miscellaneous
setsize
The subroutine setsize sets the mesh object attriburtes: xmin, xmax, ymin, ymax, zmin, zmax, epsilona, epsilonv
setsize( )
xmin, xmax, ymin, ymax, zmin, zmax are set from the minimum and maximum xic,yic,zic values of all ‘real’ points (dudded and merged points will be ignored).
epsilona is set to : ((xmax-xmin) * *2+(ymax-ymin) * *2+(zmax-zmin) * *2)
*epsilonr *1000.
epsilonv is set to : abs(xmax-xmin) *abs(ymax-ymin) *abs(zmax-zmin) *epsilonr *1000.
getsize
The subroutine getsize returns the mesh object attributes: xmin, xmax, ymin, ymax, zmin, zmax, epsilona, epsilonv
getsize(xmin,xmax,ymin,ymax,zmin,zmax,epsilona,epsilonv)
set_user_bounds
This routine allows the user to set boundary values. See the boundary command. set_user_bounds(nubndpts,ubndpts,cmo,ipattr, idfield)
nubndpts - number of boundary nodes
ubndpt - integer array of boundary node indices
cmo - a mesh object name
ipattr - pointer to mesh object attribute to contain boundary values
idfield - identifier used to identify the set of boundary nodes.
inside routines
The inside set of subroutines test whether a query point is strictly inside, strictly outside or on the surface of the specified element. The value returned in iflag is 0 if the query point is inside the element, -1 if outside, or is set to the local face number containing the query point. Coordinates of the query point are in xq, yq, zq. Coordinates of the vertices of the element are in x1, y1, z1, x2….. The coordinates of these vertices of the element must be specified in the correct order (see the section on Mesh Object Connectivity). For triangular elements both inside_tri and inside_tri2d must be called; the first call will determine if the query point is in the plane of the triangle; the second, if it is in the interior of the triangle. Similar calls must be made for planar quad meshes.
inside_pyr(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,xq,yq,zq,iflag)
inside_pri(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,xq,yq,zq,iflag)
inside_hex(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8,
xq,yq,zq,iflag)
inside_tet(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,xq,yq,zq,iflag)
inside_quad2d(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,xq,yq,zq,iflag)
inside_tri2d(x1,y1,z1,x2,y2,z2,x3,y3,z3,xq,yq,zq,iflag)
These routines should not be confused with
inside_quad(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,xq,yq,zq,iflag)
inside_tri(x1,y1,z1,x2,y2,z2,x3,y3,z3,xq,yq,zq,iflag)
which return in iflag: 1 if the query point is on the plane of the element, 0 if below the plane and -1 if above.
The generic subroutine inside_element (element_type, xcoords, ycoords, zcoords, xq,yq,zq,iflag) which returns iflag = -1 if the query point (xq,yq,zq) is outside the element, 0 if it is inside, 1 < n < 6 where n is the face of the element on which the query point sits. element_type is an integer, 1 = point, 2 = line, 3= triangle, 4= quad, 5=tet, 6= pyramid, 7= prism, 8=hex). The x,y,z coordinates of the vertices of the element are given in xcoords, ycoords, zcoords. The order of the vertices is important.
volume_element
return the volume of an element.
volume_element (ielmtyp,xicvol,yicvol,zicvol,volelm)
ilemtyp is the element type (input, usually extracted from the ittettyp attribute)
xicvol, yicvol, zicvol are arrays of the coordinates of the vertices of the element (input)
volelm is the volume of the element (output)
user_interpolate
user_interpolate(cmo_sink,cmo_src,cmolength,cname,nlist,list,ierror_return)
Supplying this subroutine and linking it in when building the executable allows the user to supply the interpolation formula for an attribute whose interpolation has been set to user. By default several mesh object attributes have interpolation type user, for example, isn1, itetoff ( there is no obvious way to assign a correct value to new nodes or elements based on the values of old elements and other parts of the LaGriT code take care of assigning correct values). Therefore if a user attribute is created with interpolation type user and the subroutine user_interpolate is supplied, this routine must check the cname argument to make sure it matches the name of the user attribute. (e.g. if the user attribute is called my_attribute then the routine must contain a statement such as:
if(cname.eq.’my_attribute’) then
cmo_sink is the SINK mesh object
cmo_src is the SOURCE mesh object
cmolength is “nnodes” or “nelements”
cname is the name of the attribute
nlist number of items to interpolate
list(nlist) the list of items for which new interpolated values are to be produced
ierror_return 0 = no error
>1 = error