[cig-commits] commit: Merging the decomp3d branch.
Mercurial
hg at geodynamics.org
Mon Nov 24 11:28:39 PST 2008
changeset: 3:b21969e828f5
user: LukeHodkinson
date: Fri Apr 27 06:24:08 2007 +0000
files: DrawingObjects/src/FeVariableSurface.c DrawingObjects/src/MeshViewer.c DrawingObjects/src/MeshViewer.h DrawingObjects/src/ScalarFieldOnMeshCrossSection.c WindowInteractions/src/MeshViewerInteraction.c
description:
Merging the decomp3d branch.
diff -r ba6b21545881 -r b21969e828f5 DrawingObjects/src/FeVariableSurface.c
--- a/DrawingObjects/src/FeVariableSurface.c Thu Apr 05 07:59:27 2007 +0000
+++ b/DrawingObjects/src/FeVariableSurface.c Fri Apr 27 06:24:08 2007 +0000
@@ -39,7 +39,7 @@
*+ Patrick Sunter
*+ Greg Watson
*+
-** $Id: FeVariableSurface.c 631 2006-10-18 06:20:15Z SteveQuenette $
+** $Id: FeVariableSurface.c 686 2007-04-27 06:24:08Z LukeHodkinson $
**
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
@@ -222,12 +222,12 @@ void _lucFeVariableSurface_BuildDisplayL
void _lucFeVariableSurface_BuildDisplayList( void* drawingObject, void* _context ) {
lucFeVariableSurface* self = (lucFeVariableSurface*)drawingObject;
FeVariable* feVariable = (FeVariable*) self->feVariable;
- FiniteElement_Mesh* mesh = feVariable->feMesh;
+ FeMesh* mesh = feVariable->feMesh;
lucColourMap* colourMap = self->colourMap;
Element_LocalIndex lElement_I;
- Element_LocalIndex elementLocalCount = mesh->elementLocalCount;
+ Element_LocalIndex elementLocalCount = FeMesh_GetElementLocalSize( mesh );
Element_NodeIndex eNode_I;
- Element_NodeIndex elementNodeCount;
+ Element_NodeIndex elementNodeCount, *elementNodes;
Node_LocalIndex lNode_I;
double nodeValue;
double height;
@@ -249,11 +249,11 @@ void _lucFeVariableSurface_BuildDisplayL
lucColour_SetOpenGLColour( &self->colour );
for ( lElement_I = 0 ; lElement_I < elementLocalCount ; lElement_I++ ) {
- elementNodeCount = mesh->elementNodeCountTbl[ lElement_I ];
+ FeMesh_GetElementNodes( mesh, lElement_I, &elementNodeCount, &elementNodes );
glBegin( GL_POLYGON );
for ( eNode_I = 0 ; eNode_I < elementNodeCount ; eNode_I++ ) {
- lNode_I = mesh->elementNodeTbl[ lElement_I ][ eNode_I ];
+ lNode_I = elementNodes[ eNode_I ];
/* Get Value at node */
nodeValue = FeVariable_GetScalarAtNode( feVariable, lNode_I );
@@ -265,7 +265,7 @@ void _lucFeVariableSurface_BuildDisplayL
height = nodeValue * self->scaleHeight;
/* Plot Vertex */
- glVertex3d( mesh->nodeCoord[ lNode_I ][ I_AXIS ], mesh->nodeCoord[ lNode_I ][ J_AXIS ], height );
+ glVertex3d( mesh->verts[ lNode_I ][ I_AXIS ], mesh->verts[ lNode_I ][ J_AXIS ], height );
}
glEnd();
}
diff -r ba6b21545881 -r b21969e828f5 DrawingObjects/src/MeshViewer.c
--- a/DrawingObjects/src/MeshViewer.c Thu Apr 05 07:59:27 2007 +0000
+++ b/DrawingObjects/src/MeshViewer.c Fri Apr 27 06:24:08 2007 +0000
@@ -64,8 +64,11 @@
#include <glu.h>
#include <string.h>
-/* Textual name of this class - This is a global pointer which is used for times when you need to refer to class and not a particular instance of a class */
+
+/* Textual name of this class - This is a global pointer which is used for
+ times when you need to refer to class and not a particular instance of a class */
const Type lucMeshViewer_Type = "lucMeshViewer";
+
/* Private Constructor: This will accept all the virtual functions for this class as arguments. */
lucMeshViewer* _lucMeshViewer_New(
@@ -88,7 +91,10 @@ lucMeshViewer* _lucMeshViewer_New(
{
lucMeshViewer* self;
- /* Call private constructor of parent - this will set virtual functions of parent and continue up the hierarchy tree. At the beginning of the tree it will allocate memory of the size of object and initialise all the memory to zero. */
+ /* Call private constructor of parent - this will set virtual functions of
+ parent and continue up the hierarchy tree. At the beginning of the tree
+ it will allocate memory of the size of object and initialise all the
+ memory to zero. */
assert( sizeOfSelf >= sizeof(lucMeshViewer) );
self = (lucMeshViewer*) _lucOpenGLDrawingObject_New(
sizeOfSelf,
@@ -125,6 +131,8 @@ void _lucMeshViewer_Init(
memcpy( &(self->shadowColour), &shadowColour, sizeof(lucColour) );
memcpy( &(self->vacantColour), &vacantColour, sizeof(lucColour) );
assert( Stg_Class_IsInstance( mesh, Mesh_Type ) );
+
+ self->renderEdges = NULL;
}
void _lucMeshViewer_Delete( void* drawingObject ) {
@@ -147,9 +155,6 @@ void* _lucMeshViewer_Copy( void* drawing
memcpy( &(newDrawingObject->localColour), &(self->localColour), sizeof(lucColour) );
memcpy( &(newDrawingObject->shadowColour), &(self->shadowColour), sizeof(lucColour) );
memcpy( &(newDrawingObject->vacantColour), &(self->vacantColour), sizeof(lucColour) );
-
-
-
/* TODO */
abort();
@@ -196,11 +201,9 @@ void _lucMeshViewer_Construct( void* dra
self->elementNumbers = Stg_ComponentFactory_GetBool( cf, self->name, "elementNumbers", False);
self->displayNodes = Stg_ComponentFactory_GetBool( cf, self->name, "displayNodes", False);
-
lucColour_FromString( &self->localColour, localColourName );
lucColour_FromString( &self->shadowColour, shadowColourName );
lucColour_FromString( &self->vacantColour, vacantColourName );
-
_lucMeshViewer_Init(
self,
@@ -215,11 +218,23 @@ void _lucMeshViewer_Build( void* drawing
}
void _lucMeshViewer_Initialise( void* drawingObject, void* data ) {
-}
-
-
-void _lucMeshViewer_Execute( void* drawingObject, void* data ) {}
-void _lucMeshViewer_Destroy( void* drawingObject, void* data ) {}
+ lucMeshViewer* self = (lucMeshViewer*)drawingObject;
+
+ assert( self );
+
+ if( Mesh_HasIncidence( self->mesh, MT_EDGE, MT_VERTEX ) )
+ self->renderEdges = lucMeshViewer_RenderEdges_WithInc;
+ else {
+ lucMeshViewer_BuildEdges( self );
+ self->renderEdges = lucMeshViewer_RenderEdges;
+ }
+}
+
+void _lucMeshViewer_Execute( void* drawingObject, void* data ) {
+}
+
+void _lucMeshViewer_Destroy( void* drawingObject, void* data ) {
+}
void _lucMeshViewer_Setup( void* drawingObject, void* _context ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -228,8 +243,9 @@ void _lucMeshViewer_Setup( void* drawing
lucMeshViewer_UpdateVariables( self );
}
+
void lucMeshViewer_UpdateVariables( void* drawingObject ) {
-}
+}
void _lucMeshViewer_Draw( void* drawingObject, lucWindow* window, lucViewportInfo* viewportInfo, void* _context ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -241,7 +257,6 @@ void _lucMeshViewer_Draw( void* drawingO
_lucOpenGLDrawingObject_Draw( self, window, viewportInfo, _context );
}
-
void _lucMeshViewer_CleanUp( void* drawingObject, void* context ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -249,105 +264,20 @@ void _lucMeshViewer_CleanUp( void* drawi
}
void _lucMeshViewer_BuildDisplayList( void* drawingObject, void* _context ) {
- lucMeshViewer* self = (lucMeshViewer*)drawingObject;
- lucColour colour;
-
- /*Geometry* geometry;*/
- Node_GlobalIndex point_I;
- Edge_Index edge_I;
- ElementLayout* elementLayout;
- Partition_Index rank_I;
-
- /* Stuff to construct the layout */
- MeshDecomp* decomp;
- MeshLayout* meshLayout;
- Dimension_Index numPartitionedDims;
- Partition_Index maxRank = 0;
- Node_Index nodeCount;
-
- /*TODO*/
- numPartitionedDims = 2;
-
- meshLayout = self->mesh->layout;
- decomp = meshLayout->decomp;
-
- /* Make sure "StoreAll" is set so proc 0 can get all info */
- maxRank = decomp->procsInUse;
-
-/*TODO if( rank == 0 ) {
- glMesh = GLMesh_New();
- GLMesh_BuildFromMesh( glMesh, meshLayout );
- }
-*/
-
- /* Ensure everything is already freed*/
- _lucMeshViewer_CleanMem( self, NULL );
-
- /* Copy the vertices */
- self->vertCnt = meshLayout->nodeLayout->nodeCount;
- self->verts = Memory_Alloc_Array( GLdouble, self->vertCnt * 3, "lucMeshViewer->verts" );
-
- assert( self->verts );
-
- nodeCount = self->mesh->nodeLocalCount;
-
- for( point_I = 0; point_I < nodeCount; point_I++ ) {
- double* nodeCoord = Mesh_CoordAt( self->mesh, point_I );
- unsigned vert_I = point_I * 3;
-
- self->verts[vert_I] = (GLdouble)nodeCoord[0];
- self->verts[vert_I + 1] = (GLdouble)nodeCoord[1];
- self->verts[vert_I + 2] = (GLdouble)nodeCoord[2];
-
- }
-
- /* Build the edges */
- elementLayout = meshLayout->elementLayout;
- self->edgeCnt = elementLayout->edgeCount;
- self->edges = Memory_Alloc_Array( unsigned, self->edgeCnt * 2, "lucMeshViewer->edges" );
- assert( self->edges );
-
- for( edge_I = 0; edge_I < elementLayout->edgeCount; edge_I++ ) {
- unsigned glEdge_I = edge_I * 2;
- Edge edge;
-
- elementLayout->edgeAt( elementLayout, edge_I, edge );
- self->edges[glEdge_I] = (unsigned)edge[0];
- self->edges[glEdge_I + 1] = (unsigned)edge[1];
- }
-
- /* Build local edge indices */
- self->rankCnt = meshLayout->decomp->procsInUse;
- self->localEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "lucMeshViewer->localEdgeCnts" );
- memset( self->localEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
- self->localEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "lucMeshViewer->localEdges" );
- memset( self->localEdges, 0, sizeof(unsigned*) * self->rankCnt );
- self->shadowEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "lucMeshViewer->localEdges" );
- memset( self->shadowEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
- self->shadowEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "lucMeshViewer->shadowEdges" );
- memset( self->shadowEdges, 0, sizeof(unsigned*) * self->rankCnt );
- self->vacantEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "lucMeshViewer->vacantEdgeCnts" );
- memset( self->vacantEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
- self->vacantEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "lucMeshViewer->vacantEdges" );
- memset( self->vacantEdges, 0, sizeof(unsigned*) * self->rankCnt );
-
- for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
- _lucMeshViewer_BuildLocalEdges( self, meshLayout, rank_I );
- _lucMeshViewer_BuildShadowEdges( self, meshLayout, rank_I );
- _lucMeshViewer_BuildVacantEdges( self, meshLayout, rank_I );
- }
-
-
+ lucMeshViewer* self = (lucMeshViewer*)drawingObject;
+ lucColour colour;
+
/* Initialise colour value */
memcpy( &colour, &self->colour, sizeof(lucColour) );
lucColour_SetOpenGLColour( &colour );
glPointSize( 1.0 );
-
+
/* Plot the mesh */
- lucMeshViewer_RenderRank( drawingObject, 0 );
-}
-
+ lucMeshViewer_Render( drawingObject );
+}
+
+#if 0
void lucMeshViewer_RenderGlobal( void* drawingObject ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
unsigned edge_I;
@@ -373,9 +303,6 @@ void lucMeshViewer_RenderGlobal( void* d
}
glEnd();
}
-
-
-
void lucMeshViewer_PrintAllElementsNumber( void* drawingObject, Partition_Index rank ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -452,69 +379,6 @@ void lucMeshViewer_PrintAllNodesNumber(
}
-
-void lucMeshViewer_ClosestNode( void* self, Coord crd, int* nodeNumber ) {
- Bool done;
- Mesh* mesh = ((lucMeshViewer*)self)->mesh;
- Coord* nodeCrds = mesh->nodeCoord;
- unsigned curNode;
- unsigned nDims;
-
- nDims = ((HexaEL*)(mesh->layout->elementLayout))->dim ;
-
- /* Begin somewhere in the middle. */
- curNode = mesh->nodeLocalCount / 2;
-
- if(!mesh->nodeNeighbourCountTbl){
- Mesh_ActivateNodeNeighbourTbl( mesh );
- }
-
- /* Loop until we've found closest local node. */
- do {
- unsigned nNbrs = mesh->nodeNeighbourCountTbl[curNode];
- unsigned* nbrs = mesh->nodeNeighbourTbl[curNode];
- double dist;
- double tmp;
- unsigned nbr_i, d_i;
-
- /* Assume we'll be done after this loop. */
- done = True;
-
- /* Calc distance squared to current node. */
- tmp = nodeCrds[curNode][0] - crd[0];
- dist = tmp * tmp;
- for( d_i = 1; d_i < nDims; d_i++ ) {
- tmp = nodeCrds[curNode][d_i] - crd[d_i];
- dist += tmp * tmp;
- }
-
- /* Compare to neighbours. */
- for( nbr_i = 0; nbr_i < nNbrs; nbr_i++ ) {
- double nbrDist;
-
- /* Just in case... */
- if( nbrs[nbr_i] >= mesh->nodeLocalCount )
- continue;
-
- tmp = nodeCrds[nbrs[nbr_i]][0] - crd[0];
- nbrDist = tmp * tmp;
- for( d_i = 1; d_i < nDims; d_i++ ) {
- tmp = nodeCrds[nbrs[nbr_i]][d_i] - crd[d_i];
- nbrDist += tmp * tmp;
- }
-
- if( nbrDist < dist ) {
- curNode = nbrs[nbr_i];
- dist = nbrDist;
- done = False;
- }
- }
- }
- while( !done );
-
- *nodeNumber = curNode;
-}
-
void lucMeshViewer_PrintNodeNumber( void* drawingObject, Coord coord, int* nodeNumber ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
char nodeNumString[100];
@@ -535,39 +399,6 @@ void lucMeshViewer_PrintNodeNumber( void
lucPrintString( nodeNumString );
}
-
-void lucMeshViewer_FindElementNumber(void* drawingObject, Coord coord, int* elementNumber){
- Mesh* mesh = ((lucMeshViewer*)drawingObject)->mesh;
- MeshLayout* mLayout = mesh->layout;
- ElementLayout* eLayout = mLayout->elementLayout;
- Element_DomainIndex elementCoordIn = (unsigned)-1;
-
- /* locate which mesh element given coord is in : use inclusive upper boundaries to save
- the need to use shadow space if possible */
- if( eLayout->type == ParallelPipedHexaEL_Type ) {
- elementCoordIn = eLayout->elementWithPoint( eLayout, mLayout->decomp, coord, mesh,
- INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
- }
- else {
- unsigned cNode;
-
- /* Find closest node to point. */
- lucMeshViewer_ClosestNode( drawingObject, coord, (int*)&cNode );
-
- /* Find with hint of incident elements. */
- elementCoordIn = eLayout->elementWithPoint( eLayout, mLayout->decomp, coord, mesh,
- INCLUSIVE_UPPER_BOUNDARY,
- mesh->nodeElementCountTbl[cNode], mesh->nodeElementTbl[cNode] );
-
- /* If still no cigar, brute force. */
- if ( elementCoordIn >= mesh->elementDomainCount ) {
- elementCoordIn = eLayout->elementWithPoint( eLayout, mLayout->decomp, coord, mesh,
- INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
- }
- }
- *elementNumber = elementCoordIn;
-}
-
void lucMeshViewer_PrintElementNumber( void* drawingObject, Coord coord, int* elementNumber ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -615,68 +446,58 @@ void lucMeshViewer_PrintElementNumber( v
lucPrintString( elementNumString );
glEnable(GL_LIGHTING);
-
-}
-
-
-
-void lucMeshViewer_RenderLocal( void* drawingObject, Partition_Index rank ) {
- lucMeshViewer* self = (lucMeshViewer*)drawingObject;
- unsigned lEdge_I;
- Node_LocalIndex node_lI;
- unsigned edge_I;
- Node_LocalIndex node1_lI;
- Node_LocalIndex node2_lI;
- double* coord1;
- double* coord2;
-
- assert( rank < self->rankCnt );
-
- if( !self->localEdgeCnts[rank] || !self->localEdges[rank] ) {
- return;
- }
-
+}
+#endif
+
+void lucMeshViewer_RenderLocal( void* drawingObject ) {
+ lucMeshViewer* self = (lucMeshViewer*)drawingObject;
+ Mesh* mesh;
+ vertexFuncType* vertexFunc;
+
+ assert( self );
+ assert( Mesh_GetDomainSize( self->mesh, MT_VERTEX ) );
+ assert( self->renderEdges );
+
+ /* Shortcuts. */
+ mesh = self->mesh;
+
+ /* Pick the correct dimension. */
+ if( Mesh_GetDimSize( mesh ) == 3 )
+ vertexFunc = glVertex3dv;
+ else
+ vertexFunc = glVertex2dv;
+
+ /* Set color. */
glColor3f( self->localColour.red, self->localColour.green, self->localColour.blue );
-
- /* Render nodes */
+
+ /* Render vertices. */
if(self->displayNodes){
+ unsigned nVerts;
+ unsigned v_i;
+
+ nVerts = Mesh_GetLocalSize( mesh, MT_VERTEX );
glPointSize( 5 );
glBegin( GL_POINTS );
- for( node_lI = 0; node_lI < self->mesh->nodeLocalCount; node_lI ++ ) {
- glVertex3dv( self->mesh->nodeCoord[node_lI] );
- }
+ for( v_i = 0; v_i < nVerts; v_i ++ )
+ vertexFunc( Mesh_GetVertex( mesh, v_i ) );
glEnd();
}
-
+
/* Render edges */
- glDisable(GL_LIGHTING);
- glBegin( GL_LINES );
- for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
- edge_I = self->localEdges[rank][lEdge_I] * 2;
-
- node1_lI = Mesh_NodeMapGlobalToLocal( self->mesh, self->edges[edge_I] );
- node2_lI = Mesh_NodeMapGlobalToLocal( self->mesh, self->edges[edge_I + 1] );
-
- coord1 = self->mesh->nodeCoord[node1_lI];
- coord2 = self->mesh->nodeCoord[node2_lI];
-
- glVertex3dv( coord1 );
- glVertex3dv( coord2 );
- }
- glEnd();
- glEnable(GL_LIGHTING);
-
+ self->renderEdges( self, vertexFunc );
+
+#if 0
/* Prints the element numbers */
- if(self->elementNumbers)
- lucMeshViewer_PrintAllElementsNumber(self, rank);
+ if( self->elementNumbers )
+ lucMeshViewer_PrintAllElementsNumber( self );
/* Prints the node numbers */
- if(self->nodeNumbers)
- lucMeshViewer_PrintAllNodesNumber(self, rank);
-
-}
-
-
+ if( self->nodeNumbers )
+ lucMeshViewer_PrintAllNodesNumber( self );
+#endif
+}
+
+#if 0
void lucMeshViewer_RenderShadow( void* drawingObject, Partition_Index rank ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
unsigned sEdge_I;
@@ -706,10 +527,7 @@ void lucMeshViewer_RenderShadow( void* d
glVertex3dv( coord2 );
}
glEnd();
-
-
-}
-
+}
void lucMeshViewer_RenderVacant( void* drawingObject, Partition_Index rank ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
@@ -745,204 +563,66 @@ void lucMeshViewer_RenderVacant( void* d
}
glEnd();
}
-
-
-void lucMeshViewer_RenderRank( void* drawingObject, Partition_Index rank ) {
+#endif
+
+void lucMeshViewer_Render( void* drawingObject ) {
lucMeshViewer* self = (lucMeshViewer*)drawingObject;
- Processor_Index myRank = self->mesh->layout->decomp->rank;
-
- if ( rank == myRank ) {
- lucMeshViewer_RenderLocal( self, myRank );
- lucMeshViewer_RenderShadow( self, myRank );
- }
- else{
- lucMeshViewer_RenderVacant( self, myRank );
- }
-}
-
+
+ lucMeshViewer_RenderLocal( self );
+}
/*--------------------------------------------------------------------------------------------------------------------------
** Private Member functions
*/
-void _lucMeshViewer_BuildLocalEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank ) {
- lucMeshViewer* self = (lucMeshViewer*)meshViewer;
- Index localElementCnt;
- Index* localElementSet;
- int lEl_i;
-
- /* Old code:
- ** IndexSet_GetMembers( mesh->decomp->localElementSets[rank], &localElementCnt, &localElementSet );
- **
- ** This should really use a StGermain mesh, not the mesh layout. */
- localElementCnt = mesh->decomp->elementLocalCount;
- localElementSet = Memory_Alloc_Array( unsigned, localElementCnt, "localElementSet" );
- for( lEl_i = 0; lEl_i < localElementCnt; lEl_i++ ) {
- localElementSet[lEl_i] = mesh->decomp->elementMapLocalToGlobal( mesh->decomp, lEl_i );
- }
-
-
- if( localElementCnt ) {
- if( self->localEdges[rank] ) {
- Memory_Free( self->localEdges );
- }
-
- self->localEdgeCnts[rank] = ElementLayout_BuildEdgeSubset( mesh->elementLayout,
- localElementCnt,
- localElementSet,
- &self->localEdges[rank] );
- }
-
- Memory_Free( localElementSet );
-}
-
-
-void _lucMeshViewer_BuildShadowEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank ) {
- lucMeshViewer* self = (lucMeshViewer*)meshViewer;
- Index shadowElementCnt;
- Index* shadowElementSet;
-
- if( !mesh->decomp->shadowElementSets || !mesh->decomp->shadowElementSets[rank] ) {
- return;
- }
-
- IndexSet_GetMembers( mesh->decomp->shadowElementSets[rank], &shadowElementCnt, &shadowElementSet );
-
- if( shadowElementCnt ) {
- IndexSet* localEdgeSet;
- IndexSet* shadowEdgeSet;
- Index lEdge_I;
- Index sEdge_I;
-
- localEdgeSet = IndexSet_New( mesh->decomp->elementLayout->edgeCount );
- for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
- IndexSet_Add( localEdgeSet, self->localEdges[rank][lEdge_I] );
- }
-
- if( self->shadowEdges[rank] ) {
- Memory_Free( self->shadowEdges );
- }
- self->shadowEdgeCnts[rank] = ElementLayout_BuildEdgeSubset( mesh->elementLayout,
- shadowElementCnt,
- shadowElementSet,
- &self->shadowEdges[rank] );
- shadowEdgeSet = IndexSet_New( mesh->decomp->elementLayout->edgeCount );
- for( sEdge_I = 0; sEdge_I < self->shadowEdgeCnts[rank]; sEdge_I++ ) {
- if( !IndexSet_IsMember( localEdgeSet, self->shadowEdges[rank][sEdge_I] ) ) {
- IndexSet_Add( shadowEdgeSet, self->shadowEdges[rank][sEdge_I] );
- }
- }
-
- Memory_Free( self->shadowEdges[rank] );
- IndexSet_GetMembers( shadowEdgeSet, &self->shadowEdgeCnts[rank], &self->shadowEdges[rank] );
- Stg_Class_Delete( shadowEdgeSet );
- }
-
- Memory_Free( shadowElementSet );
-}
-
-
-void _lucMeshViewer_BuildVacantEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank ) {
- lucMeshViewer* self = (lucMeshViewer*)meshViewer;
- ElementLayout* elementLayout = mesh->decomp->elementLayout;
- IndexSet* domainEdgeSet;
- IndexSet* vacantEdgeSet;
- Index gEdge_I;
-
- domainEdgeSet = IndexSet_New( elementLayout->edgeCount );
-
- if( self->localEdgeCnts && self->localEdgeCnts[rank] ) {
- unsigned lEdge_I;
-
- for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
- IndexSet_Add( domainEdgeSet, self->localEdges[rank][lEdge_I] );
- }
- }
-
- if( self->shadowEdgeCnts && self->shadowEdgeCnts[rank] ) {
- unsigned sEdge_I;
-
- for( sEdge_I = 0; sEdge_I < self->shadowEdgeCnts[rank]; sEdge_I++ ) {
- IndexSet_Add( domainEdgeSet, self->shadowEdges[rank][sEdge_I] );
- }
- }
-
- vacantEdgeSet = IndexSet_New( elementLayout->edgeCount );
-
- for( gEdge_I = 0; gEdge_I < elementLayout->edgeCount; gEdge_I++ ) {
- if( !IndexSet_IsMember( domainEdgeSet, gEdge_I ) ) {
- IndexSet_Add( vacantEdgeSet, gEdge_I );
- }
- }
-
- IndexSet_GetMembers( vacantEdgeSet, &self->vacantEdgeCnts[rank], &self->vacantEdges[rank] );
-
- Stg_Class_Delete( domainEdgeSet );
- Stg_Class_Delete( vacantEdgeSet );
-}
-
-void _lucMeshViewer_CleanMem( void* drawingObject, void* data ) {
- lucMeshViewer* self = (lucMeshViewer*)drawingObject;
-
- if( self->verts ) {
- Memory_Free( self->verts );
- self->verts = NULL;
- }
-
- if( self->edges ) {
- Memory_Free( self->edges );
- self->edges = NULL;
- }
-
- if( self->localEdgeCnts ) {
- Memory_Free( self->localEdgeCnts );
- self->localEdgeCnts = NULL;
- }
-
- if( self->localEdges ) {
- Partition_Index rank_I;
-
- for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
- if( self->localEdges[rank_I] ) {
- Memory_Free( self->localEdges[rank_I] );
- }
- }
- Memory_Free( self->localEdges );
- self->localEdges = NULL;
- }
-
- if( self->shadowEdgeCnts ) {
- Memory_Free( self->shadowEdgeCnts );
- self->shadowEdgeCnts = NULL;
- }
-
- if( self->shadowEdges ) {
- Partition_Index rank_I;
-
- for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
- if( self->shadowEdges[rank_I] ) {
- Memory_Free( self->shadowEdges[rank_I] );
- }
- }
- Memory_Free( self->shadowEdges );
- self->shadowEdges = NULL;
- }
-
- if( self->vacantEdgeCnts ) {
- Memory_Free( self->vacantEdgeCnts );
- self->vacantEdgeCnts = NULL;
- }
-
- if( self->vacantEdges ) {
- Partition_Index rank_I;
-
- for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
- if( self->vacantEdges[rank_I] ) {
- Memory_Free( self->vacantEdges[rank_I] );
- }
- }
- Memory_Free( self->vacantEdges );
- self->vacantEdges = NULL;
- }
-}
+void lucMeshViewer_BuildEdges( lucMeshViewer* self ) {
+#if 0
+ assert( self );
+
+ nVerts = Mesh_GetLocalSize( );
+ done = AllocArray( Bool, nVerts );
+#endif
+}
+
+void lucMeshViewer_RenderEdges_WithInc( lucMeshViewer* self, vertexFuncType* vertexFunc ) {
+ unsigned nEdges;
+ unsigned nIncVerts, *incVerts;
+ unsigned e_i;
+
+ assert( self );
+ assert( Mesh_GetDomainSize( self->mesh, MT_EDGE ) &&
+ Mesh_HasIncidence( self->mesh, MT_EDGE, MT_VERTEX ) );
+
+ nEdges = Mesh_GetLocalSize( self->mesh, MT_EDGE );
+ glDisable(GL_LIGHTING);
+ glBegin( GL_LINES );
+ for( e_i = 0; e_i < nEdges; e_i++ ) {
+ Mesh_GetIncidence( self->mesh, MT_EDGE, e_i, MT_VERTEX, &nIncVerts, &incVerts );
+ assert( nIncVerts == 2 );
+
+ vertexFunc( Mesh_GetVertex( self->mesh, incVerts[0] ) );
+ vertexFunc( Mesh_GetVertex( self->mesh, incVerts[1] ) );
+ }
+ glEnd();
+ glEnable(GL_LIGHTING);
+}
+
+void lucMeshViewer_RenderEdges( lucMeshViewer* self, vertexFuncType* vertexFunc ) {
+ unsigned nEdges, **edges;
+ unsigned e_i;
+
+ assert( self );
+ assert( self->nEdges && self->edges );
+
+ nEdges = self->nEdges;
+ edges = self->edges;
+ glDisable(GL_LIGHTING);
+ glBegin( GL_LINES );
+ for( e_i = 0; e_i < nEdges; e_i++ ) {
+ vertexFunc( Mesh_GetVertex( self->mesh, edges[e_i][0] ) );
+ vertexFunc( Mesh_GetVertex( self->mesh, edges[e_i][1] ) );
+ }
+ glEnd();
+ glEnable(GL_LIGHTING);
+}
diff -r ba6b21545881 -r b21969e828f5 DrawingObjects/src/MeshViewer.h
--- a/DrawingObjects/src/MeshViewer.h Thu Apr 05 07:59:27 2007 +0000
+++ b/DrawingObjects/src/MeshViewer.h Fri Apr 27 06:24:08 2007 +0000
@@ -47,45 +47,40 @@
#ifndef __lucMeshViewer_h__
#define __lucMeshViewer_h__
- typedef void (lucMeshViewer_PlotParticleFunction) ( void* object, void* context, Particle_Index lParticle_I );
+ typedef void (vertexFuncType)( double* );
+ typedef void (lucMeshViewer_RenderEdgesFunc)( lucMeshViewer* self,
+ vertexFuncType* vertexFunc );
- /** Textual name of this class - This is a global pointer which is used for times when you need to refer to class and not a particular instance of a class */
+ /* Textual name of this class - This is a global pointer which is used for
+ times when you need to refer to class and not a particular instance of a class */
extern const Type lucMeshViewer_Type;
-
- /** Class contents - this is defined as a macro so that sub-classes of this class can use this macro at the start of the definition of their struct */
- #define __lucMeshViewer \
- /* Macro defining parent goes here - This means you can cast this class as its parent */ \
- __lucOpenGLDrawingObject \
- /* Virtual functions go here */ \
- Mesh* mesh; \
- lucMeshViewer_PlotParticleFunction* _plotParticle; \
- /* Other info */ \
- /* Colour Stuff */ \
- lucColour colour; \
- /* Other Stuff */ \
- /* Stg_Class info */ \
- unsigned vertCnt; \
- /*GLdouble* verts; */\
- double* verts;\
- unsigned edgeCnt; \
- unsigned* edges; \
- unsigned rankCnt; \
- unsigned* localEdgeCnts; \
- unsigned** localEdges; \
- unsigned* shadowEdgeCnts; \
- unsigned** shadowEdges; \
- unsigned* vacantEdgeCnts; \
- unsigned** vacantEdges; \
- lucColour localColour; \
- lucColour shadowColour; \
- lucColour vacantColour; \
- Bool nodeNumbers; \
- Bool elementNumbers;\
- Bool displayNodes;
+ /* Class contents - this is defined as a macro so that sub-classes of
+ this class can use this macro at the start of the definition of their struct */
+ #define __lucMeshViewer \
+ /* Macro defining parent goes here - This means you can */ \
+ /* cast this class as its parent */ \
+ __lucOpenGLDrawingObject \
+ /* Virtual functions go here */ \
+ Mesh* mesh; \
+ /* Other info */ \
+ /* Colour Stuff */ \
+ lucColour colour; \
+ /* Other Stuff */ \
+ /* Stg_Class info */ \
+ unsigned nEdges; \
+ unsigned** edges; \
+ lucMeshViewer_RenderEdgesFunc* renderEdges; \
+ \
+ lucColour localColour; \
+ lucColour shadowColour; \
+ lucColour vacantColour; \
+ Bool nodeNumbers; \
+ Bool elementNumbers; \
+ Bool displayNodes;
struct lucMeshViewer { __lucMeshViewer };
-
+
/** Private Constructor: This will accept all the virtual functions for this class as arguments. */
lucMeshViewer* _lucMeshViewer_New(
SizeT sizeOfSelf,
@@ -123,24 +118,19 @@
void _lucMeshViewer_BuildDisplayList( void* drawingObject, void* _context ) ;
- void _lucMeshViewer_CleanMem( void* drawingObject, void* data );
-
void lucMeshViewer_UpdateVariables( void* drawingObject ) ;
- void _lucMeshViewer_BuildLocalEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank ) ;
- void _lucMeshViewer_BuildShadowEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank ) ;
- void _lucMeshViewer_BuildVacantEdges( void* meshViewer, MeshLayout* mesh, Partition_Index rank );
-
void lucMeshViewer_RenderGlobal( void* drawingObject );
- void lucMeshViewer_RenderLocal( void* drawingObject, Partition_Index rank );
+ void lucMeshViewer_RenderLocal( void* drawingObject );
void lucMeshViewer_RenderShadow( void* drawingObject, Partition_Index rank );
void lucMeshViewer_RenderVacant( void* drawingObject, Partition_Index rank );
- void lucMeshViewer_RenderRank( void* drawingObject, Partition_Index rank );
+ void lucMeshViewer_Render( void* drawingObject );
void lucMeshViewer_PrintNodeNumber( void* drawingObject, Coord coord, int* nodeNumber );
- void lucMeshViewer_ClosestNode(void* self, Coord coord, int* NodeNumber);
- void lucMeshViewer_FindElementNumber(void* self, Coord coord, int* elementNumber);
void lucMeshViewer_PrintElementNumber( void* drawingObject, Coord coord, int* elementNumber );
+ void lucMeshViewer_BuildEdges( lucMeshViewer* self );
+ void lucMeshViewer_RenderEdges_WithInc( lucMeshViewer* self, vertexFuncType* vertexFunc );
+ void lucMeshViewer_RenderEdges( lucMeshViewer* self, vertexFuncType* vertexFunc );
#endif
diff -r ba6b21545881 -r b21969e828f5 DrawingObjects/src/ScalarFieldOnMeshCrossSection.c
--- a/DrawingObjects/src/ScalarFieldOnMeshCrossSection.c Thu Apr 05 07:59:27 2007 +0000
+++ b/DrawingObjects/src/ScalarFieldOnMeshCrossSection.c Fri Apr 27 06:24:08 2007 +0000
@@ -300,6 +300,7 @@ void lucScalarFieldOnMeshCrossSection_Dr
Node_LocalIndex node_lI;
Node_Index elNode_I;
Element_LocalIndex element_lI;
+ unsigned nIncVerts, *incVerts;
glDisable(GL_LIGHTING);
@@ -374,18 +375,21 @@ void lucScalarFieldOnMeshCrossSection_Dr
/* TODO: The elements could have nodes insides...... !!!*/
#define NORMAL_LUCSCALARFIELD_BEHAVIOUR
#ifdef NORMAL_LUCSCALARFIELD_BEHAVIOUR
- for ( element_lI = 0; element_lI < mesh->elementLocalCount; element_lI++ ) {
+ for ( element_lI = 0; element_lI < Mesh_GetLocalSize( mesh, Mesh_GetDimSize( mesh ) ); element_lI++ ) {
+ Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), element_lI, MT_VERTEX,
+ &nIncVerts, &incVerts );
+
/* Normal general case, the element can have whatever number of nodes */
glBegin(GL_POLYGON);
- for ( elNode_I=0; elNode_I < mesh->elementNodeCountTbl[element_lI]; elNode_I++ ) {
- node_lI = mesh->elementNodeTbl[element_lI][elNode_I];
+ for ( elNode_I=0; elNode_I < nIncVerts; elNode_I++ ) {
+ node_lI = incVerts[elNode_I];
//printf("elNode_I is %d node_lI is %d displayVal[node_lI] is %f \n", elNode_I, node_lI, displayVal[node_lI]);
// Should be there when no test
- memcpy( interpolationCoord, mesh->nodeCoord[node_lI], sizeof(Coord) );
+ memcpy( interpolationCoord, mesh->verts[node_lI], sizeof(Coord) );
// Plot the node
- lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->nodeCoord[node_lI]);
+ lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->verts[node_lI]);
#ifdef TEST
// Plot the node
@@ -404,27 +408,29 @@ void lucScalarFieldOnMeshCrossSection_Dr
/** testing the quad_strip way --- ASSUMES only 4 nodes per element */
/* checking that there is 4 nodes per element - If yes, the quad strips can be used */
- if( mesh->elementNodeCountTbl[element_lI] == 4 ){
+ Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), element_lI, MT_VERTEX,
+ &nIncVerts, &incVerts );
+ if( nIncVerts == 4 ){
glBegin(GL_QUAD_STRIP);
/* The nodes are for 10, 10 msh for instance instance 0,1,10,9 We want to display 0,9
and 1,10 for the quads, so display node 0,3,1,2 */
- node_0 = mesh->elementNodeTbl[element_lI][0];
- node_1 = mesh->elementNodeTbl[element_lI][3];
- node_2 = mesh->elementNodeTbl[element_lI][1];
- node_3 = mesh->elementNodeTbl[element_lI][2];
+ node_0 = incVerts[0];
+ node_1 = incVerts[3];
+ node_2 = incVerts[1];
+ node_3 = incVerts[2];
- memcpy( interpolationCoord, mesh->nodeCoord[node_0], sizeof(Coord) );
- lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->nodeCoord[node_0]);
-
- memcpy( interpolationCoord, mesh->nodeCoord[node_1], sizeof(Coord) );
- lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->nodeCoord[node_1]);
-
- memcpy( interpolationCoord, mesh->nodeCoord[node_2], sizeof(Coord) );
- lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->nodeCoord[node_2]);
-
- memcpy( interpolationCoord, mesh->nodeCoord[node_3], sizeof(Coord) );
- lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->nodeCoord[node_3]);
+ memcpy( interpolationCoord, mesh->verts[node_0], sizeof(Coord) );
+ lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->verts[node_0]);
+
+ memcpy( interpolationCoord, mesh->verts[node_1], sizeof(Coord) );
+ lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->verts[node_1]);
+
+ memcpy( interpolationCoord, mesh->verts[node_2], sizeof(Coord) );
+ lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->verts[node_2]);
+
+ memcpy( interpolationCoord, mesh->verts[node_3], sizeof(Coord) );
+ lucScalarFieldOnMeshCrossSection_PlotColouredVertex( self, interpolationCoord, mesh->verts[node_3]);
glEnd();
}
diff -r ba6b21545881 -r b21969e828f5 WindowInteractions/src/MeshViewerInteraction.c
--- a/WindowInteractions/src/MeshViewerInteraction.c Thu Apr 05 07:59:27 2007 +0000
+++ b/WindowInteractions/src/MeshViewerInteraction.c Fri Apr 27 06:24:08 2007 +0000
@@ -199,8 +199,6 @@ void _lucMeshViewerInteraction_KeyboardE
/* Stuff to construct the layout */
- MeshDecomp* decomp;
- MeshLayout* meshLayout;
Partition_Index maxRank = 0;
/* This function works when the key pressed is 'r' */
@@ -229,9 +227,7 @@ void _lucMeshViewerInteraction_KeyboardE
/* Check if this drawing object is a scalar field */
if ( Stg_Class_IsInstance( object, lucMeshViewer_Type ) ) {
meshViewer = (lucMeshViewer*) object;
- meshLayout = meshViewer->mesh->layout;
- decomp = meshLayout->decomp;
- maxRank = decomp->procsInUse;
+ /*maxRank = decomp->procsInUse;*/
/* TODO Window interaction do not work well in parallel... As the rank switching feature does not
@@ -249,16 +245,20 @@ void _lucMeshViewerInteraction_KeyboardE
if ( key == 'n' ){
/* Prints out the node number */
/* Get spatial coordinate that the user clicked on */
+/*
lucViewportInfo_GetCoordFromPixel( viewportInfo, xpos, ypos, coord );
lucMeshViewer_ClosestNode( meshViewer, coord, (int*)&nodeNumber);
Journal_Printf( stream, "Closest node is %d \n", nodeNumber );
+*/
}
if ( key == 'e' ){
/* Prints out the element number */
/* Get spatial coordinate that the user clicked on */
+/*
lucViewportInfo_GetCoordFromPixel( viewportInfo, xpos, ypos, coord );
lucMeshViewer_FindElementNumber( meshViewer, coord, (int*)&elementNumber);
Journal_Printf( stream, "Closest element is %d \n", elementNumber );
+*/
}
}
More information about the CIG-COMMITS
mailing list