[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