3.2 Mesh Entity Manipulation



int FEM_Mesh_default_read(void);
INTEGER function :: FEM_Mesh_default_read()

Return the default reading mesh. This routine is valid:



int FEM_Mesh_default_write(void);
INTEGER function :: FEM_Mesh_default_write()

Return the default writing mesh. This routine is valid:



int FEM_Mesh_get_length(int mesh,int entity);
INTEGER function :: FEM_Mesh_get_length(mesh,entity)
INTEGER, INTENT(IN) :: mesh,entity

Return the number of entitys that exist in this mesh.

This call can be used with any entity. For example, to get the number of nodes,

      nNodes=FEM_Mesh_get_length(mesh,FEM_NODE)
  
To get the number of ghost nodes,

      nGhostNodes=FEM_Mesh_get_length(mesh,FEM_GHOST+FEM_NODE)
  
To get the number of real elements of type 2,

   nElem=FEM_Mesh_get_length(mesh,FEM_ELEM+2)
  



void FEM_Mesh_data(int mesh,int entity,int attr, void *data, int first, int length, int datatype,int width);
SUBROUTINE FEM_Mesh_data(mesh,entity,attr,data,first,length,datatype,width)
INTEGER, INTENT(IN) :: mesh,entity,attr,first,length,datatype,width
datatype, intent(inout) :: data(width,length)

This is the one routine for getting or setting entity's attributes on the mesh.

For example, to set the element connectivity, which is stored as 3 integer node indices in nodes, you would:

/* C version */
   int *nodes=new int[3*nElems];
   ... fill out nodes ...
   FEM_Mesh_data(mesh,FEM_ELEM+1,FEM_CONN, nodes, 0,nElems, FEM_INDEX_0, 3);
   ... continue to use or delete nodes ...
   
! F90 version
   ALLOCATE(nodes(3,nElems))
   ... fill out nodes ...
   CALL FEM_Mesh_data(mesh,FEM_ELEM+1,FEM_CONN, nodes, 1,nElems, FEM_INDEX_1, 3)
   ... continue to use or delete nodes ...
  

To add a new node property with 2 double-precision numbers from an array mat (containing, for example, material properties), you would first pick an unused user data "tag", for example 13, and:

/* C version */
   double *mat=new double[2*nNodes];
   ...
   FEM_Mesh_data(mesh,FEM_NODE, FEM_DATA+13, mat, 0,nNodes, FEM_DOUBLE, 2);
   
! F90 version
   ALLOCATE(mat(2,nNodes))
   CALL FEM_Mesh_data(mesh,FEM_NODE,FEM_DATA+13, mat, 1,nNodes, FEM_DOUBLE, 2)
  

January 17, 2008
FEM Homepage
Charm Homepage