forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
VPICPart.cxx
137 lines (117 loc) · 4.68 KB
/
VPICPart.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "VPICPart.h"
/////////////////////////////////////////////////////////////////////////////
//
// Create structure to hold field data for one time step, one processor
//
/////////////////////////////////////////////////////////////////////////////
VPICPart::VPICPart(int part)
{
this->simID = part;
this->vizID = 0;
this->fileName = 0;
}
void VPICPart::setFiles(string* name, int numberOfFiles)
{
if (this->fileName != 0)
delete [] this->fileName;
this->fileName = new string[numberOfFiles];
for (int i = 0; i < numberOfFiles; i++) {
this->fileName[i] = name[i];
}
}
void VPICPart::initialize()
{
FILE* filePtr = fopen(this->fileName[0].c_str(), "r");
if (filePtr == NULL) {
cerr << "Could not open file " << this->fileName[0] << endl;
}
// Header verifies consistency and gets sizes
this->header.readHeader(filePtr);
fclose(filePtr);
// Count the number of data items per variable
this->header.getGridSize(this->gridSize);
this->header.getGhostSize(this->ghostSize);
this->numberOfGrids = 1;
this->numberOfGhostGrids = 1;
for (int dim = 0; dim < DIMENSION; dim++) {
this->numberOfGrids *= this->gridSize[dim];
this->numberOfGhostGrids *= this->ghostSize[dim];
}
}
//////////////////////////////////////////////////////////////////////////////
//
// Destructor
//
//////////////////////////////////////////////////////////////////////////////
VPICPart::~VPICPart()
{
if (this->fileName != 0)
delete [] this->fileName;
}
//////////////////////////////////////////////////////////////////////////////
//
// Using the offset of this part within a processor calculate the grid
// offset for this part within the processor grid, taking stride into account
//
//////////////////////////////////////////////////////////////////////////////
void VPICPart::calculatePartLocation(int* stridedPartSize)
{
for (int dim = 0; dim < DIMENSION; dim++)
this->gridOffset[dim] = this->partOffset[dim] * stridedPartSize[dim];
}
//////////////////////////////////////////////////////////////////////////////
//
// Load the data for this part into the correct position in an overall grid
// which has been preallocated. All data is read from the file but only the
// requested stride is copied to the visualizer's array as a float
// Each file contains ghost information for one cell on each side for each
// dimension. Skip those ghost cells and only fill in internal data.
// Many files will contribute to the data for one processor so use the
// offset for each file part to determine where to fill in the data.
//
//////////////////////////////////////////////////////////////////////////////
void VPICPart::loadVariableData(
float* varData, // Grid over all parts to be filled
int varOffset, // Offset into varData for loading
int* subdimension, // Subdimension for processor owning this part
int fileKind, // Field or species data
int basicType, // FLOAT or INTEGER
int byteCount, // Size of basic type
long int offset, // Load data from this offset
int stride[]) // Stride over data requested
{
string name = this->fileName[fileKind];
// Part stores data plus ghost cells, get all information about them
int localghostSize[DIMENSION];
this->header.getGhostSize(localghostSize);
if (basicType == FLOAT && byteCount == 4) {
float* block = NULL;
LoadData(vizID, simID, varData, varOffset, block, subdimension,
localghostSize, this->numberOfGhostGrids,
this->gridOffset, name, offset, stride);
} else if (basicType == FLOAT && byteCount == 8) {
double* block = NULL;
LoadData(vizID, simID, varData, varOffset, block, subdimension,
localghostSize, this->numberOfGhostGrids,
this->gridOffset, name, offset, stride);
} else if (basicType == INTEGER && byteCount == 4) {
int* block = NULL;
LoadData(vizID, simID, varData, varOffset, block, subdimension,
localghostSize, this->numberOfGhostGrids,
this->gridOffset, name, offset, stride);
} else if (basicType == INTEGER && byteCount == 2) {
short* block = NULL;
LoadData(vizID, simID, varData, varOffset, block, subdimension,
localghostSize, this->numberOfGhostGrids,
this->gridOffset, name, offset, stride);
}
}
/////////////////////////////////////////////////////////////////////////////
//
// Print information about this object
//
/////////////////////////////////////////////////////////////////////////////
void VPICPart::PrintSelf(ostream& os, int indent)
{
this->header.PrintSelf(os, indent);
}