Changeset 2099


Ignore:
Timestamp:
03/11/21 18:23:00 (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/trunk/src/interface/fortran/idata.F90

    r2025 r2099  
    676676         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    677677         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    678          LOGICAL  (kind = 4)                      :: data_logic 
     678         LOGICAL  (kind = C_BOOL)                 :: data_logic 
    679679         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    680680      END SUBROUTINE cxios_get_variable_data_logic 
     
    718718         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid 
    719719         INTEGER  (kind = C_INT)   , VALUE        :: varid_size 
    720          LOGICAL  (kind = 4)       , VALUE        :: data_logic 
     720         LOGICAL  (kind = C_BOOL)       , VALUE   :: data_logic 
    721721         LOGICAL  (kind = C_BOOL)                 :: is_var_existed 
    722722      END SUBROUTINE cxios_set_variable_data_logic 
     
    13391339   ! Get variable functions 
    13401340   LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8) 
    1341    IMPLICIT NONE 
    1342       LOGICAL  (kind = 1)                           :: val 
     1341   USE ISO_C_BINDING 
     1342   IMPLICIT NONE 
     1343      LOGICAL  (kind = C_BOOL)                      :: val 
    13431344      CHARACTER(len = *)               , INTENT(IN) :: varId 
    13441345      REAL     (kind = 8)              , INTENT(OUT):: data_k8 
     
    13501351 
    13511352   LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4) 
    1352    IMPLICIT NONE 
    1353       LOGICAL  (kind = 1)                           :: val 
     1353   USE ISO_C_BINDING 
     1354   IMPLICIT NONE 
     1355      LOGICAL  (kind = C_BOOL)                      :: val 
    13541356      CHARACTER(len = *)               , INTENT(IN) :: varId 
    13551357      REAL     (kind = 4)              , INTENT(OUT):: data_k4 
     
    13611363 
    13621364   LOGICAL FUNCTION xios(getVar_int)(varId, data_int) 
    1363    IMPLICIT NONE 
    1364       LOGICAL  (kind = 1)                           :: val 
     1365   USE ISO_C_BINDING 
     1366   IMPLICIT NONE 
     1367      LOGICAL  (kind = C_BOOL)                      :: val 
    13651368      CHARACTER(len = *)               , INTENT(IN) :: varId 
    13661369      INTEGER                          , INTENT(OUT):: data_int 
     
    13721375 
    13731376   LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic) 
    1374    IMPLICIT NONE 
    1375       LOGICAL  (kind = 1)                           :: val 
     1377   USE ISO_C_BINDING 
     1378   IMPLICIT NONE 
     1379      LOGICAL  (kind = C_BOOL)                      :: val 
    13761380      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    1377       LOGICAL  (kind = 4)              , INTENT(OUT):: data_logic 
    1378  
    1379       CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val) 
    1380  
     1381      LOGICAL  ,INTENT(OUT)                         :: data_logic 
     1382      LOGICAL (C_BOOL)                              :: data_tmp 
     1383 
     1384      CALL cxios_get_variable_data_logic(varId, len(varId), data_tmp, val) 
    13811385      xios(getVar_logic) = val 
     1386      IF (val) data_logic = data_tmp 
    13821387   END FUNCTION xios(getVar_logic) 
    13831388 
    13841389   LOGICAL FUNCTION xios(getVar_char)(varId, data_char) 
    1385    IMPLICIT NONE 
    1386       LOGICAL  (kind = 1)                           :: val 
     1390   USE ISO_C_BINDING 
     1391   IMPLICIT NONE 
     1392      LOGICAL  (kind = C_BOOL)                      :: val 
    13871393      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    13881394      CHARACTER(len  = *)              , INTENT(OUT):: data_char 
     
    13951401   ! Set variable functions 
    13961402   LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8) 
    1397    IMPLICIT NONE 
    1398       LOGICAL  (kind = 1)                           :: val 
     1403   USE ISO_C_BINDING 
     1404   IMPLICIT NONE 
     1405      LOGICAL  (kind = C_BOOL)                      :: val 
    13991406      CHARACTER(len = *)               , INTENT(IN) :: varId 
    14001407      REAL     (kind = 8)              , INTENT(IN) :: data_k8 
     
    14061413 
    14071414   LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4) 
    1408    IMPLICIT NONE 
    1409       LOGICAL  (kind = 1)                           :: val 
     1415   USE ISO_C_BINDING 
     1416   IMPLICIT NONE 
     1417      LOGICAL  (kind = C_BOOL)                      :: val 
    14101418      CHARACTER(len = *)               , INTENT(IN) :: varId 
    14111419      REAL     (kind = 4)              , INTENT(IN) :: data_k4 
     
    14171425 
    14181426   LOGICAL FUNCTION xios(setVar_int)(varId, data_int) 
    1419    IMPLICIT NONE 
    1420       LOGICAL  (kind = 1)                           :: val 
     1427   USE ISO_C_BINDING 
     1428   IMPLICIT NONE 
     1429      LOGICAL  (kind = C_BOOL)                           :: val 
    14211430      CHARACTER(len = *)               , INTENT(IN) :: varId 
    14221431      INTEGER                          , INTENT(IN) :: data_int 
     
    14281437 
    14291438   LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic) 
    1430    IMPLICIT NONE 
    1431       LOGICAL  (kind = 1)                           :: val 
     1439   USE ISO_C_BINDING 
     1440   IMPLICIT NONE 
     1441      LOGICAL(kind = C_BOOL)                        :: val 
    14321442      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    1433       LOGICAL  (kind = 4)              , INTENT(IN) :: data_logic 
    1434  
    1435       CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val) 
     1443      LOGICAL                          , INTENT(IN) :: data_logic 
     1444      LOGICAL  (kind = C_BOOL)                      :: data_tmp 
     1445 
     1446      data_tmp = data_logic 
     1447      CALL cxios_set_variable_data_logic(varId, len(varId), data_tmp, val) 
    14361448 
    14371449      xios(setVar_logic) = val 
     
    14391451 
    14401452   LOGICAL FUNCTION xios(setVar_char)(varId, data_char) 
    1441    IMPLICIT NONE 
    1442       LOGICAL  (kind = 1)                           :: val 
     1453   USE ISO_C_BINDING 
     1454   IMPLICIT NONE 
     1455      LOGICAL  (kind = C_BOOL)                      :: val 
    14431456      CHARACTER(len  = *)              , INTENT(IN) :: varId 
    14441457      CHARACTER(len  = *)              , INTENT(IN) :: data_char 
Note: See TracChangeset for help on using the changeset viewer.