[cig-commits] r6314 - in long/3D/Gale/trunk: . src/StgFEM/SLE/LinearAlgebra/src

walter at geodynamics.org walter at geodynamics.org
Mon Mar 19 22:56:30 PDT 2007


Author: walter
Date: 2007-03-19 22:56:29 -0700 (Mon, 19 Mar 2007)
New Revision: 6314

Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.c
   long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.h
Log:
 r1709 at earth:  boo | 2007-03-19 13:21:54 -0700
 DistortedOpGenerator seems to work as well as SROpGenerator, but they both have problems with multiple processors



Property changes on: long/3D/Gale/trunk
___________________________________________________________________
Name: svk:merge
   - 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:1706
   + 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:1709

Modified: long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.c	2007-03-20 05:52:19 UTC (rev 6313)
+++ long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.c	2007-03-20 05:56:29 UTC (rev 6314)
@@ -66,7 +66,7 @@
 				   DistortedOpGenerator_Generate );
 }
 
-DistortedOpGenerator* _DistortedOpGenerator_New( SROPGENERATOR_DEFARGS ) {
+DistortedOpGenerator* _DistortedOpGenerator_New( DISTORTEDOPGENERATOR_DEFARGS ) {
 	DistortedOpGenerator*	self;
 
 	/* Allocate memory */
@@ -97,8 +97,8 @@
 ** Virtual functions
 */
 
-void _DistortedOpGenerator_Delete( void* srOpGenerator ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+void _DistortedOpGenerator_Delete( void* distortedOpGenerator ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
 
@@ -106,12 +106,12 @@
 	_MGOpGenerator_Delete( self );
 }
 
-void _DistortedOpGenerator_Print( void* srOpGenerator, Stream* stream ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+void _DistortedOpGenerator_Print( void* distortedOpGenerator, Stream* stream ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 	
 	/* Set the Journal for printing informations */
-	Stream* srOpGeneratorStream;
-	srOpGeneratorStream = Journal_Register( InfoStream_Type, "DistortedOpGeneratorStream" );
+	Stream* distortedOpGeneratorStream;
+	distortedOpGeneratorStream = Journal_Register( InfoStream_Type, "DistortedOpGeneratorStream" );
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
 
@@ -120,8 +120,8 @@
 	_MGOpGenerator_Print( self, stream );
 }
 
-void _DistortedOpGenerator_Construct( void* srOpGenerator, Stg_ComponentFactory* cf, void* data ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+void _DistortedOpGenerator_Construct( void* distortedOpGenerator, Stg_ComponentFactory* cf, void* data ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 	FeVariable*	var;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
@@ -131,28 +131,28 @@
 	DistortedOpGenerator_SetFineVariable( self, var );
 }
 
-void _DistortedOpGenerator_Build( void* srOpGenerator, void* data ) {
+void _DistortedOpGenerator_Build( void* distortedOpGenerator, void* data ) {
 }
 
-void _DistortedOpGenerator_Initialise( void* srOpGenerator, void* data ) {
+void _DistortedOpGenerator_Initialise( void* distortedOpGenerator, void* data ) {
 }
 
-void _DistortedOpGenerator_Execute( void* srOpGenerator, void* data ) {
+void _DistortedOpGenerator_Execute( void* distortedOpGenerator, void* data ) {
 }
 
-void _DistortedOpGenerator_Destroy( void* srOpGenerator, void* data ) {
+void _DistortedOpGenerator_Destroy( void* distortedOpGenerator, void* data ) {
 }
 
-Bool DistortedOpGenerator_HasExpired( void* srOpGenerator ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+Bool DistortedOpGenerator_HasExpired( void* distortedOpGenerator ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
 
 	return False;
 }
 
-void DistortedOpGenerator_Generate( void* srOpGenerator, Matrix*** pOps, Matrix*** rOps ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+void DistortedOpGenerator_Generate( void* distortedOpGenerator, Matrix*** pOps, Matrix*** rOps ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
 	assert( pOps && rOps );
@@ -173,8 +173,8 @@
 ** Public Functions
 */
 
-void DistortedOpGenerator_SetFineVariable( void* srOpGenerator, void* _variable ) {
-	DistortedOpGenerator*	self = (DistortedOpGenerator*)srOpGenerator;
+void DistortedOpGenerator_SetFineVariable( void* distortedOpGenerator, void* _variable ) {
+	DistortedOpGenerator*	self = (DistortedOpGenerator*)distortedOpGenerator;
 	FeVariable*	variable = (FeVariable*)_variable;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
@@ -447,17 +447,14 @@
 }
 
 void DistortedOpGenerator_GenLevelOp( DistortedOpGenerator* self, unsigned level, Matrix* P ) {
+	Stream*			errorStream = Journal_Register( ErrorStream_Type, "DistortedOpGenerator::GenLevelOp" );
 	Mesh		*fMesh, *cMesh;
 	unsigned	nDims;
 	unsigned	nLocalFineNodes;
 	DofLayout*	dofLayout;
-	unsigned	ind;
-	unsigned	nInc, *inc;
-	unsigned	maxInc;
-	unsigned	fTopNode, cTopNode;
+	unsigned	fTopNode;
 	unsigned	fEqNum, cEqNum;
-	double		*localCoord, *basis;
-	unsigned	n_i, dof_i, inc_i, e_i;
+	unsigned	n_i, dof_i, i;
 
 	assert( self && Stg_CheckType( self, DistortedOpGenerator ) );
 	assert( self->meshes );
@@ -469,86 +466,121 @@
 	nDims = Mesh_GetDimSize( fMesh );
 	nLocalFineNodes = Mesh_GetLocalSize( fMesh, MT_VERTEX );
 	dofLayout = self->fineEqNum->dofLayout;
-	localCoord = AllocArray( double, nDims );
 
-	maxInc = 0;
-	for( e_i = 0; e_i < Mesh_GetDomainSize( cMesh, nDims ); e_i++ ) {
-		nInc = Mesh_GetIncidenceSize( cMesh, nDims, e_i, MT_VERTEX );
-		if( nInc > maxInc )
-			maxInc = nInc;
-	}
-	basis = AllocArray( double, maxInc );
-
 	for( n_i = 0; n_i < nLocalFineNodes; n_i++ ) {
-		if( self->topMaps[level] )
-			fTopNode = self->topMaps[level][n_i];
-		else
-			fTopNode = n_i;
+          if( self->topMaps[level] )
+            fTopNode = self->topMaps[level][n_i];
+          else
+            fTopNode = n_i;
+          
+          for( dof_i = 0; dof_i < dofLayout->dofCounts[fTopNode]; dof_i++ ) {
+            int ii, coarse_i, fine_ijk[3], coarse_ijk[3];
+            int  weights[8];
+            double factor;
+            unsigned dims;
+            if( self->eqNums[level] )
+              fEqNum = self->eqNums[level][n_i][dof_i];
+            else
+              fEqNum = self->fineEqNum->destinationArray[fTopNode][dof_i];
+            
+            if( fEqNum == (unsigned)-1 )
+              continue;
+            
+            dims=Mesh_GetDimSize(fMesh);
+            
+            /* Get the global coordinates of the node */
+            RegularMeshUtils_Node_1DTo3D
+              (fMesh,FeMesh_NodeDomainToGlobal(fMesh,n_i),
+               fine_ijk);
+            
+            for(ii=0;ii<8;++ii)
+              weights[ii]=1;
+            if(fine_ijk[0]%2==0)
+              {
+                weights[1]=0;
+                weights[3]=0;
+                weights[5]=0;
+                weights[7]=0;
+              }
+            if(fine_ijk[1]%2==0)
+              {
+                weights[2]=0;
+                weights[3]=0;
+                weights[6]=0;
+                weights[7]=0;
+              }
+            if(dims==2 || fine_ijk[2]%2==0)
+              {
+                weights[4]=0;
+                weights[5]=0;
+                weights[6]=0;
+                weights[7]=0;
+              }
+            factor=0;
+            for(ii=0;ii<8;++ii)
+              factor+=weights[ii];
+            factor=1/factor;
+            
+            for(ii=0;ii<8;++ii)
+              {
+                if(weights[ii]==1)
+                  {
+                    coarse_ijk[0]=fine_ijk[0]/2 + ii%2;
+                    coarse_ijk[1]=fine_ijk[1]/2 + (ii/2)%2;
+                    if(dims==3)
+                      {
+                        coarse_ijk[2]=fine_ijk[2]/2 + (ii/4)%2;
+                      }
+                    else
+                      {
+                        coarse_ijk[2]=0;
+                      }
+                    
+                    int rank;
+                    MPI_Comm	comm = CommTopology_GetComm( Mesh_GetCommTopology( fMesh, MT_VERTEX ) );
+                    MPI_Comm_rank( comm, (int*)&rank );
+                    
+                    if(!FeMesh_NodeGlobalToDomain
+                       (cMesh,
+                        RegularMeshUtils_Node_3DTo1D
+                        (cMesh,coarse_ijk),&i))
+                      printf("\n*****************************************************************\nThe coarse mesh point is not on this processor\n*****************************************************************\n");
+/*                                 Journal_Firewall */
+/*                                   (FeMesh_NodeGlobalToDomain */
+/*                                    (cMesh, */
+/*                                     RegularMeshUtils_Node_3DTo1D */
+/*                                     (cMesh,coarse_ijk),&i),errorStream, */
+/*                                    "\n*****************************************************************\nThe coarse mesh point is not on this processor\n*****************************************************************\n"); */
+                                      
+                                printf("Node number %d %d %d %d %d %lf\n",
+                                       rank,n_i,nLocalFineNodes,
+                                       level,i,factor);
 
-		for( dof_i = 0; dof_i < dofLayout->dofCounts[fTopNode]; dof_i++ ) {
-                        int ii, fine_ijk[3], coarse_ijk[3];
-                        int  weights[8];
-                        double factor;
-                        unsigned dims;
-			if( self->eqNums[level] )
-				fEqNum = self->eqNums[level][n_i][dof_i];
-			else
-				fEqNum = self->fineEqNum->destinationArray[fTopNode][dof_i];
+/*                     printf("Node number %d %d %d %d %d %d %d %d %d %d %d %d %d\n", */
+/*                            rank,n_i,nLocalFineNodes, */
+/*                            FeMesh_NodeDomainToGlobal(fMesh,n_i), */
+/*                            level,ii, */
+/*                            fine_ijk[0],fine_ijk[1], */
+/*                            weights[ii], */
+/*                            coarse_ijk[0], */
+/*                            coarse_ijk[1], */
+/*                            RegularMeshUtils_Node_3DTo1D */
+/*                            (cMesh,coarse_ijk),i); */
 
-			if( fEqNum == (unsigned)-1 )
-				continue;
-
-                        dims=Mesh_GetDimSize(fMesh);
-
-                        RegularMeshUtils_Node_1DTo3D(fMesh,n_i,fine_ijk);
-
-                        for(ii=0;ii<8;++ii)
-                          weights[ii]=1;
-                        if(fine_ijk[0]%2==0)
-                          {
-                            weights[1]=0;
-                            weights[3]=0;
-                            weights[5]=0;
-                            weights[7]=0;
-                          }
-                        if(fine_ijk[1]%2==0)
-                          {
-                            weights[2]=0;
-                            weights[3]=0;
-                            weights[6]=0;
-                            weights[7]=0;
-                          }
-                        if(dims==2 || fine_ijk[2]%2==0)
-                          {
-                            weights[4]=0;
-                            weights[5]=0;
-                            weights[6]=0;
-                            weights[7]=0;
-                          }
-                        factor=0;
-                        for(ii=0;ii<8;++ii)
-                          factor+=weights[ii];
-                        factor=1/factor;
-
-                        for(ii=0;ii<8;++ii)
-                          {
-                            if(weights[ii]==1)
-                              {
-                                coarse_ijk[0]=fine_ijk[0]/2 + ii%2;
-                                coarse_ijk[1]=fine_ijk[1]/2 + (ii/2)%2;
-                                coarse_ijk[2]=fine_ijk[2]/2 + (ii/4)%2;
-                                RegularMeshUtils_Node_3DTo1D(cMesh,coarse_ijk);
-                                cEqNum=self->eqNums[level-1][RegularMeshUtils_Node_3DTo1D(cMesh,coarse_ijk)][dof_i];
+                                cEqNum=self->eqNums[level-1][i][dof_i];
                                 if( cEqNum != (unsigned)-1)
                                   Matrix_InsertEntries( P, 1, &fEqNum, 1, &cEqNum, &factor );
-                              }
-                          }
-                }
+/*                                 printf("Inserted %d %d %d %d %d\n",rank, */
+/*                                        n_i,nLocalFineNodes,ii,cEqNum); */
+                    
+                  }
+              }
+          }
 	}
+        
+/*         sleep(1); */
+/*         exit(1); */
 
-	FreeArray( localCoord );
-	FreeArray( basis );
-
 	Matrix_AssemblyBegin( P );
 	Matrix_AssemblyEnd( P );
 }

Modified: long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.h
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.h	2007-03-20 05:52:19 UTC (rev 6313)
+++ long/3D/Gale/trunk/src/StgFEM/SLE/LinearAlgebra/src/DistortedOpGenerator.h	2007-03-20 05:56:29 UTC (rev 6314)
@@ -68,36 +68,36 @@
 	** Constructors
 	*/
 
-	#define SROPGENERATOR_DEFARGS \
+	#define DISTORTEDOPGENERATOR_DEFARGS \
 		MGOPGENERATOR_DEFARGS
 
-	#define SROPGENERATOR_PASSARGS \
+	#define DISTORTEDOPGENERATOR_PASSARGS \
 		MGOPGENERATOR_PASSARGS
 
 	DistortedOpGenerator* DistortedOpGenerator_New( Name name );
-	DistortedOpGenerator* _DistortedOpGenerator_New( SROPGENERATOR_DEFARGS );
+	DistortedOpGenerator* _DistortedOpGenerator_New( DISTORTEDOPGENERATOR_DEFARGS );
 	void _DistortedOpGenerator_Init( DistortedOpGenerator* self );
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Virtual functions
 	*/
 
-	void _DistortedOpGenerator_Delete( void* srOpGenerator );
-	void _DistortedOpGenerator_Print( void* srOpGenerator, Stream* stream );
-	void _DistortedOpGenerator_Construct( void* srOpGenerator, Stg_ComponentFactory* cf, void* data );
-	void _DistortedOpGenerator_Build( void* srOpGenerator, void* data );
-	void _DistortedOpGenerator_Initialise( void* srOpGenerator, void* data );
-	void _DistortedOpGenerator_Execute( void* srOpGenerator, void* data );
-	void _DistortedOpGenerator_Destroy( void* srOpGenerator, void* data );
+	void _DistortedOpGenerator_Delete( void* distortedOpGenerator );
+	void _DistortedOpGenerator_Print( void* distortedOpGenerator, Stream* stream );
+	void _DistortedOpGenerator_Construct( void* distortedOpGenerator, Stg_ComponentFactory* cf, void* data );
+	void _DistortedOpGenerator_Build( void* distortedOpGenerator, void* data );
+	void _DistortedOpGenerator_Initialise( void* distortedOpGenerator, void* data );
+	void _DistortedOpGenerator_Execute( void* distortedOpGenerator, void* data );
+	void _DistortedOpGenerator_Destroy( void* distortedOpGenerator, void* data );
 
-	Bool DistortedOpGenerator_HasExpired( void* srOpGenerator );
-	void DistortedOpGenerator_Generate( void* srOpGenerator, Matrix*** pOps, Matrix*** rOps );
+	Bool DistortedOpGenerator_HasExpired( void* distortedOpGenerator );
+	void DistortedOpGenerator_Generate( void* distortedOpGenerator, Matrix*** pOps, Matrix*** rOps );
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Public functions
 	*/
 
-	void DistortedOpGenerator_SetFineVariable( void* srOpGenerator, void* variable );
+	void DistortedOpGenerator_SetFineVariable( void* distortedOpGenerator, void* variable );
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Private Member functions



More information about the cig-commits mailing list