[cig-commits] r19191 - long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI

echoi at geodynamics.org echoi at geodynamics.org
Sat Nov 12 21:39:15 PST 2011


Author: echoi
Date: 2011-11-12 21:39:15 -0800 (Sat, 12 Nov 2011)
New Revision: 19191

Modified:
   long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c
   long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.h
Log:
Barycentric interpolation will be used when plastic strain is remapped at the time of remeshing.


Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c	2011-11-13 05:29:55 UTC (rev 19190)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c	2011-11-13 05:39:15 UTC (rev 19191)
@@ -35,45 +35,48 @@
 #include <StGermain/StGermain.h>
 #include <StGermain/FD/FD.h>
 #include "Snac/Snac.h"
-#include "Snac/Remesher/Register.h"
+#include "Snac/Remesher/Remesher.h"
 #include "Snac/Remesher/Mesh.h"
-#include "Snac/Remesher/types.h"
 #include "types.h"
 #include "Element.h"
 #include "Remesh.h"
 #include "Register.h"
 
-void _SnacViscoPlastic_InterpolateElement( void* _context, 
-					   unsigned dstEltInd, unsigned dstTetInd, 
-					   Snac_Element* dstElements, 
-					   unsigned srcEltInd, unsigned srcTetInd )
+void _SnacViscoPlastic_InterpolateElement(  void*				 	_context, 
+											Element_LocalIndex	 	dstEltInd, 
+											Tetrahedra_Index	 	dstTetInd, 
+											Snac_Element*	 		dstElements, 
+											Element_DomainIndex 	srcEltInd, 
+											Tetrahedra_Index		srcTetInd )
 {
-	Snac_Context*				context = (Snac_Context*)_context;
+	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*				element = (Snac_Element*)ExtensionManager_At( context->mesh->elementExtensionMgr, 
+										      dstElements, 
+										      dstEltInd );
+	SnacViscoPlastic_Element*	elementExt = ExtensionManager_Get( context->mesh->elementExtensionMgr, 
+									   element, 
+									   SnacViscoPlastic_ElementHandle );
 	Element_DomainIndex 		eltdI[8],eldI,eldJ,eldK;
 	Index 						coef_I;
-
 	Element_DomainIndex			neldI =  decomp->elementDomain3DCounts[0];
 	Element_DomainIndex			neldJ =  decomp->elementDomain3DCounts[1];
-	Snac_Element*				dstElt = (Snac_Element*)ExtensionManager_At( 
-											context->mesh->elementExtensionMgr, 
-											dstElements, 
-											dstEltInd );
-	SnacViscoPlastic_Element*	dstEltExt = ExtensionManager_Get( context->mesh->elementExtensionMgr, 
-																  dstElt, 
-																  SnacViscoPlastic_ElementHandle );
 
+#ifdef DEBUG
+	printf( "element_lI: %u, fromElement_lI: %u\n", dstElementInd, srcElementInd );
+#endif
+
 	/* Decompose srcEltInd into ijk indexes. */
-	eldI = srcEltInd % neldI;
-	eldJ = ((srcEltInd-eldI)/neldI) % neldJ;
-	eldK = (srcEltInd-eldI-eldJ*neldI)/(neldI*neldJ);
-	
+	eldI = (srcEltInd % neldI);
+	eldJ = (((srcEltInd-eldI)/neldI) % neldJ);
+	eldK = ((srcEltInd-eldI-eldJ*neldI)/(neldI*neldJ));
+
 	/* Eight-node hex defined on the old barycenter grid. */
-	eltdI[0] = srcEltInd;
+	eltdI[0] = eldI     + eldJ*neldI     + eldK*neldI*neldJ;
 	eltdI[1] = (eldI+1) + eldJ*neldI     + eldK*neldI*neldJ;
 	eltdI[2] = (eldI+1) + (eldJ+1)*neldI + eldK*neldI*neldJ;
 	eltdI[3] = eldI     + (eldJ+1)*neldI + eldK*neldI*neldJ;
@@ -82,13 +85,15 @@
 	eltdI[6] = (eldI+1) + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
 	eltdI[7] = eldI     + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
 
-	dstEltExt->plasticStrain[dstTetInd] = 0.0;
+	elementExt->plasticStrain[dstTetInd] = 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]] );
-		SnacViscoPlastic_Element* 	srcEltExt = ExtensionManager_Get( context->mesh->elementExtensionMgr, 
-														srcElt, 
-														SnacViscoPlastic_ElementHandle );
-		dstEltExt->plasticStrain[dstTetInd] += meshExt->barcord[dstEltInd].L[coef_I]*srcEltExt->plasticStrain[dstTetInd];
+		Snac_Element*				srcElt = (Snac_Element*)ExtensionManager_At( context->mesh->elementExtensionMgr, 
+												dstElements, 
+												meshExt->orderedToDomain[eltdI[TetraToNode[srcTetInd][coef_I]]] );
+		SnacViscoPlastic_Element*	srcEltExt = ExtensionManager_Get( context->mesh->elementExtensionMgr, 
+																  srcElt, 
+																  SnacViscoPlastic_ElementHandle );
+		elementExt->plasticStrain[dstTetInd] += meshExt->barcord[dstEltInd].L[coef_I]*srcEltExt->plasticStrain[dstTetInd];
 	}
 }

Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.h
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.h	2011-11-13 05:29:55 UTC (rev 19190)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.h	2011-11-13 05:39:15 UTC (rev 19191)
@@ -40,9 +40,11 @@
 #ifndef __SnacViscoPlastic_Remesh_h__
 #define __SnacViscoPlastic_Remesh_h__
 	
-	void _SnacViscoPlastic_InterpolateElement( void* _context, 
-						   unsigned dstElementInd, unsigned dstTetInd, 
-						   Snac_Element* dstElements, 
-						   unsigned srcElementInd, unsigned srcTetInd );
+void _SnacViscoPlastic_InterpolateElement(  void*				 	_context, 
+											Element_LocalIndex 		dstEltInd, 
+											Tetrahedra_Index	 	dstTetInd, 
+											Snac_Element*	 		dstElements, 
+											Element_DomainIndex 	srcEltInd, 
+											Tetrahedra_Index		srcTetInd );
 	
 #endif /* __SnacViscoPlastic_Remesh_h__ */



More information about the CIG-COMMITS mailing list