Changeset 887 for XIOS/trunk/src/io
- Timestamp:
- 07/05/16 15:59:02 (8 years ago)
- Location:
- XIOS/trunk/src/io
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/io/nc4_data_input.cpp
r850 r887 82 82 std::vector<StdSize> start, count; 83 83 84 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;84 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 85 85 std::vector<StdString> domainList = grid->getDomainList(); 86 86 std::vector<StdString> axisList = grid->getAxisList(); … … 94 94 for (int i = numElement - 1; i >= 0; --i) 95 95 { 96 if ( axisDomainOrder(i))96 if (2 == axisDomainOrder(i)) 97 97 { 98 98 CDomain* domain = CDomain::get(domainList[idxDomain]); … … 108 108 --idxDomain; 109 109 } 110 else 110 else if (1 == axisDomainOrder(i)) 111 111 { 112 112 start.push_back(nZoomBeginServer[idx] - nZoomBeginGlobal[idx]); … … 173 173 174 174 // Now process domain and axis 175 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;175 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 176 176 int numElement = domainP.size() + axisP.size(); 177 177 int elementPosition = 0; … … 181 181 for (int i = 0; i < numElement; ++i) 182 182 { 183 if( axisDomainOrder(i))183 if(2 == axisDomainOrder(i)) 184 184 { 185 185 if (readAttributeValues) … … 197 197 else elementPosition += 2; 198 198 } 199 else 199 else if (1 == axisDomainOrder(i)) 200 200 { 201 201 if (readAttributeValues) -
XIOS/trunk/src/io/nc4_data_output.cpp
r881 r887 1014 1014 } 1015 1015 1016 void CNc4DataOutput::writeScalar_(CScalar* scalar) 1017 { 1018 if (scalar->IsWritten(this->filename)) return; 1019 scalar->checkAttributes(); 1020 int scalarSize = 1; 1021 1022 StdString scalaId = scalar->getScalarOutputName(); 1023 if (isWrittenAxis(scalaId)) return ; 1024 else setWrittenAxis(scalaId); 1025 1026 try 1027 { 1028 if (!scalar->value.isEmpty()) 1029 { 1030 // dims.push_back(scalaId); 1031 std::vector<StdString> dims; 1032 SuperClassWriter::addVariable(scalaId, NC_FLOAT, dims); 1033 1034 if (!scalar->name.isEmpty()) 1035 SuperClassWriter::addAttribute("name", scalar->name.getValue(), &scalaId); 1036 1037 if (!scalar->standard_name.isEmpty()) 1038 SuperClassWriter::addAttribute("standard_name", scalar->standard_name.getValue(), &scalaId); 1039 1040 if (!scalar->long_name.isEmpty()) 1041 SuperClassWriter::addAttribute("long_name", scalar->long_name.getValue(), &scalaId); 1042 1043 if (!scalar->unit.isEmpty()) 1044 SuperClassWriter::addAttribute("units", scalar->unit.getValue(), &scalaId); 1045 1046 SuperClassWriter::definition_end(); 1047 1048 switch (SuperClass::type) 1049 { 1050 case MULTI_FILE: 1051 { 1052 CArray<double,1> scalarValue(scalarSize); 1053 scalarValue(0) = scalar->value; 1054 SuperClassWriter::writeData(scalarValue, scalaId, isCollective, 0); 1055 SuperClassWriter::definition_start(); 1056 1057 break; 1058 } 1059 case ONE_FILE: 1060 { 1061 CArray<double,1> scalarValue(scalarSize); 1062 scalarValue(0) = scalar->value; 1063 1064 std::vector<StdSize> start(1); 1065 std::vector<StdSize> count(1); 1066 start[0] = 0; 1067 count[0] = 1; 1068 SuperClassWriter::writeData(scalarValue, scalaId, isCollective, 0, &start, &count); 1069 SuperClassWriter::definition_start(); 1070 1071 break; 1072 } 1073 default : 1074 ERROR("CNc4DataOutput::writeAxis_(CAxis* scalar)", 1075 << "[ type = " << SuperClass::type << "]" 1076 << " not implemented yet !"); 1077 } 1078 } 1079 } 1080 catch (CNetCdfException& e) 1081 { 1082 StdString msg("On writing the scalar : "); 1083 msg.append(scalaId); msg.append("\n"); 1084 msg.append("In the context : "); 1085 CContext* context = CContext::getCurrent() ; 1086 msg.append(context->getId()); msg.append("\n"); 1087 msg.append(e.what()); 1088 ERROR("CNc4DataOutput::writeScalar_(CScalar* scalar)", << msg); 1089 } 1090 scalar->addRelFile(this->filename); 1091 } 1092 1016 1093 //-------------------------------------------------------------- 1017 1094 … … 1022 1099 try 1023 1100 { 1024 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;1101 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 1025 1102 std::vector<StdString> domainList = grid->getDomainList(); 1026 1103 std::vector<StdString> axisList = grid->getAxisList(); 1027 int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0; 1104 std::vector<StdString> scalarList = grid->getScalarList(); 1105 int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; 1028 1106 1029 1107 std::vector<StdString> dims; … … 1042 1120 for (int i = numElement - 1; i >= 0; --i) 1043 1121 { 1044 if ( axisDomainOrder(i))1122 if (2 == axisDomainOrder(i)) 1045 1123 { 1046 1124 CDomain* domain = CDomain::get(domainList[domainList.size() - idxDomain - 1]); … … 1062 1140 ++idxDomain; 1063 1141 } 1064 else 1142 else if (1 == axisDomainOrder(i)) 1065 1143 { 1066 1144 CAxis* axis = CAxis::get(axisList[axisList.size() - idxAxis - 1]); 1067 1145 compress << axis->getAxisOutputName(); 1068 1146 ++idxAxis; 1147 } 1148 else 1149 { 1150 CScalar* scalar = CScalar::get(scalarList[scalarList.size() - idxScalar - 1]); 1151 compress << scalar->getScalarOutputName(); 1152 ++idxScalar; 1069 1153 } 1070 1154 … … 1115 1199 int firstGlobalIndex; 1116 1200 1117 if ( axisDomainOrder(i))1201 if (2 == axisDomainOrder(i)) 1118 1202 { 1119 1203 CDomain* domain = CDomain::get(domainList[idxDomain]); … … 1154 1238 ++idxDomain; 1155 1239 } 1156 else 1240 else if (1 == axisDomainOrder(i)) 1157 1241 { 1158 1242 CAxis* axis = CAxis::get(axisList[idxAxis]); … … 1181 1265 setWrittenCompressedAxis(axisId); 1182 1266 ++idxAxis; 1267 } 1268 else 1269 { 1183 1270 } 1184 1271 … … 1263 1350 if (SuperClass::type==MULTI_FILE) return ; 1264 1351 1265 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;1266 int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0 ;1352 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 1353 int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; 1267 1354 std::vector<StdString> domainList = grid->getDomainList(); 1268 1355 std::vector<StdString> axisList = grid->getAxisList(); 1356 std::vector<StdString> scalarList = grid->getScalarList(); 1269 1357 1270 1358 StdString timeid = getTimeCounterName(); … … 1277 1365 for (int i = 0; i < numElement; ++i) 1278 1366 { 1279 if ( axisDomainOrder(i))1367 if (2 == axisDomainOrder(i)) 1280 1368 { 1281 1369 CDomain* domain = CDomain::get(domainList[idxDomain]); … … 1355 1443 ++idxDomain; 1356 1444 } 1357 else 1445 else if (1 == axisDomainOrder(i)) 1358 1446 { 1359 1447 CAxis* axis = CAxis::get(axisList[idxAxis]); … … 1370 1458 dimCoordList.push_back(axisId); 1371 1459 ++idxAxis; 1460 } 1461 else // scalar 1462 { 1463 /* Do nothing here */ 1372 1464 } 1373 1465 } … … 1382 1474 */ 1383 1475 StdString fieldid = field->getFieldOutputName(); 1384 1385 // unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue();1386 // bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize);1387 // bool isCurvilinear = domain->isCurvilinear ;1388 1476 1389 1477 nc_type type ; … … 1839 1927 else 1840 1928 { 1841 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;1929 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 1842 1930 std::vector<StdString> domainList = grid->getDomainList(); 1843 1931 std::vector<StdString> axisList = grid->getAxisList(); … … 1852 1940 for (int i = numElement - 1; i >= 0; --i) 1853 1941 { 1854 if ( axisDomainOrder(i))1942 if (2 == axisDomainOrder(i)) 1855 1943 { 1856 1944 CDomain* domain = CDomain::get(domainList[idxDomain]); … … 1876 1964 --idxDomain; 1877 1965 } 1878 else 1966 else if (1 == axisDomainOrder(i)) 1879 1967 { 1880 1968 CAxis* axis = CAxis::get(axisList[idxAxis]); … … 1900 1988 { 1901 1989 1902 CArray< bool,1> axisDomainOrder = grid->axis_domain_order;1990 CArray<int,1> axisDomainOrder = grid->axis_domain_order; 1903 1991 std::vector<StdString> domainList = grid->getDomainList(); 1904 1992 std::vector<StdString> axisList = grid->getAxisList(); … … 1912 2000 for (int i = numElement - 1; i >= 0; --i) 1913 2001 { 1914 if ( axisDomainOrder(i))2002 if (2 == axisDomainOrder(i)) 1915 2003 { 1916 2004 CDomain* domain = CDomain::get(domainList[idxDomain]); … … 1926 2014 --idxDomain; 1927 2015 } 1928 else 2016 else if (1 == axisDomainOrder(i)) 1929 2017 { 1930 2018 start.push_back(nZoomBeginServer[idx] - nZoomBeginGlobal[idx]); 1931 2019 count.push_back(nZoomSizeServer[idx]); 1932 2020 --idx; 1933 } 2021 } 2022 else 2023 { 2024 if (1 == axisDomainOrder.numElements()) 2025 { 2026 start.push_back(0); 2027 count.push_back(1); 2028 } 2029 --idx; 2030 } 1934 2031 } 1935 2032 } … … 2322 2419 } 2323 2420 2421 bool CNc4DataOutput::isWrittenScalar(const std::string& scalarName) const 2422 { 2423 return (this->writtenScalar.find(scalarName) != this->writtenScalar.end()); 2424 } 2425 2324 2426 void CNc4DataOutput::setWrittenDomain(const std::string& domainName) 2325 2427 { … … 2341 2443 this->writtenCompressedAxis.insert(axisName); 2342 2444 } 2445 2446 void CNc4DataOutput::setWrittenScalar(const std::string& scalarName) 2447 { 2448 this->writtenScalar.insert(scalarName); 2449 } 2343 2450 } // namespace xios -
XIOS/trunk/src/io/nc4_data_output.hpp
r878 r887 49 49 virtual void writeDomain_ (CDomain* domain); 50 50 virtual void writeAxis_ (CAxis* axis); 51 virtual void writeScalar_ (CScalar* scalar); 51 52 virtual void writeGridCompressed_(CGrid* grid); 52 53 virtual void writeTimeDimension_(void); … … 106 107 bool isWrittenAxis(const std::string& axisName) const; 107 108 bool isWrittenCompressedAxis(const std::string& axisName) const; 109 bool isWrittenScalar(const std::string& scalarName) const; 108 110 109 111 void setWrittenDomain(const std::string& domainName); … … 111 113 void setWrittenAxis(const std::string& axisName); 112 114 void setWrittenCompressedAxis(const std::string& axisName); 115 void setWrittenScalar(const std::string& scalarName); 113 116 114 117 /// Propriétés privées /// … … 119 122 std::set<std::string> writtenDomains, writtenCompressedDomains; 120 123 std::set<std::string> writtenAxis, writtenCompressedAxis; 124 std::set<std::string> writtenScalar; 121 125 }; // class CNc4DataOutput 122 126
Note: See TracChangeset
for help on using the changeset viewer.