00001 
00006 #include "tetmesh.h"
00007 #include "fem.h"
00008 #include <assert.h>
00009  
00010 
00011 void readFEM(int m,TetMesh &t) {
00012   int nNode=FEM_Mesh_get_length(m,FEM_NODE);
00013   int nTet=FEM_Mesh_get_length(m,FEM_ELEM+0);
00014   t.allocate(nTet, nNode);
00015   FEM_Mesh_data(m,FEM_NODE,FEM_COORD,t.getPointArray(),0,nNode,FEM_DOUBLE,3);
00016   FEM_Mesh_data(m,FEM_ELEM+0,FEM_CONN,t.getTetConn(),0,nTet,FEM_INDEX_0,4);
00017 }
00018 
00019 
00020 void readGhostFEM(int m,TetMesh &t) {
00021   int nNode=FEM_Mesh_get_length(m,FEM_NODE);
00022   int ngNode=FEM_Mesh_get_length(m,FEM_NODE+FEM_GHOST);
00023   int nTet=FEM_Mesh_get_length(m,FEM_ELEM+0);
00024   int ngTet=FEM_Mesh_get_length(m,FEM_ELEM+0+FEM_GHOST);
00025   t.allocate(nTet+ngTet, nNode+ngNode);
00026   FEM_Mesh_data(m,FEM_NODE,FEM_COORD,t.getPointArray(),0,nNode,FEM_DOUBLE,3);
00027   FEM_Mesh_data(m,FEM_ELEM+0,FEM_CONN,t.getTetConn(),0,nTet,FEM_INDEX_0,4);
00028   
00029   if (ngTet > 0) {
00030     FEM_Mesh_data(m,FEM_ELEM+0+FEM_GHOST,FEM_CONN,t.getTet(nTet),0,ngTet, 
00031           FEM_INDEX_0,4);
00032     if (ngNode > 0)
00033       FEM_Mesh_data(m,FEM_NODE+FEM_GHOST,FEM_COORD,t.getPoint(nNode),0,ngNode,
00034             FEM_DOUBLE,3);
00035   }
00036   t.nonGhostPt = nNode;
00037   t.nonGhostTet = nTet;
00038   
00039   
00040   if (ngTet > 0) {
00041     int *tconn;
00042     for (int i=nTet; i<ngTet+nTet; i++) {
00043       tconn = t.getTet(i);
00044       for (int j=0; j<4; j++) {
00045     
00046     if (tconn[j] < -1) tconn[j] = (tconn[j]*-1)-2+nNode;
00047     
00048     assert(tconn[j] < nNode+ngNode);
00049     assert(!(tconn[j] < -1));
00050       }
00051     }
00052   }
00053 }
00054 
00055 
00056 void writeFEM(int m,TetMesh &t) {
00057   int nNode=t.getPoints();
00058   int nTet=t.getTets();
00059   FEM_Mesh_data(m,FEM_NODE,FEM_COORD,t.getPointArray(), 0,nNode, FEM_DOUBLE,3);
00060   FEM_Mesh_data(m,FEM_ELEM+0,FEM_CONN,t.getTetConn(), 0,nTet, FEM_INDEX_0,4);
00061 }
00062