VTK  9.7.1
PIOData.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright (c) 2021, Triad National Security, LLC
3 // SPDX-License-Identifier: LicenseRef-BSD-3-Clause-LANL-Triad-USGov
16 #if !defined(_PIODATA_H)
17 #define _PIODATA_H
18 
19 #include "vtkABINamespace.h"
20 
21 #include <cstdint>
22 #include <fstream>
23 #include <iostream>
24 #include <list>
25 #include <map>
26 #include <set>
27 #include <sstream>
28 #include <string.h>
29 #include <string>
30 #include <valarray>
31 
32 VTK_ABI_NAMESPACE_BEGIN
34 {
35  bool operator()(const char* p, const char* q) const { return strcmp(p, q) < 0; };
36 };
37 
38 // Class Declarations
39 class PIO_FIELD
40 {
41 public:
42  char* pio_name;
43  int index; // index = 0 is scalar, index = 1 is vector, index = -1 is request from input deck
44  int64_t length;
45  int64_t position;
46  int64_t chksum;
47  size_t cdata_len;
49  friend class PIO_DATA;
50  friend class PIO_DATA_PIO;
51  friend class PIO_DATA_HDF5;
52 
53  double* data;
54  char* cdata;
55 }; // End class PIO_FIELD
56 
57 // Typedefs for the mapping between the names of the PIO blocks in the PIO file and
58 // the PIO_FIELD's used to store the data values in the PIO blocks.
59 typedef std::multimap<const char*, PIO_FIELD*, Cstring_less> VAR_MAP;
60 typedef VAR_MAP::iterator VMI;
61 typedef VAR_MAP::const_iterator CVMI;
62 typedef std::pair<VMI, VMI> VMP;
63 typedef std::pair<CVMI, CVMI> CVMP;
64 
65 class PIO_DATA
66 {
67 public:
68  PIO_DATA();
69  virtual ~PIO_DATA() = 0;
70 
71  // stuff needed for interface, used in PIOAdaptor
72  virtual bool good_read() = 0;
73  virtual bool set_scalar_field(std::valarray<int>&, const char*) = 0;
74  virtual bool set_scalar_field(std::valarray<int64_t>&, const char*) = 0;
75  virtual bool set_scalar_field(std::valarray<double>&, const char*) = 0;
76  virtual bool set_vector_field(std::valarray<std::valarray<double>>&, const char*) = 0;
77  virtual int get_pio_num() const = 0;
78  virtual PIO_FIELD* get_pio_field() const = 0;
79  virtual int get_num_components(const char*) const = 0;
80  virtual int get_num_materials() const = 0;
81  virtual int64_t get_num_cells() = 0;
82  virtual int get_cycle() = 0;
83  virtual double get_simtime() = 0;
84  virtual int get_dimension() = 0;
85  virtual bool get_gridsize(std::valarray<int>&) = 0;
86  virtual bool get_gridscale(std::valarray<double>&) = 0;
87  virtual bool get_gridorigin(std::valarray<double>&) = 0;
88  virtual std::string get_eap_version() = 0;
89  virtual std::string get_username() = 0;
90  virtual std::string get_problemname() = 0;
91  virtual bool get_material_names(std::valarray<std::string>&) = 0;
92  virtual bool get_tracer_variable_names(std::valarray<std::string>&) = 0;
93 
94  virtual bool has_field(const char*) = 0; // true if field exists
95  virtual bool reconstruct_chunk_field(int64_t numcell, std::valarray<double>& va,
96  const char* prefix, const char* var, int materialId) = 0;
97 
98  VAR_MAP VarMMap; // Multimap from pio_name to a PIO_FIELD class
99 
100 }; // End class PIO_DATA
101 
102 // Locations of various data items from the input arrays, amhc_i, amhc_r8,
103 // amch_l, and controller_r8
104 enum
105 {
106  Ntime = 0, // time = controller_r8[Ntime];
107  Nnumdim = 42, // numdim = amhc_i[Nnumdim]
108  Nmesh0 = 16, // N[0] = amhc_i[Nmesh0]
109  Nmesh1 = 17, // N[1] = amhc_i[Nmesh1]
110  Nmesh2 = 29, // N[2] = amhc_i[Nmesh2]
111  Nd0 = 21, // d[0] = amhc_r8[Nd0]
112  Nd1 = 22, // d[1] = amhc_r8[Nd1]
113  Nd2 = 38, // d[2] = amhc_r8[Nd2]
114  NZero0 = 19, // Zero[0] = amhc_r8[NZero0]
115  NZero1 = 20, // Zero[1] = amhc_r8[NZero1]
116  NZero2 = 35, // Zero[2] = amhc_r8[NZero2]
117  Ncylin = 1, // cylindrically (axisymmetric) symmetric
118  // geometry if amhc_l[Ncylin]!=0
119  Nsphere = 8 // spherically symmetirc geometry if
120  // amhc_l[Nsphere]!=0
121 };
122 
123 VTK_ABI_NAMESPACE_END
124 #endif
int64_t length
Definition: PIOData.h:44
virtual double get_simtime()=0
VAR_MAP VarMMap
Definition: PIOData.h:98
char * cdata
Definition: PIOData.h:54
virtual bool get_material_names(std::valarray< std::string > &)=0
virtual int get_num_components(const char *) const =0
VAR_MAP::iterator VMI
Definition: PIOData.h:60
std::multimap< const char *, PIO_FIELD *, Cstring_less > VAR_MAP
Definition: PIOData.h:59
virtual bool reconstruct_chunk_field(int64_t numcell, std::valarray< double > &va, const char *prefix, const char *var, int materialId)=0
virtual bool has_field(const char *)=0
int index
Definition: PIOData.h:43
Definition: PIOData.h:113
VAR_MAP::const_iterator CVMI
Definition: PIOData.h:61
virtual std::string get_eap_version()=0
virtual ~PIO_DATA()=0
virtual bool set_scalar_field(std::valarray< int > &, const char *)=0
size_t cdata_len
Definition: PIOData.h:47
virtual int get_dimension()=0
virtual PIO_FIELD * get_pio_field() const =0
virtual int get_cycle()=0
virtual int get_num_materials() const =0
Definition: PIOData.h:111
class for reading PIO (Parallel Input Output) files in HDF5 format
Definition: PIODataHDF5.h:47
virtual int get_pio_num() const =0
class for reading PIO (Parallel Input Output) data files
Definition: PIODataPIO.h:36
virtual int64_t get_num_cells()=0
virtual bool get_tracer_variable_names(std::valarray< std::string > &)=0
virtual bool get_gridscale(std::valarray< double > &)=0
double * data
Definition: PIOData.h:53
int64_t position
Definition: PIOData.h:45
Definition: PIOData.h:106
std::pair< VMI, VMI > VMP
Definition: PIOData.h:62
virtual bool set_vector_field(std::valarray< std::valarray< double >> &, const char *)=0
virtual bool good_read()=0
int64_t chksum
Definition: PIOData.h:46
std::pair< CVMI, CVMI > CVMP
Definition: PIOData.h:63
bool read_field_data
Definition: PIOData.h:48
class for reading PIO (Parallel Input Output) data files
Definition: PIOData.h:65
bool operator()(const char *p, const char *q) const
Definition: PIOData.h:35
virtual bool get_gridsize(std::valarray< int > &)=0
virtual std::string get_problemname()=0
virtual std::string get_username()=0
char * pio_name
Definition: PIOData.h:42
virtual bool get_gridorigin(std::valarray< double > &)=0
Definition: PIOData.h:112