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/ISF/isfcpl.F90 – NEMO

Ignore:
Timestamp:
2021-11-26T12:27:56+01:00 (2 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/ISF/isfcpl.F90

    r14644 r15540  
    3939      INTEGER ::   jj     ! j global 
    4040      INTEGER ::   kk     ! k level 
    41       REAL(wp)::   dvol   ! volume increment 
    42       REAL(wp)::   dsal   ! salt increment 
    43       REAL(wp)::   dtem   ! heat increment 
    44       REAL(wp)::   lon    ! lon 
    45       REAL(wp)::   lat    ! lat 
     41      REAL(dp)::   dvol   ! volume increment 
     42      REAL(dp)::   dsal   ! salt increment 
     43      REAL(dp)::   dtem   ! heat increment 
     44      REAL(dp)::   lon    ! lon 
     45      REAL(dp)::   lat    ! lat 
    4646      INTEGER ::   ngb    ! 0/1 (valid location or not (ie on halo or no neigbourg)) 
    4747   END TYPE 
     
    138138      !!---------------------------------------------------------------------- 
    139139      INTEGER :: jk                               ! loop index 
    140       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t, ze3u, ze3v, zgdepw  ! for qco substitution 
     140      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ze3t, ze3u, ze3v, zgdepw  ! for qco substitution 
    141141      !!---------------------------------------------------------------------- 
    142142      ! 
     
    174174      INTEGER :: jip1, jim1, jjp1, jjm1 
    175175      !! 
    176       REAL(wp):: zsummsk 
    177       REAL(wp), DIMENSION(jpi,jpj) :: zdssmask, zssmask0, zssmask_b, zssh 
     176      REAL(dp):: zsummsk 
     177      REAL(dp), DIMENSION(jpi,jpj) :: zdssmask, zssmask0, zssmask_b, zssh 
    178178      !!---------------------------------------------------------------------- 
    179179      ! 
     
    216216      ssh(:,:,Kbb) = ssh(:,:,Kmm) 
    217217      ! 
    218       IF ( ln_isfdebug ) CALL debug('isfcpl_ssh: sshn',CASTWP(ssh(:,:,Kmm))) 
     218      IF ( ln_isfdebug ) CALL debug('isfcpl_ssh: sshn',ssh(:,:,Kmm)) 
    219219      ! 
    220220      ! recompute the vertical scale factor, depth and water thickness 
     
    247247      INTEGER, INTENT(in) :: Kmm    ! ocean time level index 
    248248      !!---------------------------------------------------------------------- 
    249       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask_b 
     249      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ztmask_b 
    250250      !REAL(wp), DIMENSION(:,:,:  ), INTENT(in ) :: pdepw_b                         !! depth w before 
    251251      !! 
     
    253253      INTEGER :: jip1, jim1, jjp1, jjm1, jkp1, jkm1 
    254254      !! 
    255       REAL(wp):: zsummsk 
    256       REAL(wp):: zdz, zdzm1, zdzp1 
    257       !! 
    258       REAL(wp), DIMENSION(jpi,jpj)          :: zdmask 
    259       REAL(wp), DIMENSION(jpi,jpj,jpk)      :: ztmask0, zwmaskn 
    260       REAL(wp), DIMENSION(jpi,jpj,jpk)      :: ztmask1, zwmaskb, ztmp3d 
    261       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts0 
     255      REAL(dp):: zsummsk 
     256      REAL(dp):: zdz, zdzm1, zdzp1 
     257      !! 
     258      REAL(dp), DIMENSION(jpi,jpj)          :: zdmask 
     259      REAL(dp), DIMENSION(jpi,jpj,jpk)      :: ztmask0, zwmaskn 
     260      REAL(dp), DIMENSION(jpi,jpj,jpk)      :: ztmask1, zwmaskb, ztmp3d 
     261      REAL(dp), DIMENSION(jpi,jpj,jpk,jpts) :: zts0 
    262262      !!---------------------------------------------------------------------- 
    263263      ! 
     
    404404      INTEGER :: ikb, ikt 
    405405      !! 
    406       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zqvolb, zqvoln  ! vol flux div.         before/after coupling 
    407       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3u_b, ze3v_b  ! vertical scale factor before/after coupling 
    408       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask_b        ! mask                  before       coupling 
     406      REAL(dp), DIMENSION(jpi,jpj,jpk) :: zqvolb, zqvoln  ! vol flux div.         before/after coupling 
     407      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ze3u_b, ze3v_b  ! vertical scale factor before/after coupling 
     408      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ztmask_b        ! mask                  before       coupling 
    409409      !!---------------------------------------------------------------------- 
    410410      ! 
     
    506506      INTEGER, DIMENSION(jpnij) :: nisfl              ! local  number of cell concerned by the wet->dry case 
    507507      ! 
    508       REAL(wp) ::   z1_sum, z1_rdtiscpl 
    509       REAL(wp) ::   zdtem, zdsal, zdvol, zratio       ! tem, sal, vol increment 
    510       REAL(wp) ::   zlon , zlat                       ! target location 
    511       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask_b    ! mask before 
    512       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t_b      ! scale factor before 
    513       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zt_b      ! scale factor before 
    514       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zs_b      ! scale factor before 
     508      REAL(dp) ::   z1_sum, z1_rdtiscpl 
     509      REAL(dp) ::   zdtem, zdsal, zdvol, zratio       ! tem, sal, vol increment 
     510      REAL(dp) ::   zlon , zlat                       ! target location 
     511      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ztmask_b    ! mask before 
     512      REAL(dp), DIMENSION(jpi,jpj,jpk) :: ze3t_b      ! scale factor before 
     513      REAL(dp), DIMENSION(jpi,jpj,jpk) :: zt_b      ! scale factor before 
     514      REAL(dp), DIMENSION(jpi,jpj,jpk) :: zs_b      ! scale factor before 
    515515      !!---------------------------------------------------------------------- 
    516516 
     
    630630                  ELSE IF ( tmask(ji,jj,jk+1) == 1._wp ) THEN 
    631631                     ! spread correction amoung neigbourg wet cells (vertical direction) 
    632                      CALL update_isfpts(zisfpts, jisf, ji  , jj  , jk+1, zdvol, zdsal, zdtem, 1.0_wp, 0) 
     632                     CALL update_isfpts(zisfpts, jisf, ji  , jj  , jk+1, zdvol, zdsal, zdtem, 1.0_dp, 0) 
    633633                  ELSE 
    634634                     ! need to find where to put correction in later on 
    635                      CALL update_isfpts(zisfpts, jisf, ji  , jj  , jk  , zdvol, zdsal, zdtem, 1.0_wp, 1) 
     635                     CALL update_isfpts(zisfpts, jisf, ji  , jj  , jk  , zdvol, zdsal, zdtem, 1.0_dp, 1) 
    636636                  END IF 
    637637               END IF 
     
    721721      INTEGER,      INTENT(in   ), OPTIONAL :: kfind                       ! 0  target cell already found 
    722722      !                                                                    ! 1  target to be determined 
    723       REAL(wp),     INTENT(in   )           :: pdvol, pdsal, pdtem, pratio ! vol/sal/tem increment 
     723      REAL(dp),     INTENT(in   )           :: pdvol, pdsal, pdtem, pratio ! vol/sal/tem increment 
    724724      !                                                                    ! and ratio in case increment span over multiple cells. 
    725725      !!---------------------------------------------------------------------- 
     
    752752      !!---------------------------------------------------------------------- 
    753753      INTEGER , INTENT(in) :: ki, kj, kk, kfind        ! target point indices 
    754       REAL(wp), INTENT(in) :: plon, plat               ! target point lon/lat 
    755       REAL(wp), INTENT(in) :: pvolinc, pteminc,psalinc ! correction increment for vol/temp/salt 
     754      REAL(dp), INTENT(in) :: plon, plat               ! target point lon/lat 
     755      REAL(dp), INTENT(in) :: pvolinc, pteminc,psalinc ! correction increment for vol/temp/salt 
    756756      !!---------------------------------------------------------------------- 
    757757      INTEGER :: jj, ji, iig, ijg 
     
    760760      ! define global indice of correction location 
    761761      iig = ki ; ijg = kj 
    762       IF ( kfind == 1 ) CALL dom_ngb( plon, plat, iig, ijg,'T', kk) 
     762      IF ( kfind == 1 ) CALL dom_ngb( CASTSP(plon), CASTSP(plat), iig, ijg,'T', kk) 
    763763      ! 
    764764      ! fill the correction array 
Note: See TracChangeset for help on using the changeset viewer.