Changeset 599 for XIOS/trunk/src/input/nc4_data_input.cpp
- Timestamp:
- 05/26/15 16:13:48 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/input/nc4_data_input.cpp
r501 r599 1 1 #include "nc4_data_input.hpp" 2 3 #include "context.hpp" 4 #include "context_server.hpp" 2 5 3 6 namespace xios 4 7 { 5 /// ////////////////////// Définitions ////////////////////// /// 6 CNc4DataInput::CNc4DataInput(void) 7 { /* ne rien faire de plus */ } 8 CNc4DataInput::CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/) 9 : SuperClass() 10 , SuperClassWriter(filename, &comm_file, multifile) 11 , comm_file(comm_file) 12 , filename(filename) 13 , isCollective(isCollective) 14 { 15 SuperClass::type = multifile ? MULTI_FILE : ONE_FILE; 16 } 8 17 9 10 { /* ne rien faire de plus*/ }18 CNc4DataInput::~CNc4DataInput(void) 19 { /* Nothing more to do */ } 11 20 21 StdSize CNc4DataInput::getFieldNbRecords_(CField* field) 22 { 23 StdString fieldId = !field->name.isEmpty() ? field->name.getValue() : field->getBaseFieldReference()->getId(); 24 25 if (SuperClassWriter::isTemporal(fieldId)) 26 { 27 return SuperClassWriter::getDimensions(&fieldId)[SuperClassWriter::getUnlimitedDimensionName()]; 28 } 29 30 return 1; 31 } 32 33 void CNc4DataInput::readFieldData_(CField* field) 34 { 35 CContext* context = CContext::getCurrent(); 36 CContextServer* server = context->server; 37 38 CGrid* grid = field->grid; 39 40 if (!grid->doGridHaveDataToWrite()) 41 if (SuperClass::type==MULTI_FILE || !isCollective) return; 42 43 StdString fieldId = !field->name.isEmpty() ? field->name.getValue() : field->getBaseFieldReference()->getId(); 44 45 CArray<double,1> fieldData(grid->getWrittenDataSize()); 46 if (!field->default_value.isEmpty()) fieldData = field->default_value; 47 48 switch (SuperClass::type) 49 { 50 case MULTI_FILE: 51 SuperClassWriter::getData(fieldData, fieldId, isCollective, field->getNStep() - 1); 52 break; 53 case ONE_FILE: 54 { 55 std::vector<int> nZoomBeginGlobal = grid->getDistributionServer()->getZoomBeginGlobal(); 56 std::vector<int> nZoomBeginServer = grid->getDistributionServer()->getZoomBeginServer(); 57 std::vector<int> nZoomSizeServer = grid->getDistributionServer()->getZoomSizeServer(); 58 59 int ssize = nZoomBeginGlobal.size(); 60 61 std::vector<StdSize> start(ssize); 62 std::vector<StdSize> count(ssize); 63 64 for (int i = 0; i < ssize; ++i) 65 { 66 start[i] = nZoomBeginServer[ssize - i - 1] - nZoomBeginGlobal[ssize - i - 1]; 67 count[i] = nZoomSizeServer[ssize - i - 1]; 68 } 69 70 SuperClassWriter::getData(fieldData, fieldId, isCollective, field->getNStep() - 1, &start, &count); 71 break; 72 } 73 } 74 75 field->inputField(fieldData); 76 77 if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 78 { 79 double scaleFactor = 1.0, addOffset = 0.0; 80 if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; 81 if (!field->add_offset.isEmpty()) addOffset = field->add_offset; 82 field->invertScaleFactorAddOffset(scaleFactor, addOffset); 83 } 84 } 85 86 void CNc4DataInput::closeFile_(void) 87 { 88 SuperClassWriter::close(); 89 } 12 90 } // namespace xios
Note: See TracChangeset
for help on using the changeset viewer.