Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
sensei
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
38
Issues
38
List
Boards
Labels
Service Desk
Milestones
Merge Requests
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sensei
sensei
Commits
239b8126
Commit
239b8126
authored
Apr 16, 2018
by
Burlen Loring
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'request_specific_meshes' into 'master'
Request specific meshes See merge request
!55
parents
9417b0dc
f56fe0f9
Changes
61
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
61 changed files
with
7305 additions
and
1819 deletions
+7305
-1819
CMake/build.cmake
CMake/build.cmake
+1
-1
CMake/python.cmake
CMake/python.cmake
+1
-1
configs/3dgrid.xml
configs/3dgrid.xml
+3
-3
configs/newton.xml
configs/newton.xml
+8
-5
configs/oscillator.xml
configs/oscillator.xml
+8
-4
doc/ADIOSSchema.md
doc/ADIOSSchema.md
+270
-0
endpoints/ADIOSAnalysisEndPoint.cxx
endpoints/ADIOSAnalysisEndPoint.cxx
+1
-0
endpoints/CMakeLists.txt
endpoints/CMakeLists.txt
+0
-5
miniapps/newton/newton.py
miniapps/newton/newton.py
+156
-18
miniapps/newton/newton_catalyst.py
miniapps/newton/newton_catalyst.py
+4
-2
miniapps/oscillators/bridge.cpp
miniapps/oscillators/bridge.cpp
+6
-1
miniapps/oscillators/bridge.h
miniapps/oscillators/bridge.h
+1
-0
miniapps/oscillators/dataadaptor.cpp
miniapps/oscillators/dataadaptor.cpp
+376
-27
miniapps/oscillators/dataadaptor.h
miniapps/oscillators/dataadaptor.h
+27
-7
miniapps/oscillators/oscillator.cpp
miniapps/oscillators/oscillator.cpp
+8
-1
miniapps/parallel3d/Bridge.cxx
miniapps/parallel3d/Bridge.cxx
+3
-1
miniapps/parallel3d/DataAdaptor.cxx
miniapps/parallel3d/DataAdaptor.cxx
+143
-56
miniapps/parallel3d/DataAdaptor.h
miniapps/parallel3d/DataAdaptor.h
+31
-17
python/senseiDataAdaptor.i
python/senseiDataAdaptor.i
+18
-0
python/senseiPyDataAdaptor.h
python/senseiPyDataAdaptor.h
+142
-40
python/senseiPython.i
python/senseiPython.i
+169
-20
sensei/ADIOSAnalysisAdaptor.cxx
sensei/ADIOSAnalysisAdaptor.cxx
+160
-36
sensei/ADIOSAnalysisAdaptor.h
sensei/ADIOSAnalysisAdaptor.h
+33
-5
sensei/ADIOSDataAdaptor.cxx
sensei/ADIOSDataAdaptor.cxx
+300
-101
sensei/ADIOSDataAdaptor.h
sensei/ADIOSDataAdaptor.h
+91
-15
sensei/ADIOSSchema.cxx
sensei/ADIOSSchema.cxx
+861
-356
sensei/ADIOSSchema.h
sensei/ADIOSSchema.h
+148
-66
sensei/AnalysisAdaptor.h
sensei/AnalysisAdaptor.h
+11
-0
sensei/Autocorrelation.cxx
sensei/Autocorrelation.cxx
+87
-24
sensei/Autocorrelation.h
sensei/Autocorrelation.h
+6
-3
sensei/CMakeLists.txt
sensei/CMakeLists.txt
+4
-3
sensei/CatalystAnalysisAdaptor.cxx
sensei/CatalystAnalysisAdaptor.cxx
+198
-79
sensei/CatalystAnalysisAdaptor.h
sensei/CatalystAnalysisAdaptor.h
+15
-16
sensei/ConfigurableAnalysis.cxx
sensei/ConfigurableAnalysis.cxx
+138
-105
sensei/ConfigurableAnalysis.h
sensei/ConfigurableAnalysis.h
+2
-0
sensei/DataAdaptor.cxx
sensei/DataAdaptor.cxx
+255
-15
sensei/DataAdaptor.h
sensei/DataAdaptor.h
+158
-28
sensei/DataRequirements.cxx
sensei/DataRequirements.cxx
+263
-0
sensei/DataRequirements.h
sensei/DataRequirements.h
+259
-0
sensei/Histogram.cxx
sensei/Histogram.cxx
+40
-9
sensei/Histogram.h
sensei/Histogram.h
+4
-1
sensei/LibsimAnalysisAdaptor.cxx
sensei/LibsimAnalysisAdaptor.cxx
+1354
-384
sensei/LibsimAnalysisAdaptor.h
sensei/LibsimAnalysisAdaptor.h
+3
-0
sensei/MeshMetadata.h
sensei/MeshMetadata.h
+117
-0
sensei/PosthocIO.cxx
sensei/PosthocIO.cxx
+10
-3
sensei/PosthocIO.h
sensei/PosthocIO.h
+3
-3
sensei/ProgrammableDataAdaptor.cxx
sensei/ProgrammableDataAdaptor.cxx
+84
-21
sensei/ProgrammableDataAdaptor.h
sensei/ProgrammableDataAdaptor.h
+91
-40
sensei/VTKDataAdaptor.cxx
sensei/VTKDataAdaptor.cxx
+234
-40
sensei/VTKDataAdaptor.h
sensei/VTKDataAdaptor.h
+112
-9
sensei/VTKPosthocIO.cxx
sensei/VTKPosthocIO.cxx
+298
-126
sensei/VTKPosthocIO.h
sensei/VTKPosthocIO.h
+38
-22
sensei/VTKUtils.cxx
sensei/VTKUtils.cxx
+296
-0
sensei/VTKUtils.h
sensei/VTKUtils.h
+58
-0
sensei/VTKmContourAnalysis.cxx
sensei/VTKmContourAnalysis.cxx
+28
-10
sensei/VTKmContourAnalysis.h
sensei/VTKmContourAnalysis.h
+5
-2
sensei/testing/testADIOSRead.py
sensei/testing/testADIOSRead.py
+49
-38
sensei/testing/testADIOSWrite.py
sensei/testing/testADIOSWrite.py
+23
-8
sensei/testing/testHistogram.cpp
sensei/testing/testHistogram.cpp
+7
-2
sensei/testing/testProgrammableDataAdaptor.cpp
sensei/testing/testProgrammableDataAdaptor.cpp
+65
-23
sensei/testing/testProgrammableDataAdaptor.py
sensei/testing/testProgrammableDataAdaptor.py
+21
-17
No files found.
CMake/build.cmake
View file @
239b8126
...
...
@@ -15,7 +15,7 @@ endif()
if
(
NOT MSVC
)
if
(
NOT CMAKE_CXX_FLAGS
)
set
(
tmp
"-fPIC -std=c++11 -Wall -Wextra"
)
set
(
tmp
"-fPIC -std=c++11 -Wall -Wextra
-fpermissive
"
)
if
(
BUILD_STATIC_EXECS
)
set
(
tmp
"
${
tmp
}
-static -static-libgcc -static-libstdc++ -pthread -Wl,-Bstatic"
)
endif
()
...
...
CMake/python.cmake
View file @
239b8126
...
...
@@ -64,7 +64,7 @@ if (ENABLE_PYTHON)
file(STRINGS
${
depend_file
}
depends)
add_custom_command(
OUTPUT
${
output_file
}
COMMAND
${
swig_cmd
}
-c++ -python -
threads -
w341,325,401,504
COMMAND
${
swig_cmd
}
-c++ -python -w341,325,401,504
-DSWIG_TYPE_TABLE=senseiPython
-I
${
MPI4PY_INCLUDE_DIR
}
-I
${
CMAKE_BINARY_DIR
}
-I
${
CMAKE_CURRENT_BINARY_DIR
}
-I
${
CMAKE_CURRENT_SOURCE_DIR
}
...
...
configs/3dgrid.xml
View file @
239b8126
...
...
@@ -2,9 +2,9 @@
set enabled="1" on analyses you wish to enable -->
<sensei>
<!-- Custom Analyses -->
<analysis
type=
"histogram"
array=
"pressure"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"histogram"
array=
"density"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"histogram"
array=
"temperature"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"histogram"
mesh=
"mesh"
array=
"pressure"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"histogram"
mesh=
"mesh"
array=
"density"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"histogram"
mesh=
"mesh"
array=
"temperature"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<!-- ADIOS Analyses -->
<analysis
type=
"adios"
filename=
"3D_Grid.bp"
method=
"MPI"
enabled =
"0"
/>
...
...
configs/newton.xml
View file @
239b8126
<sensei>
<!-- Custom Analyses -->
<analysis
type=
"histogram"
array=
"v"
association=
"point"
bins=
"10"
enabled=
"
1
"
/>
<analysis
type=
"histogram"
mesh=
"bodies"
array=
"v"
association=
"point"
bins=
"10"
enabled=
"
0
"
/>
<!-- Available with ENABLE_VTK_XMLP -->
<analysis
type=
"PosthocIO"
array=
"vx"
association=
"point"
enabled=
"0"
period=
"1"
mode=
"vtkXmlP"
output_dir=
"./"
/>
<analysis
type=
"PosthocIO"
mode=
"paraview"
output_dir=
"./"
enabled=
"0"
>
<mesh
name=
"bodies"
>
<point_arrays>
ids, m, v, f
</point_arrays>
</mesh>
</analysis>
<!-- Avalailable with ENABLE_CATALYST -->
<analysis
type=
"catalyst"
pipeline=
"pythonscript"
filename=
"
newton_catalyst.py"
enabled=
"0
"
/>
filename=
"
../sensei/miniapps/newton/newton_catalyst.py"
enabled=
"1
"
/>
<!-- Available with ENABLE_LIBSIM -->
<analysis
type=
"libsim"
plots=
"Pseudocolor"
plotvars=
"ids"
...
...
configs/oscillator.xml
View file @
239b8126
...
...
@@ -2,13 +2,17 @@
set enabled="1" on analyses you wish to enable -->
<sensei>
<!-- Custom Analyses-->
<analysis
type=
"PosthocIO"
array=
"data"
association=
"cell"
enabled=
"0"
period=
"1"
mode=
"vtkXmlP"
output_dir=
"./"
/>
<analysis
type=
"PosthocIO"
output_dir=
"./"
file_name=
"output"
mode=
"visit"
enabled=
"1"
>
<mesh
name=
"mesh"
>
<cell_arrays>
data
</cell_arrays>
</mesh>
</analysis>
<analysis
type=
"histogram"
array=
"data"
association=
"cell"
<analysis
type=
"histogram"
mesh=
"mesh"
array=
"data"
association=
"cell"
bins=
"10"
enabled=
"1"
/>
<analysis
type=
"autocorrelation"
array=
"data"
association=
"cell"
window=
"10"
<analysis
type=
"autocorrelation"
mesh=
"mesh"
array=
"data"
association=
"cell"
window=
"10"
k-max=
"3"
enabled=
"1"
/>
<!-- VTK-m Analyses -->
...
...
doc/ADIOSSchema.md
0 → 100644
View file @
239b8126
# Overview
VTK has two ways of representing parallel distributed data. In the first each
MPI rank has a single object derived from
[
vtkDataSet
](
https://www.vtk.org/doc/nightly/html/classvtkDataSet.html
)
. We
will call this the legacy approach. In the second case each MPI rank has a
single object derived from
[
vtkCompositeDataSet
](
https://www.vtk.org/doc/nightly/html/classvtkCompositeDataSet.html
)
,
which contains any number of local and remote datasets. We will call this the
composite approach. We treat the legacy approach as a special case of the
composite approach. Use of a data object type enumeration at the top level
enables differentiation between the two cases.
Each VTK object that can be serialized has a corresponding serilaizer derived
from
[
senseiADIOS::Schema
](
#senseiadiosschema
)
. Serializers are expected to serialize data and metadata
needed to represent the object, or pass the object to lower level serializers
to accomplish this task. As composite data objects are traversed each high
level serializer class is given the chance to serialize each leaf dataset. When
they are passed a dataset that they can't handle they will ignore it.
At the highest level we provide serialization of collections of VTK data objects,
each of which can be a composite data object containing any number of datasets or
nested composite objects. Unique id's are given to each object in the collection,
and also each dataset in the object. Top level data objects are given a unique id,
called a
`doid`
, while nested datasets make use of the so called flat index provided by
VTK, called a
`dsid`
. For example the first dataset in the second object is identified by
the path:
```
data_object_1/dataset_0
```
The remainder of this document details each serializer, and what it writes to
the ADIOS file/stream.
# senseiADIOS::Schema
This is the base class defining API to serialize/deserialize VTK collections of
VTK data objects using in ADIOS. The
[
senseiADIOS::Schema
](
#senseiadiosschema
)
class declares API to
accomplish steps involved in writing/reading data with ADIOS. A common theme
when dealing with parallel distributed VTK datasets is traversing the composite
objects and operating on leaf datasets. Thus the class provides default
implementation for the traversal of composite datasets leaving derived classes
to implement an override to process leaf datasets.
# senseiADIOS::DataObjectCollectionSchema
This class serializes/deserializes collections of
[
vtkDataOject
](
https://www.vtk.org/doc/nightly/html/classvtkDataObject.html
)
s
and global metadata such as object names, time, time step, and schema version.
Each object in the collection is serialized by
[
senseiADIOS::DataObjectSchema
](
#senseiadiosdataobjectschema
)
.
### writes/reads
path | description
--- | ---
`SENSEIDataObjectSchema`
| schema revision, unsigned int
`time`
| current simulation time, double
`time_step`
| current simulation step, double
`number_of_data_objects`
| number of objects serialized, integer
`data_object_<doid>/name`
| the name of each object, string
# senseiADIOS::DataObjectSchema
This class serializes/deserializes metadata for
[
vtkDataOject
](
https://www.vtk.org/doc/nightly/html/classvtkDataObject.html
)
and passes the data object off to the
(
[
senseiADIOS::DatasetSchema
](
#senseiadiosdatasetschema
)
) for serialization of leaf
datasets.
### writes/reads
path | description
--- | ---
`data_object_<doid>/number_of_datasets`
| number of leaves in composite dataset, integer
`data_object_<doid>/data_object_type`
| VTK data object type enumeration, integer
# senseiADIOS::DatasetSchema
This class serializes/deserializes metadata for
[
vtkDataSet
](
https://www.vtk.org/doc/nightly/html/classvtkDataSet.html
)
and
manages lower level specialized serialization objects
(
[
senseiADIOS::CellsSchema
](
#senseiadioscellsschema
)
,
[
senseiADIOS::PointsSchema
](
#senseiadiospointsschema
)
,
[
senseiADIOS::DatasetAttributesSchema
](
#senseiadiosdatasetattributesschema
)
,
[
senseiADIOS::Extent3DSchema
](
#senseiadiosextent3dschema
)
) that serialize/deserialize VTK
datasets derived from vtkDataSet.
### writes/reads
path | description
--- | ---
`data_object_<doid>/dataset_<dsid>/data_object_type`
| VTK dataset type enumeration, integer
# senseiADIOS::Extent3DSchema
This class serializes/deserializes metadata needed to represent geometry of uniform
Cartesian meshes, in VTK the
[
vtkImageData
](
https://www.vtk.org/doc/nightly/html/classvtkImageData.html
)
datasets.
### writes/reads
path | description
--- | ---
`data_object_<doid>/dataset_<dsid>/extent`
| index space extents, 6 integers
`data_object_<doid>/dataset_<dsid>/origin`
| coordinate system origin, 3 doubles
`data_object_<doid>/dataset_<dsid>/spacing`
| grid spacing, 3 doubles
# senseiADIOS::PointsSchema
This class serializes/deserializes coordinates of unstructured meshes derived
from VTK's
[
vtkPointSet
](
https://www.vtk.org/doc/nightly/html/classvtkPointSet.html
)
datasets.
### writes/reads
path | description
--- | ---
`data_object_<doid>/dataset_<dsid>/points/number_of_elements`
| length of the array, unsigned long
`data_object_<doid>/dataset_<dsid>/points/type`
| VTK data type enumeration, integer
`data_object_<doid>/dataset_<dsid>/points/data`
| the array values
# senseiADIOS::CellsSchema
This class serializes/deserializes mesh topology for unstructured meshes of VTK's
[
vtkUnstructuredGrid
](
https://www.vtk.org/doc/nightly/html/classvtkUnstructuredGrid.html
)
and
[
vtkPolyData
](
https://www.vtk.org/doc/nightly/html/classvtkPolyData.html
)
datasets.
### writes/reads
path | description
--- | ---
`data_object_<doid>/dataset_<dsid>/cells/number_of_cells`
| number of cells, unsigned long
`data_object_<doid>/dataset_<dsid>/cells/cell_types`
| array of VTK cell type enumeration
`data_object_<doid>/dataset_<dsid>/cells/number_of_elements`
| length of the cell array
`data_object_<doid>/dataset_<dsid>/cells/data`
| the cell array values
# senseiADIOS::DatasetAttributesSchema
This class serializes/deserializes
[
vtkDataSetAttributes
](
https://www.vtk.org/doc/nightly/html/classvtkDataSetAttributes.html
)
,
the containers for cell and point centered data arrays and the contained data
arrays. It is templated on attribute enumeration
`att_t`
which is used as a tag
in the schema.
`att_str`
is a string representation of
`att_t`
. For convenience
we define the following typedefs:
```
C++
// specializations for common use cases
using PointDataSchema = DatasetAttributesSchema<vtkDataObject::POINT>;
using CellDataSchema = DatasetAttributesSchema<vtkDataObject::CELL>;
```
### writes/reads
path | description
--- | ---
`data_object_<doid>/dataset_<dsid>/<att_str>/number_of_arrays`
| number of arrays, integer
`data_object_<doid>/dataset_<dsid>/<att_str>/array_<i>/name`
| name of the array, string
`data_object_<doid>/dataset_<dsid>/<att_str>/array_<i>/number_of_elements`
| length of the array, unsigned long
`data_object_<doid>/dataset_<dsid>/<att_str>/array_<i>/number_of_components`
| number of components, integer
`data_object_<doid>/dataset_<dsid>/<att_str>/array_<i>/element_type`
| VTK data type enumeration, integer
`data_object_<doid>/dataset_<dsid>/<att_str>/array_<i>/data`
| the array values
# Examples
## Aggregate data
This example shows the file structure of a collection comprised of a 2 block
multi-block uniform Cartesian mesh and a 2 block multi-block unstructured mesh
over 3 time steps. Each mesh contains 1 single precision cell data and 1 single
precision point data array. The code generating and writing the data,
`testADIOSWrite.py`
is capable of writing BP files or streaming over FLEXPATH
and is part of the regression test suite distributed with the source code. Its
counterpart
`testADIOSRead.py`
can be used to deserialize the file/stream.
```
bash
$mpiexec
-np
2 python ../sensei/sensei/testing/testADIOSWrite.py test.bp MPI 3
STATUS[0] : initializing the VTKDataAdaptor step 0
time
0.0
STATUS[0] : executing ADIOSAnalysisAdaptor MPI step 0
time
0.0
WARNING:
[
0][/home/sensei/sc17/software/sensei/builds/sensei/sensei/ADIOSAnalysisAdaptor.cxx:82][v1.1.0]
WARNING: No subset specified. Writing all available data
STATUS[0] : finished writing 1 steps
```
The
`bpls`
tool that ships with ADIOS can be used to display the file structure
and dump arrays.
```
bash
$bpls
test.bp
unsigned long long time_step 3
*
scalar
double
time
3
*
scalar
integer number_of_data_objects 3
*
scalar
integer data_object_0/name_len 3
*
scalar
byte data_object_0/name 3
*
{
6
}
unsigned integer data_object_0/number_of_datasets 3
*
scalar
integer data_object_0/data_object_type 3
*
scalar
integer data_object_0/dataset_1/data_object_type 3
*
scalar
integer data_object_0/dataset_1/extent_len 3
*
scalar
integer data_object_0/dataset_1/extent 3
*
{
6
}
integer data_object_0/dataset_1/origin_len 3
*
scalar
double data_object_0/dataset_1/origin 3
*
{
3
}
integer data_object_0/dataset_1/spacing_len 3
*
scalar
double data_object_0/dataset_1/spacing 3
*
{
3
}
integer data_object_0/dataset_1/point_data/number_of_arrays 3
*
scalar
integer data_object_0/dataset_1/point_data/array_0/name_len 3
*
scalar
byte data_object_0/dataset_1/point_data/array_0/name 3
*
{
11
}
long long data_object_0/dataset_1/point_data/array_0/number_of_elements 3
*
scalar
integer data_object_0/dataset_1/point_data/array_0/number_of_components 3
*
scalar
integer data_object_0/dataset_1/point_data/array_0/element_type 3
*
scalar
real data_object_0/dataset_1/point_data/array_0/data 3
*
{
108
}
integer data_object_0/dataset_1/cell_data/number_of_arrays 3
*
scalar
integer data_object_0/dataset_1/cell_data/array_0/name_len 3
*
scalar
byte data_object_0/dataset_1/cell_data/array_0/name 3
*
{
11
}
long long data_object_0/dataset_1/cell_data/array_0/number_of_elements 3
*
scalar
integer data_object_0/dataset_1/cell_data/array_0/number_of_components 3
*
scalar
integer data_object_0/dataset_1/cell_data/array_0/element_type 3
*
scalar
real data_object_0/dataset_1/cell_data/array_0/data 3
*
{
34
}
integer data_object_1/name_len 3
*
scalar
byte data_object_1/name 3
*
{
13
}
unsigned integer data_object_1/number_of_datasets 3
*
scalar
integer data_object_1/data_object_type 3
*
scalar
integer data_object_1/dataset_1/data_object_type 3
*
scalar
unsigned long long data_object_1/dataset_1/cells/number_of_cells 3
*
scalar
unsigned byte data_object_1/dataset_1/cells/cell_types 3
*
{
16
}
unsigned long long data_object_1/dataset_1/cells/number_of_elements 3
*
scalar
long long data_object_1/dataset_1/cells/data 3
*
{
32
}
unsigned long long data_object_1/dataset_1/points/number_of_elements 3
*
scalar
integer data_object_1/dataset_1/points/elem_type 3
*
scalar
real data_object_1/dataset_1/points/data 3
*
{
48
}
integer data_object_1/dataset_1/point_data/number_of_arrays 3
*
scalar
integer data_object_1/dataset_1/point_data/array_0/name_len 3
*
scalar
byte data_object_1/dataset_1/point_data/array_0/name 3
*
{
11
}
long long data_object_1/dataset_1/point_data/array_0/number_of_elements 3
*
scalar
integer data_object_1/dataset_1/point_data/array_0/number_of_components 3
*
scalar
integer data_object_1/dataset_1/point_data/array_0/element_type 3
*
scalar
real data_object_1/dataset_1/point_data/array_0/data 3
*
{
16
}
integer data_object_1/dataset_1/cell_data/number_of_arrays 3
*
scalar
integer data_object_1/dataset_1/cell_data/array_0/name_len 3
*
scalar
byte data_object_1/dataset_1/cell_data/array_0/name 3
*
{
11
}
long long data_object_1/dataset_1/cell_data/array_0/number_of_elements 3
*
scalar
integer data_object_1/dataset_1/cell_data/array_0/number_of_components 3
*
scalar
integer data_object_1/dataset_1/cell_data/array_0/element_type 3
*
scalar
real data_object_1/dataset_1/cell_data/array_0/data 3
*
{
16
}
integer data_object_0/dataset_2/data_object_type 3
*
scalar
integer data_object_0/dataset_2/extent_len 3
*
scalar
integer data_object_0/dataset_2/extent 3
*
{
6
}
integer data_object_0/dataset_2/origin_len 3
*
scalar
double data_object_0/dataset_2/origin 3
*
{
3
}
integer data_object_0/dataset_2/spacing_len 3
*
scalar
double data_object_0/dataset_2/spacing 3
*
{
3
}
integer data_object_0/dataset_2/point_data/number_of_arrays 3
*
scalar
integer data_object_0/dataset_2/point_data/array_0/name_len 3
*
scalar
byte data_object_0/dataset_2/point_data/array_0/name 3
*
{
11
}
long long data_object_0/dataset_2/point_data/array_0/number_of_elements 3
*
scalar
integer data_object_0/dataset_2/point_data/array_0/number_of_components 3
*
scalar
integer data_object_0/dataset_2/point_data/array_0/element_type 3
*
scalar
real data_object_0/dataset_2/point_data/array_0/data 3
*
{
108
}
integer data_object_0/dataset_2/cell_data/number_of_arrays 3
*
scalar
integer data_object_0/dataset_2/cell_data/array_0/name_len 3
*
scalar
byte data_object_0/dataset_2/cell_data/array_0/name 3
*
{
11
}
long long data_object_0/dataset_2/cell_data/array_0/number_of_elements 3
*
scalar
integer data_object_0/dataset_2/cell_data/array_0/number_of_components 3
*
scalar
integer data_object_0/dataset_2/cell_data/array_0/element_type 3
*
scalar
real data_object_0/dataset_2/cell_data/array_0/data 3
*
{
34
}
integer data_object_1/dataset_2/data_object_type 3
*
scalar
unsigned long long data_object_1/dataset_2/cells/number_of_cells 3
*
scalar
unsigned byte data_object_1/dataset_2/cells/cell_types 3
*
{
16
}
unsigned long long data_object_1/dataset_2/cells/number_of_elements 3
*
scalar
long long data_object_1/dataset_2/cells/data 3
*
{
32
}
unsigned long long data_object_1/dataset_2/points/number_of_elements 3
*
scalar
integer data_object_1/dataset_2/points/elem_type 3
*
scalar
real data_object_1/dataset_2/points/data 3
*
{
48
}
integer data_object_1/dataset_2/point_data/number_of_arrays 3
*
scalar
integer data_object_1/dataset_2/point_data/array_0/name_len 3
*
scalar
byte data_object_1/dataset_2/point_data/array_0/name 3
*
{
11
}
long long data_object_1/dataset_2/point_data/array_0/number_of_elements 3
*
scalar
integer data_object_1/dataset_2/point_data/array_0/number_of_components 3
*
scalar
integer data_object_1/dataset_2/point_data/array_0/element_type 3
*
scalar
byte data_object_1/dataset_2/point_data/array_0/data 3
*
{
16
}
integer data_object_1/dataset_2/cell_data/number_of_arrays 3
*
scalar
integer data_object_1/dataset_2/cell_data/array_0/name_len 3
*
scalar
byte data_object_1/dataset_2/cell_data/array_0/name 3
*
{
11
}
long long data_object_1/dataset_2/cell_data/array_0/number_of_elements 3
*
scalar
integer data_object_1/dataset_2/cell_data/array_0/number_of_components 3
*
scalar
integer data_object_1/dataset_2/cell_data/array_0/element_type 3
*
scalar
real data_object_1/dataset_2/cell_data/array_0/data 3
*
{
16
}
```
endpoints/ADIOSAnalysisEndPoint.cxx
View file @
239b8126
...
...
@@ -120,6 +120,7 @@ int main(int argc, char **argv)
// close the ADIOS stream
dataAdaptor
->
Close
();
analysisAdaptor
->
Finalize
();
// we must force these to be destroyed before mpi finalize
// some of the adaptors make MPI calls in the destructor
...
...
endpoints/CMakeLists.txt
View file @
239b8126
...
...
@@ -2,8 +2,3 @@ if(ENABLE_ADIOS)
add_executable
(
ADIOSAnalysisEndPoint ADIOSAnalysisEndPoint.cxx
)
target_link_libraries
(
ADIOSAnalysisEndPoint PRIVATE opts mpi adios sensei timer
)
endif
()
if
(
ENABLE_ADIOS AND ENABLE_VTK_XMLP AND NOT ENABLE_LIBSIM
)
add_executable
(
PosthocIOEndPoint PosthocIOEndPoint.cxx
)
target_link_libraries
(
PosthocIOEndPoint PRIVATE opts mpi adios sensei timer
)
endif
()
miniapps/newton/newton.py
View file @
239b8126
...
...
@@ -297,9 +297,146 @@ def check_arg(dic, arg, dfl=None, req=True):
return
True
return
True
class
data_adaptor
:
def
__init__
(
self
):
# data from sim
self
.
arrays
=
{}
self
.
points
=
None
self
.
cells
=
None
# connect all the callbacks
self
.
pda
=
sensei
.
ProgrammableDataAdaptor
.
New
()
self
.
pda
.
SetGetNumberOfMeshesCallback
(
self
.
get_number_of_meshes
())
self
.
pda
.
SetGetMeshNameCallback
(
self
.
get_mesh_name
())
self
.
pda
.
SetGetNumberOfArraysCallback
(
self
.
get_number_of_arrays
())
self
.
pda
.
SetGetArrayNameCallback
(
self
.
get_array_name
())
self
.
pda
.
SetGetMeshCallback
(
self
.
get_mesh
())
self
.
pda
.
SetAddArrayCallback
(
self
.
add_array
())
self
.
pda
.
SetReleaseDataCallback
(
self
.
release_data
())
def
__getattr__
(
self
,
*
args
):
# forward calls to pda
return
self
.
pda
.
__getattribute__
(
*
args
)
def
base
(
self
):
return
self
.
pda
def
update
(
self
,
i
,
t
,
ids
,
x
,
y
,
z
,
m
,
vx
,
vy
,
vz
,
fx
,
fy
,
fz
):
# update the state arrays
self
.
set_array_1
(
ids
,
'ids'
)
self
.
set_array_1
(
m
,
'm'
)
self
.
set_array_3
(
vx
,
vy
,
vz
,
'v'
)
self
.
set_array_3
(
fx
,
fy
,
fz
,
'f'
)
self
.
set_geometry
(
x
,
y
,
z
)
self
.
SetDataTime
(
t
)
self
.
SetDataTimeStep
(
i
)
def
set_array_1
(
self
,
vals
,
name
):
arr
=
vtknp
.
numpy_to_vtk
(
vals
,
1
)
arr
.
SetName
(
name
)
self
.
arrays
[
name
]
=
arr
def
set_array_3
(
self
,
vx
,
vy
,
vz
,
name
):
# vector
nx
=
len
(
x
)
vxyz
=
np
.
zeros
(
3
*
nx
,
dtype
=
vx
.
dtype
)
vxyz
[::
3
]
=
vx
vxyz
[
1
::
3
]
=
vy
vxyz
[
2
::
3
]
=
vz
vtkv
=
vtknp
.
numpy_to_vtk
(
vxyz
,
deep
=
1
)
vtkv
.
SetName
(
name
)
self
.
arrays
[
name
]
=
vtkv
# mag
mname
=
'mag%s'
%
(
name
)
mv
=
np
.
sqrt
(
vx
**
2
+
vy
**
2
+
vz
**
2
)
vtkmv
=
vtknp
.
numpy_to_vtk
(
mv
,
deep
=
1
)
vtkmv
.
SetName
(
mname
)
self
.
arrays
[
mname
]
=
vtkmv
def
set_geometry
(
self
,
x
,
y
,
z
):
# points
nx
=
len
(
x
)
xyz
=
np
.
zeros
(
3
*
nx
,
dtype
=
x
.
dtype
)
xyz
[::
3
]
=
x
[:]
xyz
[
1
::
3
]
=
y
[:]
xyz
[
2
::
3
]
=
z
[:]
vxyz
=
vtknp
.
numpy_to_vtk
(
xyz
,
deep
=
1
)
vxyz
.
SetNumberOfComponents
(
3
)
vxyz
.
SetNumberOfTuples
(
nx
)
pts
=
vtk
.
vtkPoints
()
pts
.
SetData
(
vxyz
)
self
.
points
=
pts
# cells
cids
=
np
.
empty
(
2
*
nx
,
dtype
=
np
.
int32
)
cids
[::
2
]
=
1
cids
[
1
::
2
]
=
np
.
arange
(
0
,
nx
,
dtype
=
np
.
int32
)
cells
=
vtk
.
vtkCellArray
()
cells
.
SetCells
(
nx
,
vtknp
.
numpy_to_vtk
(
cids
,
\
deep
=
1
,
array_type
=
vtk
.
VTK_ID_TYPE
))
self
.
cells
=
cells
def
validate_mesh_name
(
self
,
mesh_name
):
if
mesh_name
!=
"bodies"
:
raise
RuntimeError
(
'no mesh named "%s"'
%
(
mesh_name
))
def
get_number_of_meshes
(
self
):
def
callback
():
return
1
return
callback
def
get_mesh_name
(
self
):
def
callback
(
idx
):
if
idx
!=
0
:
raise
RuntimeError
(
'no mesh %d'
%
(
idx
))
return
'bodies'
return
callback
def
get_number_of_arrays
(
self
):
def
callback
(
mesh_name
,
assoc
):
self
.
validate_mesh_name
(
mesh_name
)
return
len
(
self
.
arrays
.
keys
())
\
if
assoc
==
vtk
.
vtkDataObject
.
POINT
else
0
return
callback
def
get_array_name
(
self
):
def
callback
(
mesh_name
,
assoc
,
idx
):
self
.
validate_mesh_name
(
mesh_name
)
return
self
.
arrays
.
keys
()[
idx
]
\
if
assoc
==
vtk
.
vtkDataObject
.
POINT
else
0
return
callback
def
get_mesh
(
self
):
def
callback
(
mesh_name
,
structure_only
):
self
.
validate_mesh_name
(
mesh_name
)
# local bodies
pd
=
vtk
.
vtkPolyData
()
if
not
structure_only
:
pd
.
SetPoints
(
self
.
points
)
pd
.
SetVerts
(
self
.
cells
)
# global dataset
mb
=
vtk
.
vtkMultiBlockDataSet
()
mb
.
SetNumberOfBlocks
(
n_ranks
)
mb
.
SetBlock
(
rank
,
pd
)
return
mb
return
callback
def
add_array
(
self
):
def
callback
(
mesh
,
mesh_name
,
assoc
,
array_name
):
self
.
validate_mesh_name
(
mesh_name
)
if
assoc
!=
vtk
.
vtkDataObject
.
POINT
:
raise
RuntimeError
(
'no array named "%s" in cell data'
%
(
array_name
))
pd
=
mesh
.
GetBlock
(
rank
)
pd
.
GetPointData
().
AddArray
(
self
.
arrays
[
array_name
])
return
callback
def
release_data
(
self
):
def
callback
():
self
.
arrays
=
{}
self
.
points
=
None
self
.
cells
=
None
return
callback
class
analysis_adaptor
:
def
__init__
(
self
):
self
.
DataAdaptor
=
sensei
.
VTKDataAdaptor
.
New
()
self
.
DataAdaptor
=
data_adaptor
()
self
.
AnalysisAdaptor
=
None
def
initialize
(
self
,
analysis
,
args
=
''
):
...
...
@@ -317,13 +454,14 @@ class analysis_adaptor:
self
.
AnalysisAdaptor
=
sensei
.
CatalystAnalysisAdaptor
.
New
()
self
.
AnalysisAdaptor
.
AddPythonScriptPipeline
(
args
[
'script'
])
# VTK I/O
elif
analysis
==
'posthoc'
:
if
check_arg
(
args
,
'file'
,
'newton'
)
and
check_arg
(
args
,
'dir'
,
'./'
)
\
and
check_arg
(
args
,
'mode'
,
'0'
)
and
check_arg
(
args
,
'freq'
,
'1'
):
self
.
AnalysisAdaptor
=
sensei
.
VTKPosthocIO
.
New
()
self
.
AnalysisAdaptor
.
Initialize
(
comm
,
args
[
'dir'
],
args
[
'file'
],
\
[],
[
'ids'
,
'fx'
,
'fy'
,
'fz'
,
'f'
,
'vx'
,
'vy'
,
'vz'
,
'v'
,
'm'
],
\
int
(
args
[
'mode'
]),
int
(
args
[
'freq'
]))
#elif analysis == 'posthoc':
# if check_arg(args,'file','newton') and check_arg(args,'dir','./') \
# and check_arg(args,'mode','0') and check_arg(args,'freq','1'):
# # TODO -- mesh name API updates
# self.AnalysisAdaptor = sensei.VTKPosthocIO.New()
# self.AnalysisAdaptor.Initialize(comm, args['dir'],args['file'],\
# [], ['ids','fx','fy','fz','f','vx','vy','vz','v','m'], \
# int(args['mode']), int(args['freq']))
# Libisim, ADIOS, etc
elif
analysis
==
'configurable'
:
if
check_arg
(
args
,
'config'
):
...
...
@@ -335,31 +473,31 @@ class analysis_adaptor:
sys
.
exit
(
-
1
)
def
finalize
(
self
):
if
self
.
Analysis
==
'posthoc'
:
self
.
AnalysisAdaptor
.
Finalize
()
self
.
AnalysisAdaptor
.
Finalize
()
def
update
(
self
,
i
,
t
,
ids
,
x
,
y
,
z
,
m
,
vx
,
vy
,
vz
,
fx
,
fy
,
fz
):
status
(
'% 5d
\n
'
%
(
i
))
if
i
>
0
and
i
%
70
==
0
else
None
status
(
'.'
)
node
=
points_to_polydata
(
ids
,
x
,
y
,
z
,
m
,
vx
,
vy
,
vz
,
fx
,
fy
,
fz
)
mb
=
vtk
.
vtkMultiBlockDataSet
()
mb
.
SetNumberOfBlocks
(
n_ranks
)
mb
.
SetBlock
(
rank
,
node
)
#
node = points_to_polydata(ids,x,y,z,m,vx,vy,vz,fx,fy,fz)
#
#
mb = vtk.vtkMultiBlockDataSet()
#
mb.SetNumberOfBlocks(n_ranks)
#
mb.SetBlock(rank, node)
self
.
DataAdaptor
.
update
(
i
,
t
,
ids
,
x
,
y
,
z
,
m
,
vx
,
vy
,
vz
,
fx
,
fy
,
fz
)
self
.
DataAdaptor
.
SetDataTime
(
t
)
self
.
DataAdaptor
.
SetDataTimeStep
(
i
)
self
.
DataAdaptor
.
SetDataObject
(
mb
)
#
self.DataAdaptor.SetDataObject(mb)
self
.
AnalysisAdaptor
.
Execute
(
self
.
DataAdaptor
)
self
.
AnalysisAdaptor
.
Execute
(
self
.
DataAdaptor
.
base
()
)
self
.
DataAdaptor
.
ReleaseData
()
def
status
(
msg
):
sys
.
stderr
.
write
(
msg
if
rank
==
0
else
''
)
if
__name__
==
'__main__'
:
# parse the command line
parser
=
argparse
.
ArgumentParser
()
...
...
miniapps/newton/newton_catalyst.py
View file @
239b8126
...
...
@@ -6,6 +6,8 @@ from paraview import lookuptable
paraview
.
simple
.
lookuptable
=
lookuptable
paraview
.
simple
.
_lutReader
=
lookuptable
.
vtkPVLUTReader
()
import
sys
#--------------------------------------------------------------
# Code generated from cpstate.py to create the CoProcessor.
# ParaView 5.3.0-78-gd6e7170 64 bits
...
...
@@ -54,7 +56,7 @@ def CreateCoProcessor():
# create a new 'PVD Reader'
# create a producer from a simulation input
ptdatamasterpvd
=
coprocessor
.
CreateProducer
(
datadescription
,
'
input
'
)
ptdatamasterpvd
=
coprocessor
.
CreateProducer
(
datadescription
,
'
bodies
'
)
# create a new 'Threshold'
threshold1
=
Threshold
(
Input
=
ptdatamasterpvd
)
...
...
@@ -177,7 +179,7 @@ def CreateCoProcessor():
coprocessor
=
CoProcessor
()
# these are the frequencies at which the coprocessor updates.
freqs
=
{
'
input
'
:
[
1
,
1
,
1
,
1
,
1
]}
freqs
=
{
'
bodies
'
:
[
1
,
1
,
1
,
1
,
1
]}
coprocessor
.
SetUpdateFrequencies
(
freqs
)
return
coprocessor
...
...
miniapps/oscillators/bridge.cpp
View file @
239b8126
...
...
@@ -23,12 +23,13 @@ void initialize(MPI_Comm world,
int
*
gid
,
int
*
from_x
,
int
*
from_y
,
int
*
from_z
,
int
*
to_x
,
int
*
to_y
,
int
*
to_z
,
int
*
shape
,
int
ghostLevels
,
const
std
::
string
&
config_file
)
{
(
void
)
window
;
timer
::
MarkEvent
mark
(
"oscillators::bridge::initialize"
);