[cig-commits] r19745 - long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI
echoi at geodynamics.org
echoi at geodynamics.org
Thu Mar 8 11:14:35 PST 2012
Author: echoi
Date: 2012-03-08 11:14:35 -0800 (Thu, 08 Mar 2012)
New Revision: 19745
Modified:
long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c
Log:
Made to be compatible with the special 2D case.
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c 2012-03-08 19:09:06 UTC (rev 19744)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplastic_BI/Remesh.c 2012-03-08 19:14:35 UTC (rev 19745)
@@ -65,37 +65,74 @@
Index coef_I;
Element_DomainIndex neldI = decomp->elementDomain3DCounts[0];
Element_DomainIndex neldJ = decomp->elementDomain3DCounts[1];
-
+ Element_DomainIndex neldK = decomp->elementDomain3DCounts[2];
+ enum { threeD, xy, undefined } geomType;
+
#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));
+ geomType = undefined;
+ if( neldI>1 && neldJ>1 && neldK>1 ) geomType = threeD;
+ else if( neldI>1 && neldJ>1 && neldK==1 ) geomType = xy;
+
+ switch(geomType) {
+ case undefined:
+ Journal_Firewall( 0, context->snacError, "Remeshing is currently allowed only for xy or threeD!!\n");
+ case threeD:
+ /* Decompose srcEltInd into ijk indexes. */
+ 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] = 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;
- eltdI[4] = eldI + eldJ*neldI + (eldK+1)*neldI*neldJ;
- eltdI[5] = (eldI+1) + eldJ*neldI + (eldK+1)*neldI*neldJ;
- eltdI[6] = (eldI+1) + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
- eltdI[7] = eldI + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
+ /* Eight-node hex defined on the old barycenter grid. */
+ 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;
+ eltdI[4] = eldI + eldJ*neldI + (eldK+1)*neldI*neldJ;
+ eltdI[5] = (eldI+1) + eldJ*neldI + (eldK+1)*neldI*neldJ;
+ eltdI[6] = (eldI+1) + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
+ eltdI[7] = eldI + (eldJ+1)*neldI + (eldK+1)*neldI*neldJ;
- elementExt->plasticStrain[dstTetInd] = 0.0;
- for(coef_I=0;coef_I<4;coef_I++) {
- /* The actual src elements are the four apexes of a tet (srcTetInd) in the old barycenter grid. */
- Snac_Element* srcElt = Snac_Element_At( context,
- meshExt->orderedToDomain[eltdI[TetraToNode[srcTetInd][coef_I]]] );
- SnacViscoPlastic_Element* srcEltExt = ExtensionManager_Get(
- context->mesh->elementExtensionMgr,
- srcElt,
- SnacViscoPlastic_ElementHandle );
- /* Weights are associated only with destination element but not on the tet level.
- So, "dstTetInd" is used in both source and destination terms. */
- elementExt->plasticStrain[dstTetInd] += meshExt->barcord[dstEltInd].L[coef_I]*srcEltExt->plasticStrain[dstTetInd];
+ elementExt->plasticStrain[dstTetInd] = 0.0;
+ for(coef_I=0;coef_I<4;coef_I++) {
+ /* The actual src elements are the four apexes of a tet (srcTetInd) in the old barycenter grid. */
+ Snac_Element* srcElt = Snac_Element_At( context,
+ meshExt->orderedToDomain[eltdI[TetraToNode[srcTetInd][coef_I]]] );
+ SnacViscoPlastic_Element* srcEltExt = ExtensionManager_Get(
+ context->mesh->elementExtensionMgr,
+ srcElt,
+ SnacViscoPlastic_ElementHandle );
+ /* Weights are associated only with destination element but not on the tet level.
+ So, "dstTetInd" is used in both source and destination terms. */
+ elementExt->plasticStrain[dstTetInd] += meshExt->barcord[dstEltInd].L[coef_I]*srcEltExt->plasticStrain[dstTetInd];
+ }
+ break;
+ case xy:
+ /* Decompose srcEltInd into ijk indexes. */
+ eldI = (srcEltInd % neldI);
+ eldJ = (((srcEltInd-eldI)/neldI) % neldJ);
+
+ /* Eight-node hex defined on the old barycenter grid. */
+ eltdI[0] = eldI + eldJ*neldI;
+ eltdI[1] = (eldI+1) + eldJ*neldI;
+ eltdI[2] = (eldI+1) + (eldJ+1)*neldI;
+ eltdI[3] = eldI + (eldJ+1)*neldI;
+
+ elementExt->plasticStrain[dstTetInd] = 0.0;
+ for(coef_I=0;coef_I<3;coef_I++) {
+ /* The actual src elements are the four apexes of a tet (srcTetInd) in the old barycenter grid. */
+ Snac_Element* srcElt = Snac_Element_At( context,
+ meshExt->orderedToDomain[eltdI[TriToNode[srcTetInd][coef_I]]] );
+ SnacPlastic_Element* srcEltExt = ExtensionManager_Get(
+ context->mesh->elementExtensionMgr,
+ srcElt,
+ SnacViscoPlastic_ElementHandle );
+ /* Weights are associated only with destination element but not on the tet level.
+ So, "dstTetInd" is used in both source and destination terms. */
+ elementExt->plasticStrain[dstTetInd] += meshExt->barcord[dstEltInd].L[coef_I]*srcEltExt->plasticStrain[dstTetInd];
+ }
+ break;
}
}
More information about the CIG-COMMITS
mailing list