Ignore:
Timestamp:
07/05/16 15:59:02 (8 years ago)
Author:
mhnguyen
Message:

Adding a new type of element into grid: Scalar

+) Add a new node Scalar for xml
+) Make some change on writing scalar value
+) Reorganize some codes
+) Remove some redundant codes

Test
+) On Curie
+) All tests pass

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/field.cpp

    r873 r887  
    3434      , nstep(0), nstepMax(0) 
    3535      , hasOutputFile(false) 
    36       , domAxisIds_("", ""), areAllReferenceSolved(false), isReferenceSolved(false) 
     36      , domAxisScalarIds_(vector<StdString>(3,"")), areAllReferenceSolved(false), isReferenceSolved(false) 
    3737      , useCompressedOutput(false) 
    3838      , isReadDataRequestPending(false) 
     
    4545      , nstep(0), nstepMax(0) 
    4646      , hasOutputFile(false) 
    47       , domAxisIds_("", ""), areAllReferenceSolved(false), isReferenceSolved(false) 
     47      , domAxisScalarIds_(vector<StdString>(3,"")), areAllReferenceSolved(false), isReferenceSolved(false) 
    4848      , useCompressedOutput(false) 
    4949      , isReadDataRequestPending(false) 
     
    889889   void CField::solveGridReference(void) 
    890890   { 
    891       if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty()) 
     891      if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty() && scalar_ref.isEmpty()) 
    892892      { 
    893893        ERROR("CField::solveGridReference(void)", 
    894894              << "A grid must be defined for field '" << getFieldOutputName() << "' ."); 
    895895      } 
    896       else if (!grid_ref.isEmpty() && (!domain_ref.isEmpty() || !axis_ref.isEmpty())) 
     896      else if (!grid_ref.isEmpty() && (!domain_ref.isEmpty() || !axis_ref.isEmpty() || !scalar_ref.isEmpty())) 
    897897      { 
    898898        ERROR("CField::solveGridReference(void)", 
    899               << "Field '" << getFieldOutputName() << "' has both a grid and a domain/axis." << std::endl 
    900               << "Please define either 'grid_ref' or 'domain_ref'/'axis_ref'."); 
     899              << "Field '" << getFieldOutputName() << "' has both a grid and a domain/axis/scalar." << std::endl 
     900              << "Please define either 'grid_ref' or 'domain_ref'/'axis_ref'/'scalar_ref'."); 
    901901      } 
    902902 
     
    905905        std::vector<CDomain*> vecDom; 
    906906        std::vector<CAxis*> vecAxis; 
     907        std::vector<CScalar*> vecScalar; 
    907908 
    908909        if (!domain_ref.isEmpty()) 
     
    925926        } 
    926927 
     928        if (!scalar_ref.isEmpty()) 
     929        { 
     930          if (CScalar::has(scalar_ref)) 
     931            vecScalar.push_back(CScalar::get(scalar_ref)); 
     932          else 
     933            ERROR("CField::solveGridReference(void)", 
     934                  << "Invalid reference to scalar '" << scalar_ref.getValue() << "'."); 
     935        } 
     936 
    927937        // Warning: the gridId shouldn't be set as the grid_ref since it could be inherited 
    928         StdString gridId = CGrid::generateId(vecDom, vecAxis); 
     938        StdString gridId = CGrid::generateId(vecDom, vecAxis, vecScalar); 
    929939        if (CGrid::has(gridId)) 
    930940          this->grid = CGrid::get(gridId); 
    931941        else 
    932           this->grid = CGrid::createGrid(gridId, vecDom, vecAxis); 
     942          this->grid = CGrid::createGrid(gridId, vecDom, vecAxis, vecScalar); 
    933943      } 
    934944      else 
     
    11381148   \return pair of Domain and Axis id 
    11391149   */ 
    1140    const std::pair<StdString,StdString>& CField::getRefDomainAxisIds() 
     1150   const std::vector<StdString>& CField::getRefDomainAxisIds() 
    11411151   { 
    11421152     CGrid* cgPtr = getRelGrid(); 
     
    11481158         std::vector<StdString> domainList = cgPtr->getDomainList(); 
    11491159         it = std::find(domainList.begin(), domainList.end(), domain_ref.getValue()); 
    1150          if (domainList.end() != it) domAxisIds_.first = *it; 
     1160         if (domainList.end() != it) domAxisScalarIds_[0] = *it; 
    11511161       } 
    11521162 
     
    11551165         std::vector<StdString> axisList = cgPtr->getAxisList(); 
    11561166         it = std::find(axisList.begin(), axisList.end(), axis_ref.getValue()); 
    1157          if (axisList.end() != it) domAxisIds_.second = *it; 
    1158        } 
    1159      } 
    1160      return (domAxisIds_); 
     1167         if (axisList.end() != it) domAxisScalarIds_[1] = *it; 
     1168       } 
     1169 
     1170       if (!scalar_ref.isEmpty()) 
     1171       { 
     1172         std::vector<StdString> scalarList = cgPtr->getScalarList(); 
     1173         it = std::find(scalarList.begin(), scalarList.end(), scalar_ref.getValue()); 
     1174         if (scalarList.end() != it) domAxisScalarIds_[2] = *it; 
     1175       } 
     1176     } 
     1177     return (domAxisScalarIds_); 
    11611178   } 
    11621179 
Note: See TracChangeset for help on using the changeset viewer.