Changeset 14911
- Timestamp:
- 2021-05-27T12:30:52+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14122_HPC-08_Mueller_OSMOSIS_streamlining/src/OCE/ZDF/zdfosm.F90
r14909 r14911 294 294 zdf_osm_alloc = zdf_osm_alloc + ierr 295 295 ! 296 ALLOCATE( av_t_bl( A2D((nn_hls-1))), av_s_bl(A2D((nn_hls-1))), av_u_bl(A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))), &297 & av_b_bl( A2D((nn_hls-1))), STAT=ierr)296 ALLOCATE( av_t_bl(jpi,jpj), av_s_bl(jpi,jpj), av_u_bl(jpi,jpj), av_v_bl(jpi,jpj), & 297 & av_b_bl(jpi,jpj), STAT=ierr) 298 298 zdf_osm_alloc = zdf_osm_alloc + ierr 299 299 ! 300 ALLOCATE( av_dt_bl( A2D((nn_hls-1))), av_ds_bl(A2D((nn_hls-1))), av_du_bl(A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))), &301 & av_db_bl( A2D((nn_hls-1))), STAT=ierr)300 ALLOCATE( av_dt_bl(jpi,jpj), av_ds_bl(jpi,jpj), av_du_bl(jpi,jpj), av_dv_bl(jpi,jpj), & 301 & av_db_bl(jpi,jpj), STAT=ierr) 302 302 zdf_osm_alloc = zdf_osm_alloc + ierr 303 303 ! 304 ALLOCATE( av_t_ml( A2D((nn_hls-1))), av_s_ml(A2D((nn_hls-1))), av_u_ml(A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))), &305 & av_b_ml( A2D((nn_hls-1))), STAT=ierr)304 ALLOCATE( av_t_ml(jpi,jpj), av_s_ml(jpi,jpj), av_u_ml(jpi,jpj), av_v_ml(jpi,jpj), & 305 & av_b_ml(jpi,jpj), STAT=ierr) 306 306 zdf_osm_alloc = zdf_osm_alloc + ierr 307 307 ! 308 ALLOCATE( av_dt_ml( A2D((nn_hls-1))), av_ds_ml(A2D((nn_hls-1))), av_du_ml(A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))), &309 & av_db_ml( A2D((nn_hls-1))), STAT=ierr)308 ALLOCATE( av_dt_ml(jpi,jpj), av_ds_ml(jpi,jpj), av_du_ml(jpi,jpj), av_dv_ml(jpi,jpj), & 309 & av_db_ml(jpi,jpj), STAT=ierr) 310 310 zdf_osm_alloc = zdf_osm_alloc + ierr 311 311 ! 312 ALLOCATE( av_t_mle( A2D((nn_hls-1))), av_s_mle(A2D((nn_hls-1))), av_u_mle(A2D((nn_hls-1))), av_v_mle(A2D((nn_hls-1))), &313 & av_b_mle( A2D((nn_hls-1))), STAT=ierr)312 ALLOCATE( av_t_mle(jpi,jpj), av_s_mle(jpi,jpj), av_u_mle(jpi,jpj), av_v_mle(jpi,jpj), & 313 & av_b_mle(jpi,jpj), STAT=ierr) 314 314 zdf_osm_alloc = zdf_osm_alloc + ierr 315 315 ! … … 384 384 ! 385 385 ! mixed-layer variables 386 INTEGER, DIMENSION(A2D((nn_hls-1))) :: jk_nlev ! Number of levels 386 387 INTEGER, DIMENSION(A2D((nn_hls-1))) :: jk_ext ! Offset for external level 387 388 ! … … 658 659 ! 659 660 ! Averages over well-mixed and boundary layer, note BL averages use jk_ext=2 everywhere 661 jk_nlev(:,:) = nbld(A2D((nn_hls-1))) 660 662 jk_ext(:,:) = 1 ! ag 19/03 661 CALL zdf_osm_vertical_average( Kbb, Kmm, & 662 & nbld(A2D((nn_hls-1))), av_t_bl(A2D((nn_hls-1))), & 663 & av_s_bl(A2D((nn_hls-1))), av_b_bl(A2D((nn_hls-1))), & 664 & av_u_bl(A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))), & 665 & jk_ext, av_dt_bl(A2D((nn_hls-1))), & 666 & av_ds_bl(A2D((nn_hls-1))), av_db_bl(A2D((nn_hls-1))), & 667 & av_du_bl(A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))) ) 663 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_bl, av_s_bl, & 664 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 665 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 666 jk_nlev(:,:) = nmld(A2D((nn_hls-1))) - 1 668 667 jk_ext(:,:) = nbld(A2D((nn_hls-1))) - nmld(A2D((nn_hls-1))) + jk_ext(:,:) + 1 ! ag 19/03 669 CALL zdf_osm_vertical_average( Kbb, Kmm, & 670 & nmld(A2D((nn_hls-1))) - 1, av_t_ml(A2D((nn_hls-1))), & 671 & av_s_ml(A2D((nn_hls-1))), av_b_ml(A2D((nn_hls-1))), & 672 & av_u_ml(A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))), & 673 & jk_ext, av_dt_ml(A2D((nn_hls-1))), & 674 & av_ds_ml(A2D((nn_hls-1))), av_db_ml(A2D((nn_hls-1))), & 675 & av_du_ml(A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))) ) 668 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_ml, av_s_ml, & 669 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 670 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 676 671 ! Velocity components in frame aligned with surface stress 677 CALL zdf_osm_velocity_rotation( av_u_ml (A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))))678 CALL zdf_osm_velocity_rotation( av_du_ml (A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))))679 CALL zdf_osm_velocity_rotation( av_u_bl (A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))))680 CALL zdf_osm_velocity_rotation( av_du_bl (A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))))672 CALL zdf_osm_velocity_rotation( av_u_ml, av_v_ml ) 673 CALL zdf_osm_velocity_rotation( av_du_ml, av_dv_ml ) 674 CALL zdf_osm_velocity_rotation( av_u_bl, av_v_bl ) 675 CALL zdf_osm_velocity_rotation( av_du_bl, av_dv_bl ) 681 676 ! 682 677 ! Determine the state of the OSBL, stable/unstable, shear/no shear … … 692 687 IF ( hmle(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) mld_prof(ji,jj) = MIN( mbkt(ji,jj), jk) 693 688 END_3D 694 CALL zdf_osm_vertical_average( Kbb, Kmm, & 695 & mld_prof(A2D((nn_hls-1))), av_t_mle(A2D((nn_hls-1))), & 696 & av_s_mle(A2D((nn_hls-1))), av_b_mle(A2D((nn_hls-1))), & 697 & av_u_mle(A2D((nn_hls-1))), av_v_mle(A2D((nn_hls-1))) ) 689 jk_nlev(:,:) = mld_prof(A2D((nn_hls-1))) 690 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_mle, av_s_mle, & 691 & av_b_mle, av_u_mle, av_v_mle ) 698 692 ! 699 693 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) … … 708 702 & zdbds_mle ) 709 703 ! Recalculate hmle, zmle, zvel_mle, zdiff_mle & redefine mld_proc to be index for new hmle 710 CALL zdf_osm_mle_parameters( Kmm, zmld (A2D((nn_hls-1))), zhmle, zvel_mle, zdiff_mle, &704 CALL zdf_osm_mle_parameters( Kmm, zmld, zhmle, zvel_mle, zdiff_mle, & 711 705 & zdbds_mle, zhbl, zwb0tot ) 712 706 ELSE ! ln_osm_mle … … 721 715 ! 722 716 !! External gradient below BL needed both with and w/o FK 723 CALL zdf_osm_external_gradients( Kmm, nbld(A2D((nn_hls-1))) + 1, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) ! ag 19/03 717 jk_ext(:,:) = nbld(A2D((nn_hls-1))) + 1 718 CALL zdf_osm_external_gradients( Kmm, jk_ext, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) ! ag 19/03 724 719 ! 725 720 ! Test if pycnocline well resolved … … 741 736 ! 742 737 ! Recalculate bl averages using jk_ext & ml averages .... note no rotation of u & v here.. 738 jk_nlev(:,:) = nbld(A2D((nn_hls-1))) 743 739 jk_ext(:,:) = 1 ! ag 19/03 744 CALL zdf_osm_vertical_average( Kbb, Kmm, & 745 & nbld(A2D((nn_hls-1))), av_t_bl(A2D((nn_hls-1))), & 746 & av_s_bl(A2D((nn_hls-1))), av_b_bl(A2D((nn_hls-1))), & 747 & av_u_bl(A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))), & 748 & jk_ext, av_dt_bl(A2D((nn_hls-1))), & 749 & av_ds_bl(A2D((nn_hls-1))), av_db_bl(A2D((nn_hls-1))), & 750 & av_du_bl(A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))) ) 740 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_bl, av_s_bl, & 741 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 742 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 743 jk_nlev(:,:) = nmld(A2D((nn_hls-1))) - 1 751 744 jk_ext(:,:) = nbld(A2D((nn_hls-1))) - nmld(A2D((nn_hls-1))) + jk_ext(:,:) + 1 ! ag 19/03 752 CALL zdf_osm_vertical_average( Kbb, Kmm, & 753 & nmld(A2D((nn_hls-1))) - 1, av_t_ml(A2D((nn_hls-1))), & 754 & av_s_ml(A2D((nn_hls-1))), av_b_ml(A2D((nn_hls-1))), & 755 & av_u_ml(A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))), & 756 & jk_ext, av_dt_ml(A2D((nn_hls-1))), & 757 & av_ds_ml(A2D((nn_hls-1))), av_db_ml(A2D((nn_hls-1))), & 758 & av_du_ml(A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))) ) ! ag 19/03 745 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_ml, av_s_ml, & 746 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 747 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) ! ag 19/03 759 748 ! 760 749 ! Rate of change of hbl … … 794 783 ! 795 784 ! Recalculate BL averages and differences using new BL depth 785 jk_nlev(:,:) = nbld(A2D((nn_hls-1))) 796 786 jk_ext(:,:) = 1 ! ag 19/03 797 CALL zdf_osm_vertical_average( Kbb, Kmm, & 798 & nbld(A2D((nn_hls-1))), av_t_bl(A2D((nn_hls-1))), & 799 & av_s_bl(A2D((nn_hls-1))), av_b_bl(A2D((nn_hls-1))), & 800 & av_u_bl(A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))), & 801 & jk_ext, av_dt_bl(A2D((nn_hls-1))), & 802 & av_ds_bl(A2D((nn_hls-1))), av_db_bl(A2D((nn_hls-1))), & 803 & av_du_bl(A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))) ) 787 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_bl, av_s_bl, & 788 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 789 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 804 790 ! 805 791 CALL zdf_osm_pycnocline_thickness( Kmm, zdh, zhml, zdhdt, zhbl, & … … 829 815 ! jk_ext = nbld - nmld + 1 830 816 ! Recalculate ML averages and differences using new ML depth 817 jk_nlev(:,:) = nmld(A2D((nn_hls-1))) - 1 831 818 jk_ext(:,:) = nbld(A2D((nn_hls-1))) - nmld(A2D((nn_hls-1))) + jk_ext(:,:) + 1 ! ag 19/03 832 CALL zdf_osm_vertical_average( Kbb, Kmm, & 833 & nmld(A2D((nn_hls-1))) - 1, av_t_ml(A2D((nn_hls-1))), & 834 & av_s_ml(A2D((nn_hls-1))), av_b_ml(A2D((nn_hls-1))), & 835 & av_u_ml(A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))), & 836 & jk_ext, av_dt_ml(A2D((nn_hls-1))), & 837 & av_ds_ml(A2D((nn_hls-1))), av_db_ml(A2D((nn_hls-1))), & 838 & av_du_ml(A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))) ) 839 ! 840 CALL zdf_osm_external_gradients( Kmm, nbld(A2D((nn_hls-1))) + 1, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) 819 CALL zdf_osm_vertical_average( Kbb, Kmm, jk_nlev, av_t_ml, av_s_ml, & 820 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 821 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 822 ! 823 jk_ext(:,:) = nbld(A2D((nn_hls-1))) + 1 824 CALL zdf_osm_external_gradients( Kmm, jk_ext, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext ) 841 825 ! Rotate mean currents and changes onto wind aligned co-ordinates 842 CALL zdf_osm_velocity_rotation( av_u_ml (A2D((nn_hls-1))), av_v_ml(A2D((nn_hls-1))))843 CALL zdf_osm_velocity_rotation( av_du_ml (A2D((nn_hls-1))), av_dv_ml(A2D((nn_hls-1))))844 CALL zdf_osm_velocity_rotation( av_u_bl (A2D((nn_hls-1))), av_v_bl(A2D((nn_hls-1))))845 CALL zdf_osm_velocity_rotation( av_du_bl (A2D((nn_hls-1))), av_dv_bl(A2D((nn_hls-1))))826 CALL zdf_osm_velocity_rotation( av_u_ml, av_v_ml ) 827 CALL zdf_osm_velocity_rotation( av_du_ml, av_dv_ml ) 828 CALL zdf_osm_velocity_rotation( av_u_bl, av_v_bl ) 829 CALL zdf_osm_velocity_rotation( av_du_bl, av_dv_bl ) 846 830 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 847 831 ! Eddy viscosity/diffusivity and non-gradient terms in the flux-gradient relationship … … 865 849 ! 866 850 ! Rotate non-gradient velocity terms back to model reference frame 867 CALL zdf_osm_velocity_rotation( ghamu(A2D((nn_hls-1)),:), ghamv(A2D((nn_hls-1)),:), & 868 & .FALSE., 2, & 869 & nbld(A2D((nn_hls-1))) ) 851 jk_nlev(:,:) = nbld(A2D((nn_hls-1))) 852 CALL zdf_osm_velocity_rotation( ghamu, ghamv, .FALSE., 2, jk_nlev ) 870 853 ! 871 854 ! KPP-style Ri# mixing … … 1072 1055 INTEGER, INTENT(in ) :: Kbb, Kmm ! Ocean time-level indices 1073 1056 INTEGER, DIMENSION(A2D((nn_hls-1))), INTENT(in ) :: knlev ! Number of levels to average over. 1074 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out) :: pt, ps ! Average temperature and salinity1075 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out) :: pb ! Average buoyancy1076 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out) :: pu, pv ! Average current components1057 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pt, ps ! Average temperature and salinity 1058 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pb ! Average buoyancy 1059 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pu, pv ! Average current components 1077 1060 INTEGER, DIMENSION(A2D((nn_hls-1))), INTENT(in ), OPTIONAL :: kp_ext ! External-level offsets 1078 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out), OPTIONAL :: pdt ! Difference between average temperature,1079 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out), OPTIONAL :: pds ! salinity,1080 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out), OPTIONAL :: pdb ! buoyancy, and1081 REAL(wp), DIMENSION( A2D((nn_hls-1))),INTENT( out), OPTIONAL :: pdu, pdv ! velocity components and the OSBL1082 ! 1061 REAL(wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdt ! Difference between average temperature, 1062 REAL(wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pds ! salinity, 1063 REAL(wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdb ! buoyancy, and 1064 REAL(wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdu, pdv ! velocity components and the OSBL 1065 !! 1083 1066 INTEGER :: jk, jkflt, jkmax, ji, jj ! Loop indices 1084 1067 INTEGER :: ibld_ext ! External-layer index … … 1175 1158 !! 1176 1159 !!---------------------------------------------------------------------- 1177 REAL(wp), INTENT(inout), DIMENSION( A2D((nn_hls-1))) :: pu, pv ! Components of current1178 LOGICAL, OPTIONAL, INTENT(in ) 1160 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj) :: pu, pv ! Components of current 1161 LOGICAL, OPTIONAL, INTENT(in ) :: fwd ! Forward (default) or reverse rotation 1179 1162 ! 1180 1163 INTEGER :: ji, jj ! Loop indices … … 1205 1188 !! 1206 1189 !!---------------------------------------------------------------------- 1207 REAL(wp), INTENT(inout), DIMENSION( A2D((nn_hls-1)),jpk):: pu, pv ! Components of current1208 LOGICAL, OPTIONAL, INTENT(in ) 1209 INTEGER, OPTIONAL, INTENT(in ) 1210 INTEGER, OPTIONAL, INTENT(in ), DIMENSION(A2D((nn_hls-1))) 1211 ! 1190 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pu, pv ! Components of current 1191 LOGICAL, OPTIONAL, INTENT(in ) :: fwd ! Forward (default) or reverse rotation 1192 INTEGER, OPTIONAL, INTENT(in ) :: ktop ! Minimum depth index 1193 INTEGER, OPTIONAL, INTENT(in ), DIMENSION(A2D((nn_hls-1))) :: knlev ! Array of maximum depth indices 1194 ! 1212 1195 INTEGER :: ji, jj, jk, jktop, jkmax ! Loop indices 1213 1196 REAL(wp) :: ztmp, zfwd ! Auxiliary variables … … 2954 2937 !!---------------------------------------------------------------------- 2955 2938 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2956 REAL(wp), DIMENSION(A2D((nn_hls -1))),INTENT(in ) :: pmld ! == Estimated FK BLD used for MLE horiz gradients == !2939 REAL(wp), DIMENSION(A2D((nn_hls))), INTENT(in ) :: pmld ! == Estimated FK BLD used for MLE horiz gradients == ! 2957 2940 REAL(wp), DIMENSION(A2D((nn_hls-1))), INTENT(inout) :: phmle ! MLE depth 2958 2941 REAL(wp), DIMENSION(A2D((nn_hls-1))), INTENT(inout) :: pvel_mle ! Velocity scale for dhdt with stable ML and FK
Note: See TracChangeset
for help on using the changeset viewer.