Ignore:
Timestamp:
09/22/16 10:59:27 (8 years ago)
Author:
mhnguyen
Message:

Adding Fortran interfaces for retrieving domains, axis, scalars of a field

+) Add some functions in Grid to get its domain, axis, scalar

Test
+) On Curie
+) Work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/fortran/ifield.F90

    r545 r943  
    88!   USE IFIELDGROUP_ATTR 
    99   USE IDURATION 
     10   USE IDOMAIN 
     11   USE IAXIS 
     12   USE ISCALAR 
    1013    
    1114   TYPE txios(field) 
     
    1619      INTEGER(kind = C_INTPTR_T) :: daddr 
    1720   END TYPE txios(fieldgroup) 
    18     
     21 
    1922   CONTAINS ! Fonctions disponibles pour les utilisateurs. 
    2023 
     
    3538   END SUBROUTINE xios(get_fieldgroup_handle) 
    3639    
     40   SUBROUTINE xios(field_id_get_domain_handle)(field_id, ret, idx) 
     41      IMPLICIT NONE 
     42      CHARACTER(len  = *)     , INTENT(IN)  :: field_id 
     43      INTEGER, OPTIONAL       , INTENT(IN)  :: idx 
     44      TYPE(txios(domain)), INTENT(OUT) :: ret 
     45      TYPE(txios(field))      :: field_hdl 
     46      INTEGER                 :: index 
     47      index = 0 
     48      IF (PRESENT(idx)) THEN 
     49        index = idx 
     50      ENDIF 
     51 
     52      CALL xios(get_field_handle)(field_id,field_hdl) 
     53      CALL xios(field_get_domain_handle(field_hdl, ret, index)) 
     54   END SUBROUTINE xios(field_id_get_domain_handle) 
     55 
     56   SUBROUTINE xios(field_get_domain_handle)(field_hdl, ret, idx) 
     57      IMPLICIT NONE 
     58      TYPE(txios(field))      , INTENT(IN)  :: field_hdl 
     59      INTEGER, OPTIONAL       , INTENT(IN)  :: idx 
     60      TYPE(txios(domain)), INTENT(OUT) :: ret 
     61      INTEGER :: index 
     62      index = 0 
     63      IF (PRESENT(idx)) THEN 
     64        index = idx 
     65      ENDIF 
     66      CALL cxios_field_get_domain_handle(ret%daddr, field_hdl%daddr, index) 
     67   END SUBROUTINE xios(field_get_domain_handle) 
     68 
     69   SUBROUTINE xios(field_id_get_axis_handle)(field_id, ret, idx) 
     70      IMPLICIT NONE 
     71      CHARACTER(len  = *)   , INTENT(IN)  :: field_id 
     72      INTEGER, OPTIONAL     , INTENT(IN)  :: idx 
     73      TYPE(txios(axis)), INTENT(OUT) :: ret 
     74      TYPE(txios(field))     :: field_hdl 
     75      INTEGER                :: index 
     76      index = 0 
     77      IF (PRESENT(idx)) THEN 
     78        index = idx 
     79      ENDIF 
     80      CALL xios(get_field_handle)(field_id,field_hdl) 
     81      CALL xios(field_get_axis_handle(field_hdl, ret, index)) 
     82   END SUBROUTINE xios(field_id_get_axis_handle) 
     83 
     84   SUBROUTINE xios(field_get_axis_handle)(field_hdl, ret, idx) 
     85      IMPLICIT NONE 
     86      TYPE(txios(field))    , INTENT(IN)  :: field_hdl 
     87      INTEGER, OPTIONAL     , INTENT(IN)  :: idx 
     88      TYPE(txios(axis)), INTENT(OUT) :: ret 
     89      INTEGER :: index 
     90      index = 0 
     91      IF (PRESENT(idx)) THEN 
     92        index = idx 
     93      ENDIF 
     94      CALL cxios_field_get_axis_handle(ret%daddr, field_hdl%daddr, index) 
     95   END SUBROUTINE xios(field_get_axis_handle) 
     96 
     97   SUBROUTINE xios(field_id_get_scalar_handle)(field_id, ret, idx) 
     98      IMPLICIT NONE 
     99      CHARACTER(len  = *)     , INTENT(IN)  :: field_id 
     100      INTEGER, OPTIONAL       , INTENT(IN)  :: idx 
     101      TYPE(txios(scalar)), INTENT(OUT) :: ret 
     102      TYPE(txios(field))     :: field_hdl 
     103      INTEGER                :: index 
     104      index = 0 
     105      IF (PRESENT(idx)) THEN 
     106        index = idx 
     107      ENDIF 
     108      CALL xios(get_field_handle)(field_id,field_hdl) 
     109      CALL xios(field_get_scalar_handle(field_hdl, ret, index)) 
     110   END SUBROUTINE xios(field_id_get_scalar_handle) 
     111 
     112   SUBROUTINE xios(field_get_scalar_handle)(field_hdl, ret, idx) 
     113      IMPLICIT NONE 
     114      TYPE(txios(field))      , INTENT(IN)  :: field_hdl 
     115      INTEGER, OPTIONAL       , INTENT(IN)  :: idx 
     116      TYPE(txios(scalar)), INTENT(OUT) :: ret 
     117      INTEGER :: index 
     118      index = 0 
     119      IF (PRESENT(idx)) THEN 
     120        index = idx 
     121      ENDIF 
     122      CALL cxios_field_get_axis_handle(ret%daddr, field_hdl%daddr, index) 
     123   END SUBROUTINE xios(field_get_scalar_handle) 
    37124 
    38125   LOGICAL FUNCTION xios(is_valid_field)(idt) 
Note: See TracChangeset for help on using the changeset viewer.