Unverified Commit c307debb authored by William F Godoy's avatar William F Godoy Committed by GitHub
Browse files

Merge pull request #1570 from williamfgc/docs

Refactored and added docs contents
parents 7c2bf0e8 0cd8ee41
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
# ADIOS 2 : The Adaptable Input Output System version 2 # ADIOS 2 : The Adaptable Input Output System version 2
This is v2.4.0-rc1 of the ADIOS 2: The Adaptable Input/Output (I/O) System, ADIOS 2 is developed as part of the United States Department of Energy's Exascale Computing Program. This is ADIOS 2: The Adaptable Input/Output (I/O) System, ADIOS 2 is developed as part of the United States Department of Energy's Exascale Computing Program.
ADIOS 2 is a framework designed for scientific data I/O to publish and subscribe (put/get) data when and where required. ADIOS 2 is a framework designed for scientific data I/O to publish and subscribe (put/get) data when and where required.
ADIOS 2 would Transport and Transform your data as groups of self-describing variables and attributes across different media (file, wide-area-network, memory-to-memory, etc.) using a common application programming interface (API) for all transport modes. ADIOS 2 uses range from HPC supercomputers to personal computers and cloud based applications. ADIOS2 transports data as groups of self-describing variables and attributes across different media types (such as files, wide-area-networks, and remote direct memory access) using a common application programming interface for all transport modes. ADIOS2 can be used on supercomputers, commercial clouds, and personal computers.
ADIOS 2 focuses on: ADIOS 2 focuses on:
...@@ -54,7 +54,7 @@ Please find [The ADIOS 2 User Guide at readthedocs](https://adios2.readthedocs.i ...@@ -54,7 +54,7 @@ Please find [The ADIOS 2 User Guide at readthedocs](https://adios2.readthedocs.i
## Releases ## Releases
* Latest release: [v2.4.0-rc1](https://github.com/ornladios/ADIOS2/releases/tag/v2.4.0-rc1) * Latest release: [v2.4.0](https://github.com/ornladios/ADIOS2/releases/tag/v2.4.0)
* Previous releases: [https://github.com/ornladios/ADIOS2/releases](https://github.com/ornladios/ADIOS2/releases) * Previous releases: [https://github.com/ornladios/ADIOS2/releases](https://github.com/ornladios/ADIOS2/releases)
......
...@@ -71,7 +71,7 @@ The goal is to provide specific advice and good practices about the use of ADIOS ...@@ -71,7 +71,7 @@ The goal is to provide specific advice and good practices about the use of ADIOS
20. C, Fortran: always call ``adios2_finalize`` for every call to ``adios2_init`` to avoid memory leaks. 20. C, Fortran: always call ``adios2_finalize`` for every call to ``adios2_init`` to avoid memory leaks.
21. Reminder: C++, C, Python: Row-Major, while Fortran: Column-Major. ADIOS 2 will handle interoperability between ordering. Remember that :ref:`bpls` is always a Row-Major reader. 21. Reminder: C++, C, Python: Row-Major, while Fortran: Column-Major. ADIOS 2 will handle interoperability between ordering. Remember that :ref:`bpls : Inspecting Data` is always a Row-Major reader so Fortran reader need to swap dimensions seen in bpls. bpls: (slow, ...., fast) -> Fortran(fast,...,slow).
22. Fortran API: use the type members (``var%valid``, ``var%name``, etc.) to get extra type information. 22. Fortran API: use the type members (``var%valid``, ``var%name``, etc.) to get extra type information.
...@@ -81,5 +81,5 @@ The goal is to provide specific advice and good practices about the use of ADIOS ...@@ -81,5 +81,5 @@ The goal is to provide specific advice and good practices about the use of ADIOS
25. Developers: explore the testing infrastructure ``ADIOS2/testing`` in ADIOS 2 as a starting point for using ADIOS 2 in your own testing environment. 25. Developers: explore the testing infrastructure ``ADIOS2/testing`` in ADIOS 2 as a starting point for using ADIOS 2 in your own testing environment.
26. Become a super-user of :ref:`bpls` to analyze datasets generated by ADIOS 2. 26. Become a super-user of :ref:`bpls : Inspecting Data` to analyze datasets generated by ADIOS 2.
\ No newline at end of file
########################### #########
Full Language Bindings APIs Full APIs
########################### #########
.. note:: .. note::
Product Application Developers targeting finer-level control for their IO tasks for optimization should use the current full APIs. If you want to use ADIOS2 in simple use cases (*e.g.* reading a file for analysis, interactive Python, or saving some data for a small project) please refer to the :ref:`High-Level Language Bindings APIs` for a flat learning curve. Application developers who desire fine-grained control of IO tasks should use the Full APIs. In simple cases (e.g. reading a file for analysis, interactive Python, or saving some data for a small project or tests) please refer to the :ref:High-Level APIs.
Currently ADIOS2 support bindings for the following languages and their minimum standards: Currently ADIOS2 support bindings for the following languages and their minimum standards:
......
...@@ -87,13 +87,11 @@ The following section provides a summary of the available functionality for each ...@@ -87,13 +87,11 @@ The following section provides a summary of the available functionality for each
:path: ../../bindings/CXX11/adios2/cxx11/ :path: ../../bindings/CXX11/adios2/cxx11/
:members: :members:
Debugging Debugging
--------- ---------
To help debugging, functionality is provided that creates For debugging, ADIOS2 C++11 class instances and enums can be passed directly to ostreams, as well as converted to human-readable strings via the ubiquitous ``ToString(object)`` member variable. You can also directly pass objects to ``ostream``s.
human-readable representations of adios2 C++11 class instances and
enums. To get a string representation, use ``ToString(object)``. You
can also directly pass objects to ``ostream``s.
Example: Example:
......
...@@ -4,8 +4,8 @@ Python bindings ...@@ -4,8 +4,8 @@ Python bindings
.. note:: .. note::
Product Application Developers targeting finer-level control for their IO tasks for optimization should use the current full APIs. If you want to use ADIOS2 in simple use cases (*e.g.* reading a file for analysis, interactive Python, or saving some data for a small project) please refer to the :ref:`High-Level Language Bindings APIs` for a flat learning curve. Product Application Developers targeting finer-level control for their IO tasks for optimization should use the current full APIs. If you want to use ADIOS2 in simple use cases (*e.g.* reading a file for analysis, interactive Python, or saving some data for a small project) please refer to the :ref:`High-Level APIs` for a flat learning curve.
The full Python APIs follow very closely the full C++11 API interface. The full Python APIs follow very closely the full C++11 API interface.
Work in progress. This section is Work In Progress until we figure out an automated way to pull the docs.
################################# ###############
High-Level Language Bindings APIs High-Level APIs
################################# ###############
The current simple APIs are designed for simple and direct tasks in which performance is not a critical aspect. Unlike the :ref:`Full Language Bindings APIs` the simple APIs only require a single object/handler offering native resemblance to C++ (fstream) and Python (file I/O) native implementations. Thus, offering a nearly-flat learning curve for first-time users. The high-level APIs are designed for simple tasks for which performance is not critical. Unlike the :ref:`Full APIs`, the high-level APIs only require a single object handler resembling a C++ fstream or a Python file I/O idiom. The high-level APIs are recommended to both first-time and advanced users; the low-level APIs being recommended only when performance testing identifies a bottleneck or when more control is needed.
Typical scenarios for using the simple APIs are: Typical scenarios for using the simple high-level APIs are:
* Reading a file to perform data analysis with libraries (matplotlib, scipy, etc.) * Reading a file to perform data analysis with libraries (matplotlib, scipy, etc.)
* Interactive: few calls make interactive usage easier. * Interactive: few calls make interactive usage easier.
...@@ -16,10 +16,6 @@ The main function calls are: ``open`` (or constructor in C++), ``write``, ``read ...@@ -16,10 +16,6 @@ The main function calls are: ``open`` (or constructor in C++), ``write``, ``read
In addition, ADIOS2 borrows the corresponding language native syntax for advancing lines to advance the step in write mode, and for a "step-by-step" streaming basis in read mode. In addition, ADIOS2 borrows the corresponding language native syntax for advancing lines to advance the step in write mode, and for a "step-by-step" streaming basis in read mode.
See each language section in this chapter for a write/read example. See each language section in this chapter for a write/read example.
.. warning::
The simplified APIs are not meant to be used inside applications in which the end user has no access to the IO layer and/or when performance and full functionality are critical, *e.g.* running on a HPC cluster at scale. Use the :ref:`Full Language Bindings APIs` instead
.. note:: .. note::
The simpified APIs are based on language native file IO interface. Hence ``write`` and ``read`` calls are always synchronized and variables data memory is ready to use immediatley after these calls. The simpified APIs are based on language native file IO interface. Hence ``write`` and ``read`` calls are always synchronized and variables data memory is ready to use immediatley after these calls.
...@@ -27,15 +23,15 @@ See each language section in this chapter for a write/read example. ...@@ -27,15 +23,15 @@ See each language section in this chapter for a write/read example.
Currently ADIOS2 support bindings for the following languages and their minimum standards: Currently ADIOS2 support bindings for the following languages and their minimum standards:
+----------+----------+-------------------------+-----------------+ +----------+----------+-----------------------+-------------+
| Language | Standard | Interface | Based on | | Language | Standard | Interface | Based on |
+----------+----------+-------------------------+-----------------+ +----------+----------+-----------------------+-------------+
| C++ | 11/newer | ``#include adios2.h`` | ``fstream`` | | C++ | 11/newer | ``#include adios2.h`` | ``fstream`` |
+----------+----------+-------------------------+-----------------+ +----------+----------+-----------------------+-------------+
| Python | 2.7/3 | ``import adios2`` | Python IO | | Python | 2.7/3 | ``import adios2`` | Python IO |
+----------+----------+-------------------------+-----------------+ +----------+----------+-----------------------+-------------+
| Matlab | | | | | Matlab | | | |
+----------+----------+-------------------------+-----------------+ +----------+----------+-----------------------+-------------+
The following sections provide a summary of the API calls on each language and links to Write and Read examples to put it all together. The following sections provide a summary of the API calls on each language and links to Write and Read examples to put it all together.
......
******************* ******************
C++ simple bindings C++ High-Level API
******************* ******************
C++11 High-Level APIs are based on a single object `adios2::fstream`
.. caution:: .. caution::
DO NOT call ``use namespace adios2`` in your C++ code. DO NOT place ``use namespace adios2`` in your C++ code.
Use ``adios2::fstream`` directly to prevent conflicts with ``std::stream``. Use ``adios2::fstream`` directly to prevent conflicts with ``std::fstream``.
C++11 Write example C++11 Write example
------------------- -------------------
......
********************* *********************
Python high-level API Python High-Level API
********************* *********************
Python simple bindings follow closely the :ref:`C++ simple bindings`. Just like the full APIs, they rely on numpy and (optionally) on ``mpi4py`` if ADIOS2 is compiled with MPI. Python simple bindings follow closely Python style directives. Just like the full APIs, they rely on numpy and, optionally, on ``mpi4py``, if the underlying ADIOS2 library is compiled with MPI.
For online examples on MyBinder : For online examples on MyBinder :
...@@ -79,7 +79,7 @@ Python Read "step-by-step" example ...@@ -79,7 +79,7 @@ Python Read "step-by-step" example
print("\n") print("\n")
# track current step # track current step
step = fh_step.currentstep() step = fh_step.current_step()
if( step == 0 ): if( step == 0 ):
size_in = fh_step.read("size") size_in = fh_step.read("size")
......
########################### ####################
ADIOS2 Interface Components Interface Components
########################### ####################
.. include:: overview.rst .. include:: overview.rst
.. include:: adios.rst .. include:: adios.rst
......
...@@ -4,7 +4,7 @@ Components Overview ...@@ -4,7 +4,7 @@ Components Overview
.. note:: .. note::
If you are doing simple tasks where performance is a non-critical aspect please go to the :ref:`High-Level Language Bindings APIs` section for a quick start. If you are an HPC application developer or you want to use ADIOS2 functionality in full please read this chapter. If you are doing simple tasks where performance is a non-critical aspect please go to the :ref:`High-Level APIs` section for a quick start. If you are an HPC application developer or you want to use ADIOS2 functionality in full please read this chapter.
The simple way to understand the big picture for the ADIOS2 unified user interface components is to map each class to the actual definition of the ADIOS acronym. The simple way to understand the big picture for the ADIOS2 unified user interface components is to map each class to the actual definition of the ADIOS acronym.
...@@ -42,7 +42,7 @@ ADIOS2's public APIs are based on the natural choice for each supported language ...@@ -42,7 +42,7 @@ ADIOS2's public APIs are based on the natural choice for each supported language
Python objects/member functions numpy arrays. Python objects/member functions numpy arrays.
============== ========================== ================================== ============== ========================== ==================================
The following section provides a common overview to all languages based on the C++11 APIs. For each specific language go to the :ref:`Full Language Bindings APIs` section, but it's highly recommended to read this section as components map 1-to-1 in other languages. The following section provides a common overview to all languages based on the C++11 APIs. For each specific language go to the :ref:`Full APIs` section, but it's highly recommended to read this section as components map 1-to-1 in other languages.
The following figure depicts the components hierarchy from the application's point of view. The following figure depicts the components hierarchy from the application's point of view.
......
...@@ -76,7 +76,7 @@ author = u'Oak Ridge National Laboratory' ...@@ -76,7 +76,7 @@ author = u'Oak Ridge National Laboratory'
# The short X.Y version. # The short X.Y version.
version = u'2' version = u'2'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = u'2.3.1' release = u'2.4.0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
...@@ -98,14 +98,16 @@ exclude_patterns = [ ...@@ -98,14 +98,16 @@ exclude_patterns = [
'introduction/nutshell.rst', 'introduction/nutshell.rst',
'introduction/adaptable_io.rst', 'introduction/adaptable_io.rst',
# 'introduction/introduction.rst', # 'introduction/introduction.rst',
'installation/fortran.rst', 'setting_up/source/fortran.rst',
'installation/python.rst', 'setting_up/source/python.rst',
'installation/examples.rst', 'setting_up/source/examples.rst',
# 'installation/installation.rst', 'setting_up/source/cmake.rst',
'installation/cmake.rst', 'setting_up/source/hpc_systems.rst',
'installation/hpc_systems.rst', 'setting_up/source/ctest.rst',
'installation/ctest.rst', 'setting_up/source/cpp_c.rst',
'installation/cpp_c.rst', 'setting_up/source.rst',
'setting_up/conda.rst',
'setting_up/linking.rst',
'api_full/fortran.rst', 'api_full/fortran.rst',
'api_full/python.rst', 'api_full/python.rst',
'api_full/cxx11.rst', 'api_full/cxx11.rst',
...@@ -124,11 +126,13 @@ exclude_patterns = [ ...@@ -124,11 +126,13 @@ exclude_patterns = [
'api_high/python.rst', 'api_high/python.rst',
'api_high/cxx11.rst', 'api_high/cxx11.rst',
# 'api_high/api_high.rst', # 'api_high/api_high.rst',
'utilities/adios2-config.rst', # 'ecosystem/utilities.rst',
'utilities/adios_reorganize.rst', 'ecosystem/utilities/adios2-config.rst',
# 'utilities/utilities.rst', 'ecosystem/utilities/adios_reorganize.rst',
'utilities/bpls.rst', 'ecosystem/utilities/bpls.rst',
'utilities/sst_conn_tool.rst', 'ecosystem/utilities/sst_conn_tool.rst',
'ecosystem/visualization.rst'
'ecosystem/visualization/vtk.rst'
'engines/dataman.rst', 'engines/dataman.rst',
'engines/insitu_mpi.rst', 'engines/insitu_mpi.rst',
'engines/hdf5.rst', 'engines/hdf5.rst',
......
...@@ -17,7 +17,7 @@ Currently supported tools are: ...@@ -17,7 +17,7 @@ Currently supported tools are:
* ``adios2-config`` * ``adios2-config``
* ``sst_conn_tool`` : SST staging engine connectivity diagnostic tool * ``sst_conn_tool`` : SST staging engine connectivity diagnostic tool
.. include:: bpls.rst .. include:: utilities/bpls.rst
.. include:: adios_reorganize.rst .. include:: utilities/adios_reorganize.rst
.. include:: adios2-config.rst .. include:: utilities/adios2-config.rst
.. include:: sst_conn_tool.rst .. include:: utilities/sst_conn_tool.rst
*************
adios2-config
*************
`adios2-config` is provided to aid with non-CMake builds (*e.g.* manually generated Makefile).
Running the `adios2-config` command under `adios2-install-dir/bin/adios2-config` will generate the following usage information:
.. code-block:: bash
./adios2-config --help
adios2-config (--help | [--c-flags] [--c-libs] [--cxx-flags] [--cxx-libs] [-fortran-flags] [--fortran-libs])
--help Display help information
-c Both compile and link flags for the C bindings
--c-flags Preprocessor and compile flags for the C bindings
--c-libs Linker flags for the C bindings
-x Both compile and link flags for the C++ bindings
--cxx-flags Preprocessor and compile flags for the C++ bindings
--cxx-libs Linker flags for the C++ bindings
-f Both compile and link flags for the F90 bindings
--fortran-flags Preprocessor and compile flags for the F90 bindings
--fortran-libs Linker flags for the F90 bindings
Please refer to the :ref:`From non-CMake build systems` for more information on how to use this command.
\ No newline at end of file
**** **********************
bpls bpls : Inspecting Data
**** **********************
The ``bpls`` utility is for examining and pretty-printing the content of ADIOS output files (BP and HDF5 files). The ``bpls`` utility is for examining and pretty-printing the content of ADIOS output files (BP and HDF5 files).
By default, it lists the variables in the file including the type, name, and dimensionality. By default, it lists the variables in the file including the type, name, and dimensionality.
......
********************************************** *********************************************
sst_conn_tool : SST network connectivity tool sst_conn_tool : SST network connectivity tool
********************************************** *********************************************
The ``sst_conn_tool`` utility exposes some aspects of SST network The ``sst_conn_tool`` utility exposes some aspects of SST network
connectivity parameters and activity in order to allow debugging of connectivity parameters and activity in order to allow debugging of
......
################
Visualizing Data
################
.. note::
As of version 2.4.0 this work is experimental. As it builds on top of the library in third party ecosystems, and doesn't ship with ADIOS 2 source code.
Certain ADIOS 2 bp files, and in-memory streams in the future), can be recognized by third party products to enable data visualization. The expectation is to keep adding support to the list of products enabling ADIOS 2 for visualization purposes. The goal of this section is to describe the currently cover cases and how to create an ADIOS 2 BP file to accomodate the visualization product requirements.
.. include:: visualization/vtk.rst
**********************
Using VTK and Paraview
**********************
ADIOS BP files can now be seamlessly integrated into the `Visualization Toolkit <https://vtk.org/>`_ (VTK) and `Paraview <https://www.paraview.org/>`_. Datasets can be described with an additional attribute that conforms to the `VTK XML data model formats <https://vtk.org/wp-content/uploads/2015/04/file-formats.pdf>`_ as high-level descriptors that will allow interpretation of ADIOS 2 variables into a hierarchy understood by the VTK infrastructure. This XML data format is saved in ADIOS as either an attribute, and optionally, as an additional vtk.xml file inside file.bp.dir/vtk.xml from the default engine. For more details, see :ref:`BP3 (Default)`.
Current limitations:
* Only works with MPI builds of VTK and Paraview
* Support only one Block per ADIOS dataset
* Only supports BP Files, streams are not supported
* Currently working up to 3D (and linearized 1D) variables for scalars and vectors.
* Image Data, vti, is supported with ADIOS2 Global Array Variables only
* Unstructured Grid, vtu, is supported with ADIOS2 Local Arrays Variables only
Two "VTK File" types are supported:
1. Image data (.vti)
2. Unstructured Grid (.vtu)
The main idea is to populate the above XML format contents describing the extent and the data arrays with ADIOS variables in the BP data set. The result is a more-than-compact typical VTK data file since extra information about the variable, such as dimensions and type, as they already exist in the BP data set.
A typical VTK image data XML descriptor (.vti):
.. code-block:: xml
<?xml version="1.0"?>
<VTKFile type="ImageData">
<ImageData WholeExtent="x1 x2 y1 y2 z1 z2" Origin="x0 y0 z0" Spacing="dx dy dz">
<Piece Extent="x1 x2 y1 y2 z1 z2">
<PointData>
<DataArray Name="p1"/>
<DataArray Name="p2"/>
</PointData>
<CellData>
<DataArray Name="c1"/>
<DataArray Name="c2"/>
</CellData>
</Piece>
</ImageData>
</VTKFile>
A typical VTK unstructured grid XML descriptor (.vtu):
.. code-block:: xml
<?xml version="1.0"?>
<VTKFile type="ImageData">
<ImageData WholeExtent="x1 x2 y1 y2 z1 z2" Origin="x0 y0 z0" Spacing="dx dy dz">
<Piece Extent="x1 x2 y1 y2 z1 z2">
<PointData>
<DataArray Name="p1"/>
<DataArray Name="p2"/>
</PointData>
<CellData>
<DataArray Name="c1"/>
<DataArray Name="c2"/>
</CellData>
</Piece>
</ImageData>
</VTKFile>
In addition, VTK can interpret physical-time or output-step varying data stored with ADIOS by resusing the special "TIME" tag. This is better illustrated in the following section.
Saving the vtk.xml data model
-----------------------------
For the full source code of the following illustration example see the `gray-scott adios2 tutorial <https://github.com/pnorbert/adiosvm/tree/master/Tutorial/gray-scott>`_
To incorporate the data model in a BP data file, the application has two options:
1) Adding a string attribute called "vtk.xml" in code. "TIME" is a special tag for adding physical time variables.
.. code-block:: c++
const std::string imageData = R"(
<?xml version="1.0"?>
<VTKFile type="ImageData" version="0.1" byte_order="LittleEndian">
<ImageData WholeExtent=")" + extent + R"(" Origin="0 0 0" Spacing="1 1 1">
<Piece Extent=")" + extent + R"(">
<CellData Scalars="U">
<DataArray Name="U" />
<DataArray Name="V" />
<DataArray Name="TIME">
step
</DataArray>
</CellData>
</Piece>
</ImageData>
</VTKFile>)";
io.DefineAttribute<std::string>("vtk.xml", imageData);
.. tip::
C++11 users should take advantage C++11 string literals (R"( xml_here )") to simplify escaping characters in the XML.
The resulting bpls output should contain the "vtk.xml" attribute and the variables in the model:
.. code-block:: bash
> bpls gs.bp -lav
File info:
of variables: 3
of attributes: 7
statistics: Min / Max
double Du attr = 0.2
double Dv attr = 0.1
double F attr = 0.02
double U 24*{48, 48, 48} = 0.107439 / 1.04324
double V 24*{48, 48, 48} = 0 / 0.672232
double dt attr = 1
double k attr = 0.048
double noise attr = 0.01
int32_t step 24*scalar = 0 / 575
string vtk.xml attr =
<VTKFile type="ImageData" version="0.1" byte_order="LittleEndian">
<ImageData WholeExtent="0 49 0 49 0 49" Origin="0 0 0" Spacing="1 1 1">
<Piece Extent="0 49 0 49 0 49">
<CellData Scalars="U">
<DataArray Name="U" />
<DataArray Name="V" />
<DataArray Name="TIME">
step
</DataArray>
</CellData>
</Piece>
</ImageData>
</VTKFile>
2) Saving a "vtk.xml" file inside the file.bp.dir to describe the data after is created
.. code-block::
> cat gs.bp.dir/vtk.xml
<?xml version="1.0"?>
<VTKFile type="ImageData" version="0.1" byte_order="LittleEndian">
<ImageData WholeExtent=")" + extent + R"(" Origin="0 0 0" Spacing="1 1 1">
<Piece Extent=")" + extent + R"(">
<CellData Scalars="U">
<DataArray Name="U" />
<DataArray Name="V" />
<DataArray Name="TIME">
step
</DataArray>
</CellData>
</Piece>
</ImageData>
</VTKFile>
The result is that the generated BP file should be recognize by a branch of Paraview/VTK that must be built from source:
.. image:: http://i66.tinypic.com/33krfh2.png : alt: my-picture2
Similarly, unstructured grid (.vtu) support can be added with the limitations of using specific labels for the variable names setting the "connectivity", "vertices", and cell "types".
The following example is taken from example 2 of the `MFEM product examples website <https://mfem.org/examples/>`_ using ADIOS 2:
The resulting `bpls` output for unstructured grid data types:
.. code-block:: bash
File info:
of variables: 6
of attributes: 4
statistics: Min / Max
uint32_t NumOfElements {4} = 1024 / 1024
uint32_t NumOfVertices {4} = 1377 / 1377
string app attr = "MFEM"
uint64_t connectivity [4]*{1024, 9} = 0 / 1376
uint32_t dimension attr = 3
string glvis_mesh_version attr = "1.0"
double sol [4]*{1377, 3} = -0.201717 / 1.19304
uint32_t types scalar = 11
double vertices [4]*{1377, 3} = -1.19304 / 8.20172
string vtk.xml attr =
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
<UnstructuredGrid>
<Piece NumberOfPoints="NumOfVertices" NumberOfCells="NumOfElements">
<Points>
<DataArray Name="vertices" />
</Points>
<Cells>
<DataArray Name="connectivity" />
<DataArray Name="types" />
</Cells>