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/TRA/trabbl.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/TRA/trabbl.F90

    r14986 r15540  
    6464   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   mgrhu    , mgrhv       ! = +/-1, sign of grad(H) in u-(v-)direction (PUBLIC for TAM) 
    6565   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   ahu_bbl_0, ahv_bbl_0   ! diffusive bbl flux coefficients at u and v-points 
    66    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   e3u_bbl_0, e3v_bbl_0   ! thichness of the bbl (e3) at u and v-points (PUBLIC for TAM) 
     66   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   e3u_bbl_0, e3v_bbl_0   ! thichness of the bbl (e3) at u and v-points (PUBLIC for TAM) 
    6767 
    6868   !! * Substitutions 
     
    108108      ! 
    109109      INTEGER  ::   ji, jj, jk   ! Dummy loop indices 
    110       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     110      REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
    111111      !!---------------------------------------------------------------------- 
    112112      ! 
     
    123123      IF( nn_bbl_ldf == 1 ) THEN                    !* Diffusive bbl 
    124124         ! 
    125          CALL tra_bbl_dif( CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, Kmm ) 
     125         CALL tra_bbl_dif( pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, Kmm ) 
    126126         IF( sn_cfctl%l_prtctl )  & 
    127          CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' bbl_ldf  - Ta: ', mask1=tmask, & 
    128             &          tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     127         CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_ldf  - Ta: ', mask1=tmask, & 
     128            &          tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    129129         CALL iom_put( "ahu_bbl", ahu_bbl )   ! bbl diffusive flux i-coef 
    130130         CALL iom_put( "ahv_bbl", ahv_bbl )   ! bbl diffusive flux j-coef 
     
    134134      IF( nn_bbl_adv /= 0 ) THEN                    !* Advective bbl 
    135135         ! 
    136 CALL tra_bbl_adv( CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, Kmm ) 
     136CALL tra_bbl_adv( pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, Kmm ) 
    137137         IF(sn_cfctl%l_prtctl)   & 
    138          CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' bbl_adv  - Ta: ', mask1=tmask, & 
    139             &          tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     138         CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_adv  - Ta: ', mask1=tmask, & 
     139            &          tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    140140         CALL iom_put( "uoce_bbl", utr_bbl )  ! bbl i-transport 
    141141         CALL iom_put( "voce_bbl", vtr_bbl )  ! bbl j-transport 
     
    178178      !!---------------------------------------------------------------------- 
    179179      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    180       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt     ! before and now tracer fields 
     180      REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt     ! before and now tracer fields 
    181181      REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs ! tracer trend 
    182182      INTEGER                              , INTENT(in   ) ::   Kmm    ! time level indices 
     
    184184      INTEGER  ::   ji, jj, jn   ! dummy loop indices 
    185185      INTEGER  ::   ik           ! local integers 
    186       REAL(wp) ::   zbtr         ! local scalars 
     186      REAL(dp) ::   zbtr         ! local scalars 
    187187      REAL(wp), DIMENSION(A2D(nn_hls)) ::   zptb   ! workspace 
    188188      !!---------------------------------------------------------------------- 
     
    227227      !!---------------------------------------------------------------------- 
    228228      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    229       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt     ! before and now tracer fields 
     229      REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt     ! before and now tracer fields 
    230230      REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs ! tracer trend 
    231231      INTEGER                              , INTENT(in   ) ::   Kmm    ! time level indices 
     
    234234      INTEGER  ::   iis , iid , ijs , ijd    ! local integers 
    235235      INTEGER  ::   ikus, ikud, ikvs, ikvd   !   -       - 
    236       REAL(wp) ::   zbtr, ztra               ! local scalars 
    237       REAL(wp) ::   zu_bbl, zv_bbl           !   -      - 
     236      REAL(dp) ::   zbtr, ztra               ! local scalars 
     237      REAL(dp) ::   zu_bbl, zv_bbl           !   -      - 
    238238      !!---------------------------------------------------------------------- 
    239239      !                                                          ! =========== 
     
    328328      REAL(wp) ::   za, zb, zgdrho            ! local scalars 
    329329      REAL(wp) ::   zsign, zsigna, zgbbl      !   -      - 
    330       REAL(wp), DIMENSION(A2D(nn_hls),jpts)   :: zts, zab         ! 3D workspace 
     330      REAL(wp), DIMENSION(A2D(nn_hls),jpts)    :: zts! 3D workspace 
     331      REAL(dp), DIMENSION(A2D(nn_hls),jpts)    :: zab! 3D workspace 
    331332      REAL(wp), DIMENSION(A2D(nn_hls))        :: zub, zvb, zdep   ! 2D workspace 
    332333      !!---------------------------------------------------------------------- 
     
    350351      END_2D 
    351352      ! 
    352       CALL eos_rab( zts, zdep, zab, Kmm ) 
     353      CALL eos_rab( CASTDP(zts), CASTDP(zdep), zab, Kmm ) 
    353354      ! 
    354355      !                                   !-------------------! 
     
    363364               &      - zb * ( zts(ji+1,jj,jp_sal) - zts(ji,jj,jp_sal) )  ) * umask(ji,jj,1) 
    364365            ! 
    365             zsign  = SIGN(  0.5_wp, CASTWP(-zgdrho * REAL( mgrhu(ji,jj)) )  )    ! sign of ( i-gradient * i-slope ) 
     366            zsign  = SIGN(  0.5_wp, -zgdrho * REAL( mgrhu(ji,jj))  )    ! sign of ( i-gradient * i-slope ) 
    366367            ahu_bbl(ji,jj) = ( 0.5 - zsign ) * ahu_bbl_0(ji,jj)       ! masked diffusive flux coeff. 
    367368            ! 
     
    373374               &      - zb * ( zts(ji,jj+1,jp_sal) - zts(ji,jj,jp_sal) )  ) * vmask(ji,jj,1) 
    374375            ! 
    375             zsign = SIGN(  0.5_wp, CASTWP(-zgdrho * REAL( mgrhv(ji,jj)) )  )     ! sign of ( j-gradient * j-slope ) 
     376            zsign = SIGN(  0.5_wp, -zgdrho * REAL( mgrhv(ji,jj))  )     ! sign of ( j-gradient * j-slope ) 
    376377            ahv_bbl(ji,jj) = ( 0.5 - zsign ) * ahv_bbl_0(ji,jj) 
    377378         END_2D 
     
    393394                         - zb * ( zts(ji+1,jj,jp_sal) - zts(ji,jj,jp_sal) )  ) * umask(ji,jj,1) 
    394395               ! 
    395                zsign = SIGN(  0.5_wp, CASTWP(- zgdrho   * REAL( mgrhu(ji,jj)) )  )   ! sign of i-gradient * i-slope 
    396                zsigna= SIGN(  0.5_wp, CASTWP(zub(ji,jj) * REAL( mgrhu(ji,jj)) )  )   ! sign of u * i-slope 
     396               zsign = SIGN(  0.5_wp, - zgdrho   * REAL( mgrhu(ji,jj))  )   ! sign of i-gradient * i-slope 
     397               zsigna= SIGN(  0.5_wp, zub(ji,jj) * REAL( mgrhu(ji,jj))  )   ! sign of u * i-slope 
    397398               ! 
    398399               !                                                          ! bbl velocity 
     
    405406               zgdrho = (  za * ( zts(ji,jj+1,jp_tem) - zts(ji,jj,jp_tem) )    & 
    406407                  &      - zb * ( zts(ji,jj+1,jp_sal) - zts(ji,jj,jp_sal) )  ) * vmask(ji,jj,1) 
    407                zsign = SIGN(  0.5_wp, CASTWP(- zgdrho   * REAL( mgrhv(ji,jj)) )  )   ! sign of j-gradient * j-slope 
    408                zsigna= SIGN(  0.5_wp, CASTWP(zvb(ji,jj) * REAL( mgrhv(ji,jj)) )  )   ! sign of u * i-slope 
     408               zsign = SIGN(  0.5_wp, - zgdrho   * REAL( mgrhv(ji,jj))  )   ! sign of j-gradient * j-slope 
     409               zsigna= SIGN(  0.5_wp, zvb(ji,jj) * REAL( mgrhv(ji,jj))  )   ! sign of u * i-slope 
    409410               ! 
    410411               !                                                          ! bbl transport 
     
    469470      INTEGER ::   ji, jj                      ! dummy loop indices 
    470471      INTEGER ::   ii0, ii1, ij0, ij1, ios     ! local integer 
    471       REAL(wp), DIMENSION(jpi,jpj) ::   zmbku, zmbkv   ! workspace 
     472      REAL(dp), DIMENSION(jpi,jpj) ::   zmbku, zmbkv   ! workspace 
    472473      !! 
    473474      NAMELIST/nambbl/ ln_trabbl, nn_bbl_ldf, nn_bbl_adv, rn_ahtbbl, rn_gambbl 
Note: See TracChangeset for help on using the changeset viewer.