[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