New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 12603 for NEMO/branches/2020/dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation/src/OCE/IOM/iom_nf90.F90 – NEMO

Ignore:
Timestamp:
2020-03-25T16:20:25+01:00 (4 years ago)
Author:
orioltp
Message:

Adding several interfaces to work with both single and double precision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation/src/OCE/IOM/iom_nf90.F90

    r12377 r12603  
    3333 
    3434   INTERFACE iom_nf90_get 
    35       MODULE PROCEDURE iom_nf90_g0d, iom_nf90_g123d 
     35      MODULE PROCEDURE iom_nf90_g0d_sp                    
     36      MODULE PROCEDURE iom_nf90_g0d_dp, iom_nf90_g123d_dp 
    3637   END INTERFACE 
    3738   INTERFACE iom_nf90_rstput 
    38       MODULE PROCEDURE iom_nf90_rp0123d 
     39      MODULE PROCEDURE iom_nf90_rp0123d_dp 
    3940   END INTERFACE 
    4041 
     
    273274   !!---------------------------------------------------------------------- 
    274275 
    275    SUBROUTINE iom_nf90_g0d( kiomid, kvid, pvar, kstart ) 
     276   SUBROUTINE iom_nf90_g0d_sp( kiomid, kvid, pvar, kstart ) 
    276277      !!----------------------------------------------------------------------- 
    277278      !!                  ***  ROUTINE  iom_nf90_g0d  *** 
     
    281282      INTEGER ,               INTENT(in   )            ::   kiomid   ! Identifier of the file 
    282283      INTEGER ,               INTENT(in   )            ::   kvid     ! variable id 
    283       REAL(wp),               INTENT(  out)            ::   pvar     ! read field 
     284      REAL(sp),               INTENT(  out)            ::   pvar     ! read field 
    284285      INTEGER , DIMENSION(1), INTENT(in   ), OPTIONAL  ::   kstart   ! start position of the reading in each axis 
    285286      ! 
     
    288289      clinfo = 'iom_nf90_g0d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 
    289290      CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 
    290    END SUBROUTINE iom_nf90_g0d 
    291  
    292  
    293    SUBROUTINE iom_nf90_g123d( kiomid, kvid, knbdim, kstart, kcount, kx1, kx2, ky1, ky2,   & 
     291   END SUBROUTINE iom_nf90_g0d_sp 
     292 
     293   SUBROUTINE iom_nf90_g0d_dp( kiomid, kvid, pvar, kstart ) 
     294      !!----------------------------------------------------------------------- 
     295      !!                  ***  ROUTINE  iom_nf90_g0d  *** 
     296      !! 
     297      !! ** Purpose : read a scalar with NF90 
     298      !!----------------------------------------------------------------------- 
     299      INTEGER ,               INTENT(in   )            ::   kiomid   ! Identifier of the file 
     300      INTEGER ,               INTENT(in   )            ::   kvid     ! variable id 
     301      REAL(dp),               INTENT(  out)            ::   pvar     ! read field 
     302      INTEGER , DIMENSION(1), INTENT(in   ), OPTIONAL  ::   kstart   ! start position of the reading in each axis 
     303      ! 
     304      CHARACTER(LEN=100)      ::   clinfo   ! info character 
     305      !--------------------------------------------------------------------- 
     306      clinfo = 'iom_nf90_g0d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 
     307      CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 
     308   END SUBROUTINE iom_nf90_g0d_dp 
     309 
     310   SUBROUTINE iom_nf90_g123d_dp( kiomid, kvid, knbdim, kstart, kcount, kx1, kx2, ky1, ky2,   & 
    294311         &                    pv_r1d, pv_r2d, pv_r3d ) 
    295312      !!----------------------------------------------------------------------- 
     
    306323      INTEGER , DIMENSION(:)     , INTENT(in   )           ::   kcount    ! number of points to be read in each axis 
    307324      INTEGER ,                    INTENT(in   )           ::   kx1, kx2, ky1, ky2   ! subdomain indexes 
    308       REAL(wp), DIMENSION(:)     , INTENT(  out), OPTIONAL ::   pv_r1d    ! read field (1D case) 
    309       REAL(wp), DIMENSION(:,:)   , INTENT(  out), OPTIONAL ::   pv_r2d    ! read field (2D case) 
    310       REAL(wp), DIMENSION(:,:,:) , INTENT(  out), OPTIONAL ::   pv_r3d    ! read field (3D case) 
     325      REAL(dp), DIMENSION(:)     , INTENT(  out), OPTIONAL ::   pv_r1d    ! read field (1D case) 
     326      REAL(dp), DIMENSION(:,:)   , INTENT(  out), OPTIONAL ::   pv_r2d    ! read field (2D case) 
     327      REAL(dp), DIMENSION(:,:,:) , INTENT(  out), OPTIONAL ::   pv_r3d    ! read field (3D case) 
    311328      ! 
    312329      CHARACTER(LEN=100) ::   clinfo               ! info character 
     
    329346      ENDIF 
    330347      ! 
    331    END SUBROUTINE iom_nf90_g123d 
     348   END SUBROUTINE iom_nf90_g123d_dp 
     349 
    332350 
    333351 
     
    503521   END SUBROUTINE iom_nf90_putatt 
    504522 
    505  
    506    SUBROUTINE iom_nf90_rp0123d( kt, kwrite, kiomid, cdvar , kvid  , ktype,   & 
     523   SUBROUTINE iom_nf90_rp0123d_dp( kt, kwrite, kiomid, cdvar , kvid  , ktype,   & 
    507524         &                                  pv_r0d, pv_r1d, pv_r2d, pv_r3d ) 
    508525      !!-------------------------------------------------------------------- 
     
    517534      INTEGER                     , INTENT(in)           ::   kvid     ! variable id 
    518535      INTEGER                     , INTENT(in), OPTIONAL ::   ktype    ! variable type (default R8) 
    519       REAL(wp)                    , INTENT(in), OPTIONAL ::   pv_r0d   ! written Od field 
    520       REAL(wp), DIMENSION(      :), INTENT(in), OPTIONAL ::   pv_r1d   ! written 1d field 
    521       REAL(wp), DIMENSION(:, :   ), INTENT(in), OPTIONAL ::   pv_r2d   ! written 2d field 
    522       REAL(wp), DIMENSION(:, :, :), INTENT(in), OPTIONAL ::   pv_r3d   ! written 3d field 
     536      REAL(dp)                    , INTENT(in), OPTIONAL ::   pv_r0d   ! written Od field 
     537      REAL(dp), DIMENSION(      :), INTENT(in), OPTIONAL ::   pv_r1d   ! written 1d field 
     538      REAL(dp), DIMENSION(:, :   ), INTENT(in), OPTIONAL ::   pv_r2d   ! written 2d field 
     539      REAL(dp), DIMENSION(:, :, :), INTENT(in), OPTIONAL ::   pv_r3d   ! written 3d field 
    523540      ! 
    524541      INTEGER               :: idims                ! number of dimension 
     
    720737      ENDIF 
    721738      !      
    722    END SUBROUTINE iom_nf90_rp0123d 
     739   END SUBROUTINE iom_nf90_rp0123d_dp 
    723740 
    724741 
Note: See TracChangeset for help on using the changeset viewer.