VTK
ADIOSWriter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: ADIOSWriter.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 // .NAME ADIOSWriter - The utility class performing ADIOS Write operations
16 
17 #ifndef _ADIOSWriter_h
18 #define _ADIOSWriter_h
19 
20 #include <limits>
21 #include <sstream>
22 #include <stdexcept>
23 #include <string>
24 #include <vector>
25 
26 #include <adios_mpi.h>
27 
28 #include "ADIOSDefs.h"
29 #include "ADIOSUtilities.h"
30 
31 namespace ADIOS
32 {
33 
34 // An array dimension as either a string or integer
35 struct ArrayDim
36 {
37  ArrayDim(size_t i) : ValueI(i), ValueS("") { }
38  ArrayDim(const std::string& var) : ValueI(0), ValueS(var) { }
39 
40  size_t ValueI;
42 };
43 
44 class Writer
45 {
46 public:
47  static bool SetCommunicator(MPI_Comm);
48 
49 public:
50  Writer(ADIOS::TransportMethod transport, const std::string& transportArgs);
51 
52  ~Writer();
53 
54  // Description:
55  // Define scalar attributes
56  template<typename TN>
57  void DefineAttribute(const std::string& path, const TN& value)
58  {
59  std::stringstream ss;
60  ss << value;
61  this->DefineAttribute(path, Type::NativeToADIOS<TN>(), ss.str());
62  }
63 
64  // Description:
65  // Define scalars for later writing
66  template<typename TN>
67  int DefineScalar(const std::string& path)
68  {
69  return this->DefineScalar(path, Type::NativeToADIOS<TN>());
70  }
71 
72  // Define an array for later writing
73  template<typename TN>
74  int DefineLocalArray(const std::string& path,
75  const std::vector<ArrayDim>& dims, Transform xfm = Transform_NONE)
76  {
77  return this->DefineLocalArray(path, Type::NativeToADIOS<TN>(), dims, xfm);
78  }
79  int DefineLocalArray(const std::string& path, ADIOS_DATATYPES adiosType,
80  const std::vector<ArrayDim>& dims, Transform xfm = Transform_NONE);
81 
82  // Description:
83  // Enqueue a scalar for writing
84  template<typename TN>
85  void WriteScalar(const std::string& path, const TN& val)
86  {
87  this->WriteScalar(path, Type::NativeToADIOS<TN>(), &val);
88  }
89  void WriteScalar(const std::string& path, ADIOS_DATATYPES adiosType,
90  const void* val);
91 
92  // Description:
93  // Enqueue an array for writing
94  void WriteArray(const std::string& path, const void* val);
95 
96  // Description:
97  // Perform all writes for the current time step
98  void Commit(const std::string& fileName, bool append = false);
99 
100 private:
101  struct InitContext;
102  InitContext *Ctx;
103 
104  struct WriterImpl;
105  WriterImpl *Impl;
106 
107  void DefineAttribute(const std::string& path, ADIOS_DATATYPES adiosType,
108  const std::string& value);
109  int DefineScalar(const std::string& path, ADIOS_DATATYPES adiosType);
110 };
111 
112 }
113 #endif // _ADIOSWriter_h
int DefineScalar(const std::string &path)
Definition: ADIOSWriter.h:67
TransportMethod
Definition: ADIOSDefs.h:23
int DefineLocalArray(const std::string &path, const std::vector< ArrayDim > &dims, Transform xfm=Transform_NONE)
Definition: ADIOSWriter.h:74
ArrayDim(const std::string &var)
Definition: ADIOSWriter.h:38
static bool SetCommunicator(MPI_Comm)
std::string ValueS
Definition: ADIOSWriter.h:41
void WriteScalar(const std::string &path, const TN &val)
Definition: ADIOSWriter.h:85
void WriteArray(const std::string &path, const void *val)
ArrayDim(size_t i)
Definition: ADIOSWriter.h:37
void DefineAttribute(const std::string &path, const TN &value)
Definition: ADIOSWriter.h:57
void Commit(const std::string &fileName, bool append=false)
Transform
Definition: ADIOSDefs.h:39
Writer(ADIOS::TransportMethod transport, const std::string &transportArgs)