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

Exposing transformation to Fortran interface

+) Export zoom and axis transformation to Fortran interface

Test
+) On Curie
+) All work

Location:
XIOS/trunk/src/interface
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/c/icxml_tree.cpp

    r835 r836  
    2121#include "domain.hpp" 
    2222#include "variable.hpp" 
     23#include "zoom_domain.hpp" 
     24#include "interpolate_domain.hpp" 
     25#include "generate_rectilinear_domain.hpp" 
     26#include "zoom_axis.hpp" 
     27#include "interpolate_axis.hpp" 
     28#include "inverse_axis.hpp" 
    2329 
    2430extern "C" 
     
    4854   typedef xios::CVariableGroup *  XVariableGroupPtr; 
    4955 
     56   typedef xios::CTransformation<CDomain>   *  XTransformationDomainPtr; 
     57   typedef xios::CZoomDomain                *  XZoomDomainPtr; 
     58   typedef xios::CInterpolateDomain         *  XInterpolateDomainPtr; 
     59   typedef xios::CGenerateRectilinearDomain *  XGenerateRectilinearDomainPtr; 
     60 
     61   typedef xios::CTransformation<CAxis>   *  XTransformationAxisPtr; 
     62   typedef xios::CZoomAxis                *  XZoomAxisPtr; 
     63   typedef xios::CInterpolateAxis         *  XInterpolateAxisPtr; 
     64   typedef xios::CInverseAxis             *  XInverseAxisPtr; 
     65 
    5066   // ----------------------- Ajout d'enfant à un parent ----------------------- 
    5167 
     
    339355         *child_ = parent_->addDomain(); 
    340356      } 
     357      CTimer::get("XIOS").suspend() ; 
     358   } 
     359 
     360   void cxios_xml_tree_add_zoomdomaintodomain 
     361      (XDomainPtr parent_, XZoomDomainPtr * child_, const char * child_id, int child_id_size) 
     362   { 
     363      std::string child_id_str; 
     364      XTransformationDomainPtr tmpChild_; 
     365      CTimer::get("XIOS").resume() ; 
     366      if (cstr2string(child_id, child_id_size, child_id_str)) 
     367      { 
     368         tmpChild_ = parent_->addTransformation(TRANS_ZOOM_DOMAIN, child_id_str); 
     369      } 
     370      else 
     371      { 
     372         tmpChild_ = parent_->addTransformation(TRANS_ZOOM_DOMAIN); 
     373      } 
     374      *child_ = static_cast<XZoomDomainPtr>(tmpChild_); 
     375      CTimer::get("XIOS").suspend() ; 
     376   } 
     377 
     378   void cxios_xml_tree_add_interpolatedomaintodomain 
     379      (XDomainPtr parent_, XInterpolateDomainPtr * child_, const char * child_id, int child_id_size) 
     380   { 
     381      std::string child_id_str; 
     382      XTransformationDomainPtr tmpChild_; 
     383      CTimer::get("XIOS").resume() ; 
     384      if (cstr2string(child_id, child_id_size, child_id_str)) 
     385      { 
     386         tmpChild_ = parent_->addTransformation(TRANS_INTERPOLATE_DOMAIN, child_id_str); 
     387      } 
     388      else 
     389      { 
     390         tmpChild_ = parent_->addTransformation(TRANS_INTERPOLATE_DOMAIN); 
     391      } 
     392      *child_ = static_cast<XInterpolateDomainPtr>(tmpChild_); 
     393      CTimer::get("XIOS").suspend() ; 
     394   } 
     395 
     396   void cxios_xml_tree_add_generatedomaintodomain 
     397      (XDomainPtr parent_, XGenerateRectilinearDomainPtr * child_, const char * child_id, int child_id_size) 
     398   { 
     399      std::string child_id_str; 
     400      XTransformationDomainPtr tmpChild_; 
     401      CTimer::get("XIOS").resume() ; 
     402      if (cstr2string(child_id, child_id_size, child_id_str)) 
     403      { 
     404         tmpChild_ = parent_->addTransformation(TRANS_GENERATE_RECTILINEAR_DOMAIN, child_id_str); 
     405      } 
     406      else 
     407      { 
     408         tmpChild_ = parent_->addTransformation(TRANS_GENERATE_RECTILINEAR_DOMAIN); 
     409      } 
     410      *child_ = static_cast<XGenerateRectilinearDomainPtr>(tmpChild_); 
     411      CTimer::get("XIOS").suspend() ; 
     412   } 
     413 
     414   void cxios_xml_tree_add_zoomaxistoaxis 
     415      (XAxisPtr parent_, XZoomAxisPtr * child_, const char * child_id, int child_id_size) 
     416   { 
     417      std::string child_id_str; 
     418      XTransformationAxisPtr tmpChild_; 
     419      CTimer::get("XIOS").resume() ; 
     420      if (cstr2string(child_id, child_id_size, child_id_str)) 
     421      { 
     422         tmpChild_ = parent_->addTransformation(TRANS_ZOOM_AXIS, child_id_str); 
     423      } 
     424      else 
     425      { 
     426         tmpChild_ = parent_->addTransformation(TRANS_ZOOM_AXIS); 
     427      } 
     428      *child_ = static_cast<XZoomAxisPtr>(tmpChild_); 
     429      CTimer::get("XIOS").suspend() ; 
     430   } 
     431 
     432   void cxios_xml_tree_add_interpolateaxistoaxis 
     433      (XAxisPtr parent_, XInterpolateAxisPtr * child_, const char * child_id, int child_id_size) 
     434   { 
     435      std::string child_id_str; 
     436      XTransformationAxisPtr tmpChild_; 
     437      CTimer::get("XIOS").resume() ; 
     438      if (cstr2string(child_id, child_id_size, child_id_str)) 
     439      { 
     440         tmpChild_ = parent_->addTransformation(TRANS_INTERPOLATE_AXIS, child_id_str); 
     441      } 
     442      else 
     443      { 
     444         tmpChild_ = parent_->addTransformation(TRANS_INTERPOLATE_AXIS); 
     445      } 
     446      *child_ = static_cast<XInterpolateAxisPtr>(tmpChild_); 
     447      CTimer::get("XIOS").suspend() ; 
     448   } 
     449 
     450   void cxios_xml_tree_add_inverseaxistoaxis 
     451      (XAxisPtr parent_, XInverseAxisPtr * child_, const char * child_id, int child_id_size) 
     452   { 
     453      std::string child_id_str; 
     454      XTransformationAxisPtr tmpChild_; 
     455      CTimer::get("XIOS").resume() ; 
     456      if (cstr2string(child_id, child_id_size, child_id_str)) 
     457      { 
     458         tmpChild_ = parent_->addTransformation(TRANS_INVERSE_AXIS, child_id_str); 
     459      } 
     460      else 
     461      { 
     462         tmpChild_ = parent_->addTransformation(TRANS_INVERSE_AXIS); 
     463      } 
     464      *child_ = static_cast<XInverseAxisPtr>(tmpChild_); 
    341465      CTimer::get("XIOS").suspend() ; 
    342466   } 
  • XIOS/trunk/src/interface/fortran/ixios_interfaces.F90

    r835 r836  
    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), xios(add_axistogrid), xios(add_domaintogrid) 
     85                      xios(add_variablegrouptofield), xios(add_axistogrid), xios(add_domaintogrid),        & 
     86                      xios(add_zoomdomaintodomain), xios(add_interpolatedomaintodomain),                   & 
     87                      xios(add_generatedomaintodomain), xios(add_zoomaxistoaxis),                          & 
     88                      xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis) 
    8689 
    8790PRIVATE 
     
    136139                   xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), xios(add_domaingroup),            & 
    137140                   xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield),         & 
    138                    xios(add_axistogrid), xios(add_domaintogrid) 
     141                   xios(add_axistogrid), xios(add_domaintogrid), xios(add_zoomdomaintodomain),                       & 
     142                   xios(add_interpolatedomaintodomain), xios(add_generatedomaintodomain),                            & 
     143                   xios(add_zoomaxistoaxis), xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis) 
    139144END INTERFACE xios(add_child) 
    140145 
  • XIOS/trunk/src/interface/fortran/ixml_tree.F90

    r835 r836  
    99   USE IDOMAIN 
    1010   USE IVARIABLE 
     11   USE IZOOM_DOMAIN 
     12   USE IINTERPOLATE_DOMAIN 
     13   USE IGENERATE_RECTILINEAR_DOMAIN 
     14   USE IZOOM_AXIS 
     15   USE IINTERPOLATE_AXIS 
     16   USE IINVERSE_AXIS 
    1117 
    1218   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 
     
    157163         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
    158164      END SUBROUTINE cxios_xml_tree_add_domaintogrid 
     165 
     166      SUBROUTINE cxios_xml_tree_add_zoomdomaintodomain(parent_, child_, child_id, child_id_size) BIND(C) 
     167         USE ISO_C_BINDING 
     168         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     169         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     170         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     171         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     172      END SUBROUTINE cxios_xml_tree_add_zoomdomaintodomain 
     173 
     174      SUBROUTINE cxios_xml_tree_add_interpolatedomaintodomain(parent_, child_, child_id, child_id_size) BIND(C) 
     175         USE ISO_C_BINDING 
     176         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     177         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     178         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     179         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     180      END SUBROUTINE cxios_xml_tree_add_interpolatedomaintodomain 
     181 
     182      SUBROUTINE cxios_xml_tree_add_generatedomaintodomain(parent_, child_, child_id, child_id_size) BIND(C) 
     183         USE ISO_C_BINDING 
     184         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     185         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     186         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     187         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     188      END SUBROUTINE cxios_xml_tree_add_generatedomaintodomain 
     189 
     190      SUBROUTINE cxios_xml_tree_add_zoomaxistoaxis(parent_, child_, child_id, child_id_size) BIND(C) 
     191         USE ISO_C_BINDING 
     192         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     193         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     194         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     195         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     196      END SUBROUTINE cxios_xml_tree_add_zoomaxistoaxis 
     197 
     198      SUBROUTINE cxios_xml_tree_add_interpolateaxistoaxis(parent_, child_, child_id, child_id_size) BIND(C) 
     199         USE ISO_C_BINDING 
     200         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     201         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     202         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     203         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     204      END SUBROUTINE cxios_xml_tree_add_interpolateaxistoaxis 
     205 
     206      SUBROUTINE cxios_xml_tree_add_inverseaxistoaxis(parent_, child_, child_id, child_id_size) BIND(C) 
     207         USE ISO_C_BINDING 
     208         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     209         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     210         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     211         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     212      END SUBROUTINE cxios_xml_tree_add_inverseaxistoaxis 
    159213 
    160214      SUBROUTINE cxios_xml_tree_show(filename, filename_size) BIND(C) 
     
    417471 
    418472   END SUBROUTINE xios(add_domaintogrid) 
     473 
     474   SUBROUTINE xios(add_zoomdomaintodomain)(parent_hdl, child_hdl, child_id) 
     475      TYPE(txios(domain))           , INTENT(IN) :: parent_hdl 
     476      TYPE(txios(zoom_domain))      , INTENT(OUT):: child_hdl 
     477      CHARACTER(len = *), OPTIONAL  , INTENT(IN) :: child_id 
     478 
     479      IF (PRESENT(child_id)) THEN 
     480         CALL cxios_xml_tree_add_zoomdomaintodomain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     481      ELSE 
     482         CALL cxios_xml_tree_add_zoomdomaintodomain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     483      END IF 
     484 
     485   END SUBROUTINE xios(add_zoomdomaintodomain) 
     486 
     487   SUBROUTINE xios(add_interpolatedomaintodomain)(parent_hdl, child_hdl, child_id) 
     488      TYPE(txios(domain))             , INTENT(IN) :: parent_hdl 
     489      TYPE(txios(interpolate_domain)) , INTENT(OUT):: child_hdl 
     490      CHARACTER(len = *), OPTIONAL    , INTENT(IN) :: child_id 
     491 
     492      IF (PRESENT(child_id)) THEN 
     493         CALL cxios_xml_tree_add_interpolatedomaintodomain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     494      ELSE 
     495         CALL cxios_xml_tree_add_interpolatedomaintodomain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     496      END IF 
     497 
     498   END SUBROUTINE xios(add_interpolatedomaintodomain) 
     499 
     500   SUBROUTINE xios(add_generatedomaintodomain)(parent_hdl, child_hdl, child_id) 
     501      TYPE(txios(domain))                      , INTENT(IN) :: parent_hdl 
     502      TYPE(txios(generate_rectilinear_domain)) , INTENT(OUT):: child_hdl 
     503      CHARACTER(len = *), OPTIONAL             , INTENT(IN) :: child_id 
     504 
     505      IF (PRESENT(child_id)) THEN 
     506         CALL cxios_xml_tree_add_generatedomaintodomain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     507      ELSE 
     508         CALL cxios_xml_tree_add_generatedomaintodomain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     509      END IF 
     510 
     511   END SUBROUTINE xios(add_generatedomaintodomain) 
     512 
     513   SUBROUTINE xios(add_zoomaxistoaxis)(parent_hdl, child_hdl, child_id) 
     514      TYPE(txios(axis))                      , INTENT(IN) :: parent_hdl 
     515      TYPE(txios(zoom_axis))                 , INTENT(OUT):: child_hdl 
     516      CHARACTER(len = *), OPTIONAL           , INTENT(IN) :: child_id 
     517 
     518      IF (PRESENT(child_id)) THEN 
     519         CALL cxios_xml_tree_add_zoomaxistoaxis(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     520      ELSE 
     521         CALL cxios_xml_tree_add_zoomaxistoaxis(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     522      END IF 
     523 
     524   END SUBROUTINE xios(add_zoomaxistoaxis) 
     525 
     526   SUBROUTINE xios(add_interpolateaxistoaxis)(parent_hdl, child_hdl, child_id) 
     527      TYPE(txios(axis))                      , INTENT(IN) :: parent_hdl 
     528      TYPE(txios(interpolate_axis))          , INTENT(OUT):: child_hdl 
     529      CHARACTER(len = *), OPTIONAL           , INTENT(IN) :: child_id 
     530 
     531      IF (PRESENT(child_id)) THEN 
     532         CALL cxios_xml_tree_add_interpolateaxistoaxis(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     533      ELSE 
     534         CALL cxios_xml_tree_add_interpolateaxistoaxis(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     535      END IF 
     536 
     537   END SUBROUTINE xios(add_interpolateaxistoaxis) 
     538 
     539      SUBROUTINE xios(add_inverseaxistoaxis)(parent_hdl, child_hdl, child_id) 
     540      TYPE(txios(axis))                      , INTENT(IN) :: parent_hdl 
     541      TYPE(txios(zoom_axis))                 , INTENT(OUT):: child_hdl 
     542      CHARACTER(len = *), OPTIONAL           , INTENT(IN) :: child_id 
     543 
     544      IF (PRESENT(child_id)) THEN 
     545         CALL cxios_xml_tree_add_inverseaxistoaxis(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     546      ELSE 
     547         CALL cxios_xml_tree_add_inverseaxistoaxis(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     548      END IF 
     549 
     550   END SUBROUTINE xios(add_inverseaxistoaxis) 
    419551END MODULE IXML_TREE 
Note: See TracChangeset for help on using the changeset viewer.