Changeset 827 for XIOS/trunk/src/filter


Ignore:
Timestamp:
03/23/16 16:10:45 (8 years ago)
Author:
mhnguyen
Message:

Implementing dynamic interpolation on axis

+) Change grid transformation to make it more flexible
+) Make some small improvements

Test
+) On Curie
+) All test pass

Location:
XIOS/trunk/src/filter
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/filter/filter.cpp

    r639 r827  
    77    , COutputPin() 
    88    , engine(engine) 
     9    , inputSlotCount(inputSlotCount) 
    910  { /* Nothing to do */ } 
    1011 
  • XIOS/trunk/src/filter/filter.hpp

    r639 r827  
    2828    protected: 
    2929      IFilterEngine* engine; //!< The filter engine, might be the filter itself 
     30      size_t inputSlotCount; //!< Number of slot on filter 
    3031 
    3132      /*! 
  • XIOS/trunk/src/filter/spatial_transform_filter.cpp

    r790 r827  
    66namespace xios 
    77{ 
    8   CSpatialTransformFilter::CSpatialTransformFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine) 
    9     : CFilter(gc, 1, engine) 
     8  CSpatialTransformFilter::CSpatialTransformFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, size_t inputSlotsCount) 
     9    : CFilter(gc, inputSlotsCount, engine) 
    1010  { /* Nothing to do */ } 
    1111 
     
    2424      CGridTransformation* gridTransformation = destGrid->getTransformations(); 
    2525      CSpatialTransformFilterEngine* engine = CSpatialTransformFilterEngine::get(destGrid->getTransformations()); 
    26       boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine)); 
     26      const std::vector<StdString>& auxInputs = gridTransformation->getAuxInputs(); 
     27      size_t inputCount = 1 + (auxInputs.empty() ? 0 : auxInputs.size()); 
     28      boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine, inputCount)); 
    2729 
    2830      if (!lastFilter) 
     
    3234 
    3335      firstFilter = filter; 
     36      for (size_t idx = 0; idx < auxInputs.size(); ++idx) 
     37      { 
     38        CField* fieldAuxInput = CField::get(auxInputs[idx]); 
     39        fieldAuxInput->buildFilterGraph(gc, false); 
     40        fieldAuxInput->getInstantDataFilter()->connectOutput(firstFilter,idx+1); 
     41      } 
     42 
    3443      destGrid = gridTransformation->getGridSource(); 
    3544    } 
     
    7483    if (packet->status == CDataPacket::NO_ERROR) 
    7584    { 
     85      if (1 < data.size())  // Dynamical transformations 
     86      { 
     87        std::vector<CArray<double,1>* > dataAuxInputs(data.size()-1); 
     88        for (size_t idx = 0; idx < dataAuxInputs.size(); ++idx) dataAuxInputs[idx] = &(data[idx+1]->data); 
     89        gridTransformation->computeAll(dataAuxInputs); 
     90      } 
    7691      packet->data.resize(gridTransformation->getGridDestination()->storeIndex_client.numElements()); 
    7792      apply(data[0]->data, packet->data); 
  • XIOS/trunk/src/filter/spatial_transform_filter.hpp

    r644 r827  
    1111 
    1212  /*! 
    13    * A generic filter with one input slot wrapping any type of spatial transformations. 
     13   * A generic filter with multiple input slots wrapping any type of spatial transformations. 
    1414   */ 
    1515  class CSpatialTransformFilter : public CFilter 
     
    2121       * \param gc the associated garbage collector 
    2222       * \param engine the engine defining the spatial transformation 
     23       * \param [in] inputSlotsCount number of input, by default there is only one for field src 
    2324       */ 
    24       CSpatialTransformFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine); 
     25      CSpatialTransformFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, size_t inputSlotsCount = 1); 
    2526 
    2627      /*! 
Note: See TracChangeset for help on using the changeset viewer.