Changeset 887 for XIOS/trunk/src/io/nc4_data_output.cpp
- Timestamp:
- 07/05/16 15:59:02 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.