diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90 index dc12b57cabc42288aa6f4d366456a91f4450f27a..da600ed6365bedd7889cd09f4a9bfebe804ddafd 100644 --- a/src/MNH/write_les_budgetn.f90 +++ b/src/MNH/write_les_budgetn.f90 @@ -1,34 +1,27 @@ -!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2000-2020 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!###################### -MODULE MODI_WRITE_LES_BUDGET_n -!###################### -! -INTERFACE -! - SUBROUTINE WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG) -! -USE MODD_IO, ONLY: TFILEDATA -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages -! ! or normalizations -END SUBROUTINE WRITE_LES_BUDGET_n -! -END INTERFACE -! -END MODULE MODI_WRITE_LES_BUDGET_n +!############################# +module mode_write_les_budget_n +!############################# + +implicit none + +private -! ###################### - SUBROUTINE WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG) -! ###################### +public :: Write_les_budget_n + +contains + +!########################################## +subroutine Write_les_budget_n( tpdiafile ) +!########################################## ! ! -!!**** *WRITE_LES_n* writes the LES final diagnostics for model _n -!! +!!**** *Write_les_budget_n* writes the LES final diagnostics for model _n +!! !! !! PURPOSE !! ------- @@ -50,36 +43,51 @@ END MODULE MODI_WRITE_LES_BUDGET_n !! ------------- !! Original 07/02/00 !! 06/11/02 (V. Masson) new LES budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -!! -------------------------------------------------------------------------- -! +! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 15/10/2020: restructure Les_diachro calls to use tfield_metadata_base type +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ -! -USE MODD_CST -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES -USE MODD_LES_n -USE MODD_CONF_n -USE MODD_LES_BUDGET -! -USE MODE_ll -! -USE MODE_LES_DIACHRO -! + +use modd_conf_n, only: luserv +use modd_cst, only: xg +use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, & + NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED, & + tfield_metadata_base, TYPEREAL +use modd_io, only: tfiledata +use modd_les, only: cles_norm_type, nles_k, xles_temp_mean_start, xles_temp_mean_end, xles_temp_sampling +use modd_les_n, only: nles_times, & + xles_bu_res_ke, xles_bu_res_thl2, xles_bu_res_wthl, & + xles_bu_sbg_tke, & + xles_mean_dthldz, xles_mean_dudz, xles_mean_dvdz, xles_mean_dwdz, & + xles_mean_th, xles_mean_thv, xles_mean_w, & + xles_res_ddxa_thl_sbg_uaw, xles_res_ddxa_w_sbg_uathl, xles_res_ddxa_thl_sbg_uathl, & + xles_res_ddz_thl_sbg_w2, & + xles_res_w_sbg_thl2, xles_res_w_sbg_wthl, & + xles_subgrid_diss_thl2, & + xles_subgrid_thl2, xles_subgrid_thlpz, xles_subgrid_thlthv, xles_subgrid_w2, & + xles_subgrid_w2thl, xles_subgrid_wthl, xles_subgrid_wthl2, xles_subgrid_wu, xles_subgrid_wv, & + xles_z +use modd_les_budget, only: NLES_RELA, NLES_RAD, NLES_GRAV, NLES_COR, NLES_MICR, NLES_HTURB, NLES_VTURB, NLES_FORC, & + NLES_PRES, NLES_DIFF, NLES_CURV, NLES_PREF, NLES_DP, NLES_TP, NLES_TR, NLES_DISS, & + NLES_TEND, NLES_ADVR, NLES_ADVM, NLES_NEST, NLES_MISC +use modd_parameters, only: XUNDEF + +use mode_les_diachro, only: Les_diachro + IMPLICIT NONE ! ! !* 0.1 declarations of arguments ! TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages -! ! or normalizations ! ! !* 0.2 declaration of local variables ! +integer, parameter :: NMAX_ILES = 40 + INTEGER :: ILES INTEGER :: ILES_STA INTEGER :: JLES @@ -88,21 +96,34 @@ INTEGER :: ILES_P1, ILES_P2 INTEGER :: JK ! vertical loop counter INTEGER :: JT ! temporal loop counter ! -CHARACTER(len=9), DIMENSION(:), ALLOCATABLE :: YSUBTITLE -CHARACTER(len=8) :: YGROUP +CHARACTER(len=9), DIMENSION(NMAX_ILES) :: YSUBTITLE +CHARACTER(len=8) :: YGROUP ! REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLES_BUDGET ! +logical :: gdoavg ! Compute and store time average +logical :: gdonorm ! Compute and store normalized field +type(tfield_metadata_base) :: tzfield !------------------------------------------------------------------------------- ! !* Initializations ! --------------- ! -ALLOCATE(ZLES_BUDGET(NLES_K,NLES_TIMES,40)) -ALLOCATE(YSUBTITLE(40)) +ALLOCATE(ZLES_BUDGET(NLES_K,NLES_TIMES,NMAX_ILES)) ! ZLES_BUDGET=XUNDEF YSUBTITLE(:)=' ' + +tzfield%ngrid = 0 !Not on the Arakawa grid +tzfield%ntype = TYPEREAL +tzfield%ndims = 3 +tzfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL +tzfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME +tzfield%ndimlist(3) = NMNHDIM_BUDGET_TERM +tzfield%ndimlist(4:) = NMNHDIM_UNUSED + +gdoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF +gdonorm = Trim( cles_norm_type ) /= 'NONE' !------------------------------------------------------------------------------- ! !* 1. total (resolved+subgrid) kinetic energy budget @@ -409,9 +430,14 @@ END DO ! ------- ! ! -CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"resolved KE budget"//YSUBTITLE(:ILES),"m2 s-3", & - ZLES_BUDGET(:,:,:ILES),HLES_AVG) -! +tzfield%cmnhname = ygroup +tzfield%cstdname = '' +tzfield%clongname = ygroup +tzfield%ccomment = 'resolved KE budget' +tzfield%cunits = 'm2 s-3' + +call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) ) + !------------------------------------------------------------------------------- ! ! @@ -656,9 +682,14 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES) ! ------- ! ! -CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal variance budget"//YSUBTITLE(:ILES),"K2 s-1", & - ZLES_BUDGET(:,:,:ILES),HLES_AVG) -! +tzfield%cmnhname = ygroup +tzfield%cstdname = '' +tzfield%clongname = ygroup +tzfield%ccomment = 'thetal variance budget' +tzfield%cunits = 'K2 s-1' + +call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) ) + !------------------------------------------------------------------------------- ! !* 3. temperature flux budget @@ -966,15 +997,20 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Thl_SBG_UaW(:,:,1) & ! ------- ! ! -CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal flux budget"//YSUBTITLE(:ILES),"m K s-2", & - ZLES_BUDGET(:,:,:ILES),HLES_AVG) -! -! +tzfield%cmnhname = ygroup +tzfield%cstdname = '' +tzfield%clongname = ygroup +tzfield%ccomment = 'thetal flux budget' +tzfield%cunits = 'm K s-2' + +call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) ) + !------------------------------------------------------------------------------- ! DEALLOCATE(ZLES_BUDGET) -DEALLOCATE(YSUBTITLE) ! !------------------------------------------------------------------------------- ! -END SUBROUTINE WRITE_LES_BUDGET_n +end subroutine Write_les_budget_n + +end module mode_write_les_budget_n diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90 index 0d1dd441c3a6e9aa850b0ed48b6466692dbf4af2..595556a566827243497e934ab67194aeaf397065 100644 --- a/src/MNH/write_les_rt_budgetn.f90 +++ b/src/MNH/write_les_rt_budgetn.f90 @@ -48,20 +48,29 @@ subroutine Write_les_rt_budget_n( tpdiafile ) ! !* 0. DECLARATIONS ! ------------ -! -USE MODD_CST + +use modd_cst, only: xg use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, & NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED, & tfield_metadata_base, TYPEREAL -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES -USE MODD_LES_n -USE MODD_LES_BUDGET -! -USE MODE_ll -! -USE MODE_LES_DIACHRO -! +use modd_io, only: tfiledata +use modd_les, only: cles_norm_type, nles_k, xles_temp_mean_start, xles_temp_mean_end, xles_temp_sampling +use modd_les_n, only: nles_times, & + xles_bu_res_rt2, xles_bu_res_thlrt, xles_bu_res_wrt, & + xles_mean_drtdz, xles_mean_dthldz, xles_mean_thv, xles_mean_w, & + xles_res_ddxa_rt_sbg_uart, xles_res_ddxa_rt_sbg_uaw, xles_res_ddxa_w_sbg_uart, & + xles_res_ddxa_rt_sbg_uathl, xles_res_ddxa_thl_sbg_uart, & + xles_res_ddz_rt_sbg_w2, xles_res_w_sbg_wrt, xles_res_w_sbg_rt2, xles_res_w_sbg_thlrt, & + xles_subgrid_diss_rt2, xles_subgrid_diss_thlrt, xles_subgrid_rt2, xles_subgrid_rtpz, & + xles_subgrid_rtthv, xles_subgrid_thlrt, xles_subgrid_w2, xles_subgrid_wrt, xles_subgrid_wrt2, & + xles_subgrid_w2rt, xles_subgrid_wthl, xles_subgrid_wthlrt, & + xles_z +use modd_les_budget, only: NLES_RELA, NLES_RAD, NLES_GRAV, NLES_COR, NLES_MICR, NLES_HTURB, NLES_VTURB, NLES_FORC, & + NLES_PRES, NLES_DIFF, NLES_PREF, NLES_DP, NLES_TR, NLES_TEND, NLES_ADVM, NLES_NEST, NLES_MISC +use modd_parameters, only: XUNDEF + +use mode_les_diachro, only: Les_diachro + IMPLICIT NONE ! ! diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90 index aa364d42d4d4e38db5ac2fcab393d0e29241aeac..e2434073f1033beb19654ff6f11380b5cb3b02fc 100644 --- a/src/MNH/write_les_sv_budgetn.f90 +++ b/src/MNH/write_les_sv_budgetn.f90 @@ -50,7 +50,7 @@ subroutine Write_les_sv_budget_n( tpdiafile ) ! ------------ ! use modd_conf_n, only: luserv -USE MODD_CST, only: xg +use modd_cst, only: xg use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_SV, & NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED, & tfield_metadata_base, TYPEREAL @@ -64,9 +64,9 @@ use modd_les_n, only: nles_times, xles_subgrid_diss_sv2, xles_subgrid_sv2, xles_subgrid_svpz, xles_subgrid_svthv, & xles_subgrid_w2, xles_subgrid_wsv, xles_subgrid_wsv2, xles_subgrid_w2sv, & xles_z -USE MODD_LES_BUDGET, only: NLES_RELA, NLES_GRAV, NLES_COR, NLES_HTURB, NLES_VTURB, NLES_FORC, NLES_PRES, & +use modd_les_budget, only: NLES_RELA, NLES_GRAV, NLES_COR, NLES_HTURB, NLES_VTURB, NLES_FORC, NLES_PRES, & NLES_DIFF, NLES_DP, NLES_TR, NLES_TEND, NLES_ADVM, NLES_NEST, NLES_MISC -USE MODD_NSV, only: nsv +use modd_nsv, only: nsv use modd_parameters, only: XUNDEF use mode_les_diachro, only: Les_diachro diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90 index 846710566fabe4c0018cbc84d2d2db564f136337..6ec6dde61648f1e0affba7a1fbe32df7c49b8b20 100644 --- a/src/MNH/write_lesn.f90 +++ b/src/MNH/write_lesn.f90 @@ -83,10 +83,10 @@ USE MODE_ll USE MODE_LES_DIACHRO use mode_les_spec_n, only: Les_spec_n USE MODE_MODELN_HANDLER +use mode_write_les_budget_n, only: Write_les_budget_n use mode_write_les_rt_budget_n, only: Write_les_rt_budget_n use mode_write_les_sv_budget_n, only: Write_les_sv_budget_n ! -USE MODI_WRITE_LES_BUDGET_n ! IMPLICIT NONE ! @@ -1402,14 +1402,13 @@ IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN END IF ! +end do AVG !------------------------------------------------------------------------------- ! !* 4. LES budgets ! ----------- ! -CALL WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG) - -end do AVG +call Write_les_budget_n( tpdiafile ) if ( luserv ) call Write_les_rt_budget_n( tpdiafile )