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 14219 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynatf.F90 – NEMO

Ignore:
Timestamp:
2020-12-18T18:52:57+01:00 (4 years ago)
Author:
mcastril
Message:

Add Mixed Precision support by Oriol Tintó

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynatf.F90

    r14200 r14219  
    6060   PUBLIC    dyn_atf   ! routine called by step.F90 
    6161 
     62#  include "single_precision_substitute.h90" 
    6263#if defined key_qco   ||   defined key_linssh 
    6364   !!---------------------------------------------------------------------- 
     
    7172      INTEGER                             , INTENT(in   ) :: kt               ! ocean time-step index 
    7273      INTEGER                             , INTENT(in   ) :: Kbb, Kmm, Kaa    ! before and after time level indices 
    73       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv         ! velocities to be time filtered 
    74       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t, pe3u, pe3v ! scale factors to be time filtered 
     74      REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv         ! velocities to be time filtered 
     75      REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t 
     76      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3u, pe3v ! scale factors to be time filtered 
    7577 
    7678      WRITE(*,*) 'dyn_atf: You should not have seen this print! error?', kt 
     
    116118      INTEGER                             , INTENT(in   ) :: kt               ! ocean time-step index 
    117119      INTEGER                             , INTENT(in   ) :: Kbb, Kmm, Kaa    ! before and after time level indices 
    118       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv         ! velocities to be time filtered 
    119       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t, pe3u, pe3v ! scale factors to be time filtered 
     120      REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv         ! velocities to be time filtered 
     121      REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t 
     122      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3u, pe3v ! scale factors to be time filtered 
    120123      ! 
    121124      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    122       REAL(wp) ::   zue3a, zue3n, zue3b, zcoef    ! local scalars 
     125      REAL(dp)  :: zcoef 
     126      REAL(wp) ::   zue3a, zue3n, zue3b    ! local scalars 
    123127      REAL(wp) ::   zve3a, zve3n, zve3b, z1_2dt   !   -      - 
    124128      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zue, zve, zwfld 
    125129      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zutau, zvtau 
    126       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ze3t_f, ze3u_f, ze3v_f, zua, zva 
     130      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) ::   ze3t_f 
     131      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) ::   zua, zva 
     132      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ze3u_f, ze3v_f  
    127133      !!---------------------------------------------------------------------- 
    128134      ! 
     
    229235            !     to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 
    230236            !     ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 
    231             IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, rn_atfp * rn_Dt ) 
     237            IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, CASTWP(rn_atfp * rn_Dt) ) 
    232238            ! 
    233239            pe3t(:,:,1:jpkm1,Kmm) = ze3t_f(:,:,1:jpkm1)        ! filtered scale factor at T-points 
     
    235241            IF( ln_dynadv_vec ) THEN      ! Asselin filter applied on velocity 
    236242               ! Before filtered scale factor at (u/v)-points 
    237                CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3u(:,:,:,Kmm), 'U' ) 
    238                CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3v(:,:,:,Kmm), 'V' ) 
     243               CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), pe3u(:,:,:,Kmm), 'U' ) 
     244               CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), pe3v(:,:,:,Kmm), 'V' ) 
    239245               DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    240246                  puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
     
    246252               ALLOCATE( ze3u_f(jpi,jpj,jpk) , ze3v_f(jpi,jpj,jpk) ) 
    247253               ! Now filtered scale factor at (u/v)-points stored in ze3u_f, ze3v_f 
    248                CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3u_f, 'U' ) 
    249                CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3v_f, 'V' ) 
     254               CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), ze3u_f, 'U' ) 
     255               CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), ze3v_f, 'V' ) 
    250256               DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    251257                  zue3a = pe3u(ji,jj,jk,Kaa) * puu(ji,jj,jk,Kaa) 
     
    328334         IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 
    329335            ALLOCATE(zutau(jpi,jpj)) 
     336            zutau(:,:) = 0._wp 
    330337            DO_2D( 0, 0, 0, 0 ) 
    331338               jk = miku(ji,jj) 
     
    342349         IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 
    343350            ALLOCATE(zvtau(jpi,jpj)) 
     351            zvtau(:,:) = 0._wp 
    344352            DO_2D( 0, 0, 0, 0 ) 
    345353               jk = mikv(ji,jj) 
     
    353361      ENDIF 
    354362      ! 
    355       IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab3d_1=puu(:,:,:,Kaa), clinfo1=' nxt  - puu(:,:,:,Kaa): ', mask1=umask,   & 
    356          &                                  tab3d_2=pvv(:,:,:,Kaa), clinfo2=' pvv(:,:,:,Kaa): '       , mask2=vmask ) 
    357       ! 
     363      IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Kaa)), clinfo1=' nxt  - puu(:,:,:,Kaa): ', mask1=umask,   & 
     364         &                                  tab3d_2=CASTWP(pvv(:,:,:,Kaa)), clinfo2=' pvv(:,:,:,Kaa): '       , mask2=vmask ) 
     365      !  
    358366      IF( ln_dynspg_ts )   DEALLOCATE( zue, zve ) 
    359367      IF( l_trddyn     )   DEALLOCATE( zua, zva ) 
Note: See TracChangeset for help on using the changeset viewer.