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

Changeset 14859


Ignore:
Timestamp:
2021-05-13T16:34:49+02:00 (3 years ago)
Author:
smueller
Message:

Bugfixes related to diagnostic output and various minor adjustments (ticket #2353)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14122_HPC-08_Mueller_OSMOSIS_streamlining/src/OCE/ZDF/zdfosm.F90

    r14858 r14859  
    364364      ! 
    365365      ! mixed-layer variables 
    366       INTEGER,  DIMENSION(A2D(0)) ::   jp_ext   ! Offset for external level 
     366      INTEGER,  DIMENSION(A2D(0)) ::   jk_ext   ! Offset for external level 
    367367      ! 
    368368      REAL(wp), DIMENSION(A2D(0)) ::   zhbl   ! BL depth - grid 
     
    610610      END_2D 
    611611      ! 
    612       ! Averages over well-mixed and boundary layer, note BL averages use jp_ext=2 everywhere 
    613       jp_ext(:,:) = 1   ! ag 19/03 
     612      ! Averages over well-mixed and boundary layer, note BL averages use jk_ext=2 everywhere 
     613      jk_ext(:,:) = 1   ! ag 19/03 
    614614      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, jp_ext, av_dt_bl,   & 
     615         &                           av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl,   & 
    616616         &                           av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 
    617       jp_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jp_ext(:,:) + 1   ! ag 19/03 
     617      jk_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jk_ext(:,:) + 1   ! ag 19/03 
    618618      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, jp_ext, av_dt_ml,   & 
     619         &                           av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml,   & 
    620620         &                           av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 
    621621      ! Velocity components in frame aligned with surface stress 
     
    649649            &                        zdbds_mle ) 
    650650         ! 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             &                         zdiff_mle, zdbds_mle, zhbl, zwb0tot ) 
     651         CALL zdf_osm_mle_parameters( Kmm, zmld, zhmle, zvel_mle, zdiff_mle,   & 
     652            &                         zdbds_mle, zhbl, zwb0tot ) 
    653653      ELSE    ! ln_osm_mle 
    654654         ! FK not selected, Boundary Layer only. 
     
    670670      !            IF ( ztmp > 6 ) THEN 
    671671      !               ! pycnocline well resolved 
    672       !               jp_ext(ji,jj) = 1 
     672      !               jk_ext(ji,jj) = 1 
    673673      !            ELSE 
    674674      !               ! pycnocline poorly resolved 
    675       !               jp_ext(ji,jj) = 0 
     675      !               jk_ext(ji,jj) = 0 
    676676      !            ENDIF 
    677677      !         ELSE 
    678678      !            ! Stable conditions 
    679       !            jp_ext(ji,jj) = 0 
     679      !            jk_ext(ji,jj) = 0 
    680680      !         ENDIF 
    681681      !      END_2D 
    682682      ! 
    683       ! Recalculate bl averages using jp_ext & ml averages .... note no rotation of u & v here.. 
    684       jp_ext(:,:) = 1   ! ag 19/03 
     683      ! Recalculate bl averages using jk_ext & ml averages .... note no rotation of u & v here.. 
     684      jk_ext(:,:) = 1   ! ag 19/03 
    685685      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, jp_ext, av_dt_bl,   & 
     686         &                           av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl,   & 
    687687         &                           av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 
    688       jp_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jp_ext(:,:) + 1   ! ag 19/03 
     688      jk_ext(:,:) = nbld(A2D(0)) - nmld(:,:) + jk_ext(:,:) + 1   ! ag 19/03 
    689689      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, jp_ext, av_dt_ml,   & 
     690         &                           av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml,   & 
    691691         &                           av_ds_ml, av_db_ml, av_du_ml, av_dv_ml )   ! ag 19/03 
    692692      ! 
     
    725725      ! 
    726726      ! Recalculate BL averages and differences using new BL depth 
    727       jp_ext(:,:) = 1   ! ag 19/03 
     727      jk_ext(:,:) = 1   ! ag 19/03 
    728728      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, jp_ext, av_dt_bl,   & 
     729         &                           av_b_bl, av_u_bl, av_v_bl, jk_ext, av_dt_bl,   & 
    730730         &                           av_ds_bl, av_db_bl, av_du_bl, av_dv_bl ) 
    731731      ! 
     
    752752      ! 
    753753      ! Average over the depth of the mixed layer in the convective boundary layer 
    754       !      jp_ext = nbld - nmld + 1 
     754      !      jk_ext = nbld - nmld + 1 
    755755      ! Recalculate ML averages and differences using new ML depth 
    756       jp_ext(:,:) = nbld(A2D(0)) - nmld(A2D(0)) + jp_ext(:,:) + 1   ! ag 19/03 
     756      jk_ext(:,:) = nbld(A2D(0)) - nmld(A2D(0)) + jk_ext(:,:) + 1   ! ag 19/03 
    757757      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, jp_ext, av_dt_ml,   & 
     758         &                           av_b_ml, av_u_ml, av_v_ml, jk_ext, av_dt_ml,   & 
    759759         &                           av_ds_ml, av_db_ml, av_du_ml, av_dv_ml ) 
    760760      ! 
     
    774774      ! Calculate non-gradient components of the flux-gradient relationships 
    775775      ! -------------------------------------------------------------------- 
    776       jp_ext(:,:) = 1   ! ag 19/03 
    777       CALL zdf_osm_fgr_terms( Kmm, jp_ext, zhbl, zhml, zdh,                              & 
     776      jk_ext(:,:) = 1   ! ag 19/03 
     777      CALL zdf_osm_fgr_terms( Kmm, jk_ext, zhbl, zhml, zdh,                              & 
    778778         &                    zdhdt, zshear, zdtdz_bl_ext, zdsdz_bl_ext, zdbdz_bl_ext,   & 
    779779         &                    zdiffut, zviscos ) 
     
    920920            IF ( iom_use("wndm") ) CALL iom_put( "wndm", wndm*tmask(:,:,1) )                      ! U_10 
    921921            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 ) 
    923923               CALL iom_put( "wind_wave_abs_power", osmdia2d ) 
    924924            END IF 
     
    10071007         END IF 
    10081008         IF ( iom_use("jp_ext") ) THEN                                                     ! =1 if pycnocline resolved internal to zdf_osm routine 
    1009             osmdia2d(A2D(0)) = tmask(A2D(0),1) * jp_ext;    CALL iom_put( "jp_ext",    osmdia2d ) 
     1009            osmdia2d(A2D(0)) = tmask(A2D(0),1) * jk_ext;    CALL iom_put( "jp_ext",    osmdia2d ) 
    10101010         END IF 
    10111011         IF ( iom_use("j_ddh") ) THEN                                                      ! Index forpyc thicknessh internal to zdf_osm routine 
     
    12771277      ! Determins stability and set flag l_conv 
    12781278      DO_2D( 0, 0, 0, 0 ) 
    1279          IF ( shol(ji,jj) < 0._wp ) THEN 
     1279         IF ( shol(ji,jj) < 0.0_wp ) THEN 
    12801280            l_conv(ji,jj) = .TRUE. 
    12811281         ELSE 
     
    16591659                  zdb = MAX(  grav * ( zthermal * ( av_t_bl(ji,jj) - ts(ji,jj,jm,jp_tem,Kmm) ) -               & 
    16601660                     &                 zbeta    * ( av_s_bl(ji,jj) - ts(ji,jj,jm,jp_sal,Kmm) ) ), 0.0_wp ) +   & 
    1661                      &  2.0 * svstr(ji,jj)**2 / zhbl_s 
     1661                     &  2.0_wp * svstr(ji,jj)**2 / zhbl_s 
    16621662                  ! 
    16631663                  ! Alan is thuis right? I have simply changed hbli to hbl 
     
    19561956      ! 
    19571957      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 
    19591961      END IF 
    19601962      ! 
     
    21542156         ! 
    21552157      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 
    21572161      ! 
    21582162   END SUBROUTINE zdf_osm_diffusivity_viscosity 
     
    22592263      ! 
    22602264      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 ) 
    22632267      END IF 
    22642268      ! 
     
    23712375      ! 
    23722376      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 
    23752383      END IF 
    23762384      ! 
     
    24132421               zvw_bse(ji,jj) = -0.0075_wp * zomega * ( 1.0_wp - pdh(ji,jj) / phbl(ji,jj) ) * av_dv_ml(ji,jj) 
    24142422            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) 
    24162424            za_cubic(ji,jj) = zuw_bse(ji,jj) - zb_cubic(ji,jj) 
    24172425            zvw_max = 0.7_wp * ff_t(ji,jj) * ( sustke(ji,jj) * dstokes(ji,jj) + 0.7_wp * sustar(ji,jj) * phml(ji,jj) ) 
     
    24332441      ! 
    24342442      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 
    24372447      END IF 
    24382448      ! 
     
    24482458         END WHERE 
    24492459      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)) 
    24522462      END WHERE 
    24532463      DO_3D( 0, 0, 0, 0, 1, MAX( jkm_mld, jkm_bld ) ) 
     
    25082518               znd    = gdepw(ji,jj,jk,Kmm) / phbl(ji,jj) 
    25092519               zznd_d = gdepw(ji,jj,jk,Kmm) / dstokes(ji,jj) 
    2510                IF ( zznd_d <= 2.0 ) THEN 
     2520               IF ( zznd_d <= 2.0_wp ) THEN 
    25112521                  ghamu(ji,jj,jk) = ghamu(ji,jj,jk) + 0.5_wp * 0.3_wp *                                              & 
    25122522                     &                                ( 2.25_wp - 3.0_wp * ( 1.0_wp - EXP( -1.25_wp * zznd_d ) ) *   & 
     
    25242534      ! 
    25252535      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 
    25322550      END IF 
    25332551      ! 
     
    26542672      END IF 
    26552673      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 ) 
    26582676      END IF 
    26592677      IF ( ln_dia_pyc_scl .OR. ln_dia_pyc_shr ) THEN   ! Deallocate arrays used for output of pycnocline gradient/shear profiles 
     
    26692687      ! 
    26702688      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 ) 
    26732691         IF ( iom_use("zviscos") ) THEN 
    26742692            osmdia3d(A2D(0),:) = wmask(A2D(0),:) * pviscos; CALL iom_put( "zviscos", osmdia3d ) 
     
    28922910   END SUBROUTINE zdf_osm_osbl_state_fk 
    28932911 
    2894    SUBROUTINE zdf_osm_mle_parameters( Kmm, kmld_prof, pmld, phmle, pvel_mle,   & 
    2895       &                               pdiff_mle, pdbds_mle, phbl, pwb0tot ) 
     2912   SUBROUTINE zdf_osm_mle_parameters( Kmm, pmld, phmle, pvel_mle, pdiff_mle,   & 
     2913      &                               pdbds_mle, phbl, pwb0tot ) 
    28962914      !!---------------------------------------------------------------------- 
    28972915      !!               ***  ROUTINE zdf_osm_mle_parameters  *** 
     
    29082926      !!---------------------------------------------------------------------- 
    29092927      INTEGER,                     INTENT(in   ) ::   Kmm         ! Time-level index 
    2910       INTEGER,  DIMENSION(:,:),    INTENT(inout) ::   kmld_prof 
    29112928      REAL(wp), DIMENSION(:,:),    INTENT(in   ) ::   pmld        ! == Estimated FK BLD used for MLE horiz gradients == ! 
    29122929      REAL(wp), DIMENSION(A2D(0)), INTENT(inout) ::   phmle       ! MLE depth 
     
    29432960            zthermal = rab_n(ji,jj,1,jp_tem) 
    29442961            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) ) 
    29472964            zdb_mle = av_b_bl(ji,jj) - zbuoy 
    29482965            ! Timestep hmle 
     
    29602977      END_2D 
    29612978      ! 
    2962       kmld_prof(:,:) = 4 
     2979      mld_prof(:,:) = 4 
    29632980      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 ) 
    29652982      END_3D 
    29662983      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) 
    29682985      END_2D 
    29692986      ! 
     
    31943211      ghamv(:,:,:) = 0.0_wp 
    31953212      ! 
    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 
    31973217      ! 
    31983218   END SUBROUTINE zdf_osm_init 
     
    33033323      END IF 
    33043324      ! 
    3305       ww(:,:,:) = 0._wp 
     3325      ww(:,:,:) = 0.0_wp 
    33063326      WRITE(numout,*) ' ===>>>> :  wn not in restart file, set to zero initially' 
    33073327      ! 
Note: See TracChangeset for help on using the changeset viewer.