Changeset 835


Ignore:
Timestamp:
04/08/16 15:00:29 (8 years ago)
Author:
mhnguyen
Message:

Exposing some functions to Fortran interface

+) Allow add axis and domain into grid with Fortran interface
+) Remove some redundant code

Test
+) On Curie
+) test_client passes

Location:
XIOS/trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/client_client_dht_template.hpp

    r833 r835  
    3939  public: 
    4040    CClientClientDHTTemplate(const Index2InfoTypeMap& indexInfoInitMap, 
    41                              const MPI_Comm& clientIntraComm, 
    42                              int hierarLvl = 2); 
     41                             const MPI_Comm& clientIntraComm); 
    4342 
    4443    void computeIndexInfoMapping(const CArray<size_t,1>& indices); 
  • XIOS/trunk/src/client_client_dht_template_impl.hpp

    r833 r835  
    2323template<typename T, typename H> 
    2424CClientClientDHTTemplate<T,H>::CClientClientDHTTemplate(const boost::unordered_map<size_t,T>& indexInfoMap, 
    25                                                         const MPI_Comm& clientIntraComm, 
    26                                                         int hierarLvl) 
     25                                                        const MPI_Comm& clientIntraComm) 
    2726  : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_() 
    2827{ 
  • XIOS/trunk/src/client_server_mapping_distributed.cpp

    r829 r835  
    2222{ 
    2323  ccDHT_ = new CClientClientDHTInt(globalIndexOfServer, 
    24                                    clientIntraComm, 
    25                                    isDataDistributed); 
     24                                   clientIntraComm); 
    2625} 
    2726 
     
    3938  ccDHT_->computeIndexInfoMapping(globalIndexOnClient); 
    4039  const boost::unordered_map<size_t,int>& infoIndexMap = (ccDHT_->getInfoIndexMap()); 
    41 //  indexGlobalOnServer_ = (ccDHT_->getInfoIndexMap()); 
    4240  boost::unordered_map<size_t,int>::const_iterator it = infoIndexMap.begin(), ite = infoIndexMap.end(); 
    4341  for (; it != ite; ++it) 
  • XIOS/trunk/src/client_server_mapping_distributed.hpp

    r829 r835  
    3535    /** Default constructor */ 
    3636    CClientServerMappingDistributed(const boost::unordered_map<size_t,int>& globalIndexOfServer, 
    37                                     const MPI_Comm& clientIntraComm, bool isDataDistributed = true); 
     37                                    const MPI_Comm& clientIntraComm, 
     38                                    bool isDataDistributed = true); 
    3839 
    3940    virtual void computeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClientSendToServer); 
  • XIOS/trunk/src/interface/c/icxml_tree.cpp

    r591 r835  
    310310   } 
    311311 
     312   void cxios_xml_tree_add_axistogrid 
     313      (XGridPtr parent_, XAxisPtr * child_, const char * child_id, int child_id_size) 
     314   { 
     315      std::string child_id_str; 
     316      CTimer::get("XIOS").resume() ; 
     317      if (cstr2string(child_id, child_id_size, child_id_str)) 
     318      { 
     319         *child_ = parent_->addAxis(child_id_str); 
     320      } 
     321      else 
     322      { 
     323         *child_ = parent_->addAxis(); 
     324      } 
     325      CTimer::get("XIOS").suspend() ; 
     326   } 
     327 
     328   void cxios_xml_tree_add_domaintogrid 
     329      (XGridPtr parent_, XDomainPtr * child_, const char * child_id, int child_id_size) 
     330   { 
     331      std::string child_id_str; 
     332      CTimer::get("XIOS").resume() ; 
     333      if (cstr2string(child_id, child_id_size, child_id_str)) 
     334      { 
     335         *child_ = parent_->addDomain(child_id_str); 
     336      } 
     337      else 
     338      { 
     339         *child_ = parent_->addDomain(); 
     340      } 
     341      CTimer::get("XIOS").suspend() ; 
     342   } 
    312343 
    313344   // ----------------------- Affichage de l'arborescence ---------------------- 
  • XIOS/trunk/src/interface/fortran/ixios_interfaces.F90

    r786 r835  
    8383                      xios(add_axisgroup), xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), & 
    8484                      xios(add_domaingroup), xios(add_fieldgrouptofile), xios(add_variablegrouptofile),    & 
    85                       xios(add_variablegrouptofield) 
     85                      xios(add_variablegrouptofield), xios(add_axistogrid), xios(add_domaintogrid) 
    8686 
    8787PRIVATE 
     
    135135                   xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield), xios(add_axisgroup),  & 
    136136                   xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), xios(add_domaingroup),            & 
    137                    xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield) 
     137                   xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield),         & 
     138                   xios(add_axistogrid), xios(add_domaintogrid) 
    138139END INTERFACE xios(add_child) 
    139140 
  • XIOS/trunk/src/interface/fortran/ixml_tree.F90

    r501 r835  
    99   USE IDOMAIN 
    1010   USE IVARIABLE 
    11       
     11 
    1212   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 
    13       
     13 
    1414      SUBROUTINE cxios_xml_tree_add_field(parent_, child_, child_id, child_id_size) BIND(C) 
    1515         USE ISO_C_BINDING 
     
    1919         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    2020      END SUBROUTINE cxios_xml_tree_add_field 
    21        
     21 
    2222      SUBROUTINE cxios_xml_tree_add_grid(parent_, child_, child_id, child_id_size) BIND(C) 
    2323         USE ISO_C_BINDING 
     
    2727         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    2828      END SUBROUTINE cxios_xml_tree_add_grid 
    29        
     29 
    3030      SUBROUTINE cxios_xml_tree_add_file(parent_, child_, child_id, child_id_size) BIND(C) 
    3131         USE ISO_C_BINDING 
     
    3535         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    3636      END SUBROUTINE cxios_xml_tree_add_file 
    37        
     37 
    3838      SUBROUTINE cxios_xml_tree_add_axis(parent_, child_, child_id, child_id_size) BIND(C) 
    3939         USE ISO_C_BINDING 
     
    4343         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    4444      END SUBROUTINE cxios_xml_tree_add_axis 
    45        
     45 
    4646      SUBROUTINE cxios_xml_tree_add_domain(parent_, child_, child_id, child_id_size) BIND(C) 
    4747         USE ISO_C_BINDING 
     
    5151         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    5252      END SUBROUTINE cxios_xml_tree_add_domain 
    53        
     53 
    5454      SUBROUTINE cxios_xml_tree_add_fieldtofile(parent_, child_, child_id, child_id_size) BIND(C) 
    5555         USE ISO_C_BINDING 
     
    117117         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    118118      END SUBROUTINE cxios_xml_tree_add_domaingroup 
    119        
     119 
    120120      SUBROUTINE cxios_xml_tree_add_fieldgrouptofile(parent_, child_, child_id, child_id_size) BIND(C) 
    121121         USE ISO_C_BINDING 
     
    124124         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
    125125         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    126       END SUBROUTINE cxios_xml_tree_add_fieldgrouptofile     
     126      END SUBROUTINE cxios_xml_tree_add_fieldgrouptofile 
    127127 
    128128      SUBROUTINE cxios_xml_tree_add_variablegrouptofile(parent_, child_, child_id, child_id_size) BIND(C) 
     
    132132         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
    133133         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    134       END SUBROUTINE cxios_xml_tree_add_variablegrouptofile     
     134      END SUBROUTINE cxios_xml_tree_add_variablegrouptofile 
    135135 
    136136      SUBROUTINE cxios_xml_tree_add_variablegrouptofield(parent_, child_, child_id, child_id_size) BIND(C) 
     
    140140         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
    141141         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    142       END SUBROUTINE cxios_xml_tree_add_variablegrouptofield     
     142      END SUBROUTINE cxios_xml_tree_add_variablegrouptofield 
     143 
     144      SUBROUTINE cxios_xml_tree_add_axistogrid(parent_, child_, child_id, child_id_size) BIND(C) 
     145         USE ISO_C_BINDING 
     146         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     147         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     148         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     149         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     150      END SUBROUTINE cxios_xml_tree_add_axistogrid 
     151 
     152      SUBROUTINE cxios_xml_tree_add_domaintogrid(parent_, child_, child_id, child_id_size) BIND(C) 
     153         USE ISO_C_BINDING 
     154         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     155         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     156         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     157         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     158      END SUBROUTINE cxios_xml_tree_add_domaintogrid 
    143159 
    144160      SUBROUTINE cxios_xml_tree_show(filename, filename_size) BIND(C) 
     
    159175         INTEGER  (kind = C_INT) , VALUE        :: xmlcontent_size 
    160176      END SUBROUTINE cxios_xml_parse_string 
    161       
     177 
    162178   END INTERFACE 
    163179 
    164     
     180 
    165181   CONTAINS ! Fonctions disponibles pour les utilisateurs. 
    166182 
     
    178194 
    179195   END SUBROUTINE xios(add_axis) 
    180     
     196 
    181197   SUBROUTINE xios(add_file)(parent_hdl, child_hdl, child_id) 
    182198      TYPE(txios(filegroup))      , INTENT(IN) :: parent_hdl 
     
    191207 
    192208   END SUBROUTINE xios(add_file) 
    193     
     209 
    194210   SUBROUTINE xios(add_grid)(parent_hdl, child_hdl, child_id) 
    195211      TYPE(txios(gridgroup))     , INTENT(IN) :: parent_hdl 
     
    203219 
    204220   END SUBROUTINE xios(add_grid) 
    205     
    206     
     221 
     222 
    207223   SUBROUTINE xios(add_field)(parent_hdl, child_hdl, child_id) 
    208224      TYPE(txios(fieldgroup))     , INTENT(IN) :: parent_hdl 
     
    217233 
    218234   END SUBROUTINE xios(add_field) 
    219     
    220     
     235 
     236 
    221237   SUBROUTINE xios(add_domain)(parent_hdl, child_hdl, child_id) 
    222238      TYPE(txios(domaingroup))     , INTENT(IN) :: parent_hdl 
     
    231247 
    232248   END SUBROUTINE xios(add_domain) 
    233     
     249 
    234250   SUBROUTINE xios(add_fieldtofile)(parent_hdl, child_hdl, child_id) 
    235251      TYPE(txios(file))            , INTENT(IN) :: parent_hdl 
     
    309325         CALL cxios_xml_tree_add_gridgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
    310326      END IF 
    311        
     327 
    312328   END SUBROUTINE xios(add_gridgroup) 
    313329 
     
    374390      END IF 
    375391 
    376    END SUBROUTINE xios(add_variablegrouptofield)   
    377           
     392   END SUBROUTINE xios(add_variablegrouptofield) 
     393 
     394   SUBROUTINE xios(add_axistogrid)(parent_hdl, child_hdl, child_id) 
     395      TYPE(txios(grid))             , INTENT(IN) :: parent_hdl 
     396      TYPE(txios(axis))             , INTENT(OUT):: child_hdl 
     397      CHARACTER(len = *), OPTIONAL  , INTENT(IN) :: child_id 
     398 
     399      IF (PRESENT(child_id)) THEN 
     400         CALL cxios_xml_tree_add_axistogrid(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     401      ELSE 
     402         CALL cxios_xml_tree_add_axistogrid(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     403      END IF 
     404 
     405   END SUBROUTINE xios(add_axistogrid) 
     406 
     407   SUBROUTINE xios(add_domaintogrid)(parent_hdl, child_hdl, child_id) 
     408      TYPE(txios(grid))             , INTENT(IN) :: parent_hdl 
     409      TYPE(txios(domain))           , INTENT(OUT):: child_hdl 
     410      CHARACTER(len = *), OPTIONAL  , INTENT(IN) :: child_id 
     411 
     412      IF (PRESENT(child_id)) THEN 
     413         CALL cxios_xml_tree_add_domaintogrid(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     414      ELSE 
     415         CALL cxios_xml_tree_add_domaintogrid(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     416      END IF 
     417 
     418   END SUBROUTINE xios(add_domaintogrid) 
    378419END MODULE IXML_TREE 
  • XIOS/trunk/src/node/grid.cpp

    r834 r835  
    3232      , transformations_(0), isTransformed_(false) 
    3333      , axisPositionInGrid_(), positionDimensionDistributed_(1), hasDomainAxisBaseRef_(false) 
    34       , gridSrc_(), hasTransform_(false) 
     34      , gridSrc_(), hasTransform_(false), order_() 
    3535   { 
    3636     setVirtualDomainGroup(); 
     
    4747      , transformations_(0), isTransformed_(false) 
    4848      , axisPositionInGrid_(), positionDimensionDistributed_(1), hasDomainAxisBaseRef_(false) 
    49       , gridSrc_(), hasTransform_(false) 
     49      , gridSrc_(), hasTransform_(false), order_() 
    5050   { 
    5151     setVirtualDomainGroup(); 
     
    11451145   CDomain* CGrid::addDomain(const std::string& id) 
    11461146   { 
     1147     order_.push_back(true); 
     1148     axis_domain_order.resize(order_.size()); 
     1149     for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; 
    11471150     return vDomainGroup_->createChild(id); 
    11481151   } 
     
    11501153   CAxis* CGrid::addAxis(const std::string& id) 
    11511154   { 
     1155     order_.push_back(false); 
     1156     axis_domain_order.resize(order_.size()); 
     1157     for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; 
    11521158     return vAxisGroup_->createChild(id); 
    11531159   } 
     
    15391545    SuperClass::parse(node); 
    15401546 
    1541     // List order of axis and domain in a grid, if there is a domain, it will take value 1 (true), axis 0 (false) 
    1542     std::vector<bool> order; 
    1543  
    15441547    if (node.goToChildElement()) 
    15451548    { 
     
    15491552      { 
    15501553        if (node.getElementName() == domainName) { 
    1551           order.push_back(true); 
     1554          order_.push_back(true); 
    15521555          this->getVirtualDomainGroup()->parseChild(node); 
    15531556        } 
    15541557        if (node.getElementName() == axisName) { 
    1555           order.push_back(false); 
     1558          order_.push_back(false); 
    15561559          this->getVirtualAxisGroup()->parseChild(node); 
    15571560        } 
     
    15601563    } 
    15611564 
    1562     if (!order.empty()) 
    1563     { 
    1564       int sizeOrd = order.size(); 
     1565    if (!order_.empty()) 
     1566    { 
     1567      int sizeOrd = order_.size(); 
    15651568      axis_domain_order.resize(sizeOrd); 
    15661569      for (int i = 0; i < sizeOrd; ++i) 
    15671570      { 
    1568         axis_domain_order(i) = order[i]; 
     1571        axis_domain_order(i) = order_[i]; 
    15691572      } 
    15701573    } 
  • XIOS/trunk/src/node/grid.hpp

    r834 r835  
    148148         void solveDomainAxisBaseRef(); 
    149149 
     150         CDomain* addDomain(const std::string& id=StdString()); 
     151         CAxis* addAxis(const std::string& id=StdString()); 
    150152         void sendAddDomain(const std::string& id=""); 
    151153         void sendAddAxis(const std::string& id=""); 
     
    236238        void setDomainList(const std::vector<CDomain*> domains = std::vector<CDomain*>()); 
    237239 
    238         CDomain* addDomain(const std::string& id); 
    239         CAxis* addAxis(const std::string& id); 
    240  
    241240        CAxisGroup* getVirtualAxisGroup() const; 
    242241        CDomainGroup* getVirtualDomainGroup() const; 
     
    275274        std::map<CGrid*, std::pair<bool,StdString> > gridSrc_; 
    276275        bool hasTransform_; 
     276            // List order of axis and domain in a grid, if there is a domain, it will take value 1 (true), axis 0 (false) 
     277        std::vector<bool> order_; 
    277278   }; // class CGrid 
    278279 
Note: See TracChangeset for help on using the changeset viewer.