Changeset 14859
- Timestamp:
- 2021-05-13T16:34:49+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
r14858 r14859 364 364 ! 365 365 ! mixed-layer variables 366 INTEGER, DIMENSION(A2D(0)) :: j p_ext ! Offset for external level366 INTEGER, DIMENSION(A2D(0)) :: jk_ext ! Offset for external level 367 367 ! 368 368 REAL(wp), DIMENSION(A2D(0)) :: zhbl ! BL depth - grid … … 610 610 END_2D 611 611 ! 612 ! Averages over well-mixed and boundary layer, note BL averages use j p_ext=2 everywhere613 j p_ext(:,:) = 1 ! ag 19/03612 ! Averages over well-mixed and boundary layer, note BL averages use jk_ext=2 everywhere 613 jk_ext(:,:) = 1 ! ag 19/03 614 614 CALL zdf_osm_vertical_average( Kbb, Kmm, nbld(A2D(0)), av_t_bl, av_s_bl, & 615 & av_b_bl, av_u_bl, av_v_bl, j p_ext, av_dt_bl, &615 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 616 616 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 617 j p_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jp_ext(:,:) + 1 ! ag 19/03617 jk_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jk_ext(:,:) + 1 ! ag 19/03 618 618 CALL zdf_osm_vertical_average( Kbb, Kmm, nmld - 1, av_t_ml, av_s_ml, & 619 & av_b_ml, av_u_ml, av_v_ml, j p_ext, av_dt_ml, &619 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 620 620 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 621 621 ! Velocity components in frame aligned with surface stress … … 649 649 & zdbds_mle ) 650 650 ! Recalculate hmle, zmle, zvel_mle, zdiff_mle & redefine mld_proc to be index for new hmle 651 CALL zdf_osm_mle_parameters( Kmm, mld_prof, zmld, zhmle, zvel_mle, &652 & zd iff_mle, zdbds_mle, zhbl, zwb0tot )651 CALL zdf_osm_mle_parameters( Kmm, zmld, zhmle, zvel_mle, zdiff_mle, & 652 & zdbds_mle, zhbl, zwb0tot ) 653 653 ELSE ! ln_osm_mle 654 654 ! FK not selected, Boundary Layer only. … … 670 670 ! IF ( ztmp > 6 ) THEN 671 671 ! ! pycnocline well resolved 672 ! j p_ext(ji,jj) = 1672 ! jk_ext(ji,jj) = 1 673 673 ! ELSE 674 674 ! ! pycnocline poorly resolved 675 ! j p_ext(ji,jj) = 0675 ! jk_ext(ji,jj) = 0 676 676 ! ENDIF 677 677 ! ELSE 678 678 ! ! Stable conditions 679 ! j p_ext(ji,jj) = 0679 ! jk_ext(ji,jj) = 0 680 680 ! ENDIF 681 681 ! END_2D 682 682 ! 683 ! Recalculate bl averages using j p_ext & ml averages .... note no rotation of u & v here..684 j p_ext(:,:) = 1 ! ag 19/03683 ! Recalculate bl averages using jk_ext & ml averages .... note no rotation of u & v here.. 684 jk_ext(:,:) = 1 ! ag 19/03 685 685 CALL zdf_osm_vertical_average( Kbb, Kmm, nbld(A2D(0)), av_t_bl, av_s_bl, & 686 & av_b_bl, av_u_bl, av_v_bl, j p_ext, av_dt_bl, &686 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 687 687 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 688 j p_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jp_ext(:,:) + 1 ! ag 19/03688 jk_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jk_ext(:,:) + 1 ! ag 19/03 689 689 CALL zdf_osm_vertical_average( Kbb, Kmm, nmld - 1, av_t_ml, av_s_ml, & 690 & av_b_ml, av_u_ml, av_v_ml, j p_ext, av_dt_ml, &690 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 691 691 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) ! ag 19/03 692 692 ! … … 725 725 ! 726 726 ! Recalculate BL averages and differences using new BL depth 727 j p_ext(:,:) = 1 ! ag 19/03727 jk_ext(:,:) = 1 ! ag 19/03 728 728 CALL zdf_osm_vertical_average( Kbb, Kmm, nbld(A2D(0)), av_t_bl, av_s_bl, & 729 & av_b_bl, av_u_bl, av_v_bl, j p_ext, av_dt_bl, &729 & av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl, & 730 730 & av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 731 731 ! … … 752 752 ! 753 753 ! Average over the depth of the mixed layer in the convective boundary layer 754 ! j p_ext = nbld - nmld + 1754 ! jk_ext = nbld - nmld + 1 755 755 ! Recalculate ML averages and differences using new ML depth 756 j p_ext(:,:) = nbld(A2D(0)) - nmld(A2D(0)) + jp_ext(:,:) + 1 ! ag 19/03756 jk_ext(:,:) = nbld(A2D(0)) - nmld(A2D(0)) + jk_ext(:,:) + 1 ! ag 19/03 757 757 CALL zdf_osm_vertical_average( Kbb, Kmm, nmld - 1, av_t_ml, av_s_ml, & 758 & av_b_ml, av_u_ml, av_v_ml, j p_ext, av_dt_ml, &758 & av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml, & 759 759 & av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 760 760 ! … … 774 774 ! Calculate non-gradient components of the flux-gradient relationships 775 775 ! -------------------------------------------------------------------- 776 j p_ext(:,:) = 1 ! ag 19/03777 CALL zdf_osm_fgr_terms( Kmm, j p_ext, zhbl, zhml, zdh, &776 jk_ext(:,:) = 1 ! ag 19/03 777 CALL zdf_osm_fgr_terms( Kmm, jk_ext, zhbl, zhml, zdh, & 778 778 & zdhdt, zshear, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext, & 779 779 & zdiffut, zviscos ) … … 920 920 IF ( iom_use("wndm") ) CALL iom_put( "wndm", wndm*tmask(:,:,1) ) ! U_10 921 921 IF ( iom_use("wind_wave_abs_power") ) THEN 922 osmdia2d(A2D(0)) = 1000.0_wp * rho0 * tmask( :,:,1) * sustar**2 * SQRT( ut0sd**2 + vt0sd**2 )922 osmdia2d(A2D(0)) = 1000.0_wp * rho0 * tmask(A2D(0),1) * sustar**2 * SQRT( ut0sd(A2D(0))**2 + vt0sd(A2D(0))**2 ) 923 923 CALL iom_put( "wind_wave_abs_power", osmdia2d ) 924 924 END IF … … 1007 1007 END IF 1008 1008 IF ( iom_use("jp_ext") ) THEN ! =1 if pycnocline resolved internal to zdf_osm routine 1009 osmdia2d(A2D(0)) = tmask(A2D(0),1) * j p_ext; CALL iom_put( "jp_ext", osmdia2d )1009 osmdia2d(A2D(0)) = tmask(A2D(0),1) * jk_ext; CALL iom_put( "jp_ext", osmdia2d ) 1010 1010 END IF 1011 1011 IF ( iom_use("j_ddh") ) THEN ! Index forpyc thicknessh internal to zdf_osm routine … … 1277 1277 ! Determins stability and set flag l_conv 1278 1278 DO_2D( 0, 0, 0, 0 ) 1279 IF ( shol(ji,jj) < 0. _wp ) THEN1279 IF ( shol(ji,jj) < 0.0_wp ) THEN 1280 1280 l_conv(ji,jj) = .TRUE. 1281 1281 ELSE … … 1659 1659 zdb = MAX( grav * ( zthermal * ( av_t_bl(ji,jj) - ts(ji,jj,jm,jp_tem,Kmm) ) - & 1660 1660 & zbeta * ( av_s_bl(ji,jj) - ts(ji,jj,jm,jp_sal,Kmm) ) ), 0.0_wp ) + & 1661 & 2.0 * svstr(ji,jj)**2 / zhbl_s1661 & 2.0_wp * svstr(ji,jj)**2 / zhbl_s 1662 1662 ! 1663 1663 ! Alan is thuis right? I have simply changed hbli to hbl … … 1956 1956 ! 1957 1957 IF ( ln_dia_pyc_scl ) THEN ! Output of pycnocline gradient profiles 1958 IF ( iom_use("zdbdz_pyc") ) CALL iom_put( "zdbdz_pyc", wmask(:,:,:) * pdbdz(:,:,:) ) 1958 IF ( iom_use("zdbdz_pyc") ) THEN 1959 osmdia3d(A2D(0),:) = wmask(A2D(0),:) * pdbdz(:,:,:); CALL iom_put( "zdbdz_pyc", osmdia3d ) 1960 END IF 1959 1961 END IF 1960 1962 ! … … 2154 2156 ! 2155 2157 END_2D 2156 IF( iom_use("pb_coup") ) CALL iom_put( "pb_coup", tmask(:,:,1) * zb_coup(:,:) ) ! BBL-coupling velocity scale 2158 IF( iom_use("pb_coup") ) THEN 2159 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zb_coup(:,:); CALL iom_put( "pb_coup", osmdia2d ) ! BBL-coupling velocity scale 2160 END IF 2157 2161 ! 2158 2162 END SUBROUTINE zdf_osm_diffusivity_viscosity … … 2259 2263 ! 2260 2264 IF ( ln_dia_osm ) THEN 2261 IF ( iom_use("ghamu_00") ) CALL iom_put( "ghamu_00", wmask *ghamu )2262 IF ( iom_use("ghamv_00") ) CALL iom_put( "ghamv_00", wmask *ghamv )2265 IF ( iom_use("ghamu_00") ) CALL iom_put( "ghamu_00", wmask * ghamu ) 2266 IF ( iom_use("ghamv_00") ) CALL iom_put( "ghamv_00", wmask * ghamv ) 2263 2267 END IF 2264 2268 ! … … 2371 2375 ! 2372 2376 IF ( ln_dia_osm ) THEN 2373 IF ( iom_use("zwth_ent") ) CALL iom_put( "zwth_ent", tmask(:,:,1)*zwth_ent ) ! Upward turb. temperature entrainment flux 2374 IF ( iom_use("zws_ent") ) CALL iom_put( "zws_ent", tmask(:,:,1)*zws_ent ) ! Upward turb. salinity entrainment flux 2377 IF ( iom_use("zwth_ent") ) THEN ! Upward turb. temperature entrainment flux 2378 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zwth_ent(:,:); CALL iom_put( "zwth_ent", osmdia2d ) 2379 END IF 2380 IF ( iom_use("zws_ent") ) THEN ! Upward turb. salinity entrainment flux 2381 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zws_ent(:,:); CALL iom_put( "zws_ent", osmdia2d ) 2382 END IF 2375 2383 END IF 2376 2384 ! … … 2413 2421 zvw_bse(ji,jj) = -0.0075_wp * zomega * ( 1.0_wp - pdh(ji,jj) / phbl(ji,jj) ) * av_dv_ml(ji,jj) 2414 2422 ENDIF 2415 zb_cubic(ji,jj) = pdh(ji,jj) / phbl(ji,jj) * suw0(ji,jj) - ( 2.0 + pdh(ji,jj) / phml(ji,jj) ) * zuw_bse(ji,jj)2423 zb_cubic(ji,jj) = pdh(ji,jj) / phbl(ji,jj) * suw0(ji,jj) - ( 2.0_wp + pdh(ji,jj) / phml(ji,jj) ) * zuw_bse(ji,jj) 2416 2424 za_cubic(ji,jj) = zuw_bse(ji,jj) - zb_cubic(ji,jj) 2417 2425 zvw_max = 0.7_wp * ff_t(ji,jj) * ( sustke(ji,jj) * dstokes(ji,jj) + 0.7_wp * sustar(ji,jj) * phml(ji,jj) ) … … 2433 2441 ! 2434 2442 IF ( ln_dia_osm ) THEN 2435 IF ( iom_use("ghamu_0") ) CALL iom_put( "ghamu_0", wmask*ghamu ) 2436 IF ( iom_use("zsc_uw_1_0") ) CALL iom_put( "zsc_uw_1_0", tmask(:,:,1)*zsc_uw_1 ) 2443 IF ( iom_use("ghamu_0") ) CALL iom_put( "ghamu_0", wmask * ghamu ) 2444 IF ( iom_use("zsc_uw_1_0") ) THEN 2445 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zsc_uw_1(:,:); CALL iom_put( "zsc_uw_1_0", osmdia2d ) 2446 END IF 2437 2447 END IF 2438 2448 ! … … 2448 2458 END WHERE 2449 2459 ELSEWHERE 2450 zsc_wth_1(:,:) = 2.0 * swthav(A2D(0))2451 zsc_ws_1(:,:) = sws0(A2D(0))2460 zsc_wth_1(:,:) = 2.0_wp * swthav(A2D(0)) 2461 zsc_ws_1(:,:) = sws0(A2D(0)) 2452 2462 END WHERE 2453 2463 DO_3D( 0, 0, 0, 0, 1, MAX( jkm_mld, jkm_bld ) ) … … 2508 2518 znd = gdepw(ji,jj,jk,Kmm) / phbl(ji,jj) 2509 2519 zznd_d = gdepw(ji,jj,jk,Kmm) / dstokes(ji,jj) 2510 IF ( zznd_d <= 2.0 ) THEN2520 IF ( zznd_d <= 2.0_wp ) THEN 2511 2521 ghamu(ji,jj,jk) = ghamu(ji,jj,jk) + 0.5_wp * 0.3_wp * & 2512 2522 & ( 2.25_wp - 3.0_wp * ( 1.0_wp - EXP( -1.25_wp * zznd_d ) ) * & … … 2524 2534 ! 2525 2535 IF ( ln_dia_osm ) THEN 2526 IF ( iom_use("ghamu_f") ) CALL iom_put( "ghamu_f", wmask *ghamu ) 2527 IF ( iom_use("ghamv_f") ) CALL iom_put( "ghamv_f", wmask *ghamv ) 2528 IF ( iom_use("zsc_uw_1_f") ) CALL iom_put( "zsc_uw_1_f", tmask(:,:,1)*zsc_uw_1 ) 2529 IF ( iom_use("zsc_vw_1_f") ) CALL iom_put( "zsc_vw_1_f", tmask(:,:,1)*zsc_vw_1 ) 2530 IF ( iom_use("zsc_uw_2_f") ) CALL iom_put( "zsc_uw_2_f", tmask(:,:,1)*zsc_uw_2 ) 2531 IF ( iom_use("zsc_vw_2_f") ) CALL iom_put( "zsc_vw_2_f", tmask(:,:,1)*zsc_vw_2 ) 2536 IF ( iom_use("ghamu_f") ) CALL iom_put( "ghamu_f", wmask * ghamu ) 2537 IF ( iom_use("ghamv_f") ) CALL iom_put( "ghamv_f", wmask * ghamv ) 2538 IF ( iom_use("zsc_uw_1_f") ) THEN 2539 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zsc_uw_1(:,:); CALL iom_put( "zsc_uw_1_f", osmdia2d ) 2540 END IF 2541 IF ( iom_use("zsc_vw_1_f") ) THEN 2542 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zsc_vw_1(:,:); CALL iom_put( "zsc_vw_1_f", osmdia2d ) 2543 END IF 2544 IF ( iom_use("zsc_uw_2_f") ) THEN 2545 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zsc_uw_2(:,:); CALL iom_put( "zsc_uw_2_f", osmdia2d ) 2546 END IF 2547 IF ( iom_use("zsc_vw_2_f") ) THEN 2548 osmdia2d(A2D(0)) = tmask(A2D(0),1) * zsc_vw_2(:,:); CALL iom_put( "zsc_vw_2_f", osmdia2d ) 2549 END IF 2532 2550 END IF 2533 2551 ! … … 2654 2672 END IF 2655 2673 IF ( ln_dia_osm ) THEN 2656 IF ( iom_use("ghamu_b") ) CALL iom_put( "ghamu_b", wmask *ghamu )2657 IF ( iom_use("ghamv_b") ) CALL iom_put( "ghamv_b", wmask *ghamv )2674 IF ( iom_use("ghamu_b") ) CALL iom_put( "ghamu_b", wmask * ghamu ) 2675 IF ( iom_use("ghamv_b") ) CALL iom_put( "ghamv_b", wmask * ghamv ) 2658 2676 END IF 2659 2677 IF ( ln_dia_pyc_scl .OR. ln_dia_pyc_shr ) THEN ! Deallocate arrays used for output of pycnocline gradient/shear profiles … … 2669 2687 ! 2670 2688 IF ( ln_dia_osm ) THEN 2671 IF ( iom_use("ghamu_1") ) CALL iom_put( "ghamu_1", wmask *ghamu )2672 IF ( iom_use("ghamv_1") ) CALL iom_put( "ghamv_1", wmask *ghamv )2689 IF ( iom_use("ghamu_1") ) CALL iom_put( "ghamu_1", wmask * ghamu ) 2690 IF ( iom_use("ghamv_1") ) CALL iom_put( "ghamv_1", wmask * ghamv ) 2673 2691 IF ( iom_use("zviscos") ) THEN 2674 2692 osmdia3d(A2D(0),:) = wmask(A2D(0),:) * pviscos; CALL iom_put( "zviscos", osmdia3d ) … … 2892 2910 END SUBROUTINE zdf_osm_osbl_state_fk 2893 2911 2894 SUBROUTINE zdf_osm_mle_parameters( Kmm, kmld_prof, pmld, phmle, pvel_mle, &2895 & pd iff_mle, pdbds_mle, phbl, pwb0tot )2912 SUBROUTINE zdf_osm_mle_parameters( Kmm, pmld, phmle, pvel_mle, pdiff_mle, & 2913 & pdbds_mle, phbl, pwb0tot ) 2896 2914 !!---------------------------------------------------------------------- 2897 2915 !! *** ROUTINE zdf_osm_mle_parameters *** … … 2908 2926 !!---------------------------------------------------------------------- 2909 2927 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2910 INTEGER, DIMENSION(:,:), INTENT(inout) :: kmld_prof2911 2928 REAL(wp), DIMENSION(:,:), INTENT(in ) :: pmld ! == Estimated FK BLD used for MLE horiz gradients == ! 2912 2929 REAL(wp), DIMENSION(A2D(0)), INTENT(inout) :: phmle ! MLE depth … … 2943 2960 zthermal = rab_n(ji,jj,1,jp_tem) 2944 2961 zbeta = rab_n(ji,jj,1,jp_sal) 2945 zbuoy = grav * ( zthermal * ts(ji,jj, kmld_prof(ji,jj)+2,jp_tem,Kmm) - &2946 & zbeta * ts(ji,jj, kmld_prof(ji,jj)+2,jp_sal,Kmm) )2962 zbuoy = grav * ( zthermal * ts(ji,jj,mld_prof(ji,jj)+2,jp_tem,Kmm) - & 2963 & zbeta * ts(ji,jj,mld_prof(ji,jj)+2,jp_sal,Kmm) ) 2947 2964 zdb_mle = av_b_bl(ji,jj) - zbuoy 2948 2965 ! Timestep hmle … … 2960 2977 END_2D 2961 2978 ! 2962 kmld_prof(:,:) = 42979 mld_prof(:,:) = 4 2963 2980 DO_3D( 0, 0, 0, 0, 5, jpkm1 ) 2964 IF ( hmle(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) kmld_prof(ji,jj) = MIN( mbkt(ji,jj), jk )2981 IF ( hmle(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) mld_prof(ji,jj) = MIN( mbkt(ji,jj), jk ) 2965 2982 END_3D 2966 2983 DO_2D( 0, 0, 0, 0 ) 2967 phmle(ji,jj) = gdepw(ji,jj, kmld_prof(ji,jj),Kmm)2984 phmle(ji,jj) = gdepw(ji,jj,mld_prof(ji,jj),Kmm) 2968 2985 END_2D 2969 2986 ! … … 3194 3211 ghamv(:,:,:) = 0.0_wp 3195 3212 ! 3196 IF ( ln_dia_osm ) osmdia2d(:,:) = 0.0_wp ! Initialise auxiliary array for diagnostic output 3213 IF ( ln_dia_osm ) THEN ! Initialise auxiliary arrays for diagnostic output 3214 osmdia2d(:,:) = 0.0_wp 3215 osmdia3d(:,:,:) = 0.0_wp 3216 END IF 3197 3217 ! 3198 3218 END SUBROUTINE zdf_osm_init … … 3303 3323 END IF 3304 3324 ! 3305 ww(:,:,:) = 0. _wp3325 ww(:,:,:) = 0.0_wp 3306 3326 WRITE(numout,*) ' ===>>>> : wn not in restart file, set to zero initially' 3307 3327 !
Note: See TracChangeset
for help on using the changeset viewer.