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