Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

216 lines
8.8 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkExodusModel.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
// .NAME vtkExodusModel
//
// .SECTION Description
//
// A vtkUnstructuredGrid output by vtkExodusReader or vtkPExodusReader
// is missing a great deal of initialization and static model data
// that is in an Exodus II file. (Global variables, properties,
// node sets, side sets, and so on.) This data can be stored in a
// vtkModelMetadata object, which can be initialized using
// this vtkExodusModel class.
//
// This class can be initialized with a file handle for an open Exodus
// file, and the vtkUnstructuredGrid derived from that file. The methods
// used would be SetGlobalInformation, SetLocalInformation,
// AddUGridElementVariable and AddUGridNodeVariable. The vtkExodusReader
// does this.
//
// It can also be initialized (using UnpackExodusModel) from a
// vtkUnstructuredGrid that has had metadata packed into it's field
// arrays with PackExodusModel. The vtkExodusIIWriter does this.
//
// If you plan to write out the Exodus file (with vtkExodusIIWriter),
// you should direct the Exodus reader to create a vtkExodusModel object.
// This will be used by the Exodus writer to create a correct Exodus II
// file on output. In addition, the vtkDistributedDataFilter is
// cognizant of the ExodusModel object and will unpack, extract, merge,
// and pack these objects associated with the grids it is partitioning.
//
// .SECTION See also
// vtkExodusReader vtkPExodusReader vtkExodusIIWriter vtkModelMetadata
// vtkDistributedDataFilter
#ifndef __vtkExodusModel_h
#define __vtkExodusModel_h
#include "vtkObject.h"
#include "vtkModelMetadata.h" // So those who include vtkExodusModel don't
// need to know anything about ModelMetadata
class vtkUnstructuredGrid;
class VTK_HYBRID_EXPORT vtkExodusModel : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkExodusModel, vtkObject);
virtual void PrintSelf(ostream &os, vtkIndent indent);
static vtkExodusModel *New();
// Description:
// In order to write a correct Exodus file from a
// vtkUnstructuredGrid, we need to know the global data
// which does not get represented in the UGrid.
// Initialize, with an open Exodus file, all the global
// fields of the ExodusModel object. fid is the file handle
// of the opened Exodus file. compute_word_size is the
// size of floating point values exchanged with the
// the Exodus library. (It's set in ex_open or ex_create.)
// The global fields are those which don't depend on
// which cells or field arrays are being read from the
// file.
int SetGlobalInformation(int fid, int compute_word_size);
// Description:
// In order to write Exodus files from vtkUnstructuredGrid
// objects that were read from Exodus files, we need to know
// the mapping from variable names in the UGrid to variable
// names in the Exodus file. (The Exodus reader combines
// scalar variables with similar names into vectors in the
// UGrid.) When building the UGrid to which this
// ExodusModel refers, add each element and node variable
// name with this call, including the name of original variable
// that yielded it's first component, and the number of components.
// If a variable is removed from the UGrid, remove it from
// the ExodusModel. (If this information is missing or
// incomplete, the ExodusIIWriter can still do something
// sensible in creating names for variables.)
int AddUGridElementVariable(char *ugridVarName, char *origName, int numComponents);
int RemoveUGridElementVariable(char *ugridVarName);
int AddUGridNodeVariable(char *ugridVarName, char *origName, int numComponents);
int RemoveUGridNodeVariable(char *ugridVarName);
void SetElementVariableInfo(int numOrigNames, char **origNames,
int numNames, char **names, int *numComp, int *map);
void SetNodeVariableInfo(int numOrigNames, char **origNames,
int numNames, char **names, int *numComp, int *map);
// Description:
// Set the local information in the ExodusModel. This is
// information which depends on which blocks were read in,
// and which time step was read in.
// (Example - count of cells in each block, values of global
// variables, node IDs for nodes in each node set.)
// Provide the ugrid, the time step (the first time step is 0),
// the handle of an open Exodus file, and the
// size of floating point values exchanged with the Exodus library.
// Also indicate with a 1 if the geometry has changed (new blocks
// or blocks removed) since the last call. (When in doubt set to 1.)
// Please call SetGlobalInformation once before calling
// SetLocalInformation. SetLocalInformation may be called many
// times if different subsets of an Exodus file are read. Each
// call replaces the previous local values.
int SetLocalInformation(vtkUnstructuredGrid *ugrid,
int fid, int timeStep, int newGeometry, int compute_word_size);
// Description:
// Static function that returns 1 if the vtkUnstructuredGrid
// has metadata packed into it's field arrays, 0 otherwise.
static int HasMetadata(vtkUnstructuredGrid *grid);
// Description:
// Set or get the underlying vtkModelMetadata object.
vtkModelMetadata *GetModelMetadata();
void SetModelMetadata(vtkModelMetadata *emData);
// Description:
// One way to initialize an ExodusModel object is to use
// SetGlobalInformation, SetLocalInformation, and the Add/Remove
// Variable calls to initialize it from an open Exodus file.
//
// Another way is to initialize it with the ExodusModel which
// has been packed into field arrays of a vtkUnstructuredGrid.
// Set the second argument to 1 if you would like the packed
// field arrays to be deleted after this ExodusModel is
// initialized.
// Returns 1 if there is no ExodusModel object associated with
// the grid, 0 otherwise.
int UnpackExodusModel(vtkUnstructuredGrid *grid, int deleteIt);
// Description:
// Merge the supplied vtkExodusModel object into this one. It is
// assumed the two objects represent portions of the same distributed
// data set. (So the list of block IDs is the same, and so on.)
int MergeExodusModel(vtkExodusModel *em);
// Description:
// Create a new vtkExodusModel object representing a subset of the
// cells of this vtkExodusModel object. We need a list of the
// global IDs of the cells to be extracted, the grid which
// generated the Exodus Model (so we can find the points associated
// with each cell), and the name of the grid's global cell ID array,
// and the name of the grid's global node ID array.
vtkExodusModel *ExtractExodusModel(vtkIntArray *globalCellIdList,
vtkUnstructuredGrid *grid, const char *globalCellIdArrayName,
const char *globalNodeIdArrayName);
// Description:
// The metadata encapsulated in a vtkExodusModel object can be
// written to field arrays which are then stored in the
// vtkUnstructuredGrid itself. PackExodusModel creates these
// field arrays and attaches them to the supplied grid.
void PackExodusModel(vtkUnstructuredGrid *grid);
// Description::
// Reset all fields to their initial value.
void Reset();
protected:
vtkExodusModel();
~vtkExodusModel();
private:
vtkModelMetadata *CheckSetModelMetadata();
static void CopyDoubleToFloat(float *f, double *d, int len);
int SetLocalBlockInformation(
int fid, int use_floats, int *blockIds , int *cellIds, int ncells);
int SetLocalNodeSetInformation(
int fid, int use_floats, int *pointIds, int npoints);
int SetLocalSideSetInformation(
int fid, int use_floats, int *cellIds, int ncells);
void RemoveBeginningAndTrailingSpaces(char **names, int len);
vtkModelMetadata *ModelMetadata;
int GeometryCount;
vtkExodusModel(const vtkExodusModel&); // Not implemented
void operator=(const vtkExodusModel&); // Not implemented
};
#endif