Changeset 599 for XIOS/trunk/src/input/inetcdf4.hpp
- Timestamp:
- 05/26/15 16:13:48 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/input/inetcdf4.hpp
r591 r599 11 11 12 12 #ifndef UNLIMITED_DIM 13 14 #endif // UNLIMITED_DIM13 #define UNLIMITED_DIM (size_t)(-1) 14 #endif // UNLIMITED_DIM 15 15 16 16 namespace xios 17 17 { 18 /// ////////////////////// Déclarations ////////////////////// /// 19 typedef std::vector<StdString> CVarPath; 20 21 class CINetCDF4 22 { 23 public : 24 25 /// Constructeurs /// 26 CINetCDF4(void); // Not implemented. 27 CINetCDF4(const StdString & filename); 28 CINetCDF4(const CINetCDF4 & inetcdf4); // Not implemented. 29 CINetCDF4(const CINetCDF4 * const inetcdf4); // Not implemented. 30 31 //------------------------------------------------------------- 32 33 /// Accesseurs /// 34 StdSize getNbOfTimestep(const CVarPath * const path = NULL); 35 36 StdString getUnlimitedDimensionName(const CVarPath * const path = NULL); 37 38 StdString getCoordinatesId(const StdString & name, 39 const CVarPath * const path = NULL); 40 41 StdString getBoundsId(const StdString & name, 42 const CVarPath * const path = NULL); 43 44 StdString getLonCoordName(const StdString & varname, 45 const CVarPath * const path = NULL); 46 StdString getLatCoordName(const StdString & varname, 47 const CVarPath * const path = NULL); 48 StdString getVertCoordName(const StdString & varname, 49 const CVarPath * const path = NULL); 50 51 std::set<StdString> getCoordVariables(const CVarPath * const path = NULL); 52 std::set<StdString> getBoundVariables(const CVarPath * const path = NULL); 53 54 std::list<StdString> getGroups (const CVarPath * const path = NULL); 55 std::list<StdString> getVariables(const CVarPath * const path = NULL); 56 57 std::list<StdString> getDataVariables(bool _is3D = true, 58 bool _isRecti = true, 59 bool _isCurvi = true, 60 bool _isUnstr = true, 61 bool _isCellData = true, 62 bool _isTemporal = true, 63 const CVarPath * const path = NULL); 64 65 std::list<StdString> getAttributes 66 (const StdString * const var = NULL, 67 const CVarPath * const path = NULL); 68 69 std::list<StdString> getDimensionsList 70 (const StdString * const var = NULL, 71 const CVarPath * const path = NULL); 72 73 std::list<StdString> getCoordinatesIdList(const StdString & name, 74 const CVarPath * const path = NULL); 75 76 std::map<StdString, StdSize> getDimensions (const StdString * const var = NULL, 77 const CVarPath * const path = NULL); 78 79 StdSize getNbVertex(const StdString & name, 80 const CVarPath * const path = NULL); 81 //------------------------------------------------------------- 82 83 template <class T> 84 T getMissingValue(const StdString & name, 85 const CVarPath * const path = NULL); 86 87 template <class T> 88 T getAttributeValue(const StdString & name, 89 const StdString * const var = NULL, 90 const CVarPath * const path = NULL); 91 92 template <class T> 93 void getData(CArray<T, 1>& data, 94 const StdString & var, 95 const CVarPath * const path = NULL, 96 StdSize record = UNLIMITED_DIM); 97 98 //------------------------------------------------------------- 99 100 /// Tests /// 101 bool hasMissingValue(const StdString & name, 102 const CVarPath * const path = NULL); 103 104 bool hasAttribute(const StdString & name, 105 const StdString * const var = NULL, 106 const CVarPath * const path = NULL); 107 108 bool hasVariable(const StdString & name, 109 const CVarPath * const path = NULL); 110 111 bool hasCoordinates(const StdString & name, 112 const CVarPath * const path = NULL); 113 114 bool hasTemporalDim(const CVarPath * const path = NULL); 115 116 bool hasBounds(const StdString & name, 117 const CVarPath * const path = NULL); 118 119 //------------------------------------------------------------- 120 121 bool isBound(const StdString & name, 122 const CVarPath * const path = NULL); 123 bool isCoordinate(const StdString & name, 124 const CVarPath * const path = NULL); 125 bool isRectilinear(const StdString & name, 126 const CVarPath * const path = NULL); 127 bool isCurvilinear(const StdString & name, 128 const CVarPath * const path = NULL); 129 bool isUnknown(const StdString & name, 130 const CVarPath * const path = NULL); 131 bool isUnstructured(const StdString & name, 132 const CVarPath * const path = NULL); 133 134 bool isTemporal(const StdString & name, 135 const CVarPath * const path = NULL); 136 bool is3Dim(const StdString & name, 137 const CVarPath * const path = NULL); 138 bool isCellGrid(const StdString & name, 139 const CVarPath * const path = NULL); 140 141 //------------------------------------------------------------- 142 143 /// Destructeur /// 144 virtual ~CINetCDF4(void); 145 146 protected : 147 148 //------------------------------------------------------------- 149 150 /// Accesseurs /// 151 int getGroup (const CVarPath * const path = NULL); 152 int getVariable(const StdString & varname, 153 const CVarPath * const path = NULL); 154 int getDimension(const StdString & dimname, 155 const CVarPath * const path = NULL); 156 int getUnlimitedDimension(const CVarPath * const path = NULL); 157 int getAttributeId(const StdString & name, 158 const StdString * const var = NULL, 159 const CVarPath * const path = NULL); 160 161 std::pair<nc_type , StdSize> getAttribute(const StdString & attname, 162 const StdString * const var = NULL, 163 const CVarPath * const path = NULL); 164 165 //------------------------------------------------------------- 166 167 void getDataInfo(const StdString & var, const CVarPath * const path, StdSize record, 168 std::vector<StdSize> & start, std::vector<StdSize> & count, 169 StdSize & array_size); 170 171 private : 172 173 /// Vérification des erreurs NetCDF /// 174 static void CheckError(int status); 175 176 int ncidp; // Identifiant de fichier netcdf. 177 178 }; // class CINetCDF4 179 180 ///-------------------------------------------------------------- 181 template <> 182 StdString CINetCDF4::getAttributeValue 183 (const StdString & name, const StdString * const var, 184 const CVarPath * const path); 185 186 template <> 187 std::vector<double> CINetCDF4::getAttributeValue 188 (const StdString & name, const StdString * const var, 189 const CVarPath * const path); 190 191 template <> 192 std::vector<float> CINetCDF4::getAttributeValue 193 (const StdString & name, const StdString * const var, 194 const CVarPath * const path); 195 196 template <> 197 std::vector<int> CINetCDF4::getAttributeValue 198 (const StdString & name, const StdString * const var, 199 const CVarPath * const path); 200 201 template <> 202 std::vector<char> CINetCDF4::getAttributeValue 203 (const StdString & name, const StdString * const var, 204 const CVarPath * const path); 205 206 //--------------------------------------------------------------- 207 template <> 208 int CINetCDF4::getMissingValue 209 (const StdString & name, const CVarPath * const path); 210 211 template <> 212 double CINetCDF4::getMissingValue 213 (const StdString & name, const CVarPath * const path); 214 215 template <> 216 float CINetCDF4::getMissingValue 217 (const StdString & name, const CVarPath * const path); 218 219 //--------------------------------------------------------------- 220 template <> 221 void CINetCDF4::getData(CArray<int, 1>& data, const StdString & var, 222 const CVarPath * const path, StdSize record); 223 224 template <> 225 void CINetCDF4::getData(CArray<double, 1>& data, const StdString & var, 226 const CVarPath * const path, StdSize record); 227 228 template <> 229 void CINetCDF4::getData(CArray<float, 1>& data, const StdString & var, 230 const CVarPath * const path, StdSize record); 231 ///-------------------------------------------------------------- 232 18 typedef std::vector<StdString> CVarPath; 19 20 class CINetCDF4 21 { 22 public: 23 /// Constructors /// 24 CINetCDF4(const StdString& filename, const MPI_Comm* comm = NULL, bool multifile = true); 25 CINetCDF4(const CINetCDF4& inetcdf4); // Not implemented. 26 CINetCDF4(const CINetCDF4* const inetcdf4); // Not implemented. 27 28 //------------------------------------------------------------- 29 30 /// Destructor /// 31 virtual ~CINetCDF4(void); 32 33 //------------------------------------------------------------- 34 35 void close(void); 36 37 //------------------------------------------------------------- 38 39 /// Getters /// 40 StdSize getNbOfTimestep(const CVarPath* const path = NULL); 41 42 StdString getUnlimitedDimensionName(const CVarPath* const path = NULL); 43 44 StdString getCoordinatesId(const StdString& name, const CVarPath* const path = NULL); 45 46 StdString getBoundsId(const StdString& name, const CVarPath* const path = NULL); 47 48 StdString getLonCoordName(const StdString& varname, const CVarPath* const path = NULL); 49 StdString getLatCoordName(const StdString& varname, const CVarPath* const path = NULL); 50 StdString getVertCoordName(const StdString& varname, const CVarPath* const path = NULL); 51 52 std::set<StdString> getCoordVariables(const CVarPath* const path = NULL); 53 std::set<StdString> getBoundVariables(const CVarPath* const path = NULL); 54 55 std::list<StdString> getGroups (const CVarPath* const path = NULL); 56 std::list<StdString> getVariables(const CVarPath* const path = NULL); 57 58 std::list<StdString> getDataVariables(bool _is3D = true, 59 bool _isRecti = true, 60 bool _isCurvi = true, 61 bool _isUnstr = true, 62 bool _isCellData = true, 63 bool _isTemporal = true, 64 const CVarPath* const path = NULL); 65 66 std::list<StdString> getAttributes(const StdString* const var = NULL, 67 const CVarPath* const path = NULL); 68 69 std::list<StdString> getDimensionsList(const StdString* const var = NULL, 70 const CVarPath* const path = NULL); 71 72 std::list<StdString> getCoordinatesIdList(const StdString& name, 73 const CVarPath* const path = NULL); 74 75 std::map<StdString, StdSize> getDimensions(const StdString* const var = NULL, 76 const CVarPath* const path = NULL); 77 78 StdSize getNbVertex(const StdString& name, const CVarPath* const path = NULL); 79 80 //------------------------------------------------------------- 81 82 template <class T> 83 T getMissingValue(const StdString& name, const CVarPath* const path = NULL); 84 85 template <class T> 86 T getAttributeValue(const StdString& name, 87 const StdString* const var = NULL, 88 const CVarPath* const path = NULL); 89 90 template <class T> 91 void getData(CArray<T, 1>& data, 92 const StdString& var, 93 const CVarPath* const path = NULL, 94 StdSize record = UNLIMITED_DIM); 95 96 template <class T> 97 void getData(CArray<T, 1>& data, const StdString& var, 98 bool collective, StdSize record, 99 const std::vector<StdSize>* start = NULL, 100 const std::vector<StdSize>* count = NULL); 101 102 //------------------------------------------------------------- 103 104 /// Tests /// 105 bool hasMissingValue(const StdString& name, const CVarPath* const path = NULL); 106 107 bool hasAttribute(const StdString& name, const StdString* const var = NULL, const CVarPath* const path = NULL); 108 109 bool hasVariable(const StdString& name, const CVarPath* const path = NULL); 110 111 bool hasCoordinates(const StdString& name, const CVarPath* const path = NULL); 112 113 bool hasTemporalDim(const CVarPath* const path = NULL); 114 115 bool hasBounds(const StdString& name, const CVarPath* const path = NULL); 116 117 //------------------------------------------------------------- 118 119 bool isBound(const StdString& name, const CVarPath* const path = NULL); 120 bool isCoordinate(const StdString& name, const CVarPath* const path = NULL); 121 bool isRectilinear(const StdString& name, const CVarPath* const path = NULL); 122 bool isCurvilinear(const StdString& name, const CVarPath* const path = NULL); 123 bool isUnknown(const StdString& name, const CVarPath* const path = NULL); 124 bool isUnstructured(const StdString& name, const CVarPath* const path = NULL); 125 126 bool isTemporal(const StdString& name, const CVarPath* const path = NULL); 127 bool is3Dim(const StdString& name, const CVarPath* const path = NULL); 128 bool isCellGrid(const StdString& name, const CVarPath* const path = NULL); 129 130 protected: 131 /// Getters /// 132 int getGroup (const CVarPath* const path = NULL); 133 int getVariable(const StdString& varname, const CVarPath* const path = NULL); 134 int getDimension(const StdString& dimname, const CVarPath* const path = NULL); 135 int getUnlimitedDimension(const CVarPath* const path = NULL); 136 int getAttributeId(const StdString& name, 137 const StdString* const var = NULL, 138 const CVarPath* const path = NULL); 139 140 std::pair<nc_type , StdSize> getAttribute(const StdString& attname, 141 const StdString* const var = NULL, 142 const CVarPath* const path = NULL); 143 144 //------------------------------------------------------------- 145 146 void getDataInfo(const StdString& var, const CVarPath* const path, StdSize record, 147 std::vector<StdSize>& sstart, std::vector<StdSize>& scount, StdSize& array_size, 148 const std::vector<StdSize>* start = NULL, const std::vector<StdSize>* count = NULL); 149 150 private: 151 /// Vérification des erreurs NetCDF /// 152 static void CheckError(int status); 153 154 int ncidp; // Identifiant de fichier netcdf. 155 bool mpi; //< Whether parallel file access is used 156 }; // class CINetCDF4 157 158 ///-------------------------------------------------------------- 159 160 template <> 161 StdString CINetCDF4::getAttributeValue(const StdString& name, const StdString* const var, 162 const CVarPath* const path); 163 164 template <> 165 std::vector<double> CINetCDF4::getAttributeValue(const StdString& name, const StdString* const var, 166 const CVarPath* const path); 167 168 template <> 169 std::vector<float> CINetCDF4::getAttributeValue(const StdString& name, const StdString* const var, 170 const CVarPath* const path); 171 172 template <> 173 std::vector<int> CINetCDF4::getAttributeValue(const StdString& name, const StdString* const var, 174 const CVarPath* const path); 175 176 template <> 177 std::vector<char> CINetCDF4::getAttributeValue(const StdString& name, const StdString* const var, 178 const CVarPath* const path); 179 180 //--------------------------------------------------------------- 181 182 template <> 183 int CINetCDF4::getMissingValue(const StdString& name, const CVarPath* const path); 184 185 template <> 186 double CINetCDF4::getMissingValue(const StdString& name, const CVarPath* const path); 187 188 template <> 189 float CINetCDF4::getMissingValue(const StdString& name, const CVarPath* const path); 190 191 //--------------------------------------------------------------- 192 193 template <> 194 void CINetCDF4::getData(CArray<int, 1>& data, const StdString& var, 195 const CVarPath* const path, StdSize record); 196 197 template <> 198 void CINetCDF4::getData(CArray<double, 1>& data, const StdString& var, 199 const CVarPath* const path, StdSize record); 200 201 template <> 202 void CINetCDF4::getData(CArray<float, 1>& data, const StdString& var, 203 const CVarPath* const path, StdSize record); 204 205 template <> 206 void CINetCDF4::getData(CArray<double, 1>& data, const StdString& var, 207 bool collective, StdSize record, 208 const std::vector<StdSize>* start /*= NULL*/, 209 const std::vector<StdSize>* count /*= NULL*/); 233 210 } // namespace xios 234 211
Note: See TracChangeset
for help on using the changeset viewer.