[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