[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