Changeset 1961 for XIOS/dev/dev_ym/XIOS_COUPLING/src/io
- Timestamp:
- 10/12/20 11:26:40 (4 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src/io
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.cpp
r1959 r1961 1713 1713 } 1714 1714 1715 if (compressedOutput && grid->isCompressible())1715 while (!dimIdList.empty()) 1716 1716 { 1717 dims.push_back(grid->getId() + "_points"); 1718 field->setUseCompressedOutput(); 1719 } 1720 else 1721 { 1722 while (!dimIdList.empty()) 1723 { 1724 dims.push_back(dimIdList.back()); 1725 dimIdList.pop_back(); 1726 } 1717 dims.push_back(dimIdList.back()); 1718 dimIdList.pop_back(); 1727 1719 } 1728 1720 … … 2070 2062 //--------------------------------------------------------------- 2071 2063 2072 void CNc4DataOutput::writeFieldData_ (CField* field, const CArray<double,1>& data) 2064 int CNc4DataOutput::writeFieldData_ (CField* field, const CArray<double,1>& data, const CDate& lastWrite, 2065 const CDate& currentWrite, int nstep) 2073 2066 { 2074 2067 CContext* context = CContext::getCurrent(); 2075 2068 CGrid* grid = field->getGrid(); 2076 CArray<double,1> dataIn(data.copy()) ; 2077 2078 if (field->getNStep()<1) 2069 2070 if (nstep<1) 2079 2071 { 2080 return ;2072 return nstep; 2081 2073 } 2082 2074 … … 2084 2076 if (SuperClass::type == MULTI_FILE || !isCollective) 2085 2077 { 2086 return ;2078 return nstep; 2087 2079 } 2088 2080 … … 2109 2101 factorUnit=context->getCalendar()->getDayLengthInSeconds() ; 2110 2102 else factorUnit=1 ; 2111 field->resetNStep(getRecordFromTime(field->last_Write_srv,factorUnit) + 1);2103 nstep = getRecordFromTime(field->last_Write_srv,factorUnit) + 1; 2112 2104 } 2113 2105 … … 2128 2120 if (wtime) 2129 2121 { 2130 Time lastWrite = field->last_Write_srv;2131 Time lastLastWrite = field->lastlast_Write_srv;2132 2133 2122 2134 2123 if (field->hasTimeInstant) 2135 2124 { 2136 time_data(0) = time_data_bound(1) = lastWrite;2137 time_data_bound(0) = time_data_bound(1) = lastWrite;2125 time_data(0) = time_data_bound(1) = (Time) lastWrite; 2126 time_data_bound(0) = time_data_bound(1) = (Time) currentWrite; 2138 2127 if (timeCounterType==instant) 2139 2128 { … … 2147 2136 else if (field->hasTimeCentered) 2148 2137 { 2149 time_data(0) = ( lastWrite + lastLastWrite) / 2;2150 time_data_bound(0) = lastLastWrite;2151 time_data_bound(1) = lastWrite;2138 time_data(0) = ((Time)currentWrite + (Time)lastWrite) / 2; 2139 time_data_bound(0) = (Time)lastWrite; 2140 time_data_bound(1) = (Time)currentWrite; 2152 2141 if (timeCounterType==centered) 2153 2142 { … … 2162 2151 if (timeCounterType==record) 2163 2152 { 2164 time_counter(0) = field->getNStep()- 1;2165 time_counter_bound(0) = time_counter_bound(1) = field->getNStep()- 1;2153 time_counter(0) = nstep - 1; 2154 time_counter_bound(0) = time_counter_bound(1) = nstep - 1; 2166 2155 wtimeCounter=true ; 2167 2156 } … … 2179 2168 bool isRoot = (context->intraCommRank_ == 0); 2180 2169 2181 if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty())2182 {2183 double scaleFactor = 1.0;2184 double addOffset = 0.0;2185 if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor;2186 if (!field->add_offset.isEmpty()) addOffset = field->add_offset;2187 field->scaleFactorAddOffset(dataIn, scaleFactor, addOffset);2188 }2189 2190 2170 try 2191 2171 { 2192 size_t writtenSize;2193 if (field->getUseCompressedOutput())2194 writtenSize = grid->getNumberWrittenIndexes();2195 else2196 writtenSize = grid->getWrittenDataSize();2197 2198 CArray<double,1> fieldData(writtenSize);2199 if (!field->default_value.isEmpty()) fieldData = field->default_value;2200 2201 if (field->getUseCompressedOutput()) fieldData.reference(dataIn) ;2202 // field->outputCompressedField(dataIn, fieldData);2203 else2204 {2205 //field->outputField(dataIn, fieldData);2206 if (!field->default_value.isEmpty()) field->getGrid()->getWorkflowToFullConnector()->transfer(dataIn, fieldData, (double)field->default_value ) ;2207 else field->getGrid()->getWorkflowToFullConnector()->transfer(dataIn, fieldData ) ;2208 }2209 2210 if (!field->prec.isEmpty() && field->prec == 2) fieldData = round(fieldData);2211 2212 2172 switch (SuperClass::type) 2213 2173 { … … 2215 2175 { 2216 2176 CTimer::get("Files : writing data").resume(); 2217 SuperClassWriter::writeData( fieldData, fieldid, isCollective, field->getNStep()- 1);2177 SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1); 2218 2178 CTimer::get("Files : writing data").suspend(); 2219 2179 if (wtime) … … 2222 2182 if ( wtimeData) 2223 2183 { 2224 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()- 1, isRoot);2225 SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()- 1, isRoot);2184 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); 2185 SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); 2226 2186 } 2227 2187 if (wtimeCounter) 2228 2188 { 2229 SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep()- 1,isRoot);2230 if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep()- 1, isRoot);2189 SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); 2190 if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); 2231 2191 } 2232 2192 CTimer::get("Files : writing time axis").suspend(); … … 2316 2276 } 2317 2277 } 2318 }2278 } 2319 2279 else 2320 2280 { … … 2368 2328 2369 2329 CTimer::get("Files : writing data").resume(); 2370 SuperClassWriter::writeData( fieldData, fieldid, isCollective, field->getNStep()- 1, &start, &count);2330 SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1, &start, &count); 2371 2331 CTimer::get("Files : writing data").suspend(); 2372 2332 … … 2376 2336 if ( wtimeData) 2377 2337 { 2378 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()- 1, isRoot);2379 SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()- 1, isRoot);2338 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); 2339 SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); 2380 2340 } 2381 2341 if (wtimeCounter) 2382 2342 { 2383 SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep()- 1,isRoot);2384 if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep()- 1, isRoot);2343 SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); 2344 if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); 2385 2345 2386 2346 } … … 2391 2351 } 2392 2352 } 2353 return nstep ; 2393 2354 } 2394 2355 catch (CNetCdfException& e) -
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.hpp
r1882 r1961 56 56 virtual void writeAttribute_(CVariable* var); 57 57 virtual void writeAttribute_(CVariable* var, const string& fieldId); 58 virtual void writeFieldData_(CField* field, const CArray<double,1>& data);58 virtual int writeFieldData_(CField* field, const CArray<double,1>& data, const CDate& lastWrite, const CDate& currentWrite, int nstep); 59 59 virtual void writeFile_ (CFile* file); 60 60 virtual void closeFile_ (void);
Note: See TracChangeset
for help on using the changeset viewer.