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/SBC/sbcdcy.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/SBC/sbcdcy.F90

    r13483 r15540  
    3030   INTEGER, PUBLIC ::   nday_qsr   !: day when parameters were computed 
    3131 
    32    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   raa , rbb  , rcc  , rab     ! diurnal cycle parameters 
    33    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rtmd, rscal   !    -      -       - 
    34    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rdawn_dcy, rdusk_dcy   !    -      -       - 
     32   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   raa , rbb  , rcc  , rab     ! diurnal cycle parameters 
     33   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rtmd, rscal   !    -      -       - 
     34   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rdawn_dcy, rdusk_dcy   !    -      -       - 
    3535 
    3636   PUBLIC   sbc_dcy        ! routine called by sbc 
     
    7373      !!---------------------------------------------------------------------- 
    7474      LOGICAL , OPTIONAL          , INTENT(in) ::   l_mask    ! use the routine for night mask computation 
    75       REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pqsrin    ! input daily QSR flux 
    76       REAL(wp), DIMENSION(jpi,jpj)             ::   zqsrout   ! output QSR flux with diurnal cycle 
     75      REAL(dp), DIMENSION(jpi,jpj), INTENT(in) ::   pqsrin    ! input daily QSR flux 
     76      REAL(dp), DIMENSION(jpi,jpj)             ::   zqsrout   ! output QSR flux with diurnal cycle 
    7777      !! 
    7878      INTEGER  ::   ji, jj                                       ! dummy loop indices 
    7979      INTEGER, DIMENSION(jpi,jpj) :: imask_night ! night mask 
    80       REAL(wp) ::   zlo, zup, zlousd, zupusd 
    81       REAL(wp) ::   ztmp, ztmp1, ztmp2 
    82       REAL(wp) ::   ztmpm, ztmpm1, ztmpm2 
     80      REAL(dp) ::   zlo, zup, zlousd, zupusd 
     81      REAL(dp) ::   ztmp, ztmp1, ztmp2 
     82      REAL(dp) ::   ztmpm, ztmpm1, ztmpm2 
    8383      !!--------------------------------------------------------------------- 
    8484      ! 
     
    163163      INTEGER  ::   ji, jj                                       ! dummy loop indices 
    164164      !INTEGER, DIMENSION(jpi,jpj) :: imask_night ! night mask 
    165       REAL(wp) ::   zdsws, zdecrad, ztx, zsin, zcos 
    166       REAL(wp) ::   ztmp, ztest 
     165      REAL(dp) ::   zdsws, zdecrad, ztx, zsin, zcos 
     166      REAL(dp) ::   ztmp, ztest 
    167167      !---------------------------statement functions------------------------ 
    168168      ! 
     
    236236               ELSE                                         ! day time in two parts 
    237237                  IF( (rdusk_dcy(ji,jj) + (1._wp - rdawn_dcy(ji,jj)) ) .ge. 0.001_wp ) THEN 
    238                      rscal(ji,jj) = fintegral(0._wp, rdusk_dcy(ji,jj), raa(ji,jj), rbb(ji,jj), rcc(ji,jj))   & 
    239                         &         + fintegral(rdawn_dcy(ji,jj), 1._wp, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 
     238                     rscal(ji,jj) = fintegral(0._dp, rdusk_dcy(ji,jj), raa(ji,jj), rbb(ji,jj), rcc(ji,jj))   & 
     239                        &         + fintegral(rdawn_dcy(ji,jj), 1._dp, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 
    240240                     rscal(ji,jj) = 1. / rscal(ji,jj) 
    241241                  ENDIF 
     
    243243            ELSE 
    244244               IF( raa(ji,jj) > rbb(ji,jj) ) THEN         ! 24h day 
    245                   rscal(ji,jj) = fintegral(0._wp, 1._wp, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 
     245                  rscal(ji,jj) = fintegral(0._dp, 1._dp, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 
    246246                  rscal(ji,jj) = 1._wp / rscal(ji,jj) 
    247247               ELSE                                          ! No day 
     
    260260 
    261261   FUNCTION fintegral( pt1, pt2, paaa, pbbb, pccc ) 
    262       REAL(wp), INTENT(in) :: pt1, pt2, paaa, pbbb, pccc 
    263       REAL(wp) :: fintegral 
     262      REAL(dp), INTENT(in) :: pt1, pt2, paaa, pbbb, pccc 
     263      REAL(dp) :: fintegral 
    264264      fintegral =   paaa * pt2 + 1._wp/(2._wp*rpi) * pbbb * SIN(pccc + 2._wp*rpi*pt2)   & 
    265265         &        - paaa * pt1 - 1._wp/(2._wp*rpi) * pbbb * SIN(pccc + 2._wp*rpi*pt1) 
Note: See TracChangeset for help on using the changeset viewer.