Changeset 2100 for XIOS/branchs


Ignore:
Timestamp:
03/11/21 18:38:18 (3 years ago)
Author:
ymipsl
Message:

Fix problem in fortran-c interface about logical/bool standardisation between and fortran. xios_getvar for logical variable was not correct for some compiler.
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-2.5/src/interface/fortran/idata.F90

    r1158 r2100  
    391391         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    392392         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    393          LOGICAL  (kind = 4)                      :: data_logic 
     393         LOGICAL  (kind = C_BOOL)                 :: data_logic 
    394394         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    395395      END SUBROUTINE cxios_get_variable_data_logic 
     
    433433         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    434434         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    435          LOGICAL  (kind = 4)       , VALUE        :: data_logic 
     435         LOGICAL  (kind = C_BOOL)  , VALUE        :: data_logic 
    436436         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    437437      END SUBROUTINE cxios_set_variable_data_logic 
     
    788788   ! Get variable functions 
    789789   LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8) 
    790    IMPLICIT NONE 
    791       LOGICAL  (kind = 1)                           :: val 
     790   USE ISO_C_BINDING 
     791   IMPLICIT NONE 
     792      LOGICAL  (kind = C_BOOL)                      :: val 
    792793      CHARACTER(len = *)               , INTENT(IN) :: varId 
    793794      REAL     (kind = 8)              , INTENT(OUT):: data_k8 
     
    799800 
    800801   LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4) 
    801    IMPLICIT NONE 
    802       LOGICAL  (kind = 1)                           :: val 
     802   USE ISO_C_BINDING 
     803   IMPLICIT NONE 
     804      LOGICAL  (kind = C_BOOL)                      :: val 
    803805      CHARACTER(len = *)               , INTENT(IN) :: varId 
    804806      REAL     (kind = 4)              , INTENT(OUT):: data_k4 
     
    810812 
    811813   LOGICAL FUNCTION xios(getVar_int)(varId, data_int) 
    812    IMPLICIT NONE 
    813       LOGICAL  (kind = 1)                           :: val 
     814   USE ISO_C_BINDING 
     815   IMPLICIT NONE 
     816      LOGICAL  (kind = C_BOOL)                      :: val 
    814817      CHARACTER(len = *)               , INTENT(IN) :: varId 
    815818      INTEGER                          , INTENT(OUT):: data_int 
     
    821824 
    822825   LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic) 
    823    IMPLICIT NONE 
    824       LOGICAL  (kind = 1)                           :: val 
     826   USE ISO_C_BINDING 
     827   IMPLICIT NONE 
     828      LOGICAL  (kind = C_BOOL)                      :: val 
    825829      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    826       LOGICAL  (kind = 4)              , INTENT(OUT):: data_logic 
    827  
    828       CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val) 
     830      LOGICAL                          , INTENT(OUT):: data_logic 
     831      LOGICAL (C_BOOL)                              :: data_tmp  
     832 
     833      CALL cxios_get_variable_data_logic(varId, len(varId), data_tmp, val) 
    829834 
    830835      xios(getVar_logic) = val 
     836      IF (val) data_logic = data_tmp 
    831837   END FUNCTION xios(getVar_logic) 
    832838 
    833839   LOGICAL FUNCTION xios(getVar_char)(varId, data_char) 
    834    IMPLICIT NONE 
    835       LOGICAL  (kind = 1)                           :: val 
     840   USE ISO_C_BINDING 
     841   IMPLICIT NONE 
     842      LOGICAL  (kind = C_BOOL)                      :: val 
    836843      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    837844      CHARACTER(len  = *)              , INTENT(OUT):: data_char 
     
    844851   ! Set variable functions 
    845852   LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8) 
    846    IMPLICIT NONE 
    847       LOGICAL  (kind = 1)                           :: val 
     853   USE ISO_C_BINDING 
     854   IMPLICIT NONE 
     855      LOGICAL  (kind = C_BOOL)                      :: val 
    848856      CHARACTER(len = *)               , INTENT(IN) :: varId 
    849857      REAL     (kind = 8)              , INTENT(IN) :: data_k8 
     
    855863 
    856864   LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4) 
    857    IMPLICIT NONE 
    858       LOGICAL  (kind = 1)                           :: val 
     865   USE ISO_C_BINDING 
     866   IMPLICIT NONE 
     867      LOGICAL  (kind = C_BOOL)                      :: val 
    859868      CHARACTER(len = *)               , INTENT(IN) :: varId 
    860869      REAL     (kind = 4)              , INTENT(IN) :: data_k4 
     
    866875 
    867876   LOGICAL FUNCTION xios(setVar_int)(varId, data_int) 
    868    IMPLICIT NONE 
    869       LOGICAL  (kind = 1)                           :: val 
     877   USE ISO_C_BINDING 
     878   IMPLICIT NONE 
     879      LOGICAL  (kind = C_BOOL)                      :: val 
    870880      CHARACTER(len = *)               , INTENT(IN) :: varId 
    871881      INTEGER                          , INTENT(IN) :: data_int 
     
    877887 
    878888   LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic) 
    879    IMPLICIT NONE 
    880       LOGICAL  (kind = 1)                           :: val 
     889   USE ISO_C_BINDING 
     890   IMPLICIT NONE 
     891      LOGICAL  (kind = C_BOOL)                      :: val 
    881892      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    882       LOGICAL  (kind = 4)              , INTENT(IN) :: data_logic 
    883  
    884       CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val) 
     893      LOGICAL                          , INTENT(IN) :: data_logic 
     894      LOGICAL  (kind = C_BOOL)                      :: data_tmp 
     895       
     896      data_tmp = data_logic 
     897      CALL cxios_set_variable_data_logic(varId, len(varId), data_tmp, val) 
    885898 
    886899      xios(setVar_logic) = val 
     
    888901 
    889902   LOGICAL FUNCTION xios(setVar_char)(varId, data_char) 
    890    IMPLICIT NONE 
    891       LOGICAL  (kind = 1)                           :: val 
     903   USE ISO_C_BINDING 
     904   IMPLICIT NONE 
     905      LOGICAL  (kind = C_BOOL)                      :: val 
    892906      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    893907      CHARACTER(len  = *)              , INTENT(IN) :: data_char 
Note: See TracChangeset for help on using the changeset viewer.