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 15540 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DYN/dynvor.F90 – NEMO

Ignore:
Timestamp:
2021-11-26T12:27:56+01:00 (3 years ago)
Author:
sparonuz
Message:

Mixed precision version, tested up to 30 years on ORCA2.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DYN/dynvor.F90

    r14986 r15540  
    8282   INTEGER, PUBLIC, PARAMETER ::   np_CME = 5         ! Coriolis + metric term 
    8383 
    84    REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   di_e2u_2        ! = di(e2u)/2          used in T-point metric term calculation 
    85    REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   dj_e1v_2        ! = dj(e1v)/2           -        -      -       - 
    86    REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   di_e2v_2e1e2f   ! = di(e2u)/(2*e1e2f)  used in F-point metric term calculation 
    87    REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   dj_e1u_2e1e2f   ! = dj(e1v)/(2*e1e2f)   -        -      -       - 
     84   REAL(dp), ALLOCATABLE, DIMENSION(:,:) ::   di_e2u_2        ! = di(e2u)/2          used in T-point metric term calculation 
     85   REAL(dp), ALLOCATABLE, DIMENSION(:,:) ::   dj_e1v_2        ! = dj(e1v)/2           -        -      -       - 
     86   REAL(dp), ALLOCATABLE, DIMENSION(:,:) ::   di_e2v_2e1e2f   ! = di(e2u)/(2*e1e2f)  used in F-point metric term calculation 
     87   REAL(dp), ALLOCATABLE, DIMENSION(:,:) ::   dj_e1u_2e1e2f   ! = dj(e1v)/(2*e1e2f)   -        -      -       - 
    8888   ! 
    89    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   e3f_0vor   ! e3f used in EEN, ENE and ENS cases (key_qco only) 
    90  
    91    REAL(wp) ::   r1_4  = 0.250_wp         ! =1/4 
    92    REAL(wp) ::   r1_8  = 0.125_wp         ! =1/8 
    93    REAL(wp) ::   r1_12 = 1._wp / 12._wp   ! 1/12 
     89   REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) ::   e3f_0vor   ! e3f used in EEN, ENE and ENS cases (key_qco only) 
     90 
     91   REAL(dp) ::   r1_4  = 0.250_wp         ! =1/4 
     92   REAL(dp) ::   r1_8  = 0.125_wp         ! =1/8 
     93   REAL(dp) ::   r1_12 = 1._wp / 12._wp   ! 1/12 
    9494 
    9595   !! * Substitutions 
     
    207207      ! 
    208208      !                       ! print sum trends (used for debugging) 
    209       IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' vor  - Ua: ', mask1=umask,               & 
    210          &                                tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     209      IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=puu(:,:,:,Krhs), clinfo1=' vor  - Ua: ', mask1=umask,               & 
     210         &                                tab3d_2=pvv(:,:,:,Krhs), clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    211211      ! 
    212212      IF( ln_timing )   CALL timing_stop('dyn_vor') 
     
    240240      ! 
    241241      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    242       REAL(wp) ::   zx1, zy1, zx2, zy2   ! local scalars 
    243       REAL(wp), DIMENSION(A2D(nn_hls))        ::   zwx, zwy, zwt   ! 2D workspace 
    244       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zwz             ! 3D workspace, jpkm1 -> avoid lbc_lnk on jpk that is not defined 
     242      REAL(dp) ::   zx1, zy1, zx2, zy2   ! local scalars 
     243      REAL(dp), DIMENSION(A2D(nn_hls))        ::   zwx, zwy, zwt   ! 2D workspace 
     244      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) ::   zwz             ! 3D workspace, jpkm1 -> avoid lbc_lnk on jpk that is not defined 
    245245      !!---------------------------------------------------------------------- 
    246246      ! 
     
    360360      ! 
    361361      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    362       REAL(wp) ::   zx1, zy1, zx2, zy2, ze3f, zmsk   ! local scalars 
    363       REAL(wp), DIMENSION(A2D(nn_hls)) ::   zwx, zwy, zwz   ! 2D workspace 
     362      REAL(dp) ::   zx1, zy1, zx2, zy2, ze3f, zmsk   ! local scalars 
     363      REAL(dp), DIMENSION(A2D(nn_hls)) ::   zwx, zwy, zwz   ! 2D workspace 
    364364      !!---------------------------------------------------------------------- 
    365365      ! 
     
    493493      ! 
    494494      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    495       REAL(wp) ::   zuav, zvau, ze3f, zmsk   ! local scalars 
    496       REAL(wp), DIMENSION(A2D(nn_hls)) ::   zwx, zwy, zwz   ! 2D workspace 
     495      REAL(dp) ::   zuav, zvau, ze3f, zmsk   ! local scalars 
     496      REAL(dp), DIMENSION(A2D(nn_hls)) ::   zwx, zwy, zwz   ! 2D workspace 
    497497      !!---------------------------------------------------------------------- 
    498498      ! 
     
    625625      INTEGER  ::   ierr         ! local integer 
    626626      REAL(wp) ::   zua, zva     ! local scalars 
    627       REAL(wp) ::   zmsk, ze3f   ! local scalars 
     627      REAL(dp) ::   zmsk, ze3f   ! local scalars 
    628628      REAL(wp), DIMENSION(A2D(nn_hls))       ::   z1_e3f 
    629629#if defined key_loop_fusion 
     
    635635      REAL(wp), DIMENSION(A2D(nn_hls))       ::   ztnw, ztne, ztsw, ztse 
    636636#endif 
    637       REAL(wp), DIMENSION(A2D(nn_hls),jpkm1) ::   zwz   ! 3D workspace, jpkm1 -> jpkm1 -> avoid lbc_lnk on jpk that is not defined 
     637      REAL(dp), DIMENSION(A2D(nn_hls),jpkm1) ::   zwz   ! 3D workspace, jpkm1 -> jpkm1 -> avoid lbc_lnk on jpk that is not defined 
    638638      !!---------------------------------------------------------------------- 
    639639      ! 
     
    823823      INTEGER  ::   ji, jj, jk     ! dummy loop indices 
    824824      INTEGER  ::   ierr           ! local integer 
    825       REAL(wp) ::   zua, zva       ! local scalars 
    826       REAL(wp) ::   zmsk, z1_e3t   ! local scalars 
    827       REAL(wp), DIMENSION(A2D(nn_hls))       ::   zwx , zwy 
    828       REAL(wp), DIMENSION(A2D(nn_hls))       ::   ztnw, ztne, ztsw, ztse 
    829       REAL(wp), DIMENSION(A2D(nn_hls),jpkm1) ::   zwz   ! 3D workspace, avoid lbc_lnk on jpk that is not defined 
     825      REAL(dp) ::   zua, zva       ! local scalars 
     826      REAL(dp) ::   zmsk, z1_e3t   ! local scalars 
     827      REAL(dp), DIMENSION(A2D(nn_hls))       ::   zwx , zwy 
     828      REAL(dp), DIMENSION(A2D(nn_hls))       ::   ztnw, ztne, ztsw, ztse 
     829      REAL(dp), DIMENSION(A2D(nn_hls),jpkm1) ::   zwz   ! 3D workspace, avoid lbc_lnk on jpk that is not defined 
    830830      !!---------------------------------------------------------------------- 
    831831      ! 
Note: See TracChangeset for help on using the changeset viewer.