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/DIA – 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.

Location:
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA
Files:
11 edited

Legend:

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

    r12489 r15540  
    2525   ! variables for calculating 25-hourly means 
    2626   INTEGER , SAVE ::   cnt_25h           ! Counter for 25 hour means 
    27    REAL(wp), SAVE ::   r1_25 = 0.04_wp   ! =1/25  
    28    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   tn_25h  , sn_25h 
    29    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   sshn_25h  
    30    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   un_25h  , vn_25h  , wn_25h 
    31    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avt_25h , avm_25h 
    32    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   en_25h  , rmxln_25h 
     27   REAL(dp), SAVE ::   r1_25 = 0.04_wp   ! =1/25  
     28   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   tn_25h  , sn_25h 
     29   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   sshn_25h  
     30   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   un_25h  , vn_25h  , wn_25h 
     31   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avt_25h , avm_25h 
     32   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   en_25h  , rmxln_25h 
    3333 
    3434   !!---------------------------------------------------------------------- 
     
    130130      INTEGER                          ::   iyear0, nimonth0,iday0            ! start year,imonth,day 
    131131      LOGICAL ::   ll_print = .FALSE.    ! =T print and flush numout 
    132       REAL(wp)                         ::   zsto, zout, zmax, zjulian, zmdi   ! local scalars 
     132      REAL(dp)                         ::   zsto, zout, zmax, zjulian, zmdi   ! local scalars 
    133133      INTEGER                          ::   i_steps                           ! no of timesteps per hour 
    134       REAL(wp), DIMENSION(jpi,jpj    ) ::   zw2d, un_dm, vn_dm                ! workspace 
    135       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zw3d                              ! workspace 
    136       REAL(wp), DIMENSION(jpi,jpj,3)   ::   zwtmb                             ! workspace 
     134      REAL(dp), DIMENSION(jpi,jpj    ) ::   zw2d, un_dm, vn_dm                ! workspace 
     135      REAL(dp), DIMENSION(jpi,jpj,jpk) ::   zw3d                              ! workspace 
     136      REAL(dp), DIMENSION(jpi,jpj,3)   ::   zwtmb                             ! workspace 
    137137      !!---------------------------------------------------------------------- 
    138138 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diaar5.F90

    r14986 r15540  
    3030   PUBLIC   dia_ar5_hst    ! heat/salt transport 
    3131 
    32    REAL(wp)                         ::   vol0         ! ocean volume (interior domain) 
    33    REAL(wp)                         ::   area_tot     ! total ocean surface (interior domain) 
     32   REAL(dp)                         ::   vol0         ! ocean volume (interior domain) 
     33   REAL(dp)                         ::   area_tot     ! total ocean surface (interior domain) 
    3434   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
    3535   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
     
    7878      ! 
    7979      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     :: zarea_ssh , zbotpres       ! 2D workspace 
    80       REAL(wp), ALLOCATABLE, DIMENSION(:,:)     :: z2d, zpe                   ! 2D workspace 
    81       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   :: z3d, zrhd, ztpot, zgdept   ! 3D workspace (zgdept: needed to use the substitute) 
     80      REAL(wp), ALLOCATABLE, DIMENSION(:,:)      :: z2d! 2D workspace 
     81      REAL(dp), ALLOCATABLE, DIMENSION(:,:)      :: zpe! 2D workspace 
     82      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)    :: zgdept! 3D workspace (zgdept: needed to use the substitute) 
     83      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:)    :: z3d, zrhd, ztpot! 3D workspace (zgdept: needed to use the substitute) 
    8284      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztsn                       ! 4D workspace 
    8385 
     
    137139            zgdept(:,:,jk) = gdept(:,:,jk,Kmm) 
    138140         END DO 
    139          CALL eos( ztsn, zrhd, zgdept)                       ! now in situ density using initial salinity 
     141         CALL eos( CASTDP(ztsn), zrhd, CASTDP(zgdept))                       ! now in situ density using initial salinity 
    140142         ! 
    141143         zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     
    232234            ztpot(:,:,jpk) = 0._wp 
    233235            DO jk = 1, jpkm1 
    234                ztpot(:,:,jk) = eos_pt_from_ct( CASTWP(ts(:,:,jk,jp_tem,Kmm)), CASTWP(ts(:,:,jk,jp_sal,Kmm)) ) 
     236               ztpot(:,:,jk) = eos_pt_from_ct( ts(:,:,jk,jp_tem,Kmm), ts(:,:,jk,jp_sal,Kmm) ) 
    235237            END DO 
    236238            ! 
     
    315317      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
    316318      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf' 
    317       REAL(wp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: puflx  ! u-flux of advection/diffusion 
    318       REAL(wp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: pvflx  ! v-flux of advection/diffusion 
     319      REAL(dp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: puflx  ! u-flux of advection/diffusion 
     320      REAL(dp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: pvflx  ! v-flux of advection/diffusion 
    319321      ! 
    320322      INTEGER    ::  ji, jj, jk 
    321       REAL(wp), DIMENSION(A2D(nn_hls))  :: z2d 
     323      REAL(dp), DIMENSION(A2D(nn_hls))  :: z2d 
    322324 
    323325      z2d(:,:) = puflx(:,:,1) 
     
    360362      INTEGER  ::   ji, jj, jk  ! dummy loop indices 
    361363      REAL(wp) ::   zztmp 
    362       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zsaldta   ! Jan/Dec levitus salinity 
     364      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zsaldta   ! Jan/Dec levitus salinity 
    363365      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zvol0 
    364366      ! 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diacfl.F90

    r14644 r15540  
    2727   ! 
    2828   INTEGER, DIMENSION(3) ::   nCu_loc, nCv_loc, nCw_loc   ! U, V, and W run max locations in the global domain 
    29    REAL(wp)              ::   rCu_max, rCv_max, rCw_max   ! associated run max Courant number  
     29   REAL(dp)              ::   rCu_max, rCv_max, rCw_max   ! associated run max Courant number  
    3030 
    3131   PUBLIC   dia_cfl       ! routine called by step.F90 
     
    5353      ! 
    5454      INTEGER                          ::   ji, jj, jk                       ! dummy loop indices 
    55       REAL(wp)                         ::   zCu_max, zCv_max, zCw_max        ! local scalars 
     55      REAL(dp)                         ::   zCu_max, zCv_max, zCw_max        ! local scalars 
    5656      INTEGER , DIMENSION(3)           ::   iloc_u , iloc_v , iloc_w , iloc  ! workspace 
    57       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zCu_cfl, zCv_cfl, zCw_cfl        ! workspace 
     57      REAL(dp), DIMENSION(jpi,jpj,jpk) ::   zCu_cfl, zCv_cfl, zCw_cfl        ! workspace 
    5858      LOGICAL , DIMENSION(jpi,jpj,jpk) ::   llmsk 
    5959      !!---------------------------------------------------------------------- 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diadct.F90

    r14219 r15540  
    6161 
    6262   TYPE COORD_SECTION 
    63       REAL(wp) :: lon,lat 
     63      REAL(dp) :: lon,lat 
    6464   END TYPE COORD_SECTION 
    6565 
     
    7373      INTEGER, DIMENSION(nb_point_max)             :: direction         ! vector direction of the point in the section 
    7474      CHARACTER(len=40),DIMENSION(nb_class_max)    :: classname         ! characteristics of the class 
    75       REAL(wp), DIMENSION(nb_class_max)            :: zsigi             ! in-situ   density classes    (99 if you don't want) 
    76       REAL(wp), DIMENSION(nb_class_max)            :: zsigp             ! potential density classes    (99 if you don't want) 
    77       REAL(wp), DIMENSION(nb_class_max)            :: zsal              ! salinity classes   (99 if you don't want) 
    78       REAL(wp), DIMENSION(nb_class_max)            :: ztem              ! temperature classes(99 if you don't want) 
    79       REAL(wp), DIMENSION(nb_class_max)            :: zlay              ! level classes      (99 if you don't want) 
    80       REAL(wp), DIMENSION(nb_type_class,nb_class_max)  :: transport     ! transport output 
    81       REAL(wp)                                         :: slopeSection  ! slope of the section 
     75      REAL(dp), DIMENSION(nb_class_max)            :: zsigi             ! in-situ   density classes    (99 if you don't want) 
     76      REAL(dp), DIMENSION(nb_class_max)            :: zsigp             ! potential density classes    (99 if you don't want) 
     77      REAL(dp), DIMENSION(nb_class_max)            :: zsal              ! salinity classes   (99 if you don't want) 
     78      REAL(dp), DIMENSION(nb_class_max)            :: ztem              ! temperature classes(99 if you don't want) 
     79      REAL(dp), DIMENSION(nb_class_max)            :: zlay              ! level classes      (99 if you don't want) 
     80      REAL(dp), DIMENSION(nb_type_class,nb_class_max)  :: transport     ! transport output 
     81      REAL(dp)                                         :: slopeSection  ! slope of the section 
    8282      INTEGER                                          :: nb_point      ! number of points in the section 
    8383      TYPE(POINT_SECTION),DIMENSION(nb_point_max)      :: listPoint     ! list of points in the sections 
     
    8686   TYPE(SECTION),DIMENSION(nb_sec_max) :: secs ! Array of sections 
    8787  
    88    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::  transports_3d  
    89    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::  transports_2d   
     88   REAL(dp), ALLOCATABLE, DIMENSION(:,:,:,:) ::  transports_3d  
     89   REAL(dp), ALLOCATABLE, DIMENSION(:,:,:)   ::  transports_2d   
    9090 
    9191 
     
    202202     INTEGER              , DIMENSION(1)    ::   ish     ! work array for mpp_sum 
    203203     INTEGER              , DIMENSION(3)    ::   ish2    !   " 
    204      REAL(wp), ALLOCATABLE, DIMENSION(:)    ::   zwork   !   "   
    205      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)::   zsum    !   " 
     204     REAL(dp), ALLOCATABLE, DIMENSION(:)    ::   zwork   !   "   
     205     REAL(dp), ALLOCATABLE, DIMENSION(:,:,:)::   zsum    !   " 
    206206     !!---------------------------------------------------------------------     
    207207     ! 
     
    587587     ! 
    588588     INTEGER ::   jk, jseg, jclass,jl, isgnu, isgnv    ! loop on level/segment/classes/ice categories 
    589      REAL(wp)::   zumid, zvmid, zumid_ice, zvmid_ice   ! U/V ocean & ice velocity on a cell segment  
    590      REAL(wp)::   zTnorm                               ! transport of velocity through one cell's sides  
    591      REAL(wp)::   ztn, zsn, zrhoi, zrhop, zsshn, zdep  ! temperature/salinity/potential density/ssh/depth at u/v point 
     589     REAL(dp)::   zumid, zvmid, zumid_ice, zvmid_ice   ! U/V ocean & ice velocity on a cell segment  
     590     REAL(dp)::   zTnorm                               ! transport of velocity through one cell's sides  
     591     REAL(dp)::   ztn, zsn, zrhoi, zrhop, zsshn, zdep  ! temperature/salinity/potential density/ssh/depth at u/v point 
    592592     TYPE(POINT_SECTION) ::   k 
    593593      !!-------------------------------------------------------- 
     
    680680                  zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
    681681                  zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
    682                   zrhoi = interp(Kmm,k%I,k%J,jk,'V',CASTDP(rhd*rho0+rho0))  
     682                  zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0)  
    683683                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm)    ) * vmask(k%I,k%J,1)  
    684684               CASE(2,3)  
     
    686686                  zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
    687687                  zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
    688                   zrhoi = interp(Kmm,k%I,k%J,jk,'U',CASTDP(rhd*rho0+rho0))  
     688                  zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0)  
    689689                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    690690               END SELECT  
     
    794794     TYPE(POINT_SECTION) :: k  
    795795     INTEGER  :: jk,jseg,jclass                        ! dummy variables for looping on level/segment/classes   
    796      REAL(wp) :: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/ssh/potential density /depth at u/v point  
     796     REAL(dp) :: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/ssh/potential density /depth at u/v point  
    797797     !!-------------------------------------------------------------  
    798798  
     
    853853                 zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
    854854                 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
    855                  zrhoi = interp(Kmm,k%I,k%J,jk,'V',CASTDP(rhd*rho0+rho0)) 
     855                 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0) 
    856856 
    857857              CASE(2,3)  
     
    859859                 zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
    860860                 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
    861                  zrhoi = interp(Kmm,k%I,k%J,jk,'U',CASTDP(rhd*rho0+rho0))  
     861                 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0)  
    862862                 zsshn =  0.5*( ssh(k%I,k%J,Kmm)    + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    863863              END SELECT  
     
    987987     INTEGER               :: jclass             ! Dummy loop 
    988988     CHARACTER(len=2)      :: classe             ! Classname  
    989      REAL(wp)              :: zbnd1,zbnd2        ! Class bounds 
    990      REAL(wp)              :: zslope             ! section's slope coeff 
     989     REAL(dp)              :: zbnd1,zbnd2        ! Class bounds 
     990     REAL(dp)              :: zslope             ! section's slope coeff 
    991991     ! 
    992      REAL(wp), DIMENSION(nb_type_class)::   zsumclasses   ! 1D workspace  
     992     REAL(dp), DIMENSION(nb_type_class)::   zsumclasses   ! 1D workspace  
    993993     !!-------------------------------------------------------------  
    994994 
     
    11711171  CHARACTER(len=1), INTENT(IN)                 :: cd_point     ! type of point (U, V) 
    11721172  REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ptab         ! variable to compute at (ki, kj, kk ) 
    1173   REAL(wp)                                     :: interp       ! interpolated variable  
     1173  REAL(dp)                                     :: interp       ! interpolated variable  
    11741174 
    11751175  !*local declations 
    11761176  INTEGER :: ii1, ij1, ii2, ij2                                ! local integer 
    1177   REAL(wp):: ze3t, ze3, zwgt1, zwgt2, zbis, zdepu            ! local real 
    1178   REAL(wp):: zet1, zet2                                        ! weight for interpolation  
    1179   REAL(wp):: zdep1,zdep2                                       ! differences of depth 
    1180   REAL(wp):: zmsk                                              ! mask value 
     1177  REAL(dp):: ze3t, ze3, zwgt1, zwgt2, zbis, zdepu            ! local real 
     1178  REAL(dp):: zet1, zet2                                        ! weight for interpolation  
     1179  REAL(dp):: zdep1,zdep2                                       ! differences of depth 
     1180  REAL(dp):: zmsk                                              ! mask value 
    11811181  !!---------------------------------------------------------------------- 
    11821182 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diadetide.F90

    r14644 r15540  
    2222   LOGICAL, PUBLIC                               ::   lk_diadetide 
    2323   INTEGER                                       ::   ndiadetide 
    24    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:)     ::   tdiadetide 
     24   REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:)     ::   tdiadetide 
    2525 
    2626   PUBLIC ::   dia_detide_init, dia_detide 
     
    9292 
    9393      INTEGER, INTENT(in)          ::   kt 
    94       REAL(wp), DIMENSION(jpi,jpj) ::   zwght_2D 
    95       REAL(wp)                     ::   zwght, ztmp 
     94      REAL(dp), DIMENSION(jpi,jpj) ::   zwght_2D 
     95      REAL(dp)                     ::   zwght, ztmp 
    9696      INTEGER                      ::   jn 
    9797 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diahsb.F90

    r14219 r15540  
    4040   LOGICAL, PUBLIC ::   ln_diahsb   !: check the heat and salt budgets 
    4141 
    42    REAL(wp) ::   surf_tot              ! ocean surface 
    43    REAL(wp) ::   frc_t, frc_s, frc_v   ! global forcing trends 
    44    REAL(wp) ::   frc_wn_t, frc_wn_s    ! global forcing trends 
     42   REAL(dp) ::   surf_tot              ! ocean surface 
     43   REAL(dp) ::   frc_t, frc_s, frc_v   ! global forcing trends 
     44   REAL(dp) ::   frc_wn_t, frc_wn_s    ! global forcing trends 
    4545   ! 
    4646   REAL(dp), DIMENSION(:,:)  , ALLOCATABLE ::   surf  
    4747   REAL(dp), DIMENSION(:,:)  , ALLOCATABLE  :: surf_ini 
    48    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE :: ssh_ini                            ! 
    49    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE ::   ssh_hc_loc_ini, ssh_sc_loc_ini   ! 
     48   REAL(dp), DIMENSION(:,:)  , ALLOCATABLE :: ssh_ini                            ! 
     49   REAL(dp), DIMENSION(:,:)  , ALLOCATABLE ::   ssh_hc_loc_ini, ssh_sc_loc_ini   ! 
    5050   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE  :: sc_loc_ini, e3t_ini               ! 
    51    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   hc_loc_ini                       ! 
    52    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   tmask_ini 
     51   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE ::   hc_loc_ini                       ! 
     52   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE ::   tmask_ini 
    5353 
    5454   !! * Substitutions 
     
    7878      REAL(wp)   ::   zdiff_hc    , zdiff_sc      ! heat and salt content variations 
    7979      REAL(wp)   ::   zdiff_hc1   , zdiff_sc1     !  -         -     -        -  
    80       REAL(wp)   ::   zdiff_v1          ! volume variation 
     80      REAL(dp)   ::   zdiff_v1          ! volume variation 
    8181      REAL(dp)   ::   zdiff_v2 
    8282      REAL(wp)   ::   zerr_hc1    , zerr_sc1      ! heat and salt content misfit 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diahth.F90

    r14219 r15540  
    3131    
    3232   ! note: following variables should move to local variables once iom_put is always used  
    33    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hth    !: depth of the max vertical temperature gradient [m] 
    34    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd20   !: depth of 20 C isotherm                         [m] 
    35    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd26   !: depth of 26 C isotherm                         [m] 
    36    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd28   !: depth of 28 C isotherm                         [m] 
    37    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc3   !: heat content of first 300 m                    [W] 
    38    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc7   !: heat content of first 700 m                    [W] 
    39    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc20  !: heat content of first 2000 m                   [W] 
     33   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hth    !: depth of the max vertical temperature gradient [m] 
     34   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd20   !: depth of 20 C isotherm                         [m] 
     35   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd26   !: depth of 26 C isotherm                         [m] 
     36   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hd28   !: depth of 28 C isotherm                         [m] 
     37   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc3   !: heat content of first 300 m                    [W] 
     38   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc7   !: heat content of first 700 m                    [W] 
     39   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   htc20  !: heat content of first 2000 m                   [W] 
    4040 
    4141 
     
    262262         IF( iom_use ('hc300') ) THEN   
    263263            zzdep = 300. 
    264             CALL  dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc3 ) 
     264            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 ) 
    265265            CALL iom_put( 'hc300', rho0_rcp * htc3 )  ! vertically integrated heat content (J/m2) 
    266266         ENDIF 
     
    271271         IF( iom_use ('hc700') ) THEN   
    272272            zzdep = 700. 
    273             CALL  dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc7 ) 
     273            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 ) 
    274274            CALL iom_put( 'hc700', rho0_rcp * htc7 )  ! vertically integrated heat content (J/m2) 
    275275   
     
    281281         IF( iom_use ('hc2000') ) THEN   
    282282            zzdep = 2000. 
    283             CALL  dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc20 ) 
     283            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 ) 
    284284            CALL iom_put( 'hc2000', rho0_rcp * htc20 )  ! vertically integrated heat content (J/m2)   
    285285         ENDIF 
     
    296296      INTEGER , INTENT(in) :: Kmm      ! ocean time level index 
    297297      REAL(wp), INTENT(in) :: ptem 
    298       REAL(wp), DIMENSION(jpi,jpj), INTENT(out) :: pdept      
     298      REAL(dp), DIMENSION(jpi,jpj), INTENT(out) :: pdept      
    299299      ! 
    300300      INTEGER  :: ji, jj, jk, iid 
    301       REAL(wp) :: zztmp, zzdep 
     301      REAL(dp) :: zztmp, zzdep 
    302302      INTEGER, DIMENSION(jpi,jpj) :: iktem 
    303303       
     
    337337      INTEGER , INTENT(in) :: Kmm      ! ocean time level index 
    338338      REAL(wp), INTENT(in) :: pdep     ! depth over the heat content 
    339       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt    
    340       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: phtc   
     339      REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt    
     340      REAL(dp), DIMENSION(jpi,jpj), INTENT(inout) :: phtc   
    341341      ! 
    342342      INTEGER  :: ji, jj, jk, ik 
    343       REAL(wp), DIMENSION(jpi,jpj) :: zthick 
     343      REAL(dp), DIMENSION(jpi,jpj) :: zthick 
    344344      INTEGER , DIMENSION(jpi,jpj) :: ilevel 
    345345 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diamlr.F90

    r14644 r15540  
    409409      !! 
    410410      !!---------------------------------------------------------------------- 
    411       REAL(wp), DIMENSION(jpi,jpj) ::   zadatrj2d 
     411      REAL(dp), DIMENSION(jpi,jpj) ::   zadatrj2d 
    412412      !!---------------------------------------------------------------------- 
    413413 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/dianam.F90

    r14219 r15540  
    6363      REAL(dp)           ::   zsec1, zsec2                     ! not used 
    6464      REAL(dp)           ::          zjul                      ! temporary scalars 
    65       REAL(wp)           ::   zdrun                      ! temporary scalars 
     65      REAL(dp)           ::   zdrun                      ! temporary scalars 
    6666      !!---------------------------------------------------------------------- 
    6767 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diaptr.F90

    r14986 r15540  
    4444   PUBLIC   dia_ptr_hst    ! called from tra_ldf/tra_adv routines 
    4545 
    46    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_adv, hstr_ldf, hstr_eiv   !: Heat/Salt TRansports(adv, diff, Bolus.) 
    47    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_ove, hstr_btr, hstr_vtr   !: heat Salt TRansports(overturn, baro, merional) 
    48    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   pvtr_int, pzon_int             !: Other zonal integrals 
     46   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_adv, hstr_ldf, hstr_eiv   !: Heat/Salt TRansports(adv, diff, Bolus.) 
     47   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_ove, hstr_btr, hstr_vtr   !: heat Salt TRansports(overturn, baro, merional) 
     48   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   pvtr_int, pzon_int             !: Other zonal integrals 
    4949 
    5050   LOGICAL, PUBLIC    ::   l_diaptr       !: tracers  trend flag 
     
    5252   INTEGER, PARAMETER ::   jp_vtr = 4 
    5353 
    54    REAL(wp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
    55    REAL(wp) ::   rc_pwatt = 1.e-15_wp  ! conversion from W    to PW (further x rho0 x Cp) 
    56    REAL(wp) ::   rc_ggram = 1.e-9_wp   ! conversion from g    to Gg  (further x rho0) 
    57  
    58    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk   ! T-point basin interior masks 
    59    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk34 ! mask out Southern Ocean (=0 south of 34°S) 
     54   REAL(dp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
     55   REAL(dp) ::   rc_pwatt = 1.e-15_wp  ! conversion from W    to PW (further x rho0 x Cp) 
     56   REAL(dp) ::   rc_ggram = 1.e-9_wp   ! conversion from g    to Gg  (further x rho0) 
     57 
     58   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk   ! T-point basin interior masks 
     59   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk34 ! mask out Southern Ocean (=0 south of 34°S) 
    6060 
    6161   LOGICAL ::   ll_init = .TRUE.        !: tracers  trend flag 
     
    6363   !! * Substitutions 
    6464#  include "do_loop_substitute.h90" 
     65#  include "single_precision_substitute.h90" 
    6566#  include "domzgr_substitute.h90" 
    6667   !!---------------------------------------------------------------------- 
     
    113114      ! 
    114115      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    115       REAL(wp), DIMENSION(jpi,jpj)     ::  z2d   ! 2D workspace 
    116       REAL(wp), DIMENSION(jpj)      ::  zvsum, ztsum, zssum   ! 1D workspace 
     116      REAL(dp), DIMENSION(jpi,jpj)     ::  z2d   ! 2D workspace 
     117      REAL(dp), DIMENSION(jpj)      ::  zvsum, ztsum, zssum   ! 1D workspace 
    117118      ! 
    118119      !overturning calculation 
    119       REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
    120       REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   zt_jk, zs_jk        ! i-mean T and S, j-Stream-Function 
    121  
    122       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   z4d1, z4d2 
    123       REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   z3dtr 
     120      REAL(dp), DIMENSION(:,:,:  ), ALLOCATABLE ::   sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
     121      REAL(dp), DIMENSION(:,:,:  ), ALLOCATABLE ::   zt_jk, zs_jk        ! i-mean T and S, j-Stream-Function 
     122 
     123      REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE ::   z4d1, z4d2 
     124      REAL(dp), DIMENSION(:,:,:  ), ALLOCATABLE ::   z3dtr 
    124125      !!---------------------------------------------------------------------- 
    125126      ! 
     
    349350      INTEGER                     , INTENT(in)           :: Kmm          ! time level index 
    350351      REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(in), OPTIONAL :: pvtr         ! j-effective transport 
    351       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: zmask        ! 3D workspace 
    352       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE          :: zts          ! 4D workspace 
    353       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: sjk, v_msf   ! Zonal sum: i-k surface area, j-effective transport 
    354       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S) 
    355       REAL(wp)                                           :: zsfc, zvfc   ! i-k surface area 
     352      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE            :: zmask        ! 3D workspace 
     353      REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE          :: zts          ! 4D workspace 
     354      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE            :: sjk, v_msf   ! Zonal sum: i-k surface area, j-effective transport 
     355      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE            :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S) 
     356      REAL(dp)                                           :: zsfc, zvfc   ! i-k surface area 
    356357      INTEGER  ::   ji, jj, jk, jn                                       ! dummy loop indices 
    357358      !!---------------------------------------------------------------------- 
     
    363364 
    364365            DO jn = 1, nbasin 
    365                v_msf(:,:,jn) = ptr_sjk( pvtr(:,:,:), btmsk34(:,:,jn) ) 
     366               v_msf(:,:,jn) =ptr_sjk( CASTDP(pvtr(:,:,:)), btmsk34(:,:,jn) ) 
    366367            ENDDO 
    367368 
     
    538539      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
    539540      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf'/'eiv' 
    540       REAL(wp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: pvflx ! 3D input array of advection/diffusion 
    541       REAL(wp), DIMENSION(A1Dj(nn_hls),nbasin)                 :: zsj   ! 
     541      REAL(dp), DIMENSION(A2D(nn_hls),jpk)    , INTENT(in)   :: pvflx ! 3D input array of advection/diffusion 
     542      REAL(dp), DIMENSION(A1Dj(nn_hls),nbasin)                 :: zsj   ! 
    542543      INTEGER                                        :: jn    ! 
    543544 
     
    574575      !! ** Action  : phstr 
    575576      !!---------------------------------------------------------------------- 
    576       REAL(wp), DIMENSION(jpj,nbasin) , INTENT(inout)         ::  phstr  ! 
    577       REAL(wp), DIMENSION(A1Dj(nn_hls),nbasin), INTENT(in)            ::  pva    ! 
     577      REAL(dp), DIMENSION(jpj,nbasin) , INTENT(inout)         ::  phstr  ! 
     578      REAL(dp), DIMENSION(A1Dj(nn_hls),nbasin), INTENT(in)            ::  pva    ! 
    578579      INTEGER                                               ::  jj 
    579580#if ! defined key_mpi_off 
    580581      INTEGER, DIMENSION(1)           ::  ish1d 
    581582      INTEGER, DIMENSION(2)           ::  ish2d 
    582       REAL(wp), DIMENSION(jpj*nbasin) ::  zwork 
     583      REAL(dp), DIMENSION(jpj*nbasin) ::  zwork 
    583584#endif 
    584585 
     
    610611      !! ** Action  : phstr 
    611612      !!---------------------------------------------------------------------- 
    612       REAL(wp), DIMENSION(jpj,jpk,nbasin) , INTENT(inout)     ::  phstr  ! 
    613       REAL(wp), DIMENSION(A1Dj(nn_hls),jpk,nbasin), INTENT(in)        ::  pva    ! 
     613      REAL(dp), DIMENSION(jpj,jpk,nbasin) , INTENT(inout)     ::  phstr  ! 
     614      REAL(dp), DIMENSION(A1Dj(nn_hls),jpk,nbasin), INTENT(in)        ::  pva    ! 
    614615      INTEGER                                               ::  jj, jk 
    615616#if ! defined key_mpi_off 
    616617      INTEGER, DIMENSION(1)              ::  ish1d 
    617618      INTEGER, DIMENSION(3)              ::  ish3d 
    618       REAL(wp), DIMENSION(jpj*jpk*nbasin)  ::  zwork 
     619      REAL(dp), DIMENSION(jpj*jpk*nbasin)  ::  zwork 
    619620#endif 
    620621 
     
    675676      !! ** Action  : - p_fval: i-k-mean poleward flux of pvflx 
    676677      !!---------------------------------------------------------------------- 
    677       REAL(wp), INTENT(in), DIMENSION(A2D(nn_hls),jpk)  ::   pvflx  ! mask flux array at V-point 
    678       REAL(wp), INTENT(in), DIMENSION(jpi,jpj)  ::   pmsk   ! Optional 2D basin mask 
     678      REAL(dp), INTENT(in), DIMENSION(A2D(nn_hls),jpk)  ::   pvflx  ! mask flux array at V-point 
     679      REAL(dp), INTENT(in), DIMENSION(jpi,jpj)  ::   pmsk   ! Optional 2D basin mask 
    679680      ! 
    680681      INTEGER                  ::   ji, jj, jk   ! dummy loop arguments 
    681       REAL(wp), DIMENSION(A1Dj(nn_hls)) :: p_fval  ! function value 
     682      REAL(dp), DIMENSION(A1Dj(nn_hls)) :: p_fval  ! function value 
    682683      !!-------------------------------------------------------------------- 
    683684      ! 
     
    704705      ! 
    705706      INTEGER                  ::   ji,jj       ! dummy loop arguments 
    706       REAL(wp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value 
     707      REAL(dp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value 
    707708      !!-------------------------------------------------------------------- 
    708709      ! 
     
    723724      !! ** Action  : - p_fval: j-cumulated sum of pva 
    724725      !!---------------------------------------------------------------------- 
    725       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj)  ::   pva   ! mask flux array at V-point 
     726      REAL(dp) , INTENT(in), DIMENSION(jpi,jpj)  ::   pva   ! mask flux array at V-point 
    726727      ! 
    727728      INTEGER                  ::   ji,jj,jc       ! dummy loop arguments 
    728729      INTEGER                  ::   ijpj        ! ??? 
    729       REAL(wp), DIMENSION(jpi,jpj) :: p_fval ! function value 
     730      REAL(dp), DIMENSION(jpi,jpj) :: p_fval ! function value 
    730731      !!-------------------------------------------------------------------- 
    731732      ! 
     
    754755      !! 
    755756      IMPLICIT none 
    756       REAL(wp) , INTENT(in), DIMENSION(A2D(nn_hls),jpk) ::   pta    ! mask flux array at V-point 
    757       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) ::   pmsk   ! Optional 2D basin mask 
     757      REAL(dp) , INTENT(in), DIMENSION(A2D(nn_hls),jpk) ::   pta    ! mask flux array at V-point 
     758      REAL(dp) , INTENT(in), DIMENSION(jpi,jpj) ::   pmsk   ! Optional 2D basin mask 
    758759      !! 
    759760      INTEGER                           :: ji, jj, jk ! dummy loop arguments 
    760       REAL(wp), DIMENSION(A1Dj(nn_hls),jpk) :: p_fval     ! return function value 
     761      REAL(dp), DIMENSION(A1Dj(nn_hls),jpk) :: p_fval     ! return function value 
    761762      !!-------------------------------------------------------------------- 
    762763      ! 
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diawri.F90

    r14986 r15540  
    123123      REAL(wp)::   zztmp2, zztmpy   !   -      - 
    124124      REAL(wp)::   ze3 
    125       REAL(wp), DIMENSION(jpi,jpj)     ::   z2d   ! 2D workspace 
     125      REAL(dp), DIMENSION(jpi,jpj)     ::   z2d   ! 2D workspace 
    126126      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z3d   ! 3D workspace 
    127127      !!---------------------------------------------------------------------- 
     
    10921092      !! 
    10931093      INTEGER :: inum, jk 
    1094       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t, zgdept       ! 3D workspace for qco substitution 
     1094      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ze3t, zgdept       ! 3D workspace for qco substitution 
    10951095      !!---------------------------------------------------------------------- 
    10961096      !  
Note: See TracChangeset for help on using the changeset viewer.