Changeset 14677
- Timestamp:
- 2021-04-07T16:10:14+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/NERC/dev_r11078_OSMOSIS_IMMERSE_Nurser_4.0/src/OCE/ZDF/zdfosm.F90
r14647 r14677 57 57 USE eosbn2 ! equation of state 58 58 USE traqsr ! details of solar radiation absorption 59 USE zdfdrg, ONLY : rCdU_bot ! bottom friction velocity 59 60 USE zdfddm ! double diffusion mixing (avs array) 60 61 ! USE zdfmxl ! mixed layer depth … … 273 274 LOGICAL, DIMENSION(jpi,jpj) :: lconv ! unstable/stable bl 274 275 LOGICAL, DIMENSION(jpi,jpj) :: lshear ! Shear layers 276 LOGICAL, DIMENSION(jpi,jpj) :: lcoup ! Coupling to bottom 275 277 LOGICAL, DIMENSION(jpi,jpj) :: lpyc ! OSBL pycnocline present 276 278 LOGICAL, DIMENSION(jpi,jpj) :: lflux ! surface flux extends below OSBL into MLE layer. … … 622 624 zhol(ji,jj) = -0.9 * hbl(ji,jj) * 2.0 * zwbav(ji,jj) / (zvstr(ji,jj)**3 + epsln ) 623 625 ELSE 626 zwstrc(ji,jj) = 0.0_wp 624 627 zhol(ji,jj) = -hbl(ji,jj) * 2.0 * zwbav(ji,jj)/ (zvstr(ji,jj)**3 + epsln ) 625 628 ENDIF 626 629 #ifdef key_osm_debug 627 630 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 628 WRITE(narea+100,'(2(a,g11.3),/,3(a,g11.3),/, 2(a,g11.3),/)') &631 WRITE(narea+100,'(2(a,g11.3),/,3(a,g11.3),/,3(a,g11.3),/)') & 629 632 & 'After reduction: zustke=', zustke(ji,jj), ' dstokes=', dstokes(ji,jj), & 630 633 & ' zustar =', zustar(ji,jj), ' zwstrl=', zwstrl(ji,jj), ' zwstrc=', zwstrc(ji,jj),& 631 & ' zhol=', zhol(ji,jj), ' zla=', zla(ji,jj) 634 & ' zhol=', zhol(ji,jj), ' zla=', zla(ji,jj), ' zvstr=', zvstr(ji,jj) 632 635 FLUSH(narea+100) 633 636 END IF … … 652 655 DO ji = 1, jpi 653 656 IF ( hbl(ji,jj) >= gdepw_n(ji,jj,jk) ) THEN 654 ibld(ji,jj) = MIN(mbkt(ji,jj) , jk)657 ibld(ji,jj) = MIN(mbkt(ji,jj)-2, jk) 655 658 ENDIF 656 659 END DO … … 690 693 691 694 ! Averages over well-mixed and boundary layer, note BL averages use jp_ext=2 everywhere 692 jp_ext(:,:) = 2695 jp_ext(:,:) = 1 ! ag 19/03 693 696 CALL zdf_osm_vertical_average(ibld, jp_ext, zt_bl, zs_bl, zb_bl, zu_bl, zv_bl, zdt_bl, zds_bl, zdb_bl, zdu_bl, zdv_bl) 694 ! jp_ext(:,:) = ibld(:,:) - imld(:,:) + 1695 CALL zdf_osm_vertical_average(imld-1, ibld-imld+1, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml)697 jp_ext(:,:) = ibld(:,:) - imld(:,:) + jp_ext(:,:) + 1 ! ag 19/03 698 CALL zdf_osm_vertical_average(imld-1, jp_ext, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml) 696 699 #ifdef key_osm_debug 697 700 IF(narea==nn_narea_db) THEN … … 801 804 802 805 !! External gradient below BL needed both with and w/o FK 803 CALL zdf_osm_external_gradients( ibld+ 2, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext )806 CALL zdf_osm_external_gradients( ibld+1, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) ! ag 19/03 804 807 805 808 ! Test if pycnocline well resolved 806 DO jj = 2, jpjm1 807 DO ji = 2,jpim1 808 IF (lconv(ji,jj) ) THEN809 ztmp = 0.2 * zhbl(ji,jj) / e3w_n(ji,jj,ibld(ji,jj))810 IF ( ztmp > 6 ) THEN 811 ! pycnocline well resolved812 813 ELSE814 ! pycnocline poorly resolved815 jp_ext(ji,jj) = 0816 ENDIF817 ELSE818 ! Stable conditions819 jp_ext(ji,jj) = 0820 ENDIF821 END DO822 END DO809 ! DO jj = 2, jpjm1 Removed with ag 19/03 changes. A change in eddy diffusivity/viscosity 810 ! DO ji = 2,jpim1 should account for this. 811 ! IF (lconv(ji,jj) ) THEN 812 ! ztmp = 0.2 * zhbl(ji,jj) / e3w_n(ji,jj,ibld(ji,jj)) 813 ! IF ( ztmp > 3 ) THEN ! ag 19/03 814 ! ! pycnocline well resolved 815 ! jp_ext(ji,jj) = 1 816 ! ELSE 817 ! ! pycnocline poorly resolved 818 ! jp_ext(ji,jj) = 0 819 ! ENDIF 820 ! ELSE 821 ! ! Stable conditions 822 ! jp_ext(ji,jj) = 0 823 ! ENDIF 824 ! END DO 825 ! END DO 823 826 #ifdef key_osm_debug 824 827 IF(narea==nn_narea_db) THEN … … 833 836 834 837 ! Recalculate bl averages using jp_ext & ml averages .... note no rotation of u & v here.. 838 jp_ext(:,:) = 1 ! ag 19/03 835 839 CALL zdf_osm_vertical_average(ibld, jp_ext, zt_bl, zs_bl, zb_bl, zu_bl, zv_bl, zdt_bl, zds_bl, zdb_bl, zdu_bl, zdv_bl ) 836 ! jp_ext = ibld-imld+1837 CALL zdf_osm_vertical_average(imld-1, ibld-imld+1, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml)840 jp_ext(:,:) = ibld(:,:) - imld(:,:) + jp_ext(:,:) + 1 ! ag 19/03 841 CALL zdf_osm_vertical_average(imld-1, jp_ext, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml) ! ag 19/03 838 842 #ifdef key_osm_debug 839 843 IF(narea==nn_narea_db) THEN … … 858 862 zhbl_t(ji,jj) = hbl(ji,jj) + (zdhdt(ji,jj) - wn(ji,jj,ibld(ji,jj)))* rn_rdt ! certainly need wn here, so subtract it 859 863 ! adjustment to represent limiting by ocean bottom 860 IF ( zhbl_t(ji,jj) >= gdepw_n(ji, jj, mbkt(ji,jj) + 1 ) ) THEN 861 zhbl_t(ji,jj) = MIN(zhbl_t(ji,jj), gdepw_n(ji,jj, mbkt(ji,jj) + 1) - depth_tol)! ht_n(:,:)) 862 lpyc(ji,jj) = .FALSE. 864 IF ( mbkt(ji,jj) >2 ) THEN ! to ensure mbkt(ji,jj) - 2 > 0 so no incorrect array access 865 IF( zhbl_t(ji,jj) >= gdepw_n(ji, jj, mbkt(ji,jj) - 2 ) ) THEN 866 zhbl_t(ji,jj) = MIN(zhbl_t(ji,jj), gdepw_n(ji,jj, mbkt(ji,jj) - 2) - depth_tol)! ht_n(:,:)) 867 lpyc(ji,jj) = .FALSE. 868 ENDIF 863 869 ENDIF 864 870 #ifdef key_osm_debug … … 885 891 END DO 886 892 893 ! Test if surface boundary layer coupled to bottom. 894 895 lcoup(:,:) = .FALSE. ! ag 19/03 896 DO jj = 2, jpjm1 ! ag 19/03 897 DO ji = 2, jpim1 ! ag 19/03 898 IF ( mbkt(ji,jj) >2 ) THEN ! to ensure mbkt(ji,jj) - 2 > 0 so no incorrect array access 899 IF ( zhbl_t(ji,jj) >= gdepw_n(ji,jj,mbkt(ji,jj) - 2) ) THEN ! ag 19/03 900 zhbl_t(ji,jj) = gdepw_n(ji,jj,mbkt(ji,jj)-2) ! ag 19/03 901 lcoup(ji,jj) = .TRUE. ! ag 19/03 902 ENDIF ! ag 19/03 903 ENDIF ! ag 19/03 904 END DO ! ag 19/03 905 END DO ! ag 19/03 906 887 907 ! 888 908 ! Step through model levels taking account of buoyancy change to determine the effect on dhdt … … 892 912 893 913 ! Recalculate BL averages and differences using new BL depth 914 jp_ext(:,:) = 1 ! ag 19/03 894 915 CALL zdf_osm_vertical_average( ibld, jp_ext, zt_bl, zs_bl, zb_bl, zu_bl, zv_bl, zdt_bl, zds_bl, zdb_bl, zdu_bl, zdv_bl ) 895 916 ! 896 ! 897 ! Check to see if lpyc needs to be changed 898 917 899 918 CALL zdf_osm_pycnocline_thickness( dh, zdh ) 919 920 ! reset l_pyc before calculating terms in the flux-gradient relationships 900 921 901 922 DO jj = 2, jpjm1 902 923 DO ji = 2, jpim1 903 IF ( zdb_bl(ji,jj) < rn_osm_bl_thresh .or. ibld(ji,jj) + jp_ext(ji,jj) >= mbkt(ji,jj) .or. ibld(ji,jj)-imld(ji,jj) == 1 ) lpyc(ji,jj) = .FALSE. 924 IF ( zdb_bl(ji,jj) < rn_osm_bl_thresh .or. ibld(ji,jj) >= mbkt(ji,jj) -2 .or. ibld(ji,jj)-imld(ji,jj) == 1 .or. zdhdt(ji,jj) < 0._wp) THEN ! ag 19/03 925 lpyc(ji,jj) = .FALSE. ! ag 19/03 926 IF ( ibld(ji,jj) >= mbkt(ji,jj) -2 ) THEN 927 imld(ji,jj) = ibld(ji,jj) - 1 ! ag 19/03 928 zdh(ji,jj) = gdepw_n(ji,jj,ibld(ji,jj)) - gdepw_n(ji,jj,imld(ji,jj)) ! ag 19/03 929 zhml(ji,jj) = gdepw_n(ji,jj,imld(ji,jj)) ! ag 19/03 930 dh(ji,jj) = zdh(ji,jj) ! ag 19/03 931 hml(ji,jj) = hbl(ji,jj) - dh(ji,jj) ! ag 19/03 932 #ifdef key_osm_debug 933 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 934 WRITE(narea+100,'(a)')'After setting pycnocline thickness BL running aground: lpyc= Fl: ibld(ji,jj) >= mbkt(ji,jj) -2' 935 WRITE(narea+100,'(2(a,i7),2(a,g11.3))')' ibld=',ibld(ji,jj),' imld=',imld(ji,jj), ' zdh=',zdh(ji,jj), ' zhml=',zhml(ji,jj) 936 WRITE(narea+100,'(2(a,g11.3))')'dh=',dh,' hml=',hml(ji,jj) 937 FLUSH(narea+100) 938 END IF 939 #endif 940 ENDIF 941 ENDIF ! ag 19/03 904 942 END DO 905 943 END DO … … 910 948 ! jp_ext = ibld - imld +1 911 949 ! Recalculate ML averages and differences using new ML depth 912 CALL zdf_osm_vertical_average( imld-1, ibld-imld+1, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml ) 913 ! rotate mean currents and changes onto wind align co-ordinates 914 ! 950 jp_ext(:,:) = ibld(:,:) - imld(:,:) + jp_ext(:,:) + 1 ! ag 19/03 951 CALL zdf_osm_vertical_average( imld-1, jp_ext, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml ) 952 953 CALL zdf_osm_external_gradients( ibld+1, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) 915 954 #ifdef key_osm_debug 916 955 IF(narea==nn_narea_db) THEN … … 927 966 END IF 928 967 #endif 968 969 ! rotate mean currents and changes onto wind align co-ordinates 970 929 971 CALL zdf_osm_velocity_rotation( zcos_wind, zsin_wind, zu_ml, zv_ml, zdu_ml, zdv_ml ) 930 972 CALL zdf_osm_velocity_rotation( zcos_wind, zsin_wind, zu_bl, zv_bl, zdu_bl, zdv_bl ) … … 943 985 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 944 986 945 CALL zdf_osm_external_gradients( ibld+2, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext )987 jp_ext(:,:) = 1 ! ag 19/03 946 988 CALL zdf_osm_pycnocline_scalar_profiles( zdtdz_pyc, zdsdz_pyc, zdbdz_pyc, zalpha_pyc ) 947 989 CALL zdf_osm_pycnocline_shear_profiles( zdudz_pyc, zdvdz_pyc ) … … 1128 1170 #endif 1129 1171 ! 1130 IF ( dh(ji,jj) < 0.2*hbl(ji,jj) ) THEN1172 IF ( dh(ji,jj) < 0.2*hbl(ji,jj) .AND. ibld(ji,jj) - imld(ji,jj) > 3 ) THEN 1131 1173 zbuoy_pyc_sc = 2.0_wp * MAX(zdb_ml(ji,jj), 0._wp) / zdh(ji,jj) 1132 1174 zdelta_pyc = ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird / SQRT( MAX( zbuoy_pyc_sc, ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**p2third / zdh(ji,jj)**2 ) ) … … 1746 1788 1747 1789 ! Scales used to calculate eddy diffusivity and viscosity profiles 1748 REAL(wp), DIMENSION(jpi,jpj) :: zdifml_sc, zvisml_sc 1749 REAL(wp), DIMENSION(jpi,jpj) :: zdifpyc_n_sc, zdifpyc_s_sc, zdifpyc_shr 1750 REAL(wp), DIMENSION(jpi,jpj) :: zvispyc_n_sc, zvispyc_s_sc,zvispyc_shr 1751 REAL(wp), DIMENSION(jpi,jpj) :: zbeta_d_sc, zbeta_v_sc 1790 REAL(wp), DIMENSION(jpi,jpj) :: pdifml_sc, pvisml_sc 1791 REAL(wp), DIMENSION(jpi,jpj) :: pdifpyc_n_sc, pdifpyc_s_sc, pdifpyc_shr 1792 REAL(wp), DIMENSION(jpi,jpj) :: pvispyc_n_sc, pvispyc_s_sc,pvispyc_shr 1793 REAL(wp), DIMENSION(jpi,jpj) :: pbeta_d_sc, pbeta_v_sc 1794 REAL(wp), DIMENSION(jpi,jpj) :: pb_coup, pc_coup_vis, pc_coup_dif 1752 1795 ! 1753 REAL(wp) :: zvel_sc_pyc, zvel_sc_ml, zstab_fac 1796 REAL(wp) :: pvel_sc_pyc, pvel_sc_ml, pstab_fac, pz_b 1797 REAL(wp) :: pa_cubic, pb_cubic, pc_cubic, pd_cubic 1798 REAL(wp) :: pznd_ml, pznd_pyc 1799 REAL(wp) :: zmsku, zmskv 1754 1800 1755 1801 REAL(wp), PARAMETER :: rn_dif_ml = 0.8, rn_vis_ml = 0.375 … … 1759 1805 DO jj = 2, jpjm1 1760 1806 DO ji = 2, jpim1 1807 pb_coup(ji,jj) = 0._wp 1761 1808 IF ( lconv(ji,jj) ) THEN 1762 1809 1763 zvel_sc_pyc = ( 0.15 * zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 + 4.25 * zshear(ji,jj) * zhbl(ji,jj) )**pthird1764 zvel_sc_ml = ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird1765 zstab_fac = ( zhml(ji,jj) / zvel_sc_ml * ( 1.4 - 0.4 / ( 1.0 + EXP(-3.5 * LOG10(-zhol(ji,jj) ) ) )**1.25 ) )**21766 1767 zdifml_sc(ji,jj) = rn_dif_ml * zhml(ji,jj) * zvel_sc_ml1768 zvisml_sc(ji,jj) = rn_vis_ml * zdifml_sc(ji,jj)1810 pvel_sc_pyc = ( 0.15 * zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 + 4.25 * zshear(ji,jj) * zhbl(ji,jj) )**pthird 1811 pvel_sc_ml = ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 1812 pstab_fac = ( zhml(ji,jj) / pvel_sc_ml * ( 1.4 - 0.4 / ( 1.0 + EXP(-3.5 * LOG10(-zhol(ji,jj) ) ) )**1.25 ) )**2 1813 1814 pdifml_sc(ji,jj) = rn_dif_ml * zhml(ji,jj) * pvel_sc_ml 1815 pvisml_sc(ji,jj) = rn_vis_ml * pdifml_sc(ji,jj) 1769 1816 #ifdef key_osm_debug 1770 1817 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1771 WRITE(narea+100,'(2(a,g11.3))')'Start of 1st major loop of osm_diffusivity_viscositys, lconv=T: zdifml_sc=', zdifml_sc(ji,jj),' zvisml_sc=',zvisml_sc(ji,jj)1772 WRITE(narea+100,'(3(a,g11.3))')'zvel_sc_pyc=', zvel_sc_pyc,' zvel_sc_ml=',zvel_sc_ml,' zstab_fac=',zstab_fac1818 WRITE(narea+100,'(2(a,g11.3))')'Start of 1st major loop of osm_diffusivity_viscositys, lconv=T: zdifml_sc=',pdifml_sc(ji,jj),' zvisml_sc=',pvisml_sc(ji,jj) 1819 WRITE(narea+100,'(3(a,g11.3))')'zvel_sc_pyc=',pvel_sc_pyc,' zvel_sc_ml=',pvel_sc_ml,' pstab_fac=',pstab_fac 1773 1820 FLUSH(narea+100) 1774 1821 END IF 1775 1822 #endif 1776 1823 IF ( lpyc(ji,jj) ) THEN 1777 zdifpyc_n_sc(ji,jj) = rn_dif_pyc * zvel_sc_ml * zdh(ji,jj)1778 zvispyc_n_sc(ji,jj) = 0.09 * zvel_sc_pyc * ( 1.0 - zhbl(ji,jj) / zdh(ji,jj) )**2 * ( 0.005 * ( zu_ml(ji,jj)-zu_bl(ji,jj) )**2 + 0.0075 * ( zv_ml(ji,jj)-zv_bl(ji,jj) )**2 ) / zdh(ji,jj)1779 zvispyc_n_sc(ji,jj) = rn_vis_pyc * zvel_sc_ml * zdh(ji,jj) + zvispyc_n_sc(ji,jj) * zstab_fac1824 pdifpyc_n_sc(ji,jj) = rn_dif_pyc * pvel_sc_ml * zdh(ji,jj) 1825 pvispyc_n_sc(ji,jj) = 0.09 * pvel_sc_pyc * ( 1.0 - zhbl(ji,jj) / zdh(ji,jj) )**2 * ( 0.005 * ( zu_ml(ji,jj)-zu_bl(ji,jj) )**2 + 0.0075 * ( zv_ml(ji,jj)-zv_bl(ji,jj) )**2 ) / zdh(ji,jj) 1826 pvispyc_n_sc(ji,jj) = rn_vis_pyc * pvel_sc_ml * zdh(ji,jj) + pvispyc_n_sc(ji,jj) * pstab_fac 1780 1827 #ifdef key_osm_debug 1781 1828 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1782 WRITE(narea+100,'(2(a,g11.3))')' lpyc=lconv=T, variables w/o shear contributions: zdifpyc_n_sc', zdifpyc_n_sc(ji,jj) ,' zvispyc_n_sc=',zvispyc_n_sc(ji,jj)1829 WRITE(narea+100,'(2(a,g11.3))')' lpyc=lconv=T, variables w/o shear contributions: zdifpyc_n_sc',pdifpyc_n_sc(ji,jj) ,' zvispyc_n_sc=',pvispyc_n_sc(ji,jj) 1783 1830 FLUSH(narea+100) 1784 1831 END IF 1785 1832 #endif 1786 1833 IF ( lshear(ji,jj) .AND. j_ddh(ji,jj) /= 2 ) THEN 1787 zdifpyc_n_sc(ji,jj) = zdifpyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj) )**pthird * zhbl(ji,jj)1788 zvispyc_n_sc(ji,jj) = zvispyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj ) )**pthird * zhbl(ji,jj)1834 pdifpyc_n_sc(ji,jj) = pdifpyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj) )**pthird * zhbl(ji,jj) 1835 pvispyc_n_sc(ji,jj) = pvispyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj ) )**pthird * zhbl(ji,jj) 1789 1836 ENDIF 1790 1837 #ifdef key_osm_debug 1791 1838 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1792 WRITE(narea+100,'(2(a,g11.3))')' lpyc=lconv=T, variables w shear contributions: zdifpyc_n_sc', zdifpyc_n_sc(ji,jj) ,' zvispyc_n_sc=',zvispyc_n_sc(ji,jj)1839 WRITE(narea+100,'(2(a,g11.3))')' lpyc=lconv=T, variables w shear contributions: zdifpyc_n_sc',pdifpyc_n_sc(ji,jj) ,' zvispyc_n_sc=',pvispyc_n_sc(ji,jj) 1793 1840 FLUSH(narea+100) 1794 1841 END IF 1795 1842 #endif 1796 zdifpyc_s_sc(ji,jj) = zwb_ent(ji,jj) + 0.0025 * zvel_sc_pyc * ( zhbl(ji,jj) / zdh(ji,jj) - 1.0 ) * ( zb_ml(ji,jj) - zb_bl(ji,jj) )1797 zvispyc_s_sc(ji,jj) = 0.09 * ( zwb_min(ji,jj) + 0.0025 * zvel_sc_pyc * ( zhbl(ji,jj) / zdh(ji,jj) - 1.0 ) * ( zb_ml(ji,jj) - zb_bl(ji,jj) ) )1843 pdifpyc_s_sc(ji,jj) = zwb_ent(ji,jj) + 0.0025 * pvel_sc_pyc * ( zhbl(ji,jj) / zdh(ji,jj) - 1.0 ) * ( zb_ml(ji,jj) - zb_bl(ji,jj) ) 1844 pvispyc_s_sc(ji,jj) = 0.09 * ( zwb_min(ji,jj) + 0.0025 * pvel_sc_pyc * ( zhbl(ji,jj) / zdh(ji,jj) - 1.0 ) * ( zb_ml(ji,jj) - zb_bl(ji,jj) ) ) 1798 1845 #ifdef key_osm_debug 1799 1846 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1800 WRITE(narea+100,'(2(a,g11.3))')' 1st shot at: zdifpyc_s_sc', zdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',zvispyc_s_sc(ji,jj)1847 WRITE(narea+100,'(2(a,g11.3))')' 1st shot at: zdifpyc_s_sc',pdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',pvispyc_s_sc(ji,jj) 1801 1848 FLUSH(narea+100) 1802 1849 END IF 1803 1850 #endif 1804 zdifpyc_s_sc(ji,jj) = 0.09 * zdifpyc_s_sc(ji,jj) * zstab_fac1805 zvispyc_s_sc(ji,jj) = zvispyc_s_sc(ji,jj) * zstab_fac1851 pdifpyc_s_sc(ji,jj) = 0.09 * pdifpyc_s_sc(ji,jj) * pstab_fac 1852 pvispyc_s_sc(ji,jj) = pvispyc_s_sc(ji,jj) * pstab_fac 1806 1853 #ifdef key_osm_debug 1807 1854 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1808 WRITE(narea+100,'(2(a,g11.3))')' 2nd shot at: zdifpyc_s_sc', zdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',zvispyc_s_sc(ji,jj)1855 WRITE(narea+100,'(2(a,g11.3))')' 2nd shot at: zdifpyc_s_sc',pdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',pvispyc_s_sc(ji,jj) 1809 1856 FLUSH(narea+100) 1810 1857 END IF 1811 1858 #endif 1812 1859 1813 zdifpyc_s_sc(ji,jj) = MAX( zdifpyc_s_sc(ji,jj), -0.5 * zdifpyc_n_sc(ji,jj) ) 1814 zvispyc_s_sc(ji,jj) = MAX( zvispyc_s_sc(ji,jj), -0.5 * zvispyc_n_sc(ji,jj) ) 1815 #ifdef key_osm_debug 1816 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1817 WRITE(narea+100,'(2(a,g11.3))')' Final zdifpyc_s_sc',zdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',zvispyc_s_sc(ji,jj) 1818 FLUSH(narea+100) 1819 END IF 1820 #endif 1821 1822 zbeta_d_sc(ji,jj) = 1.0 - ( ( zdifpyc_n_sc(ji,jj) + 1.4 * zdifpyc_s_sc(ji,jj) ) / ( zdifml_sc(ji,jj) + epsln ) )**p2third 1823 zbeta_v_sc(ji,jj) = 1.0 - 2.0 * ( zvispyc_n_sc(ji,jj) + zvispyc_s_sc(ji,jj) ) / ( zvisml_sc(ji,jj) + epsln ) 1860 pdifpyc_s_sc(ji,jj) = MAX( pdifpyc_s_sc(ji,jj), -0.5 * pdifpyc_n_sc(ji,jj) ) 1861 pvispyc_s_sc(ji,jj) = MAX( pvispyc_s_sc(ji,jj), -0.5 * pvispyc_n_sc(ji,jj) ) 1862 1863 pbeta_d_sc(ji,jj) = 1.0 - ( ( pdifpyc_n_sc(ji,jj) + 1.4 * pdifpyc_s_sc(ji,jj) ) / ( pdifml_sc(ji,jj) + epsln ) )**p2third 1864 pbeta_v_sc(ji,jj) = 1.0 - 2.0 * ( pvispyc_n_sc(ji,jj) + pvispyc_s_sc(ji,jj) ) / ( pvisml_sc(ji,jj) + epsln ) 1824 1865 ELSE 1825 zbeta_d_sc(ji,jj) = 1.0 1826 zbeta_v_sc(ji,jj) = 1.0 1827 ENDIF 1866 pdifpyc_n_sc(ji,jj) = rn_dif_pyc * pvel_sc_ml * zdh(ji,jj) ! ag 19/03 1867 pdifpyc_s_sc(ji,jj) = 0._wp ! ag 19/03 1868 pvispyc_n_sc(ji,jj) = rn_vis_pyc * pvel_sc_ml * zdh(ji,jj) ! ag 19/03 1869 pvispyc_s_sc(ji,jj) = 0._wp ! ag 19/03 1870 IF(lcoup(ji,jj) ) THEN ! ag 19/03 1871 ! code from SUBROUTINE tke_tke zdftke.F90; uses bottom drag velocity rCdU_bot(ji,jj) = Cd|ub| 1872 ! already calculated at T-points in SUBROUTINE zdf_drg from zdfdrg.F90 1873 ! Gives friction velocity sqrt bottom drag/rho_0 i.e. u* = SQRT(rCdU_bot*ub) 1874 ! wet-cell averaging .. 1875 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 1876 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 1877 pb_coup(ji,jj) = 0.4 * SQRT(rCdU_bot(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 & 1878 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) ) 1879 1880 pz_b = -gdepw_n(ji,jj,mbkt(ji,jj) + 1 ) ! ag 19/03 1881 pc_coup_vis(ji,jj) = -0.5 * ( 0.5 * pvisml_sc(ji,jj) / zhml(ji,jj) - pb_coup(ji,jj) ) / ( zhml(ji,jj) + pz_b ) ! ag 19/03 1882 #ifdef key_osm_debug 1883 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1884 WRITE(narea+100,'(3(a,g11.3))')' lcoup = T; 1st pz_b= ', pz_b, 'pb_coup', pb_coup(ji,jj), ' pc_coup_vis', pc_coup_vis(ji,jj) 1885 FLUSH(narea+100) 1886 END IF 1887 #endif 1888 #ifdef key_osm_debug 1889 WRITE(narea+400,'(4(a,i7))') ' lcoup = T at ji=',ji,' jj= ',jj,' jig= ', mig(ji), 'jjg= ', mjg(jj) 1890 WRITE(narea+400,'(3(a,g11.3))') '1st pz_b= ', pz_b, 'pb_coup', pb_coup(ji,jj), ' pc_coup_vis', pc_coup_vis(ji,jj) 1891 FLUSH(narea+400) 1892 #endif 1893 pz_b = -zhml(ji,jj) + gdepw_n(ji,jj,mbkt(ji,jj)+1) ! ag 19/03 1894 pbeta_v_sc(ji,jj) = 1.0 - 2.0 * ( pb_coup(ji,jj) * pz_b + pc_coup_vis(ji,jj) * pz_b**2 ) / pvisml_sc(ji,jj) ! ag 19/03 1895 pbeta_d_sc(ji,jj) = 1.0 - ( ( pb_coup(ji,jj) * pz_b + pc_coup_vis(ji,jj) * pz_b**2 ) / pdifml_sc(ji,jj) )**p2third 1896 pc_coup_dif(ji,jj) = 0.5 * ( -pdifml_sc(ji,jj) / zhml(ji,jj) * ( 1.0 - pbeta_d_sc(ji,jj) )**1.5 + 1.5 * (pdifml_sc(ji,jj) / zhml(ji,jj) )* pbeta_d_sc(ji,jj) * SQRT( 1.0 - pbeta_d_sc(ji,jj) ) -pb_coup(ji,jj) ) / pz_b ! ag 19/03 1897 #ifdef key_osm_debug 1898 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1899 WRITE(narea+100,'(2(a,g11.3))')' 2nd pz_b= ', pz_b, ' pc_coup_dif', pc_coup_dif(ji,jj) 1900 FLUSH(narea+100) 1901 END IF 1902 #endif 1903 #ifdef key_osm_debug 1904 WRITE(narea+400,'(3(a,g11.3))') '2nd pz_b= ', pz_b,' pc_coup_vis', pc_coup_vis(ji,jj) 1905 FLUSH(narea+400) 1906 #endif 1907 ELSE ! ag 19/03 1908 pbeta_d_sc(ji,jj) = 1.0 - ( ( pdifpyc_n_sc(ji,jj) + 1.4 * pdifpyc_s_sc(ji,jj) ) / ( pdifml_sc(ji,jj) + epsln ) )**p2third ! ag 19/03 1909 pbeta_v_sc(ji,jj) = 1.0 - 2.0 * ( pvispyc_n_sc(ji,jj) + pvispyc_s_sc(ji,jj) ) / ( pvisml_sc(ji,jj) + epsln ) ! ag 19/03 1910 ENDIF ! ag 19/03 1911 ENDIF ! ag 19/03 1828 1912 #ifdef key_osm_debug 1829 1913 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1830 WRITE(narea+100,'(2(a,g11.3))')'lconv=T: zbeta_d_sc',zbeta_d_sc(ji,jj) ,' zbeta_v_sc=',zbeta_v_sc(ji,jj) 1914 WRITE(narea+100,'(2(a,g11.3))')'lconv=T: zbeta_d_sc',pbeta_d_sc(ji,jj) ,' zbeta_v_sc=',pbeta_v_sc(ji,jj) 1915 WRITE(narea+100,'(2(a,g11.3))')' Final zdifpyc_n_sc',pdifpyc_n_sc(ji,jj) ,' zvispyc_n_sc=',pvispyc_n_sc(ji,jj) 1916 WRITE(narea+100,'(2(a,g11.3))')' Final zdifpyc_s_sc',pdifpyc_s_sc(ji,jj) ,' zvispyc_s_sc=',pvispyc_s_sc(ji,jj) 1831 1917 FLUSH(narea+100) 1832 1918 END IF 1833 1919 #endif 1834 1920 ELSE ! conv, stable 1835 zdifml_sc(ji,jj) = zvstr(ji,jj) * zhbl(ji,jj) * MAX( EXP ( -( zhol(ji,jj) / 0.6_wp )**2 ), 0.2_wp)1836 zvisml_sc(ji,jj) = zvstr(ji,jj) * zhbl(ji,jj) * MAX( EXP ( -( zhol(ji,jj) / 0.6_wp )**2 ), 0.2_wp)1921 pdifml_sc(ji,jj) = zvstr(ji,jj) * zhbl(ji,jj) * MAX( EXP ( -( zhol(ji,jj) / 0.6_wp )**2 ), 0.2_wp) 1922 pvisml_sc(ji,jj) = zvstr(ji,jj) * zhbl(ji,jj) * MAX( EXP ( -( zhol(ji,jj) / 0.6_wp )**2 ), 0.2_wp) 1837 1923 #ifdef key_osm_debug 1838 1924 IF(narea==nn_narea_db.and.ji==iloc_db.and.jj==jloc_db)THEN 1839 WRITE(narea+100,'(a,g11.3)')'End of 1st major loop of osm_diffusivity_viscositys, lconv=F: zdifml_sc=', zdifml_sc(ji,jj),' zvisml_sc=',zvisml_sc(ji,jj)1925 WRITE(narea+100,'(a,g11.3)')'End of 1st major loop of osm_diffusivity_viscositys, lconv=F: zdifml_sc=',pdifml_sc(ji,jj),' zvisml_sc=',pvisml_sc(ji,jj) 1840 1926 FLUSH(narea+100) 1841 1927 END IF … … 1850 1936 IF ( lconv(ji,jj) ) THEN 1851 1937 DO jk = 2, imld(ji,jj) ! mixed layer diffusivity 1852 zznd_ml = gdepw_n(ji,jj,jk) / zhml(ji,jj)1938 pznd_ml = gdepw_n(ji,jj,jk) / zhml(ji,jj) 1853 1939 ! 1854 zdiffut(ji,jj,jk) = zdifml_sc(ji,jj) * zznd_ml * ( 1.0 - zbeta_d_sc(ji,jj) * zznd_ml )**1.51940 zdiffut(ji,jj,jk) = pdifml_sc(ji,jj) * pznd_ml * ( 1.0 - pbeta_d_sc(ji,jj) * pznd_ml )**1.5 1855 1941 ! 1856 zviscos(ji,jj,jk) = zvisml_sc(ji,jj) * zznd_ml * ( 1.0 - zbeta_v_sc(ji,jj) * zznd_ml ) &1857 & * ( 1.0 - 0.5 * zznd_ml**2 )1942 zviscos(ji,jj,jk) = pvisml_sc(ji,jj) * pznd_ml * ( 1.0 - pbeta_v_sc(ji,jj) * pznd_ml ) & 1943 & * ( 1.0 - 0.5 * pznd_ml**2 ) 1858 1944 END DO 1945 1946 ! Coupling to bottom 1947 1948 IF ( lcoup(ji,jj) ) THEN ! ag 19/03 1949 DO jk = mbkt(ji,jj), imld(ji,jj), -1 ! ag 19/03 1950 pz_b = - ( gdepw_n(ji,jj,jk) - gdepw_n(ji,jj,mbkt(ji,jj) + 1 ) ) ! ag 19/03 1951 zviscos(ji,jj,jk) = pb_coup(ji,jj) * pz_b + pc_coup_vis(ji,jj) * pz_b**2 ! ag 19/03 1952 zdiffut(ji,jj,jk) = pb_coup(ji,jj) * pz_b + pc_coup_dif(ji,jj) * pz_b**2 ! ag 19/03 1953 END DO ! ag 19/03 1954 ENDIF ! ag 19/03 1859 1955 ! pycnocline 1860 1956 IF ( lpyc(ji,jj) ) THEN 1861 ! Diffusivity profile in the pycnocline given by cubic polynomial. 1862 za_cubic = 0.51863 zb_cubic = -1.75 * zdifpyc_s_sc(ji,jj) / zdifpyc_n_sc(ji,jj)1864 zd_cubic = ( zdh(ji,jj) * zdifml_sc(ji,jj) / zhml(ji,jj) * SQRT( 1.0 - zbeta_d_sc(ji,jj) ) * ( 2.5 * zbeta_d_sc(ji,jj) - 1.0 ) &1865 & - 0.85 * zdifpyc_s_sc(ji,jj) ) / MAX(zdifpyc_n_sc(ji,jj), 1.e-8)1866 zd_cubic = zd_cubic - zb_cubic - 2.0 * ( 1.0 - za_cubic - zb_cubic )1867 zc_cubic = 1.0 - za_cubic - zb_cubic - zd_cubic1957 ! Diffusivity profile in the pycnocline given by cubic polynomial. Note, if lpyc TRUE can't be coupled to seabed. 1958 pa_cubic = 0.5 1959 pb_cubic = -1.75 * pdifpyc_s_sc(ji,jj) / pdifpyc_n_sc(ji,jj) 1960 pd_cubic = ( zdh(ji,jj) * pdifml_sc(ji,jj) / zhml(ji,jj) * SQRT( 1.0 - pbeta_d_sc(ji,jj) ) * ( 2.5 * pbeta_d_sc(ji,jj) - 1.0 ) & 1961 & - 0.85 * pdifpyc_s_sc(ji,jj) ) / MAX(pdifpyc_n_sc(ji,jj), 1.e-8) 1962 pd_cubic = pd_cubic - pb_cubic - 2.0 * ( 1.0 - pa_cubic - pb_cubic ) 1963 pc_cubic = 1.0 - pa_cubic - pb_cubic - pd_cubic 1868 1964 DO jk = imld(ji,jj) , ibld(ji,jj) 1869 zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / MAX(zdh(ji,jj), 1.e-6)1965 pznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / MAX(zdh(ji,jj), 1.e-6) 1870 1966 ! 1871 zdiffut(ji,jj,jk) = zdifpyc_n_sc(ji,jj) * ( za_cubic + zb_cubic * zznd_pyc + zc_cubic * zznd_pyc**2 + zd_cubic * zznd_pyc**3 )1872 1873 zdiffut(ji,jj,jk) = zdiffut(ji,jj,jk) + zdifpyc_s_sc(ji,jj) * ( 1.75 * zznd_pyc - 0.15 * zznd_pyc**2 - 0.2 * zznd_pyc**3 )1967 zdiffut(ji,jj,jk) = pdifpyc_n_sc(ji,jj) * ( pa_cubic + pb_cubic * pznd_pyc + pc_cubic * pznd_pyc**2 + pd_cubic * pznd_pyc**3 ) 1968 1969 zdiffut(ji,jj,jk) = zdiffut(ji,jj,jk) + pdifpyc_s_sc(ji,jj) * ( 1.75 * pznd_pyc - 0.15 * pznd_pyc**2 - 0.2 * pznd_pyc**3 ) 1874 1970 END DO 1875 1971 ! viscosity profiles. 1876 za_cubic = 0.51877 zb_cubic = -1.75 * zvispyc_s_sc(ji,jj) / zvispyc_n_sc(ji,jj)1878 zd_cubic = ( 0.5 * zvisml_sc(ji,jj) * zdh(ji,jj) / zhml(ji,jj) - 0.85 * zvispyc_s_sc(ji,jj) ) / MAX(zvispyc_n_sc(ji,jj), 1.e-8)1879 zd_cubic = zd_cubic - zb_cubic - 2.0 * ( 1.0 - za_cubic - zb_cubic )1880 zc_cubic = 1.0 - za_cubic - zb_cubic - zd_cubic1972 pa_cubic = 0.5 1973 pb_cubic = -1.75 * pvispyc_s_sc(ji,jj) / pvispyc_n_sc(ji,jj) 1974 pd_cubic = ( 0.5 * pvisml_sc(ji,jj) * zdh(ji,jj) / zhml(ji,jj) - 0.85 * pvispyc_s_sc(ji,jj) ) / MAX(pvispyc_n_sc(ji,jj), 1.e-8) 1975 pd_cubic = pd_cubic - pb_cubic - 2.0 * ( 1.0 - pa_cubic - pb_cubic ) 1976 pc_cubic = 1.0 - pa_cubic - pb_cubic - pd_cubic 1881 1977 DO jk = imld(ji,jj) , ibld(ji,jj) 1882 zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / MAX(zdh(ji,jj), 1.e-6)1883 zviscos(ji,jj,jk) = zvispyc_n_sc(ji,jj) * ( za_cubic + zb_cubic * zznd_pyc + zc_cubic * zznd_pyc**2 + zd_cubic * zznd_pyc**3 )1884 zviscos(ji,jj,jk) = zviscos(ji,jj,jk) + zvispyc_s_sc(ji,jj) * ( 1.75 * zznd_pyc - 0.15 * zznd_pyc**2 -0.2 * zznd_pyc**3 )1978 pznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / MAX(zdh(ji,jj), 1.e-6) 1979 zviscos(ji,jj,jk) = pvispyc_n_sc(ji,jj) * ( pa_cubic + pb_cubic * pznd_pyc + pc_cubic * pznd_pyc**2 + pd_cubic * pznd_pyc**3 ) 1980 zviscos(ji,jj,jk) = zviscos(ji,jj,jk) + pvispyc_s_sc(ji,jj) * ( 1.75 * pznd_pyc - 0.15 * pznd_pyc**2 -0.2 * pznd_pyc**3 ) 1885 1981 END DO 1886 IF ( zdhdt(ji,jj) > 0._wp ) THEN 1887 zdiffut(ji,jj,ibld(ji,jj)+1) = MAX( 0.5 * zdhdt(ji,jj) * e3w_n(ji,jj,ibld(ji,jj)+1), 1.0e-6 ) 1888 zviscos(ji,jj,ibld(ji,jj)+1) = MAX( 0.5 * zdhdt(ji,jj) * e3w_n(ji,jj,ibld(ji,jj)+1), 1.0e-6 ) 1889 ELSE 1890 zdiffut(ji,jj,ibld(ji,jj)) = 0._wp 1891 zviscos(ji,jj,ibld(ji,jj)) = 0._wp 1982 ! IF ( zdhdt(ji,jj) > 0._wp ) THEN 1983 ! zdiffut(ji,jj,ibld(ji,jj)+1) = MAX( 0.5 * zdhdt(ji,jj) * e3w_n(ji,jj,ibld(ji,jj)+1), 1.0e-6 ) 1984 ! zviscos(ji,jj,ibld(ji,jj)+1) = MAX( 0.5 * zdhdt(ji,jj) * e3w_n(ji,jj,ibld(ji,jj)+1), 1.0e-6 ) 1985 ! ELSE 1986 ! zdiffut(ji,jj,ibld(ji,jj)) = 0._wp 1987 ! zviscos(ji,jj,ibld(ji,jj)) = 0._wp 1988 ! ENDIF 1989 ELSE 1990 ! lpyc set false but not coupled to the bottom. 1991 IF ( .not. lcoup(ji,jj) ) THEN 1992 zdiffut(ji,jj,ibld(ji,jj)) = 0.5 * pdifpyc_n_sc(ji,jj) 1993 zviscos(ji,jj,ibld(ji,jj)) = 0.5 * pvispyc_n_sc(ji,jj) 1892 1994 ENDIF 1893 1995 ENDIF … … 1895 1997 ! stable conditions 1896 1998 DO jk = 2, ibld(ji,jj) 1897 zznd_ml = gdepw_n(ji,jj,jk) / zhbl(ji,jj)1898 zdiffut(ji,jj,jk) = 0.75 * zdifml_sc(ji,jj) * zznd_ml * ( 1.0 - zznd_ml )**1.51899 zviscos(ji,jj,jk) = 0.375 * zvisml_sc(ji,jj) * zznd_ml * (1.0 - zznd_ml) * ( 1.0 - zznd_ml**2 )1999 pznd_ml = gdepw_n(ji,jj,jk) / zhbl(ji,jj) 2000 zdiffut(ji,jj,jk) = 0.75 * pdifml_sc(ji,jj) * pznd_ml * ( 1.0 - pznd_ml )**1.5 2001 zviscos(ji,jj,jk) = 0.375 * pvisml_sc(ji,jj) * pznd_ml * (1.0 - pznd_ml) * ( 1.0 - pznd_ml**2 ) 1900 2002 END DO 1901 2003 … … 1908 2010 END DO ! end of ji loop 1909 2011 END DO ! end of jj loop 2012 IF ( iom_use("pb_coup") ) CALL iom_put( "pb_coup", tmask(:,:,1)*pb_coup(:,:) ) ! BBL-coupling velocity scale 1910 2013 1911 2014 END SUBROUTINE zdf_osm_diffusivity_viscosity … … 2178 2281 zb(ji,jj) = grav * zthermal * zt(ji,jj) - grav * zbeta * zs(ji,jj) 2179 2282 ibld_ext = jnlev_av(ji,jj) + jp_ext(ji,jj) 2180 IF ( ibld_ext < mbkt(ji,jj) ) THEN 2283 IF ( ibld_ext <= mbkt(ji,jj)-1 ) THEN ! ag 09/03 2284 ! Two external levels are available. 2181 2285 zdt(ji,jj) = zt(ji,jj) - tsn(ji,jj,ibld_ext,jp_tem) 2182 2286 zds(ji,jj) = zs(ji,jj) - tsn(ji,jj,ibld_ext,jp_sal)
Note: See TracChangeset
for help on using the changeset viewer.