[cig-commits] commit: Make OneToManyMapper work

Mercurial hg at geodynamics.org
Wed Nov 2 15:12:07 PDT 2011


changeset:   439:314f260ea5b8
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Wed Nov 02 15:11:59 2011 -0700
files:       MaterialPoints/src/Init.cxx MaterialPoints/src/IntegrationPointsSwarm.cxx MaterialPoints/src/OneToManyMapper.cxx MaterialPoints/src/OneToManyMapper.h
description:
Make OneToManyMapper work


diff -r d49f4087c568 -r 314f260ea5b8 MaterialPoints/src/Init.cxx
--- a/MaterialPoints/src/Init.cxx	Mon Oct 24 19:46:09 2011 -0700
+++ b/MaterialPoints/src/Init.cxx	Wed Nov 02 15:11:59 2011 -0700
@@ -73,6 +73,7 @@ Bool PICellerator_MaterialPoints_Init( i
 	Stg_ComponentRegister_Add( componentsRegister, GaussCoincidentMapper_Type, "0", _GaussCoincidentMapper_DefaultNew  );
 	Stg_ComponentRegister_Add( componentsRegister, GaussMapper_Type, "0", _GaussMapper_DefaultNew  );
 	Stg_ComponentRegister_Add( componentsRegister, NearestNeighborMapper_Type, "0", _NearestNeighborMapper_DefaultNew  );
+	Stg_ComponentRegister_Add( componentsRegister, OneToManyMapper_Type, "0", _OneToManyMapper_DefaultNew  );
 	
 	Stg_ComponentRegister_Add( componentsRegister, SwarmAdvector_Type, "0", _SwarmAdvector_DefaultNew  );
 	Stg_ComponentRegister_Add( componentsRegister, SwarmAdvectionInAPlane_Type, "0", _SwarmAdvectionInAPlane_DefaultNew  );
diff -r d49f4087c568 -r 314f260ea5b8 MaterialPoints/src/IntegrationPointsSwarm.cxx
--- a/MaterialPoints/src/IntegrationPointsSwarm.cxx	Mon Oct 24 19:46:09 2011 -0700
+++ b/MaterialPoints/src/IntegrationPointsSwarm.cxx	Wed Nov 02 15:11:59 2011 -0700
@@ -190,6 +190,7 @@ void _IntegrationPointsSwarm_AssignFromX
 			(weights == NULL && (Stg_Class_IsInstance( mapper, GaussMapper_Type ) ||
 					     Stg_Class_IsInstance( mapper, GaussCoincidentMapper_Type) ||
 					     Stg_Class_IsInstance( mapper, NearestNeighborMapper_Type) ||
+					     Stg_Class_IsInstance( mapper, OneToManyMapper_Type) ||
 					     !strcmp( mapper->type, "PCDVCGaussMapper"))),
 			Journal_MyStream( Error_Type, self ),
 			"In func %s, %s which is a %s must either have a %s or use %s\n",
@@ -432,6 +433,7 @@ void IntegrationPointsSwarm_RemapIntegra
 		Journal_Firewall( Stg_Class_IsInstance( self->mapper, GaussMapper_Type ) ||
 				  Stg_Class_IsInstance( self->mapper, GaussCoincidentMapper_Type ) ||
 				  Stg_Class_IsInstance( self->mapper, NearestNeighborMapper_Type ) ||
+				  Stg_Class_IsInstance( self->mapper, OneToManyMapper_Type ) ||
 				  !strcmp(self->mapper->type, "PCDVCGaussMapper"), errorStream,
 			"Error - in %s(): for IntegrationPointSwarm \"%s\", no weights calculator provided "
 			"and mapper is not a %s.\n", GaussMapper_Type );
diff -r d49f4087c568 -r 314f260ea5b8 MaterialPoints/src/OneToManyMapper.cxx
--- a/MaterialPoints/src/OneToManyMapper.cxx	Mon Oct 24 19:46:09 2011 -0700
+++ b/MaterialPoints/src/OneToManyMapper.cxx	Wed Nov 02 15:11:59 2011 -0700
@@ -61,19 +61,52 @@ OneToManyMapper* _OneToManyMapper_New( O
 	OneToManyMapper* result;
 
 	result = (OneToManyMapper*)_IntegrationPointMapper_New( INTEGRATIONPOINTMAPPER_PASSARGS );
+        result->swarm=_swarm;
 		
 	return result;
 }
 
-void _OneToManyMapper_Init( void* mapper, MaterialPointsSwarm* materialSwarm ) {
+void* _OneToManyMapper_DefaultNew( Name name ) {
+  /* Variables set in this function */
+  SizeT _sizeOfSelf = sizeof(OneToManyMapper);
+  Type type = OneToManyMapper_Type;
+  Stg_Class_DeleteFunction* _delete = _OneToManyMapper_Delete;
+  Stg_Class_PrintFunction*_print = _OneToManyMapper_Print;
+  Stg_Class_CopyFunction*_copy = _OneToManyMapper_Copy;
+  Stg_Component_DefaultConstructorFunction*
+    _defaultConstructor = _OneToManyMapper_DefaultNew;
+  Stg_Component_ConstructFunction*
+    _construct = _OneToManyMapper_AssignFromXML;
+  Stg_Component_BuildFunction*
+    _build = _OneToManyMapper_Build;
+  Stg_Component_InitialiseFunction*
+    _initialise = _OneToManyMapper_Initialise;
+  Stg_Component_ExecuteFunction*
+    _execute = _OneToManyMapper_Execute;
+  Stg_Component_DestroyFunction*
+    _destroy = _OneToManyMapper_Destroy;
+  AllocationType nameAllocationType = NON_GLOBAL;
+  IntegrationPointMapper_MapFunction* _map = _OneToManyMapper_Map;
+  IntegrationPointMapper_GetMaterialPointsSwarmsFunction*
+    _getMaterialPointsSwarms = _OneToManyMapper_GetMaterialPointsSwarms;
+  IntegrationPointMapper_GetMaterialIndexOnFunction*
+    _getMaterialIndexOn = _OneToManyMapper_GetMaterialIndexOn;
+  IntegrationPointMapper_GetExtensionOnFunction*
+    _getExtensionOn = _OneToManyMapper_GetExtensionOn;
+  IntegrationPointMapper_GetDoubleFromExtension*
+    _getDoubleFromExtension = _OneToManyMapper_GetDoubleFromExtension;
+  IntegrationPointMapper_GetDoubleFromExtension*
+    _getDoubleFromMaterial = _OneToManyMapper_GetDoubleFromMaterial;
+  IntegrationPointsSwarm *_swarm=NULL;
+
+  return _OneToManyMapper_New( ONETOMANYMAPPER_PASSARGS );
+}
+
+void _OneToManyMapper_Init( void* mapper, IntegrationPointsSwarm* swarm ) {
 	OneToManyMapper* self = (OneToManyMapper*)mapper;
 
 	self->errorStream = Journal_MyStream( Error_Type, self );
-	self->materialSwarm = materialSwarm;
-
-	ExtensionManager_SetLockDown( self->integrationSwarm->particleExtensionMgr, False );
-	self->refHandle = ExtensionManager_Add( self->integrationSwarm->particleExtensionMgr, materialSwarm->name, sizeof(OneToManyRef)  );
-	ExtensionManager_SetLockDown( self->integrationSwarm->particleExtensionMgr, True );
+	self->swarm = swarm;
 }
 
 void _OneToManyMapper_Delete( void* mapper ) {
@@ -86,7 +119,7 @@ void _OneToManyMapper_Print( void* mappe
 	
 	_IntegrationPointMapper_Print( self, stream );
 	Stream_Indent( stream );
-	Stg_Class_Print( self->materialSwarm, stream );
+	Stg_Class_Print( self->swarm, stream );
 	Stream_UnIndent( stream );
 }
 void* _OneToManyMapper_Copy( const void* mapper, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
@@ -94,20 +127,22 @@ void* _OneToManyMapper_Copy( const void*
 	OneToManyMapper* newCopy;
 	
 	newCopy = (OneToManyMapper*)_IntegrationPointMapper_Copy( self, dest, deep, nameExt, ptrMap );
-	newCopy->materialSwarm = (MaterialPointsSwarm*)Stg_Class_Copy( self->materialSwarm, NULL, deep, nameExt, ptrMap );
+	newCopy->swarm = (IntegrationPointsSwarm*)Stg_Class_Copy( self->swarm, NULL, deep, nameExt, ptrMap );
 
 	return newCopy;
 }
 
 void _OneToManyMapper_AssignFromXML( void* mapper, Stg_ComponentFactory* cf, void* data ) {
 	OneToManyMapper* self = (OneToManyMapper*)mapper;
-	MaterialPointsSwarm* materialSwarm;
+	IntegrationPointsSwarm* swarm;
 	
 	_IntegrationPointMapper_AssignFromXML( self, cf, data );
 
-	materialSwarm = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)MaterialPointsSwarm_Type, MaterialPointsSwarm, True, data   );
+	swarm =
+          Stg_ComponentFactory_ConstructByKey(cf,self->name,"MappedSwarm",
+                                              IntegrationPointsSwarm,True,data);
 
-	_OneToManyMapper_Init( self, materialSwarm );
+	_OneToManyMapper_Init( self, swarm );
 
 }
 
@@ -115,79 +150,79 @@ void _OneToManyMapper_Build( void* mappe
 	OneToManyMapper* self = (OneToManyMapper*)mapper;
 
 	_IntegrationPointMapper_Build( mapper, data );
-	Stg_Component_Build( self->materialSwarm, data, False );
+	Stg_Component_Build( self->swarm, data, False );
 	
 }
 void _OneToManyMapper_Initialise( void* mapper, void* data ) {
 	OneToManyMapper* self = (OneToManyMapper*)mapper;
 
 	_IntegrationPointMapper_Initialise( mapper, data );
-	Stg_Component_Initialise( self->materialSwarm, data, False );
+	Stg_Component_Initialise( self->swarm, data, False );
 }
 void _OneToManyMapper_Execute( void* mapper, void* data ) {}
 
 void _OneToManyMapper_Destroy( void* mapper, void* data ) {
 	OneToManyMapper* self = (OneToManyMapper*)mapper;
 
-	/*Stg_Class_Delete( self->materialSwarm );*/
+	/*Stg_Class_Delete( self->swarm );*/
 
 	_IntegrationPointMapper_Destroy( self, data );
 }
 
-OneToManyRef* OneToManyMapper_GetMaterialRef( void* mapper, void* intPoint ) {
-	OneToManyMapper* self = (OneToManyMapper*)mapper;
-
-	return (OneToManyRef*)ExtensionManager_Get( 
-			self->integrationSwarm->particleExtensionMgr, 
-			intPoint,
-			self->refHandle );
+/* Just call the embedded swarm remapper */
+void _OneToManyMapper_Map(void* mapper) {
+  OneToManyMapper* self = (OneToManyMapper*)mapper;
+  IntegrationPointMapper_Map(self->swarm->mapper);
 }
 
 MaterialPointsSwarm** _OneToManyMapper_GetMaterialPointsSwarms( void* mapper, Index* count ) {
-	OneToManyMapper* self = (OneToManyMapper*)mapper;
-	MaterialPointsSwarm** result = Memory_Alloc_Array( MaterialPointsSwarm*, 1,  "Swarms" );
-	result[0] = self->materialSwarm;
-	*count = 1;
-
-	return result;
+  OneToManyMapper* self = (OneToManyMapper*)mapper;
+  return IntegrationPointMapper_GetMaterialPointsSwarms(self->swarm->mapper,
+                                                        count);
 }
 
 Material_Index _OneToManyMapper_GetMaterialIndexOn( void* mapper, void* point ) {
-    /* This method cannot work with a one-to-many mapping. */
-    return -1;
+  abort();
+  return 0;
 }
 
 void* _OneToManyMapper_GetExtensionOn( void* mapper, void* point, ExtensionInfo_Index extHandle ) {
-    /* This method cannot work with a one-to-many mapping. */
-    return NULL;
+  /* This method cannot work with a one-to-many mapping. */
+  abort();
+  return NULL;
 }
 
 double _OneToManyMapper_GetDoubleFromExtension(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs) {
-    OneToManyMapper *self = (OneToManyMapper*)mapper;
-    OneToManyRef *ref;
-    double v = 0.0, c;
-    int ii;
+  abort();
+  return 0;
+    // OneToManyMapper *self = (OneToManyMapper*)mapper;
+    // OneToManyRef *ref;
+    // double v = 0.0, c;
+    // int ii;
 
-    ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
-    for(ii = 0; ii < ref->numParticles; ii++) {
-      c = *(double*)((char*)MaterialPointsSwarm_GetExtensionAt(self->materialSwarm, ref->particleInds[ii], extHandle) + offs);
-      v += ((double)ref->weights[ii])*c;
-    }
+    // ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
+    // for(ii = 0; ii < ref->numParticles; ii++) {
+    //   c = *(double*)((char*)MaterialPointsSwarm_GetExtensionAt(self->swarm, ref->particleInds[ii], extHandle) + offs);
+    //   v += ((double)ref->weights[ii])*c;
+    // }
 
-    return v;
+    // return v;
 }
 
 double _OneToManyMapper_GetDoubleFromMaterial(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs) {
-    OneToManyMapper *self = (OneToManyMapper*)mapper;
-    OneToManyRef *ref;
-    double v = 0.0, c;
-    int ii;
+  abort();
+  return 0;
+    // OneToManyMapper *self = (OneToManyMapper*)mapper;
+    // OneToManyRef *ref;
+    // double v = 0.0, c;
+    // int ii;
 
-    ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
-    for(ii = 0; ii < ref->numParticles; ii++) {
-      c = *(double*)((char*)MaterialPointsSwarm_GetMaterialExtensionAt(self->materialSwarm, ref->particleInds[ii], extHandle) + offs);
-      v += ((double)ref->weights[ii])*c;
-    }
+    // ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
+    // for(ii = 0; ii < ref->numParticles; ii++) {
+    //   c = *(double*)((char*)MaterialPointsSwarm_GetMaterialExtensionAt(self->swarm, ref->particleInds[ii], extHandle) + offs);
+    //   v += ((double)ref->weights[ii])*c;
+    // }
 
-    return v;
+    // return v;
 }
+
diff -r d49f4087c568 -r 314f260ea5b8 MaterialPoints/src/OneToManyMapper.h
--- a/MaterialPoints/src/OneToManyMapper.h	Mon Oct 24 19:46:09 2011 -0700
+++ b/MaterialPoints/src/OneToManyMapper.h	Wed Nov 02 15:11:59 2011 -0700
@@ -61,18 +61,18 @@
 
 	extern const Type OneToManyMapper_Type;
 
-        struct OneToManyRef {
-	    int numParticles;
-	    int *particleInds;
-	    float *weights;
-        };
+        // struct OneToManyRef {
+	//     int numParticles;
+	//     int *particleInds;
+	//     float *weights;
+        // };
 
 	/* OneToManyMapper information */
 	#define __OneToManyMapper \
 		__IntegrationPointMapper \
 		\
 		Stream*				errorStream; \
-		MaterialPointsSwarm*		materialSwarm; \
+		IntegrationPointsSwarm*		swarm; \
 		Index                           refHandle; /**< Extension handle to reference struct of material points */
 
 	struct OneToManyMapper { __OneToManyMapper };
@@ -82,14 +82,16 @@
 	#endif
 
 	#define ONETOMANYMAPPER_DEFARGS \
-                INTEGRATIONPOINTMAPPER_DEFARGS
+                INTEGRATIONPOINTMAPPER_DEFARGS, \
+                IntegrationPointsSwarm *_swarm
 
 	#define ONETOMANYMAPPER_PASSARGS \
-                INTEGRATIONPOINTMAPPER_PASSARGS
+                INTEGRATIONPOINTMAPPER_PASSARGS, \
+                _swarm
 	
 OneToManyMapper* _OneToManyMapper_New( ONETOMANYMAPPER_DEFARGS );
 
-void _OneToManyMapper_Init( void* mapper, MaterialPointsSwarm* materialSwarm );
+void _OneToManyMapper_Init( void* mapper, IntegrationPointsSwarm* swarm );
 
 	void _OneToManyMapper_Delete( void* mapper );
 	void _OneToManyMapper_Print( void* mapper, Stream* stream );
@@ -99,6 +101,7 @@ void _OneToManyMapper_Init( void* mapper
 		(OneToManyMapper*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
 	void* _OneToManyMapper_Copy( const void* mapper, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
 	
+	void* _OneToManyMapper_DefaultNew( Name name );
 	void _OneToManyMapper_AssignFromXML( void* shape, Stg_ComponentFactory* cf, void* data );
 	void _OneToManyMapper_Build( void* mapper, void* data ) ;
 	void _OneToManyMapper_Initialise( void* mapper, void* data );
@@ -111,6 +114,6 @@ void _OneToManyMapper_Init( void* mapper
         double _OneToManyMapper_GetDoubleFromExtension(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs);
         double _OneToManyMapper_GetDoubleFromMaterial(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs);
 
-        OneToManyRef* OneToManyMapper_GetMaterialRef( void* mapper, void* intPoint );
+        void _OneToManyMapper_Map(void* mapper);
 
 #endif



More information about the CIG-COMMITS mailing list