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 15263 – NEMO

Changeset 15263


Ignore:
Timestamp:
2021-09-16T11:39:12+02:00 (3 years ago)
Author:
hadcv
Message:

Add brackets to ice_dyn_rhg_evp (fixes SETTE results changing with nn_hls, and reproducibility failures with nn_hls = 2 and ln_nogather = T)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/ICE/icedyn_rhg_evp.F90

    r15062 r15263  
    280280 
    281281         ! Ocean currents at U-V points 
    282          v_oceU(ji,jj)   = 0.25_wp * ( v_oce(ji,jj) + v_oce(ji,jj-1) + v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) * umask(ji,jj,1) 
    283          u_oceV(ji,jj)   = 0.25_wp * ( u_oce(ji,jj) + u_oce(ji-1,jj) + u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) * vmask(ji,jj,1) 
     282         ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility) 
     283         v_oceU(ji,jj)   = 0.25_wp * ( (v_oce(ji,jj) + v_oce(ji,jj-1)) + (v_oce(ji+1,jj) + v_oce(ji+1,jj-1)) ) * umask(ji,jj,1) 
     284         u_oceV(ji,jj)   = 0.25_wp * ( (u_oce(ji,jj) + u_oce(ji-1,jj)) + (u_oce(ji,jj+1) + u_oce(ji-1,jj+1)) ) * vmask(ji,jj,1) 
    284285 
    285286         ! m/dt 
     
    393394 
    394395            ! divergence at T points (duplication to avoid communications) 
    395             zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   & 
    396                &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   & 
     396            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility) 
     397            zdiv  = ( (e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj))   & 
     398               &    + (e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1))   & 
    397399               &    ) * r1_e1e2t(ji,jj) 
    398400 
     
    442444 
    443445            ! P/delta at F points 
    444             zp_delf = 0.25_wp * ( zp_delt(ji,jj) + zp_delt(ji+1,jj) + zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1) ) 
     446            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility) 
     447            zp_delf = 0.25_wp * ( (zp_delt(ji,jj) + zp_delt(ji+1,jj)) + (zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1)) ) 
    445448 
    446449            ! stress at F points (zkt/=0 if landfast) 
     
    450453 
    451454         ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- ! 
     455         ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility) 
    452456         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    453457            !                   !--- U points 
    454             zfU(ji,jj) = 0.5_wp * ( ( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             & 
     458            zfU(ji,jj) = 0.5_wp * ( (( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             & 
    455459               &                  + ( zs2(ji+1,jj) * e2t(ji+1,jj) * e2t(ji+1,jj) - zs2(ji,jj) * e2t(ji,jj) * e2t(ji,jj)    & 
    456                &                    ) * r1_e2u(ji,jj)                                                                      & 
     460               &                    ) * r1_e2u(ji,jj))                                                                      & 
    457461               &                  + ( zs12(ji,jj) * e1f(ji,jj) * e1f(ji,jj) - zs12(ji,jj-1) * e1f(ji,jj-1) * e1f(ji,jj-1)  & 
    458462               &                    ) * 2._wp * r1_e1u(ji,jj)                                                              & 
     
    460464            ! 
    461465            !                !--- V points 
    462             zfV(ji,jj) = 0.5_wp * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             & 
     466            zfV(ji,jj) = 0.5_wp * ( (( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             & 
    463467               &                  - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj)    & 
    464                &                    ) * r1_e1v(ji,jj)                                                                      & 
     468               &                    ) * r1_e1v(ji,jj))                                                                      & 
    465469               &                  + ( zs12(ji,jj) * e2f(ji,jj) * e2f(ji,jj) - zs12(ji-1,jj) * e2f(ji-1,jj) * e2f(ji-1,jj)  & 
    466470               &                    ) * 2._wp * r1_e2v(ji,jj)                                                              & 
     
    468472            ! 
    469473            !                !--- ice currents at U-V point 
    470             v_iceU(ji,jj) = 0.25_wp * ( v_ice(ji,jj) + v_ice(ji,jj-1) + v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * umask(ji,jj,1) 
    471             u_iceV(ji,jj) = 0.25_wp * ( u_ice(ji,jj) + u_ice(ji-1,jj) + u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * vmask(ji,jj,1) 
     474            v_iceU(ji,jj) = 0.25_wp * ( (v_ice(ji,jj) + v_ice(ji,jj-1)) + (v_ice(ji+1,jj) + v_ice(ji+1,jj-1)) ) * umask(ji,jj,1) 
     475            u_iceV(ji,jj) = 0.25_wp * ( (u_ice(ji,jj) + u_ice(ji-1,jj)) + (u_ice(ji,jj+1) + u_ice(ji-1,jj+1)) ) * vmask(ji,jj,1) 
    472476            ! 
    473477         END_2D 
Note: See TracChangeset for help on using the changeset viewer.