Changeset 10371
- Timestamp:
- 2018-12-04T15:58:53+01:00 (4 years ago)
- Location:
- NEMO/branches/UKMO/dev_r10037_dynvor_EEUV
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/dev_r10037_dynvor_EEUV/cfgs/SHARED/namelist_ref
r10094 r10371 874 874 ln_dynvor_msk = .false. ! vorticity multiplied by fmask (=T) ==>>> PLEASE DO NOT ACTIVATE 875 875 ! ! (f-point vorticity schemes only) 876 ln_dynvor_ocnavg = .false. ! T => only average ocean points for V->U point or U->V point conversion 876 877 / 877 878 !----------------------------------------------------------------------- -
NEMO/branches/UKMO/dev_r10037_dynvor_EEUV/src/OCE/DYN/dynvor.F90
r10094 r10371 44 44 USE lib_mpp ! MPP library 45 45 USE timing ! Timing 46 USE phycst ! for rsmall 46 47 47 48 IMPLICIT NONE … … 61 62 LOGICAL, PUBLIC :: ln_dynvor_mix !: mixed scheme (MIX) 62 63 LOGICAL, PUBLIC :: ln_dynvor_msk !: vorticity multiplied by fmask (=T) or not (=F) (all vorticity schemes) 64 LOGICAL, PUBLIC :: ln_dynvor_ocnavg !: T => only average ocean points when transforming V->U or U->V. 63 65 64 66 INTEGER, PUBLIC :: nvor_scheme !: choice of the type of advection scheme … … 84 86 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: di_e2v_2e1e2f ! = di(e2u)/(2*e1e2f) used in F-point metric term calculation 85 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dj_e1u_2e1e2f ! = dj(e1v)/(2*e1e2f) - - - - 88 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: v2upt_avg_denom ! if ln_dynvor_ocnavg = T then use these denominators 90 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: u2vpt_avg_denom ! in calculation of averages V->U points and U->V points. 86 91 92 REAL(wp) :: r2_3 = 2._wp / 3._wp ! =2/3 93 REAL(wp) :: r1_2 = 0.5_wp ! =1/2 94 REAL(wp) :: r1_3 = 1._wp / 3._wp ! =1/3 87 95 REAL(wp) :: r1_4 = 0.250_wp ! =1/4 88 96 REAL(wp) :: r1_6 = 1._wp / 6._wp ! =1/6 … … 301 309 DO jj = 2, jpjm1 302 310 DO ji = 2, jpim1 ! vector opt. 303 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_ 4 * r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk) &311 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk) & 304 312 & * ( zwt(ji+1,jj) * ( pv(ji+1,jj,jk) + pv(ji+1,jj-1,jk) ) & 305 & + zwt(ji ,jj) * ( pv(ji ,jj,jk) + pv(ji ,jj-1,jk) ) ) 313 & + zwt(ji ,jj) * ( pv(ji ,jj,jk) + pv(ji ,jj-1,jk) ) ) / v2upt_avg_denom(ji,jj,jk) 306 314 ! 307 pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) - r1_ 4 * r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk) &315 pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) - r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk) & 308 316 & * ( zwt(ji,jj+1) * ( pu(ji,jj+1,jk) + pu(ji-1,jj+1,jk) ) & 309 & + zwt(ji,jj ) * ( pu(ji,jj ,jk) + pu(ji-1,jj ,jk) ) ) 317 & + zwt(ji,jj ) * ( pu(ji,jj ,jk) + pu(ji-1,jj ,jk) ) ) / u2vpt_avg_denom(ji,jj,jk) 310 318 END DO 311 319 END DO … … 414 422 zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 415 423 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 416 pua(ji,jj,jk) = pua(ji,jj,jk) + r1_ 4 * r1_e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2)417 pva(ji,jj,jk) = pva(ji,jj,jk) - r1_ 4 * r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 )424 pua(ji,jj,jk) = pua(ji,jj,jk) + r1_e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) / v2upt_avg_denom(ji,jj,jk) 425 pva(ji,jj,jk) = pva(ji,jj,jk) - r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) / u2vpt_avg_denom(ji,jj,jk) 418 426 END DO 419 427 END DO … … 517 525 DO jj = 2, jpjm1 518 526 DO ji = fs_2, fs_jpim1 ! vector opt. 519 zuav = r1_ 8* r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) &527 zuav = r1_2 * r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & 520 528 & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) 521 zvau =-r1_ 8* r1_e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) &529 zvau =-r1_2 * r1_e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) & 522 530 & + zwx(ji ,jj ) + zwx(ji ,jj+1) ) 523 pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) 524 pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) 531 pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) / v2upt_avg_denom(ji,jj,jk) 532 pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) / u2vpt_avg_denom(ji,jj,jk) 525 533 END DO 526 534 END DO … … 669 677 DO jj = 2, jpjm1 670 678 DO ji = fs_2, fs_jpim1 ! vector opt. 671 zua = + r1_ 12* r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) &672 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 673 zva = - r1_ 12* r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) &674 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 679 zua = + r1_3 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 680 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) / v2upt_avg_denom(ji,jj,jk) 681 zva = - r1_3 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 682 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) / u2vpt_avg_denom(ji,jj,jk) 675 683 pua(ji,jj,jk) = pua(ji,jj,jk) + zua 676 684 pva(ji,jj,jk) = pva(ji,jj,jk) + zva … … 801 809 DO jj = 2, jpjm1 802 810 DO ji = fs_2, fs_jpim1 ! vector opt. 803 zua = + r1_ 12* r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) &804 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 805 zva = - r1_ 12* r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) &806 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 811 zua = + r1_3 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 812 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) / v2upt_avg_denom(ji,jj,jk) 813 zva = - r1_3 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 814 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) / u2vpt_avg_denom(ji,jj,jk) 807 815 pua(ji,jj,jk) = pua(ji,jj,jk) + zua 808 816 pva(ji,jj,jk) = pva(ji,jj,jk) + zva … … 931 939 DO jj = 2, jpjm1 932 940 DO ji = fs_2, fs_jpim1 ! vector opt. 933 zua = + r 1_6* r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) &934 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 935 zva = - r 1_6* r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) &936 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 941 zua = + r2_3 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 942 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) / v2upt_avg_denom(ji,jj,jk) 943 zva = - r2_3 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 944 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) / u2vpt_avg_denom(ji,jj,jk) 937 945 pua(ji,jj,jk) = pua(ji,jj,jk) + zua 938 946 pva(ji,jj,jk) = pva(ji,jj,jk) + zva … … 956 964 !! 957 965 NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_enT, ln_dynvor_eeT, & 958 & ln_dynvor_eeUV, ln_dynvor_een, nn_een_e3f , ln_dynvor_mix, ln_dynvor_msk 966 & ln_dynvor_eeUV, ln_dynvor_een, nn_een_e3f , ln_dynvor_mix, ln_dynvor_msk, ln_dynvor_ocnavg 959 967 !!---------------------------------------------------------------------- 960 968 ! … … 984 992 WRITE(numout,*) ' mixed enstrophy/energy conserving scheme ln_dynvor_mix = ', ln_dynvor_mix 985 993 WRITE(numout,*) ' masked (=T) or unmasked(=F) vorticity ln_dynvor_msk = ', ln_dynvor_msk 994 WRITE(numout,*) ' average only ocean points? ln_dynvor_ocnavg = ', ln_dynvor_ocnavg 986 995 ENDIF 987 996 … … 1007 1016 ENDIF 1008 1017 !!gm end 1018 1019 !! Precalculate denominators for V->Upoint or U->Vpoint conversion. 1020 ALLOCATE( v2upt_avg_denom(jpi,jpj,jpk), u2vpt_avg_denom(jpi,jpj,jpk) ) 1021 IF( ln_dynvor_ocnavg ) THEN 1022 v2upt_avg_denom(:,:,:) = rsmall 1023 u2vpt_avg_denom(:,:,:) = rsmall 1024 DO jk = 1, jpk 1025 DO jj = 1, jpjm1 1026 DO ji = 1, jpim1 1027 v2upt_avg_denom(ji,jj,jk) = max( rsmall, vmask(ji,jj,jk) + vmask(ji+1,jj,jk) + vmask(ji,jj-1,jk) + vmask(ji+1,jj-1,jk) ) 1028 u2vpt_avg_denom(ji,jj,jk) = max( rsmall, umask(ji,jj,jk) + umask(ji-1,jj,jk) + umask(ji,jj+1,jk) + umask(ji-1,jj+1,jk) ) 1029 ENDDO 1030 ENDDO 1031 ENDDO 1032 ELSE 1033 v2upt_avg_denom(:,:,:) = 4._wp 1034 u2vpt_avg_denom(:,:,:) = 4._wp 1035 ENDIF 1009 1036 1010 1037 ioptio = 0 ! type of scheme for vorticity (set nvor_scheme)
Note: See TracChangeset
for help on using the changeset viewer.