[cig-commits] commit: Generalize VTKOutput to output other swarms
Mercurial
hg at geodynamics.org
Mon Feb 8 12:31:37 PST 2010
changeset: 816:af3a9bc2f150
tag: tip
user: Walter Landry <wlandry at caltech.edu>
date: Mon Feb 08 12:28:54 2010 -0800
files: plugins/Output/VTKOutput/VTKOutput.c
description:
Generalize VTKOutput to output other swarms
diff -r 14a9c6bf8117 -r af3a9bc2f150 plugins/Output/VTKOutput/VTKOutput.c
--- a/plugins/Output/VTKOutput/VTKOutput.c Thu Feb 04 15:43:04 2010 -0800
+++ b/plugins/Output/VTKOutput/VTKOutput.c Mon Feb 08 12:28:54 2010 -0800
@@ -85,7 +85,7 @@ Index Underworld_VTKOutput_Register( Plu
return PluginsManager_Submit( pluginsManager, Underworld_VTKOutput_Type, (Name)"0", _Underworld_VTKOutput_DefaultNew );
}
-void VTKOutput_particles(IntegrationPointsSwarm* picswarm,
+void VTKOutput_particles(Swarm* swarm,
double defaultDiffusivity,
int stepping,
char *outputPath, const int timeStep,
@@ -94,41 +94,62 @@ void VTKOutput_fields(void *context, int
const int timeStep);
void VTKOutput( void* _context ) {
- UnderworldContext* context = (UnderworldContext*)_context;
- Dictionary* dictionary = context->dictionary;
- IntegrationPointsSwarm* picIntegrationPoints = (IntegrationPointsSwarm*)LiveComponentRegister_Get( context->CF->LCRegister, (Name)"picIntegrationPoints" );
+ UnderworldContext* context = (UnderworldContext*)_context;
+ Dictionary* dictionary = context->dictionary;
- /* Only dump if at the right time step. We use timeStep-1,
- because we are outputing after a solve, but before
- advection. So timeStep-1 makes more sense in terms of when
- the simulation looks like this. */
- if((context->timeStep-1) % context->dumpEvery != 0)
- return;
+ /* Only dump if at the right time step. We use timeStep-1, because
+ we are outputing after a solve, but before advection. So
+ timeStep-1 makes more sense in terms of when the simulation looks
+ like this. */
+ if((context->timeStep-1) % context->dumpEvery != 0)
+ return;
- /* Write the particles and then all of the fields. */
- if(Dictionary_GetBool_WithDefault(dictionary,"VTKOutput_Particles",
- True))
- VTKOutput_particles(picIntegrationPoints,
+ /* Write the particles and then all of the fields. */
+
+ if(Dictionary_GetBool_WithDefault(dictionary,"VTKOutput_Particles",
+ True))
+ {
+ Name swarmName;
+ Swarm* swarm;
+ Dictionary_Entry_Value* swarm_list;
+ int swarm_list_size, s;
+ swarm_list=Dictionary_Get(dictionary, "VTKOutput_SwarmList" );
+
+ if(!swarm_list)
+ {
+ swarm_list=Dictionary_Entry_Value_NewList();
+ Dictionary_Entry_Value_AddElement(swarm_list,Dictionary_Entry_Value_FromString("picIntegrationPoints"));
+ }
+ swarm_list_size=Dictionary_Entry_Value_GetCount(swarm_list);
+ for(s=0;s<swarm_list_size;++s)
+ {
+ swarmName=Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetElement(swarm_list,s));
+ swarm=(Swarm*)LiveComponentRegister_Get(context->CF->LCRegister,
+ swarmName);
+
+ VTKOutput_particles(swarm,
Dictionary_GetDouble_WithDefault
(dictionary,"defaultDiffusivity",1.0),
Dictionary_GetInt_WithDefault
(dictionary,"particleStepping",1),
context->outputPath, context->timeStep-1,
context->dim,context->rank,context->nproc);
- if(Dictionary_GetBool_WithDefault(dictionary,"VTKOutput_Fields",
- True))
- VTKOutput_fields(context,context->rank,context->nproc,
- context->timeStep-1);
+ }
+ }
+ if(Dictionary_GetBool_WithDefault(dictionary,"VTKOutput_Fields",
+ True))
+ VTKOutput_fields(context,context->rank,context->nproc,
+ context->timeStep-1);
}
-void VTKOutput_particles(IntegrationPointsSwarm* picswarm,
+void VTKOutput_particles(Swarm* swarm,
double defaultDiffusivity,
int stepping, char *outputPath,
const int timeStep, int dim, int myRank, int nprocs) {
double *coord;
int iteration, i;
- Particle_Index num_particles = picswarm->particleLocalCount;
+ Particle_Index num_particles = swarm->particleLocalCount;
Particle_Index lParticle_I;
RheologyMaterial* material;
@@ -144,7 +165,8 @@ void VTKOutput_particles(IntegrationPoin
Name filename;
/* Open the processor specific output file */
- Stg_asprintf(&filename,"%s/particles.%d.%05d.vtu",outputPath,myRank,timeStep);
+ Stg_asprintf(&filename,"%s/%s.%d.%05d.vtu",outputPath,swarm->name,myRank,
+ timeStep);
fp=fopen(filename,"w");
Memory_Free( filename );
@@ -157,7 +179,7 @@ void VTKOutput_particles(IntegrationPoin
/* Open the parallel control file */
if(myRank==0)
{
- Stg_asprintf( &filename, "%s/particles.%05d.pvtu", outputPath, timeStep);
+ Stg_asprintf( &filename, "%s/%s.%05d.pvtu", outputPath, swarm->name, timeStep);
pfp=fopen(filename,"w");
Memory_Free( filename );
@@ -203,23 +225,36 @@ void VTKOutput_particles(IntegrationPoin
Material *extension_info;
XYZ normal;
- IntegrationPoint* integrationparticle = (IntegrationPoint*)Swarm_ParticleAt( picswarm, lParticle_I );
+ if(Stg_Class_IsInstance(swarm,IntegrationPointsSwarm_Type))
+ {
+ IntegrationPoint* integrationparticle = (IntegrationPoint*)Swarm_ParticleAt( ((IntegrationPointsSwarm*)swarm), lParticle_I );
- material = (RheologyMaterial*) IntegrationPointsSwarm_GetMaterialOn( picswarm, integrationparticle );
- materialparticle = OneToOneMapper_GetMaterialPoint( picswarm->mapper, integrationparticle, &materialSwarm );
+ material = (RheologyMaterial*) IntegrationPointsSwarm_GetMaterialOn( ((IntegrationPointsSwarm*)swarm), integrationparticle );
+ materialparticle = OneToOneMapper_GetMaterialPoint( ((IntegrationPointsSwarm*)swarm)->mapper, integrationparticle, &materialSwarm );
- density=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"density", 0.0 );
- alpha=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"alpha", 0.0 );
- material_index=material->index;
- diffusivity=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"diffusivity", defaultDiffusivity );
- rheology_register=(Rheology_Register* )material->rheology_Register;
+ density=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"density", 0.0 );
+ alpha=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"alpha", 0.0 );
+ diffusivity=Dictionary_GetDouble_WithDefault( material->dictionary, (Dictionary_Entry_Key)"diffusivity", defaultDiffusivity );
- if( rheology_register && strcmp( material->name, Material_Type ) )
- rheologyCount = Rheology_Register_GetCount( rheology_register );
+ material_index=material->index;
+ rheology_register=(Rheology_Register* )material->rheology_Register;
+
+ if( rheology_register && strcmp( material->name, Material_Type ) )
+ rheologyCount = Rheology_Register_GetCount( rheology_register );
+ else
+ rheologyCount = 0;
+ coord = materialparticle->coord;
+ }
else
- rheologyCount = 0;
-
- coord = materialparticle->coord;
+ {
+ GlobalParticle *particle;
+ particle=(GlobalParticle *)Swarm_ParticleAt(swarm,lParticle_I);
+ coord = particle->coord;
+ material_index=0;
+ density=alpha=0;
+ diffusivity=defaultDiffusivity;
+ rheologyCount=0;
+ }
postFailureStrain=0;
viscosity=0;
currently_yielding=0;
@@ -429,8 +464,8 @@ void VTKOutput_particles(IntegrationPoin
{
fprintf(pfp," </PPointData>\n");
for(i=0;i<nprocs;++i)
- fprintf(pfp," <Piece Source=\"particles.%d.%05d.vtu\"/>\n",
- i,timeStep);
+ fprintf(pfp," <Piece Source=\"%s.%d.%05d.vtu\"/>\n",
+ swarm->name,i,timeStep);
fprintf(pfp," </PUnstructuredGrid>\n\
</VTKFile>\n");
fclose(pfp);
More information about the CIG-COMMITS
mailing list