[cig-commits] r5514 - in long/3D/Gale/trunk/src/Underworld: .
Utils/src
walter at geodynamics.org
walter at geodynamics.org
Thu Dec 7 14:14:58 PST 2006
Author: walter
Date: 2006-12-07 14:14:58 -0800 (Thu, 07 Dec 2006)
New Revision: 5514
Removed:
long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.c
long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.h
long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.meta
Modified:
long/3D/Gale/trunk/src/Underworld/
long/3D/Gale/trunk/src/Underworld/Utils/src/Init.c
long/3D/Gale/trunk/src/Underworld/Utils/src/Utils.h
long/3D/Gale/trunk/src/Underworld/Utils/src/types.h
Log:
r767 at earth: boo | 2006-12-07 14:13:25 -0800
r746 at earth (orig r388): KathleenHumble | 2006-11-22 16:11:08 -0800
Removing DVCWeights from Underworld so it
does not conflict with new copy of DVCWeights
in PICellerator/Weights
Property changes on: long/3D/Gale/trunk/src/Underworld
___________________________________________________________________
Name: svk:merge
- 9570c393-cf10-0410-b476-9a651db1e55a:/cig:766
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:387
+ 9570c393-cf10-0410-b476-9a651db1e55a:/cig:767
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:388
Deleted: long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.c 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.c 2006-12-07 22:14:58 UTC (rev 5514)
@@ -1,930 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-** Copyright (c) 2006, Monash Cluster Computing
-** All rights reserved.
-** Redistribution and use in source and binary forms, with or without modification,
-** are permitted provided that the following conditions are met:
-**
-** * Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-** * Neither the name of the Monash University nor the names of its contributors
-** may be used to endorse or promote products derived from this software
-** without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**
-**
-** Contact:
-*% Louis Moresi - Louis.Moresi at sci.monash.edu.au
-*%
-** Author:
-** Mirko Velic - Mirko.Velic at sci.monash.edu.au
-**
-** Assumptions:
-** I am assuming that the xi's (local coords) on the IntegrationPoint particles
-** are precalculated somewhere and get reset based on material PIC positions each time step.
-**
-** Notes:
-** The DVCWeights class should really be a class the next level up here.
-** We should be able to swap out the WeightsCalculator_CalculateAll function instead of just setting
-** a pointer inside that function
-**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-
-
-/****************************************************************************************************************
-
- The algorithm here-in computes a discrete voronoi diagram per FEM cell given a set of local
- particle positions, in 3D and 2D. The volumes of the Voronoi regions are used as integration weights for
- the integration point swarm and the integration points are the centroids of the same volumes.
-
- For a description of this algorithm, see the article by Velic et.al.
- "A Fast Robust Algorithm for computing Discrete Voronoi Diagrams in N-dimensions"
-
- Warning:
-
- Be very careful of making changes here. It may have undesirable consequences in regard to the
- speed of this implementation. Speed is very important here. You may be tempted to merge the
- 2D and 3D functions. Don't do it unless you can do it without using control statements.
- This implementation uses von-Neumann neighbourhoods for boundary chain growth. Do not be tempted
- to implement "diagonal" neighbourhood growth cycles. For this is an abomination unto me.
-*****************************************************************************************************************/
-
-#include <mpi.h>
-#include <StGermain/StGermain.h>
-#include <StgFEM/StgFEM.h>
-#include <PICellerator/PICellerator.h>
-#include "types.h"
-#include "DVCWeights.h"
-
-
-#include <assert.h>
-#include <string.h>
-#include <math.h>
-
-
-/* Textual name of this class */
-const Type DVCWeights_Type = "DVCWeights";
-
-/*----------------------------------------------------------------------------------------------------------------------------------
-** Constructors
-*/
-DVCWeights* DVCWeights_New( Name name, Dimension_Index dim ) {
- DVCWeights* self = (DVCWeights*) _DVCWeights_DefaultNew( name );
-
- DVCWeights_InitAll( self, dim );
- return self;
-}
-
-DVCWeights* _DVCWeights_New(
- SizeT _sizeOfSelf,
- Type type,
- Stg_Class_DeleteFunction* _delete,
- Stg_Class_PrintFunction* _print,
- Stg_Class_CopyFunction* _copy,
- Stg_Component_DefaultConstructorFunction* _defaultConstructor,
- Stg_Component_ConstructFunction* _construct,
- Stg_Component_BuildFunction* _build,
- Stg_Component_InitialiseFunction* _initialise,
- Stg_Component_ExecuteFunction* _execute,
- Stg_Component_DestroyFunction* _destroy,
- WeightsCalculator_CalculateFunction* _calculate,
- Name name )
-{
- DVCWeights* self;
-
- /* Allocate memory */
- assert( _sizeOfSelf >= sizeof(DVCWeights) );
- self = (DVCWeights*)_WeightsCalculator_New(
- _sizeOfSelf,
- type,
- _delete,
- _print,
- _copy,
- _defaultConstructor,
- _construct,
- _build,
- _initialise,
- _execute,
- _destroy,
- _calculate,
- name );
-
-
- /* General info */
-
- /* Virtual Info */
- return self;
-}
-
-void _DVCWeights_Init( void* dvcWeights, int *res ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- self->isConstructed = True;
-
- self->resX = res[I_AXIS];
- self->resY = res[J_AXIS];
- self->resZ = res[K_AXIS];
-
-}
-
-void DVCWeights_InitAll( void* dvcWeights, Dimension_Index dim ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- WeightsCalculator_InitAll( self, dim );
-}
-
-/*------------------------------------------------------------------------------------------------------------------------
-** Virtual functions
-*/
-
-void _DVCWeights_Delete( void* dvcWeights ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- /* Delete parent */
- _WeightsCalculator_Delete( self );
-}
-
-
-void _DVCWeights_Print( void* dvcWeights, Stream* stream ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- /* Print parent */
- _WeightsCalculator_Print( self, stream );
-}
-
-
-
-void* _DVCWeights_Copy( void* dvcWeights, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- DVCWeights* newDVCWeights;
-
- newDVCWeights = (DVCWeights*)_WeightsCalculator_Copy( self, dest, deep, nameExt, ptrMap );
- return (void*)newDVCWeights;
-}
-
-void* _DVCWeights_DefaultNew( Name name ) {
- return (void*) _DVCWeights_New(
- sizeof(DVCWeights),
- DVCWeights_Type,
- _DVCWeights_Delete,
- _DVCWeights_Print,
- _DVCWeights_Copy,
- _DVCWeights_DefaultNew,
- _DVCWeights_Construct,
- _DVCWeights_Build,
- _DVCWeights_Initialise,
- _DVCWeights_Execute,
- _DVCWeights_Destroy,
- _DVCWeights_Calculate,
- name );
-}
-
-
-void _DVCWeights_Construct( void* dvcWeights, Stg_ComponentFactory* cf, void *data ) {
-
- DVCWeights* self = (DVCWeights*) dvcWeights;
-
- int defaultResolution;
- int resolution[3];
-
-
- defaultResolution = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "resolution", 10 );
- resolution[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "resolutionX", defaultResolution );
- resolution[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "resolutionY", defaultResolution );
- resolution[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "resolutionZ", defaultResolution );
-
- _WeightsCalculator_Construct( self, cf, data );
-
-
- _DVCWeights_Init( self, resolution );
-}
-
-void _DVCWeights_Build( void* dvcWeights, void* data ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- _WeightsCalculator_Build( self, data );
-}
-void _DVCWeights_Initialise( void* dvcWeights, void* data ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- _WeightsCalculator_Initialise( self, data );
-}
-void _DVCWeights_Execute( void* dvcWeights, void* data ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- _WeightsCalculator_Execute( self, data );
-}
-void _DVCWeights_Destroy( void* dvcWeights, void* data ) {
- DVCWeights* self = (DVCWeights*)dvcWeights;
- _WeightsCalculator_Destroy( self, data );
-}
-
-/*-------------------------------------------------------------------------------------------------------------------------
-** Private Functions
-*/
-
-void get_centroids( struct cell *cells,struct particle *pList,
- int n, int m, int l,int nump,double vol){
- int i;
- int *count;
-
- count=(int *)malloc(sizeof(int)*nump);
-
- for(i=0;i<nump;i++){
- count[i] = 0;
- pList[ i ].cx = 0.0;
- pList[ i ].cy = 0.0;
- pList[ i ].cz = 0.0;
- }
- for(i=0;i<n*m*l;i++){
- pList[ cells[i].p ].cx += cells[i].x;
- pList[ cells[i].p ].cy += cells[i].y;
- pList[ cells[i].p ].cz += cells[i].z;
- count[ cells[i].p ]++;//for total volume of a cell
- }
- for(i=0;i<nump;i++){
- pList[ i ].w = count[i]*vol;
- if(count[i] != 0){
- pList[ i ].cx /= count[i];
- pList[ i ].cy /= count[i];
- pList[ i ].cz /= count[i];
- }
- }
- free(count);
-}
-void get_centroids2d( struct cell2d *cells,struct particle2d *pList,
- int n, int m, int nump,double vol){
- int i;
- int *count;
-
- count=(int *)malloc(sizeof(int)*nump);
-
- for(i=0;i<nump;i++){
- count[i] = 0;
- pList[ i ].cx = 0.0;
- pList[ i ].cy = 0.0;
- }
- for(i=0;i<n*m;i++){
- pList[ cells[i].p ].cx += cells[i].x;
- pList[ cells[i].p ].cy += cells[i].y;
- count[ cells[i].p ]++;//for total volume of a cell
- }
- for(i=0;i<nump;i++){
- pList[ i ].w = count[i]*vol;
- if(count[i] != 0){
- pList[ i ].cx /= count[i];
- pList[ i ].cy /= count[i];
- }
- }
- free(count);
-}
-
-void claim_cells(struct chain **bbchain,struct cell **ccells,struct particle **pList,int p_i){
- int i,count;
- int cell_num0;
- double x0,y0,x1,y1,x2,y2,z0,z1,z2,dist1,dist2;
- struct chain *bchain = &(*bbchain)[p_i];
- struct cell *cells = *ccells;
- int *temp;
-
- count = 0;
- bchain->numclaimed = 0;
-
-
- for(i=0;i<bchain->sizeofboundary;i++){
- cell_num0 = bchain->new_bound_cells[i];// cell number we are trying to claim
- if(cells[cell_num0].p == -1){//if cell unowned then claim cell
- /* This is the bit needed for mallocing */
- /* do a test here to see if we need to realloc bchain->new_claimed_cells and bchain->new_bound_cells */
- if( count > bchain->new_claimed_cells_malloced - 1 ){
- temp = (int *)realloc( bchain->new_claimed_cells, (bchain->new_claimed_cells_malloced + INC)*sizeof(int) );
- bchain->new_claimed_cells = temp;
- bchain->new_claimed_cells_malloced += INC;
- temp = (int *)realloc( bchain->new_bound_cells, (bchain->new_bound_cells_malloced + INC)*sizeof(int) );
- bchain->new_bound_cells = temp;
- bchain->new_bound_cells_malloced += INC;
- }
- /* end of bit needed for mallocing */
- bchain->new_claimed_cells[count] = cell_num0;
- bchain->numclaimed++;
- count++;
- cells[cell_num0].p = p_i;// this cell is now owned by particle p_i
- }
- else{
- if(cells[cell_num0].p != p_i){
- //we need a contest between particles for the cell.
- x2 = (*pList)[p_i].x;
- y2 = (*pList)[p_i].y;
- z2 = (*pList)[p_i].z;
- x1 = (*pList)[cells[cell_num0].p].x;
- y1 = (*pList)[cells[cell_num0].p].y;
- z1 = (*pList)[cells[cell_num0].p].z;
- x0 = cells[cell_num0].x;
- y0 = cells[cell_num0].y;
- z0 = cells[cell_num0].z;
-
- dist1 = distance(x0,y0,z0,x1,y1,z1);
- dist2 = distance(x0,y0,z0,x2,y2,z2);
- if(dist1 > dist2){
- bchain->new_claimed_cells[count] = cell_num0;
- bchain->numclaimed++;
- count++;
- cells[cell_num0].p = p_i;// this cell is now owned by particle p_i
- }
- }//if
- }//else
- }
- bchain->new_claimed_cells[count] = -1;// end of list
-}
-
-void claim_cells2d(struct chain **bbchain,struct cell2d **ccells,struct particle2d **pList,int p_i){
- int i,count;
- int cell_num0;
- double x0,y0,x1,y1,x2,y2,dist1,dist2;
- struct chain *bchain = &(*bbchain)[p_i];
- struct cell2d *cells = *ccells;
- int *temp;
-
- count = 0;
- bchain->numclaimed = 0;
-
-
- for(i=0;i<bchain->sizeofboundary;i++){
- cell_num0 = bchain->new_bound_cells[i];// cell number we are trying to claim
- if(cells[cell_num0].p == -1){//if cell unowned then claim cell
- /* This is the bit needed for mallocing */
- /* do a test here to see if we need to realloc bchain->new_claimed_cells and bchain->new_bound_cells */
- if( count > bchain->new_claimed_cells_malloced - 1 ){
- temp = (int *)realloc( bchain->new_claimed_cells, (bchain->new_claimed_cells_malloced + INC)*sizeof(int) );
- bchain->new_claimed_cells = temp;
- bchain->new_claimed_cells_malloced += INC;
- temp = (int *)realloc( bchain->new_bound_cells, (bchain->new_bound_cells_malloced + INC)*sizeof(int) );
- bchain->new_bound_cells = temp;
- bchain->new_bound_cells_malloced += INC;
- }
- /* end of bit needed for mallocing */
- bchain->new_claimed_cells[count] = cell_num0;
- bchain->numclaimed++;
- count++;
- cells[cell_num0].p = p_i;// this cell is now owned by particle p_i
- }
- else{
- if(cells[cell_num0].p != p_i){
- //we need a contest between particles for the cell.
- x2 = (*pList)[p_i].x;
- y2 = (*pList)[p_i].y;
- x1 = (*pList)[cells[cell_num0].p].x;
- y1 = (*pList)[cells[cell_num0].p].y;
- x0 = cells[cell_num0].x;
- y0 = cells[cell_num0].y;
-
- dist1 = distance2d(x0,y0,x1,y1);
- dist2 = distance2d(x0,y0,x2,y2);
- if(dist1 > dist2){
- bchain->new_claimed_cells[count] = cell_num0;
- bchain->numclaimed++;
- count++;
- cells[cell_num0].p = p_i;// this cell is now owned by particle p_i
- }
- }//if
- }//else
- }
- bchain->new_claimed_cells[count] = -1;// end of list
-}
-
-
-void reset_grid(struct cell **cells, int n){
- int i;
-
- for(i=0;i<n;i++){
- (*cells)[i].p = -1;
- (*cells)[i].done = 0;
- }
-}
-void reset_grid2d(struct cell2d **cells, int n){
- int i;
-
- for(i=0;i<n;i++){
- (*cells)[i].p = -1;
- (*cells)[i].done = 0;
- }
-}
-void update_bchain(struct chain **bbchain,struct cell **ccells,int p_i){
- int i,k,count;
- int cell_num0,cell_num[6],cell_num1;
- struct chain *bchain = &(*bbchain)[p_i];
- struct cell *cells = *ccells;
- int *temp;
-
- count = 0;
- bchain->sizeofboundary = 0;
- for(i=0;i<bchain->numclaimed;i++){
- cell_num0 =bchain->new_claimed_cells[i];
-
- cell_num[0] = cells[cell_num0].S;
- cell_num[1] = cells[cell_num0].N;
- cell_num[2] = cells[cell_num0].E;
- cell_num[3] = cells[cell_num0].W;
- cell_num[4] = cells[cell_num0].U;
- cell_num[5] = cells[cell_num0].D;
-
- for(k=0;k<6;k++){
- cell_num1 = cell_num[k];
- // if cell does not already belong to the particle and hasn't been
- // marked as being done then add it to new boundary array and mark it
- // as done
- if(cell_num1 != -2){
- if(cells[cell_num1].p != p_i && cells[cell_num1].done != 1){
- /* This is the bit needed for mallocing */
- /* do a test here to see if we need to realloc bchain->new_claimed_cells and bchain->new_bound_cells */
- if( count > bchain->new_bound_cells_malloced - 1 ){
- temp = (int *)realloc( bchain->new_claimed_cells, (bchain->new_claimed_cells_malloced + INC)*sizeof(int) );
- bchain->new_claimed_cells = temp;
- bchain->new_claimed_cells_malloced += INC;
- temp = (int *)realloc( bchain->new_bound_cells, (bchain->new_bound_cells_malloced + INC)*sizeof(int) );
- bchain->new_bound_cells = temp;
- bchain->new_bound_cells_malloced += INC;
- }
- /* end of bit needed for mallocing */
- bchain->new_bound_cells[count] = cell_num1;
- bchain->sizeofboundary++;
- count++;
- cells[cell_num1].done = 1;
- }//if
- }//if cell_num1
- }//for k
- }//for
- // reset the done flags back to zero for next time
- for(i=0;i<count;i++){
- cells[ bchain->new_bound_cells[i] ].done = 0;
- }
-}
-
-void update_bchain2d(struct chain **bbchain,struct cell2d **ccells,int p_i){
- int i,k,count;
- int cell_num0,cell_num[4],cell_num1;
- struct chain *bchain = &(*bbchain)[p_i];
- struct cell2d *cells = *ccells;
- int *temp;
-
- count = 0;
- bchain->sizeofboundary = 0;
- for(i=0;i<bchain->numclaimed;i++){
- cell_num0 =bchain->new_claimed_cells[i];
-
- cell_num[0] = cells[cell_num0].S;
- cell_num[1] = cells[cell_num0].N;
- cell_num[2] = cells[cell_num0].E;
- cell_num[3] = cells[cell_num0].W;
-
- for(k=0;k<4;k++){
- cell_num1 = cell_num[k];
- // if cell does not already belong to the particle and hasn't been
- // marked as being done then add it to new boundary array and mark it
- // as done
- if(cell_num1 != -2){
- if(cells[cell_num1].p != p_i && cells[cell_num1].done != 1){
- /* This is the bit needed for mallocing */
- /* do a test here to see if we need to realloc bchain->new_claimed_cells and bchain->new_bound_cells */
- if( count > bchain->new_bound_cells_malloced - 1 ){
- temp = (int *)realloc( bchain->new_claimed_cells, (bchain->new_claimed_cells_malloced + INC)*sizeof(int) );
- bchain->new_claimed_cells = temp;
- bchain->new_claimed_cells_malloced += INC;
- temp = (int *)realloc( bchain->new_bound_cells, (bchain->new_bound_cells_malloced + INC)*sizeof(int) );
- bchain->new_bound_cells = temp;
- bchain->new_bound_cells_malloced += INC;
- }
- /* end of bit needed for mallocing */
- bchain->new_bound_cells[count] = cell_num1;
- bchain->sizeofboundary++;
- count++;
- cells[cell_num1].done = 1;
- }//if
- }//if cell_num1
- }//for k
- }//for
- // reset the done flags back to zero for next time
- for(i=0;i<count;i++){
- cells[ bchain->new_bound_cells[i] ].done = 0;
- }
-}
-
-
-/***********************************************************
- n m l are z x y grid resolutions respectively.
-************************************************************/
-void construct_grid(struct cell **cell_list, int n, int m, int l,
- double x0,double y0,double z0,double x1,double y1,double z1){
- struct cell *cells;
- int i,j,k;
- double dx,dy,dz,Dx,Dy,Dz,X,Y,Z;
-
- cells = malloc(n*m*l*sizeof(struct cell));
- for(i=0;i<l*m*n;i++){
- cells[i].S = -2;
- cells[i].N = -2;
- cells[i].E = -2;
- cells[i].W = -2;
- cells[i].U = -2;
- cells[i].D = -2;
- cells[i].p = -1;
- cells[i].done = 0;
- }
- for(k=0;k<n;k++){
- for(i=0;i<l*(m-1);i++){
- cells[i+k*l*m].N=i+k*l*m+l;
- cells[i+l+k*l*m].S = i+k*l*m;
- }
- }
- for(k=0;k<n-1;k++){
- for(i=0;i<l*m;i++){
- cells[i+k*l*m].U=i+k*l*m+l*m;
- cells[i+k*l*m+l*m].D = i+k*l*m;
- }
- }
-
- Dx = x1-x0; Dy = y1-y0; Dz = z1-z0;
- dx = Dx/l; dy = Dy/m; dz = Dz/n;
- Z = z0 - dz/2.0;
- for(k=0;k<n;k++){
- Z = Z + dz;
- Y = y0 - dy/2.0;
- for(j=0;j<m;j++){
- Y = Y + dy;
- X = x0 - dx/2.0;
- for(i=0;i<l;i++){
- X=X+dx;
- cells[i+l*j+k*l*m].x = X;
- cells[i+l*j+k*l*m].y = Y;
- cells[i+l*j+k*l*m].z = Z;
- if(i!= l-1){
- cells[i+l*j+k*l*m].E = i+l*j+1+k*l*m;
- cells[i+l*j+1+k*l*m].W = i+l*j+k*l*m;
- }
- }//x
- }//y
- }//z
- *cell_list = cells;
-}
-
-/***********************************************************
- m l are x y grid resolutions respectively.
-************************************************************/
-void construct_grid2d(struct cell2d **cell_list, int m, int l,
- double x0,double y0,double x1,double y1){
- struct cell2d *cells;
- int i,j;
- double dx,dy,Dx,Dy,X,Y;
-
- cells = malloc(m*l*sizeof(struct cell));
- for(i=0;i<l*m;i++){
- cells[i].S = -2;
- cells[i].N = -2;
- cells[i].E = -2;
- cells[i].W = -2;
- cells[i].p = -1;
- cells[i].done = 0;
- }
- for(i=0;i<l*(m-1);i++){
- cells[i].N=i+l;
- cells[i+l].S = i;
- }
- Dx = x1-x0; Dy = y1-y0;
- dx = Dx/l; dy = Dy/m;
- Y = y0 - dy/2.0;
- for(j=0;j<m;j++){
- Y = Y + dy;
- X = x0 - dx/2.0;
- for(i=0;i<l;i++){
- X=X+dx;
- cells[i+l*j].x = X;
- cells[i+l*j].y = Y;
- if(i!= l-1){
- cells[i+l*j].E = i+l*j+1;
- cells[i+l*j+1].W = i+l*j;
- }
- }
- }
- *cell_list = cells;
-}
-
-
-double distance(double x0, double y0, double z0, double x1, double y1, double z1){
- return (x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0);
-}
-double distance2d(double x0, double y0,double x1, double y1){
- return (x1-x0)*(x1-x0)+(y1-y0)*(y1-y0);
-}
-
-void init_structs( struct chain **bchain, struct particle **pList, int nump){
-
- int i;
- // init the data structures
- if( (*bchain = (struct chain *)malloc( nump*sizeof(struct chain ) )) == 0){
- printf("No memory for bchain\nCannot continue.\n");
- exit(1);
- }
- // note that doing bchain[i]->new... doesn't work
- for(i=0;i<nump;i++){
- (*bchain)[i].new_claimed_cells = (int *)malloc(INC*sizeof(int));
- (*bchain)[i].new_claimed_cells_malloced = INC;
- (*bchain)[i].new_bound_cells = (int *)malloc(INC*sizeof(int));
- (*bchain)[i].new_bound_cells_malloced = INC;
- }
- if( (*pList = (struct particle *)malloc( nump*sizeof(struct particle ) )) == 0){
- printf("No memory for pList\nCannot continue.\n");
- exit(1);
- }
-
-}
-
-void init_structs2d( struct chain **bchain, struct particle2d **pList, int nump){
-
- int i;
- // init the data structures
- if( (*bchain = (struct chain *)malloc( nump*sizeof(struct chain ) )) == 0){
- printf("No memory for bchain\nCannot continue.\n");
- exit(1);
- }
- //
- for(i=0;i<nump;i++){
- (*bchain)[i].new_claimed_cells = (int *)malloc(INC*sizeof(int));
- (*bchain)[i].new_claimed_cells_malloced = INC;
- (*bchain)[i].new_bound_cells = (int *)malloc(INC*sizeof(int));
- (*bchain)[i].new_bound_cells_malloced = INC;
- }
- if( (*pList = (struct particle2d *)malloc( nump*sizeof(struct particle2d ) )) == 0){
- printf("No memory for pList\nCannot continue.\n");
- exit(1);
- }
-
-}
-/********************************************************************
-
- All the parameters passed into create_voronoi
- must be initialised already.
-
-*********************************************************************/
-void create_voronoi( struct chain **bchain, struct particle **pList, struct cell **cells,
- double dx, double dy, double dz,
- int nump,
- int numx, int numy, int numz,
- double BBXMIN, double BBXMAX,
- double BBYMIN, double BBYMAX,
- double BBZMIN, double BBZMAX){
- int i,j,k,l;
- int count;
- int claimed;
-
- for(i=0;i<nump;i++){
- k = ((*pList)[i].x - BBXMIN)/dx;
- j = ((*pList)[i].y - BBYMIN)/dy;
- l = ((*pList)[i].z - BBZMIN)/dz;
- (*cells)[k+j*numx+l*numx*numy].p = i; //particle number i
- (*bchain)[i].numclaimed = 1;// number of most recently claimed cells
- (*bchain)[i].sizeofboundary = 0;
- (*bchain)[i].totalclaimed = 1;// total of claimed cells so far.
- (*bchain)[i].done = 0;
- (*bchain)[i].index = k+j*numx+l*numx*numy;// ith particle is in cell # k+j*numx
- (*bchain)[i].new_claimed_cells[0] = k+j*numx+l*numx*numy;
- // ith particle has just claimed cell number k+j*numx+l*numx*numy
- (*bchain)[i].new_claimed_cells[1] = -1;// denotes end of claimed_cells list
- // when we have finished claiming cells we call this function.
- update_bchain(bchain,cells,i);
- }
- count = i;// number of particles
- claimed = 1;
-
- while(claimed != 0){
- claimed = 0 ;
- for(i=0;i<count;i++){
- claim_cells(bchain,cells,pList,i);
- claimed += (*bchain)[i].numclaimed;
- update_bchain(bchain,cells,i);
- }
- }//while
-}
-/********************************************************************
-
- All the parameters passed into create_voronoi
- must be initialised already.
-
-*********************************************************************/
-void create_voronoi2d( struct chain **bchain, struct particle2d **pList, struct cell2d **cells,
- double dx, double dy,
- int nump,
- int numx, int numy,
- double BBXMIN, double BBXMAX,
- double BBYMIN, double BBYMAX){
- int i,j,k;
- int claimed;
-
- for(i=0;i<nump;i++){
- k = ((*pList)[i].x - BBXMIN)/dx;
- j = ((*pList)[i].y - BBYMIN)/dy;
-
- (*cells)[k+j*numx].p = i; //particle number i
-
- (*bchain)[i].numclaimed = 1;// number of most recently claimed cells
- (*bchain)[i].sizeofboundary = 0;
- (*bchain)[i].totalclaimed = 1;// total of claimed cells so far.
- (*bchain)[i].done = 0;
- (*bchain)[i].index = k+j*numx;// ith particle is in cell # k+j*numx
- (*bchain)[i].new_claimed_cells[0] = k+j*numx; // ith particle has just claimed cell number k+j*numx
- (*bchain)[i].new_claimed_cells[1] = -1;// denotes end of claimed_cells list
- // when we have finished claiming cells we call this function.
- update_bchain2d( bchain, cells, i);
- }//nump
-
- claimed = 1;
-
- while(claimed != 0){
- claimed = 0 ;
- for(i=0;i<nump;i++){
- claim_cells2d( bchain, cells, pList, i);
- claimed += (*bchain)[i].numclaimed;
- update_bchain2d( bchain, cells, i);
- }
- }//while
-}
-void _DVCWeights_Calculate3D( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I ) {
- DVCWeights* self = (DVCWeights*) dvcWeights;
- Swarm* swarm = (Swarm*) _swarm;
- Particle_InCellIndex cParticleCount;
- IntegrationPoint** particle;
- static int visited = 0 ;
- double dx,dy,dz,da;
- static struct cell *cells;// the connected grid
- struct particle *pList;// particle List
- struct chain *bchain;//boundary chain
- int nump,numx,numy,numz;
- double BBXMIN = -1.0; // the ranges of the local coordinates of a FEM cell.
- double BBXMAX = 1.0;
- double BBYMIN = -1.0;
- double BBYMAX = 1.0;
- double BBZMIN = -1.0;
- double BBZMAX = 1.0;
- int i,k;
-
- numx = self->resX;
- numy = self->resY;
- numz = self->resZ;
-
- nump = cParticleCount = swarm->cellParticleCountTbl[lCell_I];
-
- Journal_Firewall( nump , Journal_Register(Error_Type, "DVC_Weights"), "Error in %s: Problem has an under resolved cell (Cell Id = %d), add more particles to your model\n", __func__, lCell_I );
-
- dx = (BBXMAX - BBXMIN)/numx;
- dy = (BBYMAX - BBYMIN)/numy;
- dz = (BBZMAX - BBZMIN)/numz;
- da = dx*dy*dz;
-
- // Construct the grid for the Voronoi cells only once.
- // If we wanted to call this function again during a job with a different resolution
- // then we should destroy the grid once we have looped through the whole mesh.
- // I am assuming we are not going to do that for now.
- // Easy to implement this anyway, if needed.
- if(!visited){
- /* The DVCWeights class should really be a class the next level up here */
- /* We should be able to swap out the WeightsCalculator_CalculateAll instead of just setting
- a pointer inside that function */
- visited++;
- construct_grid(&cells,numz,numy,numx,BBXMIN,BBYMIN,BBZMIN,BBXMAX,BBYMAX,BBZMAX);
- }
-
-
- // init the data structures
- init_structs( &bchain, &pList, nump);
- reset_grid(&cells,numz*numy*numx);
-
- particle = (IntegrationPoint**)malloc(nump*sizeof(IntegrationPoint*));
-
- // initialize the particle positions to be the local coordinates of the material swarm particles
- // I am assuming the xi's (local coords) are precalculated somewhere and get reset based on material
- // positions each time step.
- for(i=0;i<nump;i++){
-
- particle[i] = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, lCell_I, i );
- pList[i].x = particle[i]->xi[0];
- pList[i].y = particle[i]->xi[1];
- pList[i].z = particle[i]->xi[2];
-
- }
- create_voronoi( &bchain, &pList, &cells, dx, dy, dz, nump, numx, numy, numz, BBXMIN, BBXMAX, BBYMIN, BBYMAX, BBZMIN, BBZMAX);
- get_centroids( cells, pList,numz,numy,numx,nump,da);
- // We are setting the integration points to be the centroids of the Voronoi regions here and
- // the weight is the volume of each Voronoi region.
- for(i=0;i<nump;i++){
-
- particle[i]->xi[0] = pList[i].cx;
- particle[i]->xi[1] = pList[i].cy;
- particle[i]->xi[2] = pList[i].cz;
- particle[i]->weight = pList[i].w;
-
- }
- for(k=0;k<nump;k++){
- free(bchain[k].new_claimed_cells);
- free(bchain[k].new_bound_cells);
- }
- free(particle);
- free(bchain);
- free(pList);
-
-}
-void _DVCWeights_Calculate2D( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I ) {
- DVCWeights* self = (DVCWeights*) dvcWeights;
- Swarm* swarm = (Swarm*) _swarm;
- Particle_InCellIndex cParticleCount;
- IntegrationPoint** particle;
- static int visited = 0 ;
- double dx,dy,da;
- static struct cell2d *cells;// the connected grid
- struct particle2d *pList;// particle List
- struct chain *bchain;//boundary chain
- int nump,numx,numy;
- double BBXMIN = -1.0; // the ranges of the local coordinates of a FEM cell.
- double BBXMAX = 1.0;
- double BBYMIN = -1.0;
- double BBYMAX = 1.0;
- int i,k;
-
- numx = self->resX;
- numy = self->resY;
-
- nump = cParticleCount = swarm->cellParticleCountTbl[lCell_I];
-
- Journal_Firewall( nump , Journal_Register(Error_Type, "DVC_Weights"), "Error in %s: Problem has an under resolved cell (Cell Id = %d), add more particles to your model\n", __func__, lCell_I );
-
- dx = (BBXMAX - BBXMIN)/numx;
- dy = (BBYMAX - BBYMIN)/numy;
- da = dx*dy;
-
- // Construct the grid for the Voronoi cells only once.
- // If we wanted to call this function again during a job with a different resolution
- // then we should destroy the grid once we have looped through the whole mesh.
- // I am assuming we are not going to do that for now.
- // Easy to implement this anyway, if needed.
- if(!visited){
- /* The DVCWeights class should really be a class the next level up here */
- /* We should be able to swap out the WeightsCalculator_CalculateAll instead of just setting
- a pointer inside that function */
- visited++;
- construct_grid2d(&cells,numy,numx,BBXMIN,BBYMIN,BBXMAX,BBYMAX);
- }
-
-
- // init the data structures
- init_structs2d( &bchain, &pList, nump);
- reset_grid2d(&cells,numy*numx);
-
- particle = (IntegrationPoint**)malloc(nump*sizeof(IntegrationPoint*));
-
- // initialize the particle positions to be the local coordinates of the material swarm particles
- // I am assuming the xi's (local coords) are precalculated somewhere and get reset based on material
- // positions each time step.
- for(i=0;i<nump;i++){
-
- particle[i] = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, lCell_I, i );
- pList[i].x = particle[i]->xi[0];
- pList[i].y = particle[i]->xi[1];
-
- }
- create_voronoi2d( &bchain, &pList, &cells, dx, dy, nump, numx, numy, BBXMIN, BBXMAX, BBYMIN, BBYMAX);
- get_centroids2d( cells, pList,numy,numx,nump,da);
- // We are setting the integration points to be the centroids of the Voronoi regions here and
- // the weight is the volume of each Voronoi region.
- for(i=0;i<nump;i++){
-
- particle[i]->xi[0] = pList[i].cx;
- particle[i]->xi[1] = pList[i].cy;
- particle[i]->weight = pList[i].w;
-
- }
- for(k=0;k<nump;k++){
- free(bchain[k].new_claimed_cells);
- free(bchain[k].new_bound_cells);
- }
- free(particle);
- free(bchain);
- free(pList);
-
-}
-
-void _DVCWeights_Calculate( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I ){
- Swarm* swarm = (Swarm*) _swarm;
- Dimension_Index dim = swarm->dim;
-
- if(dim == 3){
- _DVCWeights_Calculate3D( dvcWeights, _swarm, lCell_I);
- }
- else {
- _DVCWeights_Calculate2D( dvcWeights, _swarm, lCell_I);
- }
-}
-/*-------------------------------------------------------------------------------------------------------------------------
-** Public Functions
-*/
Deleted: long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.h
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.h 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.h 2006-12-07 22:14:58 UTC (rev 5514)
@@ -1,212 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-** Copyright (c) 2006, Monash Cluster Computing
-** All rights reserved.
-** Redistribution and use in source and binary forms, with or without modification,
-** are permitted provided that the following conditions are met:
-**
-** * Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-** * Neither the name of the Monash University nor the names of its contributors
-** may be used to endorse or promote products derived from this software
-** without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**
-**
-** Contact:
-*% Louis Moresi - Louis.Moresi at sci.monash.edu.au
-*%
-** Author:
-** Mirko Velic - Mirko.Velic at sci.monash.edu.au
-**
-** Assumptions:
-** I am assuming that the xi's (local coords) on the IntegrationPoint particles
-** are precalculated somewhere and get reset based on material PIC positions each time step.
-**
-**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-
-
-/****************************************************************************************************************
-
- The algorithm here-in computes a discrete voronoi diagram per FEM cell given a set of local
- particle positions, in 3D and 2D. The volumes of the Voronoi regions are used as integration weights for
- the integration point swarm and the integration points are the centroids of the same volumes.
-
- For a description of this algorithm, see the article by Velic et.al.
- "A Fast Robust Algorithm for computing Discrete Voronoi Diagrams in N-dimensions"
-
-
-
-*****************************************************************************************************************/
-
-#ifndef __Underworld_Utils_DVCWeightsClass_h__
-#define __Underworld_Utils_DVCWeightsClass_h__
-
- /* Textual name of this class */
- extern const Type DVCWeights_Type;
-
- /* DVCWeights information */
- #define __DVCWeights \
- /* General info */ \
- __WeightsCalculator \
- /* Virtual Info */\
- /* Parameters that are passed in */ \
- int resX; \
- int resY; \
- int resZ;
-
- struct DVCWeights { __DVCWeights };
-
-#define INC 50
-
-struct cell{
- int p;//particle index number
- int index;
- int N;
- int S;
- int E;
- int W;
- int U;
- int D;
- double x;
- double y;
- double z;
- int done;
-};
-struct cell2d{
- int p;//particle index number
- int index;
- int N;
- int S;
- int E;
- int W;
- double x;
- double y;
- int done;
-};
-struct chain{
- int p;//particle index number
- int index;//cell number in grid
- int sizeofboundary; // number of cells on boundary so far
- int numclaimed;
- int totalclaimed;
- int new_bound_cells_malloced;
- int new_claimed_cells_malloced;
- int *new_bound_cells;
- int *new_claimed_cells;
- int done;
-};
-struct particle{
- double x;
- double y;
- double z;
- double cx;
- double cy;
- double cz;
- double w;
- int index;
-};
-struct particle2d{
- double x;
- double y;
- double cx;
- double cy;
- double w;
- int index;
-};
-// function prototypes
-void get_centroids( struct cell *cells,struct particle *pList,
- int n,int m, int l,int nump,double vol);
-void claim_cells(struct chain **bchain,struct cell **cells,struct particle **pList,int p_i);
-void update_bchain(struct chain **bchain,struct cell **cells,int p_i);
-void reset_grid(struct cell **cells, int n );
-void reset_grid2d(struct cell2d **cells, int n );
-double distance(double x0, double y0, double z0, double x1, double y1, double z1);
-void construct_grid(struct cell **cell_list, int n,int m, int l,
- double x0,double y0,double z0,double x1,double y1,double z1);
-void init_structs( struct chain **bchain, struct particle **pList, int nump);
-void create_voronoi( struct chain **bchain, struct particle **pList, struct cell **cells,
- double dx, double dy, double dz,
- int nump,
- int numx, int numy, int numz,
- double BBXMIN, double BBXMAX,
- double BBYMIN, double BBYMAX,
- double BBZMIN, double BBZMAX);
-
-void get_centroids2d( struct cell2d *cells, struct particle2d *pList,
- int n, int m, int nump,double vol);
-void claim_cells2d(struct chain **bchain,struct cell2d **cells,struct particle2d **pList,int p_i);
-void update_bchain2d(struct chain **bchain,struct cell2d **cells,int p_i);
-
-double distance2d(double x0, double y0, double x1, double y1);
-void construct_grid2d(struct cell2d **cell_list, int m, int l,
- double x0,double y0,double x1,double y1);
-void init_structs2d( struct chain **bchain, struct particle2d **pList, int nump);
-void create_voronoi2d( struct chain **bchain, struct particle2d **pList, struct cell2d **cells,
- double dx, double dy,
- int nump,
- int numx, int numy,
- double BBXMIN, double BBXMAX,
- double BBYMIN, double BBYMAX);
-
-void _DVCWeights_Calculate2D( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I );
-void _DVCWeights_Calculate3D( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I );
-// end prototypes
-
- /*---------------------------------------------------------------------------------------------------------------------
- ** Constructors
- */
- DVCWeights* DVCWeights_New( Name name, Dimension_Index dim ) ;
- DVCWeights* _DVCWeights_New(
- SizeT _sizeOfSelf,
- Type type,
- Stg_Class_DeleteFunction* _delete,
- Stg_Class_PrintFunction* _print,
- Stg_Class_CopyFunction* _copy,
- Stg_Component_DefaultConstructorFunction* _defaultConstructor,
- Stg_Component_ConstructFunction* _construct,
- Stg_Component_BuildFunction* _build,
- Stg_Component_InitialiseFunction* _initialise,
- Stg_Component_ExecuteFunction* _execute,
- Stg_Component_DestroyFunction* _destroy,
- WeightsCalculator_CalculateFunction* _calculate,
- Name name );
-
- void _DVCWeights_Init( void* dvcWeights, int *res ) ;
- void DVCWeights_InitAll( void* dvcWeights, Dimension_Index dim ) ;
-
-
- /* Stg_Class_Delete DVCWeights implementation */
- void _DVCWeights_Delete( void* dvcWeights );
- void _DVCWeights_Print( void* dvcWeights, Stream* stream );
- #define DVCWeights_Copy( self ) \
- (DVCWeights*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
- #define DVCWeights_DeepCopy( self ) \
- (DVCWeights*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
- void* _DVCWeights_Copy( void* dvcWeights, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
-
- void* _DVCWeights_DefaultNew( Name name ) ;
-
- void _DVCWeights_Construct( void* dvcWeights, Stg_ComponentFactory* cf, void* data ) ;
-
- void _DVCWeights_Build( void* dvcWeights, void* data ) ;
- void _DVCWeights_Initialise( void* dvcWeights, void* data ) ;
- void _DVCWeights_Execute( void* dvcWeights, void* data );
- void _DVCWeights_Destroy( void* dvcWeights, void* data ) ;
-
-
- void _DVCWeights_Calculate( void* dvcWeights, void* _swarm, Cell_LocalIndex lCell_I ) ;
-
-#endif
Deleted: long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.meta
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.meta 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/DVCWeights.meta 2006-12-07 22:14:58 UTC (rev 5514)
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
-<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
-
-<param name="Name">DVCWeights</param>
-<param name="Organisation">MCC</param>
-<param name="Project">Underworld</param>
-<param name="Location">./Underworld/Utils/src/</param>
-<param name="Project Web">http://mcc.monash.edu.au/Underworld</param>
-<param name="Copyright">Copyright (C) 2006 Monash Cluster Computing.</param>
-<param name="License">http://www.opensource.org/licenses/bsd-license.php</param>
-<param name="Parent">WeightsCalculator</param>
-<param name="Description">Calculates PIC integration weights in 3D and 2D using a Voronoi diagram. The integration points are set to the centroid of a Voronoi cell and
- the weight is the volume of the cell.</param>
-
-
-<list name="Params">
-
-</list>
-
-<list name="Dependencies">
-
-</list>
-<!-- Example Usage -->
-<struct name="weights">
- <param name="Type">DVCWeights</param>
- <param name="resolution">10</param>
-</struct>
-<!-- or one can call this with -->
-<struct name="weights">
- <param name="Type">DVCWeights</param>
- <param name="resolutionX">10</param>
- <param name="resolutionY">10</param>
- <param name="resolutionZ">10</param>
-</struct>
-
-<struct name="materialPoints">
- <param name="Type">IntegrationPointsSwarm</param>
- <param name="CellLayout">elementCellLayout</param>
- <param name="ParticleLayout">localLayout</param>
- <param name="FiniteElement_Mesh">mesh-linear</param>
- <param name="WeightsCalculator">weights</param>
- <param name="TimeIntegrator">timeIntegrator</param>
- <param name="IntegrationPointMapper">mapper</param>
-</struct>
-<struct name="mapper">
- <param name="Type">CoincidentMapper</param>
- <param name="IntegrationPointsSwarm">materialPoints</param>
- <param name="MaterialPointsSwarm">materialSwarm</param>
-</struct>
-
-<!-- See MaterialPointsSwarm.xml in Underworld/InputFiles/PIC_Components for an example -->
-<!-- where the X Y Z resolutions may be all different -->
-</StGermainData>
Modified: long/3D/Gale/trunk/src/Underworld/Utils/src/Init.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/Init.c 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/Init.c 2006-12-07 22:14:58 UTC (rev 5514)
@@ -68,7 +68,7 @@
Stg_ComponentRegister_Add( componentRegister, StressField_Type , "0", _StressField_DefaultNew );
Stg_ComponentRegister_Add( componentRegister, ViscosityField_Type , "0", _ViscosityField_DefaultNew );
Stg_ComponentRegister_Add( componentRegister, DensityField_Type , "0", _DensityField_DefaultNew );
- Stg_ComponentRegister_Add( componentRegister, DVCWeights_Type, "0", _DVCWeights_DefaultNew );
+
RegisterParent( UnderworldContext_Type, PICelleratorContext_Type );
RegisterParent( PressureTemperatureOutput_Type, SwarmOutput_Type );
@@ -76,7 +76,7 @@
RegisterParent( StressField_Type, ParticleFeVariable_Type );
RegisterParent( ViscosityField_Type, ParticleFeVariable_Type );
RegisterParent( DensityField_Type, ParticleFeVariable_Type );
- RegisterParent( DVCWeights_Type, WeightsCalculator_Type );
+
return True;
}
Modified: long/3D/Gale/trunk/src/Underworld/Utils/src/Utils.h
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/Utils.h 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/Utils.h 2006-12-07 22:14:58 UTC (rev 5514)
@@ -51,7 +51,6 @@
#include "StressField.h"
#include "ViscosityField.h"
#include "DensityField.h"
- #include "DVCWeights.h"
#include "PressureTemperatureOutput.h"
#include "RadiogenicHeatingTerm.h"
#include "Init.h"
Modified: long/3D/Gale/trunk/src/Underworld/Utils/src/types.h
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Utils/src/types.h 2006-12-07 22:14:55 UTC (rev 5513)
+++ long/3D/Gale/trunk/src/Underworld/Utils/src/types.h 2006-12-07 22:14:58 UTC (rev 5514)
@@ -52,6 +52,5 @@
typedef struct StressField StressField;
typedef struct ViscosityField ViscosityField;
typedef struct DensityField DensityField;
- typedef struct DVCWeights DVCWeights;
#endif
More information about the cig-commits
mailing list