[cig-commits] r19048 - long/3D/SNAC/trunk/Snac/plugins/remesher_BI

echoi at geodynamics.org echoi at geodynamics.org
Fri Oct 7 17:48:59 PDT 2011


Author: echoi
Date: 2011-10-07 17:48:58 -0700 (Fri, 07 Oct 2011)
New Revision: 19048

Modified:
   long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.c
   long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.h
   long/3D/SNAC/trunk/Snac/plugins/remesher_BI/RemeshElements.c
Log:
Separated the declaration and defition of the compare function for qsort.



Modified: long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.c	2011-10-07 22:51:42 UTC (rev 19047)
+++ long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.c	2011-10-08 00:48:58 UTC (rev 19048)
@@ -164,7 +164,7 @@
 		Memory_Free( meshExt->oldBarycenters );
 		Memory_Free( meshExt->newBarycenters ); 
 		Memory_Free( meshExt->barcoef );
-		Memory_Free( meshExt->barcoef );
+		Memory_Free( meshExt->barcord );
 		ExtensionManager_Free( mesh->nodeExtensionMgr, meshExt->newNodes );
 		ExtensionManager_Free( mesh->elementExtensionMgr, meshExt->newElements );
 		meshExt->newNodes = NULL;

Modified: long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.h
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.h	2011-10-07 22:51:42 UTC (rev 19047)
+++ long/3D/SNAC/trunk/Snac/plugins/remesher_BI/Remesh.h	2011-10-08 00:48:58 UTC (rev 19048)
@@ -61,5 +61,7 @@
 		Element_DomainIndex	srcEltInd, 
 		Tetrahedra_Index	srcTetInd );
 
+	struct dist_id_pair { double dist; unsigned int id; };
 
+
 #endif /* __SnacRemesher_Remesh_h__ */

Modified: long/3D/SNAC/trunk/Snac/plugins/remesher_BI/RemeshElements.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/remesher_BI/RemeshElements.c	2011-10-07 22:51:42 UTC (rev 19047)
+++ long/3D/SNAC/trunk/Snac/plugins/remesher_BI/RemeshElements.c	2011-10-08 00:48:58 UTC (rev 19048)
@@ -48,7 +48,6 @@
 #include <assert.h>
 #include <float.h>
 
-
 void _SnacRemesher_InterpolateElements( void* _context ) {
 	Snac_Context*			context = (Snac_Context*)_context;
 	SnacRemesher_Context*	contextExt = ExtensionManager_Get( context->extensionMgr, 
@@ -74,17 +73,8 @@
 	
 	void Tet_Barycenter( Coord tetCrds[4], Coord center );
 	void createBarycenterGrids( void* _context );
+	int dist_compare( const void* dist1, const void* dist2 ); 
 
-	struct dist_elem_pair { double dist; unsigned int id; };
-	int dist_compare( const void* dist1, const void* dist2 ) {
-		/* double v1 = *(double *)dist1; */
-		/* double v2 = *(double *)dist2; */
-		double v1 = ((struct dist_elem_pair *)dist1)->dist;
-		double v2 = ((struct dist_elem_pair *)dist2)->dist;
-		//return (dist1<dist2) ? -1 : (dist1>dist2) ? 1 : 0;
-		return (v1<v2) ? -1 : (v1>v2) ? 1 : 0;
-	};
-	
 	/* Create old and new grids of barycenters */
 	createBarycenterGrids( context );
 	
@@ -245,7 +235,7 @@
 				if( !found_tet ) { 
 					Index 					dim_I;
 					Coord					hexCrds[8];
-					struct dist_elem_pair 	dist_apexes[4];
+					struct dist_id_pair 			dist_apexes[4];
 					double 					dist_sum;
 					Index 					apex_I;
 
@@ -272,7 +262,7 @@
 						dist_apexes[apex_I].dist = sqrt(tmp);
 						dist_apexes[apex_I].id = apex_I;
 					}
-					qsort( (void *)dist_apexes, 4, sizeof(struct dist_elem_pair), dist_compare ); /* dist arrary sorted in the ascending order. */
+					qsort( (void *)dist_apexes, 4, sizeof(struct dist_id_pair), dist_compare ); /* dist arrary sorted in the ascending order. */
 					
 					dist_sum = 0.0;
 					for( apex_I = 0; apex_I < 3; apex_I++ ) 
@@ -298,6 +288,12 @@
 	
 }
 
+int dist_compare( const void* dist1, const void* dist2 ) {
+	double v1 = ((struct dist_id_pair *)dist1)->dist;
+	double v2 = ((struct dist_id_pair *)dist2)->dist;
+	return (v1<v2) ? -1 : (v1>v2) ? 1 : 0;
+};
+
 void createBarycenterGrids( void* _context ) {
 
 	Snac_Context*			context = (Snac_Context*)_context;
@@ -320,7 +316,7 @@
 			
 			nEltNodes = 8;
 			eltNodes = Memory_Alloc_Array( Node_DomainIndex, nEltNodes, "SnacRemesher" );
-			//element_gI = Mesh_ElementMapLocalToGlobal( mesh, element_lI );
+			gEltInd = Mesh_ElementMapLocalToGlobal( mesh, element_lI );
 			nLayout->buildElementNodes( nLayout, gEltInd, eltNodes );
 		}
 		
@@ -352,7 +348,7 @@
 			
 			nEltNodes = 8;
 			eltNodes = Memory_Alloc_Array( Node_DomainIndex, nEltNodes, "SnacRemesher" );
-			//element_gI = Mesh_ElementMapDomainToGlobal( mesh, element_dI );
+			gEltInd = Mesh_ElementMapDomainToGlobal( mesh, element_dI );
 			nLayout->buildElementNodes( nLayout, gEltInd, eltNodes );
 		}
 		
@@ -408,13 +404,21 @@
 {
 
 	Snac_Context*		context = (Snac_Context*)_context;
+	Mesh*				mesh = context->mesh;
+	SnacRemesher_Mesh*	meshExt = ExtensionManager_Get( context->meshExtensionMgr,
+															mesh, 
+															SnacRemesher_MeshHandle );
+	HexaMD*				decomp = (HexaMD*)mesh->layout->decomp;
 	Snac_Element*		dstElt = (Snac_Element*)ExtensionManager_At( context->mesh->elementExtensionMgr, 
 																	 dstEltArray, 
 																	 dstEltInd );
 	Element_DomainIndex eltdI[8],eldI,eldJ,eldK;
-	Tetrahedra_Index 	srcTet[8];
 	double 				dblMaterial_I;
+	Index 				coef_I;
 
+	Element_DomainIndex	neldI =  decomp->elementDomain3DCounts[0];
+	Element_DomainIndex	neldJ =  decomp->elementDomain3DCounts[1];
+
 	/* Decompose srcEltInd into ijk indexes. */
 	eldI = srcEltInd % neldI;
 	eldJ = ((srcEltInd-eldI)/neldI) % neldJ;
@@ -433,29 +437,29 @@
 	memset( dstElt->tetra[tetInd].strain, 0, sizeof(double)*3*3 );
 	memset( dstElt->tetra[tetInd].stress, 0, sizeof(double)*3*3 );
 	dblMaterial_I = 0.0;
-	dstElt->tetra[dstTetInd].density = 0.0;
+	dstElt->tetra[tetInd].density = 0.0;
 	for(coef_I=0;coef_I<4;coef_I++) {
 		/* The actual src elements are the apexes of the tet in the old barycenter grid. */
 		Snac_Element* srcElt = Snac_Element_At( context, eltdI[TetraToNode[srcTetInd][coef_I]] );
 
-		dstElt->tetra[tetInd].strain[0][0] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[0][0];
-		dstElt->tetra[tetInd].strain[1][1] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[1][1];
-		dstElt->tetra[tetInd].strain[2][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[2][2];
-		dstElt->tetra[tetInd].strain[0][1] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[0][1];
-		dstElt->tetra[tetInd].strain[0][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[0][2];
-		dstElt->tetra[tetInd].strain[1][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].strain[1][2];
+		dstElt->tetra[tetInd].strain[0][0] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[0][0];
+		dstElt->tetra[tetInd].strain[1][1] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[1][1];
+		dstElt->tetra[tetInd].strain[2][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[2][2];
+		dstElt->tetra[tetInd].strain[0][1] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[0][1];
+		dstElt->tetra[tetInd].strain[0][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[0][2];
+		dstElt->tetra[tetInd].strain[1][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].strain[1][2];
 
-		dstElt->tetra[tetInd].stress[0][0] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[0][0];
-		dstElt->tetra[tetInd].stress[1][1] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[1][1];
-		dstElt->tetra[tetInd].stress[2][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[2][2];
-		dstElt->tetra[tetInd].stress[0][1] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[0][1];
-		dstElt->tetra[tetInd].stress[0][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[0][2];
-		dstElt->tetra[tetInd].stress[1][2] += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].stress[1][2];
+		dstElt->tetra[tetInd].stress[0][0] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[0][0];
+		dstElt->tetra[tetInd].stress[1][1] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[1][1];
+		dstElt->tetra[tetInd].stress[2][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[2][2];
+		dstElt->tetra[tetInd].stress[0][1] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[0][1];
+		dstElt->tetra[tetInd].stress[0][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[0][2];
+		dstElt->tetra[tetInd].stress[1][2] += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].stress[1][2];
 
-		dblMaterial_I += meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].material_I;
-		dstElt->tetra[dstTetInd].density = meshExt->barcord[element_lI].L[coef_I]*srcElt->tetra[tetInd].density; 
+		dblMaterial_I += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].material_I;
+		dstElt->tetra[tetInd].density += meshExt->barcord[dstEltInd].L[coef_I]*srcElt->tetra[tetInd].density; 
 	}
-	dstElt->tetra[dstTetInd].material_I = (Material_Index)dblMaterial_I;
+	dstElt->tetra[tetInd].material_I = (Material_Index)dblMaterial_I;
 
 }
 



More information about the CIG-COMMITS mailing list