Changeset 2115


Ignore:
Timestamp:
03/23/21 13:38:20 (3 years ago)
Author:
jderouillat
Message:

Backport fix 2099 : Fix problem in fortran-c interface about logical/bool.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/interface/fortran/idata.F90

    r1587 r2115  
    394394         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    395395         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    396          LOGICAL  (kind = 4)                      :: data_logic 
     396         LOGICAL  (kind = C_BOOL)                 :: data_logic 
    397397         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    398398      END SUBROUTINE cxios_get_variable_data_logic 
     
    436436         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    437437         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    438          LOGICAL  (kind = 4)       , VALUE        :: data_logic 
     438         LOGICAL  (kind = C_BOOL)  , VALUE        :: data_logic 
    439439         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    440440      END SUBROUTINE cxios_set_variable_data_logic 
     
    797797   ! Get variable functions 
    798798   LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8) 
    799    IMPLICIT NONE 
    800       LOGICAL  (kind = 1)                           :: val 
     799   USE ISO_C_BINDING 
     800   IMPLICIT NONE 
     801      LOGICAL  (kind = C_BOOL)                      :: val 
    801802      CHARACTER(len = *)               , INTENT(IN) :: varId 
    802803      REAL     (kind = 8)              , INTENT(OUT):: data_k8 
     
    808809 
    809810   LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4) 
    810    IMPLICIT NONE 
    811       LOGICAL  (kind = 1)                           :: val 
     811   USE ISO_C_BINDING 
     812   IMPLICIT NONE 
     813      LOGICAL  (kind = C_BOOL)                      :: val 
    812814      CHARACTER(len = *)               , INTENT(IN) :: varId 
    813815      REAL     (kind = 4)              , INTENT(OUT):: data_k4 
     
    819821 
    820822   LOGICAL FUNCTION xios(getVar_int)(varId, data_int) 
    821    IMPLICIT NONE 
    822       LOGICAL  (kind = 1)                           :: val 
     823   USE ISO_C_BINDING 
     824   IMPLICIT NONE 
     825      LOGICAL  (kind = C_BOOL)                      :: val 
    823826      CHARACTER(len = *)               , INTENT(IN) :: varId 
    824827      INTEGER                          , INTENT(OUT):: data_int 
     
    830833 
    831834   LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic) 
    832    IMPLICIT NONE 
    833       LOGICAL  (kind = 1)                           :: val 
     835   USE ISO_C_BINDING 
     836   IMPLICIT NONE 
     837      LOGICAL  (kind = C_BOOL)                      :: val 
    834838      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    835       LOGICAL  (kind = 4)              , INTENT(OUT):: data_logic 
    836  
    837       CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val) 
    838  
     839      LOGICAL  , INTENT(OUT)                        :: data_logic 
     840      LOGICAL (C_BOOL)                              :: data_tmp 
     841 
     842      CALL cxios_get_variable_data_logic(varId, len(varId), data_tmp, val) 
    839843      xios(getVar_logic) = val 
     844      IF (val) data_logic = data_tmp 
    840845   END FUNCTION xios(getVar_logic) 
    841846 
    842847   LOGICAL FUNCTION xios(getVar_char)(varId, data_char) 
    843    IMPLICIT NONE 
    844       LOGICAL  (kind = 1)                           :: val 
     848   USE ISO_C_BINDING 
     849   IMPLICIT NONE 
     850      LOGICAL  (kind = C_BOOL)                      :: val 
    845851      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    846852      CHARACTER(len  = *)              , INTENT(OUT):: data_char 
     
    853859   ! Set variable functions 
    854860   LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8) 
    855    IMPLICIT NONE 
    856       LOGICAL  (kind = 1)                           :: val 
     861   USE ISO_C_BINDING 
     862   IMPLICIT NONE 
     863      LOGICAL  (kind = C_BOOL)                      :: val 
    857864      CHARACTER(len = *)               , INTENT(IN) :: varId 
    858865      REAL     (kind = 8)              , INTENT(IN) :: data_k8 
     
    864871 
    865872   LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4) 
    866    IMPLICIT NONE 
    867       LOGICAL  (kind = 1)                           :: val 
     873   USE ISO_C_BINDING 
     874   IMPLICIT NONE 
     875      LOGICAL  (kind = C_BOOL)                      :: val 
    868876      CHARACTER(len = *)               , INTENT(IN) :: varId 
    869877      REAL     (kind = 4)              , INTENT(IN) :: data_k4 
     
    875883 
    876884   LOGICAL FUNCTION xios(setVar_int)(varId, data_int) 
    877    IMPLICIT NONE 
    878       LOGICAL  (kind = 1)                           :: val 
     885   USE ISO_C_BINDING 
     886   IMPLICIT NONE 
     887      LOGICAL  (kind = C_BOOL)                      :: val 
    879888      CHARACTER(len = *)               , INTENT(IN) :: varId 
    880889      INTEGER                          , INTENT(IN) :: data_int 
     
    886895 
    887896   LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic) 
    888    IMPLICIT NONE 
    889       LOGICAL  (kind = 1)                           :: val 
     897   USE ISO_C_BINDING 
     898   IMPLICIT NONE 
     899      LOGICAL  (kind = C_BOOL)                      :: val 
    890900      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    891901      LOGICAL  (kind = 4)              , INTENT(IN) :: data_logic 
    892  
    893       CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val) 
     902      LOGICAL  (kind = C_BOOL)                      :: data_tmp 
     903 
     904      data_tmp = data_logic 
     905      CALL cxios_set_variable_data_logic(varId, len(varId), data_tmp, val) 
    894906 
    895907      xios(setVar_logic) = val 
     908 
    896909   END FUNCTION xios(setVar_logic) 
    897910 
    898911   LOGICAL FUNCTION xios(setVar_char)(varId, data_char) 
    899    IMPLICIT NONE 
    900       LOGICAL  (kind = 1)                           :: val 
     912   USE ISO_C_BINDING 
     913   IMPLICIT NONE 
     914      LOGICAL  (kind = C_BOOL)                      :: val 
    901915      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    902916      CHARACTER(len  = *)              , INTENT(IN) :: data_char 
Note: See TracChangeset for help on using the changeset viewer.