[cig-commits] commit: Merged.
Mercurial
hg at geodynamics.org
Mon Feb 1 15:31:13 PST 2010
changeset: 346:3cebd298f943
branch: pcu_rejig
parent: 343:8da41f9da12e
parent: 345:99a525cc04cc
user: luke at the-spatula
date: Thu Dec 03 14:28:04 2009 +1100
files: MaterialPoints/src/CoincidentMapper.c MaterialPoints/src/CoincidentMapper.h MaterialPoints/src/GaussCoincidentMapper.c MaterialPoints/src/GaussCoincidentMapper.h MaterialPoints/src/GaussMapper.c MaterialPoints/src/GaussMapper.h MaterialPoints/src/Init.c MaterialPoints/src/IntegrationPointMapper.c MaterialPoints/src/IntegrationPointMapper.h MaterialPoints/src/ManyToOneMapper.c MaterialPoints/src/ManyToOneMapper.h MaterialPoints/src/MaterialPoints.h MaterialPoints/src/MaterialPointsSwarm.c MaterialPoints/src/MaterialPointsSwarm.h MaterialPoints/src/OneToManyMapper.c MaterialPoints/src/OneToManyMapper.h MaterialPoints/src/OneToOneMapper.c MaterialPoints/src/OneToOneMapper.h Utils/src/BuoyancyForceTerm.c
description:
Merged.
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/CoincidentMapper.c
--- a/MaterialPoints/src/CoincidentMapper.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/CoincidentMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -99,6 +99,8 @@ void* _CoincidentMapper_DefaultNew( Name
IntegrationPointMapper_GetMaterialPointsSwarmsFunction* _getMaterialPointsSwarms = _OneToOneMapper_GetMaterialPointsSwarms;
IntegrationPointMapper_GetMaterialIndexOnFunction* _getMaterialIndexOn = _OneToOneMapper_GetMaterialIndexOn;
IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn = _OneToOneMapper_GetExtensionOn;
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromExtension = _OneToOneMapper_GetDoubleFromExtension;
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromMaterial = _OneToOneMapper_GetDoubleFromMaterial;
return _CoincidentMapper_New( COINCIDENTMAPPER_PASSARGS );
}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/GaussCoincidentMapper.c
--- a/MaterialPoints/src/GaussCoincidentMapper.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/GaussCoincidentMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -99,6 +99,8 @@ void* _GaussCoincidentMapper_DefaultNew(
IntegrationPointMapper_GetMaterialPointsSwarmsFunction* _getMaterialPointsSwarms = _OneToOneMapper_GetMaterialPointsSwarms;
IntegrationPointMapper_GetMaterialIndexOnFunction* _getMaterialIndexOn = _OneToOneMapper_GetMaterialIndexOn;
IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn = _OneToOneMapper_GetExtensionOn;
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromExtension = _OneToOneMapper_GetDoubleFromExtension;
+ IntegrationPointMapper_GetDoubleFromMaterial* _getDoubleFromMaterial = _OneToOneMapper_GetDoubleFromMaterial;
return _GaussCoincidentMapper_New( GAUSSCOINCIDENTMAPPER_PASSARGS );
}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/GaussMapper.c
--- a/MaterialPoints/src/GaussMapper.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/GaussMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -70,6 +70,8 @@ void* _GaussMapper_DefaultNew( Name name
IntegrationPointMapper_GetMaterialPointsSwarmsFunction* _getMaterialPointsSwarms = _OneToOneMapper_GetMaterialPointsSwarms;
IntegrationPointMapper_GetMaterialIndexOnFunction* _getMaterialIndexOn = _OneToOneMapper_GetMaterialIndexOn;
IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn = _OneToOneMapper_GetExtensionOn;
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromExtension = _OneToOneMapper_GetDoubleFromExtension;
+ IntegrationPointMapper_GetDoubleFromMaterial* _getDoubleFromMaterial = _OneToOneMapper_GetDoubleFromMaterial;
return _GaussMapper_New( GAUSSMAPPER_PASSARGS );
}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/Init.c
--- a/MaterialPoints/src/Init.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/Init.c Thu Dec 03 14:28:04 2009 +1100
@@ -95,6 +95,7 @@ Bool PICellerator_MaterialPoints_Init( i
RegisterParent( Materials_Register_Type, NamedObject_Register_Type );
RegisterParent( MaterialPointsSwarm_Type, Swarm_Type );
RegisterParent( OneToOneMapper_Type, IntegrationPointMapper_Type );
+ RegisterParent(OneToManyMapper_Type, IntegrationPointMapper_Type);
RegisterParent( ParticleFeVariable_Type, FeVariable_Type );
RegisterParent( PeriodicBoundariesManager_Type, Stg_Component_Type );
RegisterParent( SwarmAdvector_Type, TimeIntegratee_Type );
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/IntegrationPointMapper.c
--- a/MaterialPoints/src/IntegrationPointMapper.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/IntegrationPointMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -67,6 +67,8 @@ IntegrationPointMapper* _IntegrationPoin
self->_getMaterialPointsSwarms = _getMaterialPointsSwarms;
self->_getMaterialIndexOn = _getMaterialIndexOn;
self->_getExtensionOn = _getExtensionOn;
+ self->_getDoubleFromExtension = _getDoubleFromExtension;
+ self->_getDoubleFromMaterial = _getDoubleFromMaterial;
return self;
}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/IntegrationPointMapper.h
--- a/MaterialPoints/src/IntegrationPointMapper.h Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/IntegrationPointMapper.h Thu Dec 03 14:28:04 2009 +1100
@@ -73,6 +73,18 @@
/** @see IntegrationPointMapper_GetExtensionOn */
typedef void* (IntegrationPointMapper_GetExtensionOnFunction) ( void* mapper, void* points, ExtensionInfo_Index extHandle );
+
+ typedef double (IntegrationPointMapper_GetDoubleFromExtension)(
+ void* mapper,
+ void* intPoint,
+ ExtensionInfo_Index extHandle,
+ int offs );
+
+ typedef double (IntegrationPointMapper_GetDoubleFromMaterial)(
+ void* mapper,
+ void* intPoint,
+ ExtensionInfo_Index extHandle,
+ int offs );
/* IntegrationPointMapper information */
#define __IntegrationPointMapper \
@@ -84,6 +96,8 @@
IntegrationPointMapper_GetMaterialPointsSwarmsFunction* _getMaterialPointsSwarms; \
IntegrationPointMapper_GetMaterialIndexOnFunction* _getMaterialIndexOn; \
IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn; \
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromExtension; \
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromMaterial; \
\
/* General info */ \
IntegrationPointsSwarm* integrationSwarm;
@@ -106,14 +120,18 @@
IntegrationPointMapper_MapFunction* _map, \
IntegrationPointMapper_GetMaterialPointsSwarmsFunction* _getMaterialPointsSwarms, \
IntegrationPointMapper_GetMaterialIndexOnFunction* _getMaterialIndexOn, \
- IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn
+ IntegrationPointMapper_GetExtensionOnFunction* _getExtensionOn, \
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromExtension, \
+ IntegrationPointMapper_GetDoubleFromExtension* _getDoubleFromMaterial
#define INTEGRATIONPOINTMAPPER_PASSARGS \
STG_COMPONENT_PASSARGS, \
_map, \
_getMaterialPointsSwarms, \
_getMaterialIndexOn, \
- _getExtensionOn
+ _getExtensionOn, \
+ _getDoubleFromExtension, \
+ _getDoubleFromMaterial
IntegrationPointMapper* _IntegrationPointMapper_New( INTEGRATIONPOINTMAPPER_DEFARGS );
@@ -194,5 +212,12 @@
extHandle )
void* IntegrationPointMapper_GetExtensionAtFunc( void* mapper, Index point_I, ExtensionInfo_Index extHandle );
+
+#define IntegrationPointMapper_GetDoubleFromExtension(mapper, intPoint, extHandle, offs) \
+ ((IntegrationPointMapper*)mapper)->_getDoubleFromExtension(mapper, intPoint, extHandle, offs);
+
+#define IntegrationPointMapper_GetDoubleFromMaterial(mapper, intPoint, extHandle, offs) \
+ ((IntegrationPointMapper*)mapper)->_getDoubleFromMaterial(mapper, intPoint, extHandle, offs);
+
#endif
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/MaterialPoints.h
--- a/MaterialPoints/src/MaterialPoints.h Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/MaterialPoints.h Thu Dec 03 14:28:04 2009 +1100
@@ -59,6 +59,7 @@
#include "IntegrationPointMapper.h"
#include "OneToOneMapper.h"
+ #include "OneToManyMapper.h"
#include "CoincidentMapper.h"
#include "GaussCoincidentMapper.h"
#include "GaussMapper.h"
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/MaterialPointsSwarm.c
--- a/MaterialPoints/src/MaterialPointsSwarm.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/MaterialPointsSwarm.c Thu Dec 03 14:28:04 2009 +1100
@@ -526,6 +526,22 @@ Index MaterialPointsSwarm_GetMaterialInd
return point->materialIndex;
}
+void* MaterialPointsSwarm_GetMaterialExtensionOn( void* swarm, void *matPoint, Index extHandle ) {
+ MaterialPointsSwarm *self = (MaterialPointsSwarm*)swarm;
+ Material *mat;
+
+ mat = MaterialPointsSwarm_GetMaterialOn(self, matPoint);
+ return ExtensionManager_Get(mat->extensionMgr, mat, extHandle);
+}
+
+void* MaterialPointsSwarm_GetMaterialExtensionAt( void* swarm, int matPointInd, Index extHandle ) {
+ MaterialPointsSwarm *self = (MaterialPointsSwarm*)swarm;
+ Material *mat;
+
+ mat = MaterialPointsSwarm_GetMaterialAt(self, matPointInd);
+ return ExtensionManager_Get(mat->extensionMgr, mat, extHandle);
+}
+
void* MaterialPointsSwarm_GetExtensionAt( void* swarm, Index point_I, Index extHandle ) {
MaterialPointsSwarm* self = (MaterialPointsSwarm*)swarm;
MaterialPoint* point;
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/MaterialPointsSwarm.h
--- a/MaterialPoints/src/MaterialPointsSwarm.h Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/MaterialPointsSwarm.h Thu Dec 03 14:28:04 2009 +1100
@@ -148,6 +148,12 @@
/** Returns the material instance associated with the given point index */
Index MaterialPointsSwarm_GetMaterialIndexAt( void* swarm, Index point_I );
+ /** Get the extension on a material. */
+ void* MaterialPointsSwarm_GetMaterialExtensionOn( void* swarm, void *matPoint, Index extHandle );
+
+ /** Get the extension on a material index. */
+ void* MaterialPointsSwarm_GetMaterialExtensionAt( void* swarm, int matPointInd, Index extHandle );
+
/** Returns the particle extension at given point index */
void* MaterialPointsSwarm_GetExtensionAt( void* swarm, Index point_I, Index extHandle );
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/OneToManyMapper.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MaterialPoints/src/OneToManyMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -0,0 +1,202 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+** Melbourne, 3053, Australia.
+** Copyright (c) 2005-2006, Monash Cluster Computing, Building 28, Monash University Clayton Campus,
+** Victoria, 3800, Australia
+**
+** Primary Contributing Organisations:
+** Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+** Australian Computational Earth Systems Simulator - http://www.access.edu.au
+** Monash Cluster Computing - http://www.mcc.monash.edu.au
+**
+** Contributors:
+** Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+** Patrick D. Sunter, Software Engineer, VPAC. (patrick at vpac.org)
+** Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+** Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+** Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+** Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+** Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+** Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+** David Stegman, Postdoctoral Fellow, Monash University. (david.stegman at sci.monash.edu.au)
+** Wendy Sharples, PhD Student, Monash University (wendy.sharples at sci.monash.edu.au)
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+**
+** $Id: $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/StgDomain.h>
+#include <StgFEM/StgFEM.h>
+#include <PICellerator/PopulationControl/PopulationControl.h>
+#include <PICellerator/Weights/Weights.h>
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+#include "MaterialPoints.h"
+
+const Type OneToManyMapper_Type = "OneToManyMapper";
+
+OneToManyMapper* _OneToManyMapper_New( ONETOMANYMAPPER_DEFARGS ) {
+ OneToManyMapper* result;
+
+ result = (OneToManyMapper*)_IntegrationPointMapper_New( INTEGRATIONPOINTMAPPER_PASSARGS );
+
+ return result;
+}
+
+void _OneToManyMapper_Init( void* mapper, MaterialPointsSwarm* materialSwarm ) {
+ 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 );
+}
+
+void _OneToManyMapper_Delete( void* mapper ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+
+ _IntegrationPointMapper_Delete( self );
+}
+void _OneToManyMapper_Print( void* mapper, Stream* stream ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+
+ _IntegrationPointMapper_Print( self, stream );
+ Stream_Indent( stream );
+ Stg_Class_Print( self->materialSwarm, stream );
+ Stream_UnIndent( stream );
+}
+void* _OneToManyMapper_Copy( void* mapper, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+ OneToManyMapper* newCopy;
+
+ newCopy = (OneToManyMapper*)_IntegrationPointMapper_Copy( self, dest, deep, nameExt, ptrMap );
+ newCopy->materialSwarm = (MaterialPointsSwarm*)Stg_Class_Copy( self->materialSwarm, NULL, deep, nameExt, ptrMap );
+
+ return newCopy;
+}
+
+void _OneToManyMapper_AssignFromXML( void* mapper, Stg_ComponentFactory* cf, void* data ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+ MaterialPointsSwarm* materialSwarm;
+
+ _IntegrationPointMapper_AssignFromXML( self, cf, data );
+
+ materialSwarm = Stg_ComponentFactory_ConstructByKey(
+ cf,
+ self->name,
+ MaterialPointsSwarm_Type,
+ MaterialPointsSwarm,
+ True,
+ data );
+
+ _OneToManyMapper_Init( self, materialSwarm );
+
+}
+
+void _OneToManyMapper_Build( void* mapper, void* data ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+
+ _IntegrationPointMapper_Build( mapper, data );
+ Stg_Component_Build( self->materialSwarm, data, False );
+
+}
+void _OneToManyMapper_Initialise( void* mapper, void* data ) {
+ OneToManyMapper* self = (OneToManyMapper*)mapper;
+
+ _IntegrationPointMapper_Initialise( mapper, data );
+ Stg_Component_Initialise( self->materialSwarm, 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 );*/
+
+ _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 );
+}
+
+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;
+}
+
+Material_Index _OneToManyMapper_GetMaterialIndexOn( void* mapper, void* point ) {
+ /* This method cannot work with a one-to-many mapping. */
+ return -1;
+}
+
+void* _OneToManyMapper_GetExtensionOn( void* mapper, void* point, ExtensionInfo_Index extHandle ) {
+ /* This method cannot work with a one-to-many mapping. */
+ 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;
+
+ ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
+ for(ii = 0; ii < ref->numParticles; ii++) {
+ c = *(double*)(MaterialPointsSwarm_GetExtensionAt(self->materialSwarm, ref->particleInds[ii], extHandle) + offs);
+ v += ((double)ref->weights[ii])*c;
+ }
+
+ 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;
+
+ ref = OneToManyMapper_GetMaterialRef(mapper, intPoint);
+ for(ii = 0; ii < ref->numParticles; ii++) {
+ c = *(double*)(MaterialPointsSwarm_GetMaterialExtensionAt(self->materialSwarm, ref->particleInds[ii], extHandle) + offs);
+ v += ((double)ref->weights[ii])*c;
+ }
+
+ return v;
+}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/OneToManyMapper.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MaterialPoints/src/OneToManyMapper.h Thu Dec 03 14:28:04 2009 +1100
@@ -0,0 +1,116 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+** Melbourne, 3053, Australia.
+** Copyright (c) 2005-2006, Monash Cluster Computing, Building 28, Monash University Clayton Campus,
+** Victoria, 3800, Australia
+**
+** Primary Contributing Organisations:
+** Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+** Australian Computational Earth Systems Simulator - http://www.access.edu.au
+** Monash Cluster Computing - http://www.mcc.monash.edu.au
+**
+** Contributors:
+** Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+** Patrick D. Sunter, Software Engineer, VPAC. (patrick at vpac.org)
+** Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+** Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+** Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+** Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+** Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+** Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+** David Stegman, Postdoctoral Fellow, Monash University. (david.stegman at sci.monash.edu.au)
+** Wendy Sharples, PhD Student, Monash University (wendy.sharples at sci.monash.edu.au)
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+**
+*/
+/** \file
+** Role:
+** An IntegrationPointMapper which maps one MaterialPointsSwarm to one IntegrationPointsSwarm.
+** Each material point will then have a corresponding integration point generated during mapping.
+**
+** Assumptions:
+**
+** Comments:
+** Reverse mapping between integration point to material can be done through the IntegrationPointsSwarm or
+** IntegrationPointMapper interface. It does this by extending each IntegrationPoint with a MaterialPointRef
+** struct, which has enough information to fetch a particular point out of a particular swarm again.
+**
+**
+** $Id: OneToManyMapper.h 189 2005-10-20 00:39:29Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __PICellerator_MaterialPoints_OneToManyMapper_h__
+#define __PICellerator_MaterialPoints_OneToManyMapper_h__
+
+ extern const Type OneToManyMapper_Type;
+
+ struct OneToManyRef {
+ int numParticles;
+ int *particleInds;
+ float *weights;
+ };
+
+ /* OneToManyMapper information */
+ #define __OneToManyMapper \
+ __IntegrationPointMapper \
+ \
+ Stream* errorStream; \
+ MaterialPointsSwarm* materialSwarm; \
+ Index refHandle; /**< Extension handle to reference struct of material points */
+
+ struct OneToManyMapper { __OneToManyMapper };
+
+ #ifndef ZERO
+ #define ZERO 0
+ #endif
+
+ #define ONETOMANYMAPPER_DEFARGS \
+ INTEGRATIONPOINTMAPPER_DEFARGS
+
+ #define ONETOMANYMAPPER_PASSARGS \
+ INTEGRATIONPOINTMAPPER_PASSARGS
+
+OneToManyMapper* _OneToManyMapper_New( ONETOMANYMAPPER_DEFARGS );
+
+void _OneToManyMapper_Init( void* mapper, MaterialPointsSwarm* materialSwarm );
+
+ void _OneToManyMapper_Delete( void* mapper );
+ void _OneToManyMapper_Print( void* mapper, Stream* stream );
+ #define OneToManyMapper_Copy( self ) \
+ (OneToManyMapper*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+ #define OneToManyMapper_DeepCopy( self ) \
+ (OneToManyMapper*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+ void* _OneToManyMapper_Copy( void* mapper, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+ void _OneToManyMapper_AssignFromXML( void* shape, Stg_ComponentFactory* cf, void* data );
+ void _OneToManyMapper_Build( void* mapper, void* data ) ;
+ void _OneToManyMapper_Initialise( void* mapper, void* data );
+ void _OneToManyMapper_Execute( void* mapper, void* data );
+ void _OneToManyMapper_Destroy( void* mapper, void* data );
+
+ MaterialPointsSwarm** _OneToManyMapper_GetMaterialPointsSwarms( void* mapper, Index* count );
+ Material_Index _OneToManyMapper_GetMaterialIndexOn( void* mapper, void* point );
+ void* _OneToManyMapper_GetExtensionOn( void* mapper, void* point, ExtensionInfo_Index extHandle );
+ 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 );
+
+#endif
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/OneToManyMapper.meta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MaterialPoints/src/OneToManyMapper.meta Thu Dec 03 14:28:04 2009 +1100
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">OneToManyMapper</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC and MCC</param>
+<param name="Project">PICellerator</param>
+<param name="Location">./PICellerator/MaterialPoints/src/</param>
+<param name="Project Web">http://www.stgermainproject.org/PICellerator.html</param>
+<param name="Copyright">Copyright (C) 2005 VPAC and Monash Cluster Computing.</param>
+<param name="License">http://www.opensource.org/licenses/bsd-license.php</param>
+<param name="Parent">IntegrationPointMapper</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">An abstract mapper which will yield one-to-one mapping of integration points to material points.</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+ <struct>
+ <param name="Essential">True</param>
+ <param name="Name">MaterialPointsSwarm</param>
+ <param name="Type">MaterialPointsSwarm</param>
+ <param name="Description">The list of material points to be mapped.</param>
+ </struct>
+</list>
+
+<!-- Add an exmaple XML if possible -->
+<param name="Example">n/a</param>
+
+</StGermainData>
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/OneToOneMapper.c
--- a/MaterialPoints/src/OneToOneMapper.c Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/OneToOneMapper.c Thu Dec 03 14:28:04 2009 +1100
@@ -198,4 +198,14 @@ void* _OneToOneMapper_GetExtensionOn( vo
return ExtensionManager_Get( swarm->particleExtensionMgr, materialPoint, extHandle );
}
+double _OneToOneMapper_GetDoubleFromExtension(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs) {
+ return *(double*)(IntegrationPointMapper_GetExtensionOn(mapper, intPoint, extHandle) + offs);
+}
+double _OneToOneMapper_GetDoubleFromMaterial(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs) {
+ MaterialPointsSwarm *matSwarm;
+ MaterialPoint *matPoint;
+
+ matPoint = OneToOneMapper_GetMaterialPoint(mapper, intPoint, &matSwarm);
+ return *(double*)(MaterialPointsSwarm_GetMaterialExtensionOn(matSwarm, matPoint, extHandle) + offs);
+}
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/OneToOneMapper.h
--- a/MaterialPoints/src/OneToOneMapper.h Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/OneToOneMapper.h Thu Dec 03 14:28:04 2009 +1100
@@ -114,6 +114,8 @@
Material_Index _OneToOneMapper_GetMaterialIndexOn( void* mapper, void* point );
void* _OneToOneMapper_GetExtensionOn( void* mapper, void* point, ExtensionInfo_Index extHandle );
+ double _OneToOneMapper_GetDoubleFromExtension(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs);
+ double _OneToOneMapper_GetDoubleFromMaterial(void* mapper, void* intPoint, ExtensionInfo_Index extHandle, int offs);
MaterialPointRef* OneToOneMapper_GetMaterialRef( void* mapper, void* integrationPoint );
diff -r 8da41f9da12e -r 3cebd298f943 MaterialPoints/src/types.h
--- a/MaterialPoints/src/types.h Wed Dec 02 11:55:14 2009 +1100
+++ b/MaterialPoints/src/types.h Thu Dec 03 14:28:04 2009 +1100
@@ -61,6 +61,8 @@
typedef struct IntegrationPointMapper IntegrationPointMapper;
typedef struct OneToOneMapper OneToOneMapper;
+ typedef struct OneToManyRef OneToManyRef;
+ typedef struct OneToManyMapper OneToManyMapper;
typedef struct CoincidentMapper CoincidentMapper;
typedef struct GaussCoincidentMapper GaussCoincidentMapper;
typedef struct GaussMapper GaussMapper;
diff -r 8da41f9da12e -r 3cebd298f943 Utils/src/BuoyancyForceTerm.c
--- a/Utils/src/BuoyancyForceTerm.c Wed Dec 02 11:55:14 2009 +1100
+++ b/Utils/src/BuoyancyForceTerm.c Thu Dec 03 14:28:04 2009 +1100
@@ -341,6 +341,8 @@ void _BuoyancyForceTerm_AssembleElement(
double totalWeight = 0.0;
double adjustFactor = 0.0;
+ double density;
+ double alpha;
elementType = FeMesh_GetElementType( mesh, lElement_I );
elementNodeCount = elementType->nodeCount;
@@ -378,13 +380,22 @@ void _BuoyancyForceTerm_AssembleElement(
/* Get parameters */
if ( temperatureField )
FeVariable_InterpolateFromMeshLocalCoord( temperatureField, mesh, lElement_I, xi, &temperature );
-
+
+ density = IntegrationPointMapper_GetDoubleFromMaterial(
+ swarm->mapper, particle, self->materialExtHandle,
+ offsetof(BuoyancyForceTerm_MaterialExt, density));
+ alpha = IntegrationPointMapper_GetDoubleFromMaterial(
+ swarm->mapper, particle, self->materialExtHandle,
+ offsetof(BuoyancyForceTerm_MaterialExt, alpha));
+
+/*
material = IntegrationPointsSwarm_GetMaterialOn( (IntegrationPointsSwarm*) swarm, particle );
materialExt = ExtensionManager_Get( material->extensionMgr, material, self->materialExtHandle );
+*/
/* Calculate Force */
gravity = BuoyancyForceTerm_CalcGravity( self, (Swarm*)swarm, lElement_I, particle );
- force = materialExt->density * gravity * (1.0 - materialExt->alpha * temperature);
+ force = density * gravity * (1.0 - alpha * temperature);
factor = detJac * particle->weight * adjustFactor * force;
/* Apply force in the correct direction */
More information about the CIG-COMMITS
mailing list