From 92a2e8ffa453f026ab7c123c44f99736ee56fd23 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Tue, 28 Jan 2020 16:55:55 +0100 Subject: [PATCH] Philippe 28/01/2020: budgets: use the new data structures and subroutines for budgets for U --- src/MNH/advection_uvw.f90 | 26 +++-- src/MNH/advection_uvw_cen.f90 | 31 ++--- src/MNH/drag_veg.f90 | 30 +++-- src/MNH/dyn_sources.f90 | 32 ++++-- src/MNH/endstep.f90 | 50 +++++--- src/MNH/endstep_budget.f90 | 30 ++++- src/MNH/forcing.f90 | 21 +++- src/MNH/ini_budget.f90 | 210 ++++++++++++++++++---------------- src/MNH/initial_guess.f90 | 51 +++++---- src/MNH/modeln.f90 | 27 +++-- src/MNH/nudging.f90 | 16 ++- src/MNH/num_diff.f90 | 35 +++--- src/MNH/pressure.f90 | 15 ++- src/MNH/pressurez.f90 | 15 ++- src/MNH/relaxation.f90 | 42 ++++--- src/MNH/shallow_mf_pack.f90 | 10 +- src/MNH/turb.f90 | 30 +++-- src/MNH/two_way.f90 | 26 +++-- src/MNH/viscosity.f90 | 27 +++-- src/MNH/write_budget.f90 | 6 +- 20 files changed, 448 insertions(+), 282 deletions(-) diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index 54b6db96a..5e18671a4 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -92,22 +92,25 @@ END MODULE MODI_ADVECTION_UVW !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! C.LAC 10/2016 : Add OSPLIT_WENO ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll -USE MODD_PARAMETERS, ONLY : JPVEXT +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, NBUDGET_U, NBUDGET_V, NBUDGET_W, tbudgets USE MODD_CONF, ONLY : NHALO -USE MODD_BUDGET -! -USE MODI_SHUMAN -USE MODI_CONTRAV -USE MODI_ADVECUVW_RK +USE MODD_PARAMETERS, ONLY : JPVEXT + +use mode_budget, only: Budget_store_init, Budget_store_end +USE MODE_ll + USE MODI_ADV_BOUNDARIES +USE MODI_ADVECUVW_RK USE MODI_BUDGET +USE MODI_CONTRAV +USE MODI_SHUMAN ! !------------------------------------------------------------------------------- ! @@ -197,7 +200,9 @@ IKU = SIZE(PWT,3) ZMXM_RHODJ = MXM(PRHODJ) ZMYM_RHODJ = MYM(PRHODJ) ZMZM_RHODJ = MZM(1,IKU,1,PRHODJ) -! + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'ADV', prus ) + !------------------------------------------------------------------------------- ! !* 1. COMPUTES THE CONTRAVARIANT COMPONENTS @@ -319,7 +324,8 @@ END DO !* 4. BUDGETS ! ------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'ADV', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW') !------------------------------------------------------------------------------- diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90 index ea8051c4e..f1b1d8eb8 100644 --- a/src/MNH/advection_uvw_cen.f90 +++ b/src/MNH/advection_uvw_cen.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -88,27 +88,28 @@ END MODULE MODI_ADVECTION_UVW_CEN !! Original 01/2013 (from ADVECTION routine) !! Modif !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -! +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll USE MODD_CONF -USE MODD_PARAMETERS +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, NBUDGET_U, NBUDGET_V, NBUDGET_W, tbudgets USE MODD_GRID_n -! -USE MODI_SHUMAN -USE MODI_CONTRAV +USE MODD_PARAMETERS + +use mode_budget, only: Budget_store_init, Budget_store_end +USE MODE_ll + USE MODI_ADVECUVW_2ND USE MODI_ADVECUVW_4TH -! -USE MODD_BUDGET USE MODI_BUDGET -! +USE MODI_CONTRAV +USE MODI_SHUMAN + !------------------------------------------------------------------------------- ! IMPLICIT NONE @@ -179,6 +180,9 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKU = SIZE(XZHAT) IKB=1+JPVEXT IKE=IKU-JPVEXT + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'ADV', prus ) + ZMXM_RHODJ = MXM(PRHODJ) ZMYM_RHODJ = MYM(PRHODJ) ZMZM_RHODJ = MZM(1,IKU,1,PRHODJ) @@ -247,8 +251,9 @@ PRWS(:,:,:) = PRWS(:,:,:) + ( ZWS(:,:,:) - PWM(:,:,:) - 0.5* PDWM) * ZMZM_RHODJ/ PDUM = ZUS(:,:,:) - PUM(:,:,:) PDVM = ZVS(:,:,:) - PVM(:,:,:) PDWM = ZWS(:,:,:) - PWM(:,:,:) -! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU') + +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'ADV', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW') ! diff --git a/src/MNH/drag_veg.f90 b/src/MNH/drag_veg.f90 index e8ece294e..fbd159cf2 100644 --- a/src/MNH/drag_veg.f90 +++ b/src/MNH/drag_veg.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2009-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2009-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. @@ -74,29 +74,32 @@ SUBROUTINE DRAG_VEG(PTSTEP,PUT,PVT,PTKET,ODEPOTREE, PVDEPOTREE, & !! S. Donier 06/2015 : bug surface aerosols !! C.Lac 07/2016 : Add droplet deposition !! C.Lac 10/2017 : Correction on deposition +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !!--------------------------------------------------------------- ! ! !* 0. DECLARATIONS ! ------------ ! +use modd_budget, only: lbudget_u, lbudget_v, lbudget_rc, lbudget_sv, lbudget_tke, & + NBUDGET_U, NBUDGET_V, NBUDGET_RC, NBUDGET_SV1, NBUDGET_TKE, & + tbudgets USE MODD_CONF USE MODD_CST USE MODD_DYN USE MODD_DYN_n -USE MODD_VEG_n -USE MODD_BUDGET -USE MODD_PARAM_C2R2 +USE MODD_GROUND_PAR USE MODD_NSV - -! -USE MODI_SHUMAN +USE MODD_PARAM_C2R2 USE MODD_PGDFIELDS -USE MODD_GROUND_PAR -USE MODI_MNHGET_SURF_PARAM_n +USE MODD_VEG_n + +use mode_budget, only: Budget_store_init, Budget_store_end + USE MODI_BUDGET +USE MODI_MNHGET_SURF_PARAM_n +USE MODI_SHUMAN -! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -149,6 +152,8 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZWDEPR,ZWDEPS IIU = SIZE(PUT,1) IJU = SIZE(PUT,2) IKU = SIZE(PUT,3) + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'DRAG', prus ) ! !* 0.3 Initialisation de kelkes variables ! @@ -270,8 +275,9 @@ IF (ODEPOTREE) THEN ! ! END IF -! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'DRAG_BU_RU') + +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'DRAG', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'DRAG_BU_RV') IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'DEPOTR_BU_RRC') IF (LBUDGET_SV) CALL BUDGET (PSVS(:,:,:,NSV_C2R2BEG+1),NBUDGET_SV1+(NSV_C2R2BEG-1)+1,'DEPOTR_BU_RSV') diff --git a/src/MNH/dyn_sources.f90 b/src/MNH/dyn_sources.f90 index 56c6a2010..3970a0c03 100644 --- a/src/MNH/dyn_sources.f90 +++ b/src/MNH/dyn_sources.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -147,22 +147,26 @@ END MODULE MODI_DYN_SOURCES !! Correction 06/10 (C.Lac) Exclude L1D for Coriolis term !! Modification 03/11 (C.Lac) Split the gravity term due to buoyancy !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, & + tbudgets USE MODD_CONF USE MODD_CST USE MODD_DYN -! -USE MODI_SHUMAN -USE MODI_GRADIENT_M -USE MODI_BUDGET -! + +use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_MPPDB -! + +USE MODI_BUDGET +USE MODI_GRADIENT_M +USE MODI_SHUMAN + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -220,7 +224,9 @@ IKU = SIZE(PUT,3) ! ! Only when earth rotation is considered but not in 1D and CARTESIAN cases ! -IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) ) THEN +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'CURV', prus ) + +IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) ) THEN IF ( LTHINSHELL ) THEN ! THINSHELL approximation ! ZWORK1(:,:,:) = SPREAD( PCURVX(:,:),DIM=3,NCOPIES=IKU ) / XRADIUS @@ -263,7 +269,8 @@ IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) ) THEN ! END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'CURV_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'CURV', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'CURV_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'CURV_BU_RW') ! @@ -272,6 +279,8 @@ IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'CURV_BU_RW') !* 3. COMPUTES THE CORIOLIS TERMS ! --------------------------- ! +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'COR', prus ) + IF (LCORIO) THEN ! ZWORK3(:,:,:) = SPREAD( PCORIOZ(:,:),DIM=3,NCOPIES=IKU ) * PRHODJ(:,:,:) @@ -294,7 +303,8 @@ IF (LCORIO) THEN ! END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'COR_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'COR', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'COR_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'COR_BU_RW') ! diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90 index d29f434ea..e533c689b 100644 --- a/src/MNH/endstep.f90 +++ b/src/MNH/endstep.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -192,28 +192,35 @@ END MODULE MODI_ENDSTEP !! 04/2014 (C.Lac) Check on the positivity of PSVT !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! 02/2019 (S. Bielli) Sea salt : significant sea wave height influences salt emission; 5 salt modes -!! +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_DYN +USE MODD_BLOWSNOW +USE MODD_BLOWSNOW_n +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_tke, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, lbu_enable, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + nbuctr_actv, nbuprocctr, nbustep, tbudgets +USE MODD_CH_AEROSOL, ONLY: LORILAM USE MODD_CONF USE MODD_CTURB +USE MODD_DUST, ONLY: LDUST +USE MODD_DYN USE MODD_GRID_n -USE MODD_BUDGET -USE MODD_NSV, ONLY : XSVMIN, NSV_CHEMBEG, NSV_CHEMEND, & - NSV_AERBEG, NSV_AEREND,& - NSV_DSTBEG, NSV_DSTEND,& - NSV_SNWBEG, NSV_SNWEND -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_DUST, ONLY : LDUST -USE MODD_PARAM_C2R2, ONLY : LACTIT -USE MODD_PARAM_LIMA, ONLY : LACTIT_LIMA=>LACTIT -USE MODD_LBC_n, ONLY : CLBCX, CLBCY -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n +USE MODD_LBC_n, ONLY: CLBCX, CLBCY +USE MODD_NSV, ONLY: XSVMIN, NSV_CHEMBEG, NSV_CHEMEND, & + NSV_AERBEG, NSV_AEREND,& + NSV_DSTBEG, NSV_DSTEND,& + NSV_SNWBEG, NSV_SNWEND +USE MODD_PARAM_C2R2, ONLY: LACTIT +USE MODD_PARAM_LIMA, ONLY: LACTIT_LIMA=>LACTIT + +use mode_budget, only: Budget_store_end, Budget_store_init + USE MODI_BUDGET USE MODI_SHUMAN ! @@ -516,8 +523,10 @@ END IF IF (LBU_ENABLE) THEN NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 3 NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 3 -! - IF (LBUDGET_U) CALL BUDGET( PUT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_U, 'AVEF_BU_RU' ) + + !Division by nbustep to compute average on the selected time period + if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'AVEF', put(:, :, :) * prhodj(:, :, :) / ( ptstep * nbustep ) ) + IF (LBUDGET_V) CALL BUDGET( PVT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_V, 'AVEF_BU_RV' ) IF (LBUDGET_W) CALL BUDGET( PWT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_W, 'AVEF_BU_RW' ) IF (LBUDGET_TH) CALL BUDGET( PTHT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_TH, 'AVEF_BU_RTH' ) @@ -537,8 +546,11 @@ IF (LBU_ENABLE) THEN ! NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 2 NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 2 -! - IF (LBUDGET_U) CALL BUDGET( PUS * MXM(PRHODJ) / PTSTEP, NBUDGET_U, 'ENDF_BU_RU' ) + + if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'ENDF', pus(:, :, :) * Mxm( prhodj(:, :, :) ) / ptstep ) + + if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'ASSE', pus(:, :, :) * Mxm( prhodj(:, :, :) ) / ptstep ) + IF (LBUDGET_V) CALL BUDGET( PVS * MYM(PRHODJ) / PTSTEP, NBUDGET_V, 'ENDF_BU_RV' ) IF (LBUDGET_W) CALL BUDGET( PWS * MZM(1,IKU,1,PRHODJ) / PTSTEP, NBUDGET_W, 'ENDF_BU_RW' ) IF (LBUDGET_TH) CALL BUDGET( PTHS * PRHODJ / PTSTEP, NBUDGET_TH, 'ENDF_BU_RTH' ) diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90 index 8018b390e..06bf6ad2a 100644 --- a/src/MNH/endstep_budget.f90 +++ b/src/MNH/endstep_budget.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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. @@ -93,22 +93,22 @@ END MODULE MODI_ENDSTEP_BUDGET !! N. Asensio 22/06/99 // MASK case : delete KIU,KJU,KKU arguments !! and change the write_budget call !! C.Lac 11/09/15 adaptation to FIT temporal scheme -! 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 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODD_BUDGET USE MODD_IO, ONLY: TFILEDATA USE MODD_TIME -USE MODD_BUDGET ! +use mode_msg use mode_write_budget, only: Write_budget ! IMPLICIT NONE ! -! !* 0.1 Declarations of arguments : ! TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write @@ -116,9 +116,13 @@ INTEGER, INTENT(IN) :: KTCOUNT ! temporal loop counter TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! Current date and time REAL, INTENT(IN) :: PTSTEP ! time step INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -! + +integer :: jbu, jgrp + !------------------------------------------------------------------------------- ! +call Print_msg( NVERB_DEBUG, 'BUD', 'Endstep_budget', 'called' ) + SELECT CASE(CBUTYPE) ! ! @@ -151,6 +155,14 @@ SELECT CASE(CBUTYPE) IF (ALLOCATED(XBURHODJV)) XBURHODJV=0. IF (ALLOCATED(XBURHODJW)) XBURHODJW=0. IF (ALLOCATED(XBURHODJ)) XBURHODJ =0. + + if ( tbudgets(NBUDGET_U)%lenabled ) tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) = 0. + + do jbu = 1, nbudgets + do jgrp = 1, tbudgets(jbu)%ngroups + tbudgets(jbu)%tgroups(jgrp)%xdata(:, :, : ) = 0. + end do + end do ! !* 1.3 reset budget beginning flag to TRUE ! @@ -187,6 +199,12 @@ SELECT CASE(CBUTYPE) IF (ALLOCATED(XBURHODJV)) XBURHODJV=0. IF (ALLOCATED(XBURHODJW)) XBURHODJW=0. IF (ALLOCATED(XBURHODJ)) XBURHODJ =0. + + do jbu = 1, nbudgets + do jgrp = 1, tbudgets(jbu)%ngroups + tbudgets(jbu)%tgroups(jgrp)%xdata(:, :, : ) = 0. + end do + end do ! NBUTIME=0 ! diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90 index fbf7f239a..bc26487f9 100644 --- a/src/MNH/forcing.f90 +++ b/src/MNH/forcing.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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. @@ -143,15 +143,20 @@ END MODULE MODI_FORCING !! 06/2012 V. Masson Adds tendency of geostrophic wind itself to wind tendency !! 01/2014 J. escobar correction for // initialisation geostrophic ZUF,ZVF,ZWF !! 09/2017 Q.Rodier add LTEND_UV_FRC -!! 28/03/2018 P. Wautelet Replace TEMPORAL_DIST by DATETIME_DISTANCE -!! use overloaded comparison operator for date_time -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE +! use overloaded comparison operator for date_time +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_tke, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets USE MODD_CONF USE MODD_CST USE MODD_DYN @@ -160,6 +165,7 @@ USE MODD_LUNIT USE MODD_PARAMETERS USE MODD_TIME ! +use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_DATETIME USE MODE_MSG ! @@ -246,6 +252,8 @@ IJU=SIZE(PUT,2) IKU=SIZE(PUT,3) ! ILUOUT0 = TLUOUT0%NLU + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'FRC', prus ) ! !* 1. PREPARATION OF FORCING ! ---------------------- @@ -827,7 +835,8 @@ END IF ! ------------ ! ! -IF (LBUDGET_U) CALL BUDGET (PRUS, NBUDGET_U, 'FRC_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'FRC', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS, NBUDGET_V, 'FRC_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS, NBUDGET_W, 'FRC_BU_RW') IF (LBUDGET_TH) CALL BUDGET (PRTHS, NBUDGET_TH, 'FRC_BU_RTH') diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 4a5b3f689..5f88ea132 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -103,6 +103,7 @@ contains !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 15/11/2019: remove unused CBURECORD variable +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -112,6 +113,7 @@ USE MODD_PARAMETERS USE MODD_BUDGET USE MODD_DYN USE MODD_CONF +use modd_field, only: TYPEREAL USE MODD_PARAM_ICE USE MODD_PARAM_C2R2 USE MODD_ELEC_DESCR, ONLY : LINDUCTIVE @@ -122,6 +124,7 @@ USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI, & OHAIL=>LHAIL, OSCAV=>LSCAV, OMEYERS=>LMEYERS,& ODEPOC=>LDEPOC, OPTSPLIT=>LPTSPLIT, & NMOD_CCN +use modd_viscosity, only: lvisc ! USE MODE_ll USE MODE_MSG @@ -206,18 +209,13 @@ INTEGER :: JSV ! loop indice for the SVs INTEGER :: IBUPROCNBR_SV_MAX ! Max number of processes for the SVs INTEGER :: ILAST_PROC_NBR ! Index of the last process number INTEGER :: IINFO_ll ! return status of the interface routine -INTEGER :: IRESP ! Return code of FM-routines -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!! -!!! the lines below must be update as soon as MODD_BUDGET is updated -!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!------------------------------------------------------------------------------- +integer :: isourcesmax ! Maximum number of source terms in a budget +type(tbusourcedata) :: tzsource ! Used to prepare metadate of source terms + +call Print_msg( NVERB_DEBUG, 'BUD', 'Ini_budget', 'called' ) + +nbudgets = NBUDGET_SV1 - 1 + ksv +allocate( tbudgets( nbudgets ) ) ! !* 1. COMPUTE BUDGET VARIABLES ! ------------------------ @@ -361,110 +359,119 @@ IPROACTV(:,JPBUPROMAX+1) = 0 GERROR=.FALSE. YWORK2(:,:) = ' ' YEND_COMMENT(:) = ' ' -! -! Budget of RU -IF (LBU_RU) THEN - YWORK2(NBUDGET_U, 1) = 'INIF_' - YWORK2(NBUDGET_U, 2) = 'ENDF_' +tzsource%ntype = TYPEREAL +tzsource%ndims = 3 - YWORK2(NBUDGET_U, 3) = 'AVEF_' +! Budget of RU +tbudgets(NBUDGET_U )%cname = "BU_RU" +tbudgets(NBUDGET_U )%ccomment = "Budget for U" - IPROC=4 - YWORK2(NBUDGET_U, IPROC) = 'ASSE_' - IPROACTV(NBUDGET_U, IPROC) = NASSEU +tbudgets(NBUDGET_U)%lenabled = lbu_ru - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'NEST_' - IF( NMODEL>1 ) IPROACTV(NBUDGET_U, IPROC) = NNESTU +if (lbu_ru) then + allocate( tbudgets(NBUDGET_U)%trhodj ) + tbudgets(NBUDGET_U)%trhodj%cmnhname = 'RhodJX' + tbudgets(NBUDGET_U)%trhodj%cstdname = '' + tbudgets(NBUDGET_U)%trhodj%clongname = 'RhodJX' + tbudgets(NBUDGET_U)%trhodj%cunits = 'kg' + tbudgets(NBUDGET_U)%trhodj%ccomment = 'RhodJ for momentum along X axis' + tbudgets(NBUDGET_U)%trhodj%ngrid = 2 + tbudgets(NBUDGET_U)%trhodj%ntype = TYPEREAL + tbudgets(NBUDGET_U)%trhodj%ndims = 3 - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'FRC_' - IF( LFORCING ) IPROACTV(NBUDGET_U, IPROC) = NFRCU + allocate( tbudgets(NBUDGET_U)%trhodj%xdata(ibudim1, ibudim2, ibudim3) ) + tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) = 0. - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'NUD_' - IF( ONUDGING ) IPROACTV(NBUDGET_U, IPROC) = NNUDU + !Allocate all basic source terms (used or not) + !The size should be large enough (bigger than necessary is OK) + isourcesmax = 18 + tbudgets(NBUDGET_U)%nsourcesmax = isourcesmax + allocate( tbudgets(NBUDGET_U)%tsources(isourcesmax) ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'CURV_' - IF ( .NOT. LCARTESIAN ) THEN - IPROACTV(NBUDGET_U, IPROC) = NCURVU - ELSE - IPROACTV(NBUDGET_U, IPROC) = 4 - END IF + allocate( tbudgets(NBUDGET_U)%xtmpstore(ibudim1, ibudim2, ibudim3) ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'COR_' - IF ( LCORIO ) THEN - IPROACTV(NBUDGET_U, IPROC) = NCORU - ELSE - IPROACTV(NBUDGET_U, IPROC) = 4 - END IF + tbudgets(NBUDGET_U)%tsources(:)%ngroup = 0 - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'DIF_' - IF ( ONUMDIFU ) IPROACTV(NBUDGET_U, IPROC) = NDIFU + tzsource%ccomment = 'Budget of momentum along X axis' + tzsource%ngrid = 2 - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'REL_' - IF ( OHORELAX_UVWTH .OR. OVE_RELAX ) THEN - IPROACTV(NBUDGET_U, IPROC) = NRELU - ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & - OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & - OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN - IPROACTV(NBUDGET_U, IPROC) = 4 - ELSE - IPROACTV(NBUDGET_U, IPROC) = 3 - END IF - END IF + tzsource%cunits = 'm s-1' - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'DRAG_' - IF( ODRAGTREE ) IPROACTV(NBUDGET_U, IPROC) = NDRAGU + tzsource%cmnhname = 'INIF' + tzsource%clongname = 'initial state' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., 1, odonotinit = .true., ooverwrite = .true. ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'VTURB_' - IF ( HTURB /= 'NONE' ) IPROACTV(NBUDGET_U, IPROC) = NVTURBU + tzsource%cmnhname = 'ENDF' + tzsource%clongname = 'final state' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., 1, odonotinit = .true., ooverwrite = .true. ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'HTURB_' - IF ( HTURB /= 'NONE' .AND. HTURBDIM == '3DIM' ) THEN - IPROACTV(NBUDGET_U, IPROC) = NHTURBU - ELSE - IF ( HTURB /= 'NONE' ) THEN - IPROACTV(NBUDGET_U, IPROC) = 4 - ELSE - IPROACTV(NBUDGET_U, IPROC) = 3 - END IF - END IF + tzsource%cmnhname = 'AVEF' + tzsource%clongname = 'averaged state' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., 1, odonotinit = .true., ooverwrite = .false. ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'MAFL_' - IF ( HSCONV == 'EDKF' ) IPROACTV(NBUDGET_U, IPROC) = NMAFLU + tzsource%cunits = 'm s-2' - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'ADV_' - IPROACTV(NBUDGET_U, IPROC) = NADVU + tzsource%cmnhname = 'ASSE' + tzsource%clongname = 'time filter (Asselin)' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., nasseu ) - IPROC=IPROC+1 - YWORK2(NBUDGET_U, IPROC) = 'PRES_' - IPROACTV(NBUDGET_U, IPROC) = NPRESU -! - YEND_COMMENT(NBUDGET_U) = 'BU_RU' - NBUPROCNBR(NBUDGET_U) = 3 !Initial number of budgets, will be increazed later if necessary -! - CBUACTION(NBUDGET_U, 1) = 'IG' - CBUACTION(NBUDGET_U, 2) = 'CC' - CBUACTION(NBUDGET_U, 3) = 'ES' -! - DO JJ=1,3 - CBUCOMMENT(NBUDGET_U, JJ) = ADJUSTL( ADJUSTR( YWORK2(NBUDGET_U, JJ) ) // & - ADJUSTL( YEND_COMMENT(NBUDGET_U) ) ) - END DO -! -END IF + tzsource%cmnhname = 'NEST' + tzsource%clongname = 'nesting' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, nmodel > 1, nnestu ) + + tzsource%cmnhname = 'FRC' + tzsource%clongname = 'forcing' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, lforcing, nfrcu ) + + tzsource%cmnhname = 'NUD' + tzsource%clongname = 'nudging' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, onudging, nnudu ) + + tzsource%cmnhname = 'CURV' + tzsource%clongname = 'curvature' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .not. lcartesian, ncurvu ) + + tzsource%cmnhname = 'COR' + tzsource%clongname = 'Coriolis' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, lcorio, ncoru ) + + tzsource%cmnhname = 'DIF' + tzsource%clongname = 'numerical diffusion' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, onumdifu, ndifu ) + + tzsource%cmnhname = 'REL' + tzsource%clongname = 'relaxation' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, ohorelax_uvwth .or. ove_relax, nrelu ) + + tzsource%cmnhname = 'DRAG' + tzsource%clongname = 'drag force' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, odragtree, ndragu ) + + tzsource%cmnhname = 'VTURB' + tzsource%clongname = 'vertical turbulent diffusion' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, hturb /= 'NONE', nvturbu ) + + tzsource%cmnhname = 'HTURB' + tzsource%clongname = 'horizontal turbulent diffusion' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, hturb /= 'NONE' .and. HTURBDIM == '3DIM', nhturbu ) + + tzsource%cmnhname = 'MAFL' + tzsource%clongname = 'mass flux' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, hsconv == 'EDKF', nmaflu ) + + tzsource%cmnhname = 'VISC' + tzsource%clongname = 'viscosity' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, lvisc, nviscu ) + + tzsource%cmnhname = 'ADV' + tzsource%clongname = 'advection' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., nadvu ) + + tzsource%cmnhname = 'PRES' + tzsource%clongname = 'pressure' + call Budget_source_add( tbudgets(NBUDGET_U), tzsource, .true., npresu ) +end if ! ! Budget of RV IF (LBU_RV) THEN @@ -2686,6 +2693,9 @@ END IF IF (GERROR) THEN call Print_msg( NVERB_FATAL, 'BUD', 'INI_BUDGET', '' ) ENDIF + +call Ini_budget_groups( tbudgets, ibudim1, ibudim2, ibudim3 ) + !------------------------------------------------------------------------------- !* 5. ALLOCATE MEMORY FOR BUDGET STORAGE ARRAYS ! ----------------------------------------- diff --git a/src/MNH/initial_guess.f90 b/src/MNH/initial_guess.f90 index fe169bfcd..43eb8c20c 100644 --- a/src/MNH/initial_guess.f90 +++ b/src/MNH/initial_guess.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- ! ######################### MODULE MODI_INITIAL_GUESS ! ######################### @@ -144,22 +139,28 @@ END MODULE MODI_INITIAL_GUESS !! 20/05/06 Remove KEPS !! 10/09 (C.Lac) FIT for variables advected with PPM !! 04/13 (C.Lac) FIT for all variables -!! 07/19 (J.Escobar) add reproductiblity test => MPPDB_CHECK( PRRS/RT/RHO ) -!! +! J. Escobar) 07/2019: add reproductiblity test => MPPDB_CHECK( PRRS/RT/RHO ) +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF -USE MODD_GRID_n -USE MODD_BUDGET USE MODD_BLOWSNOW USE MODD_BLOWSNOW_n -! -USE MODI_SHUMAN -USE MODI_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_tke, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + lbu_beg, lbu_enable, nbuctr_actv, nbuprocctr, tbudgets +USE MODD_CONF +USE MODD_GRID_n + +use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_MPPDB + +USE MODI_BUDGET +USE MODI_SHUMAN ! IMPLICIT NONE ! @@ -239,8 +240,10 @@ IF (LBU_ENABLE) THEN IF (LBU_BEG) THEN NBUPROCCTR(:)=1 NBUCTR_ACTV(:)=1 -! - IF (LBUDGET_U) CALL BUDGET( PRUS, NBUDGET_U, 'INIF_BU_RU' ) + + !Remark: does not need a call to Budget_store_init because the budget array is overwritten for this source term + if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'INIF', prus ) + IF (LBUDGET_V) CALL BUDGET( PRVS, NBUDGET_V, 'INIF_BU_RV' ) IF (LBUDGET_W) CALL BUDGET( PRWS, NBUDGET_W, 'INIF_BU_RW' ) IF (LBUDGET_TH) CALL BUDGET( PRTHS, NBUDGET_TH, 'INIF_BU_RTH' ) @@ -259,7 +262,6 @@ IF (LBU_ENABLE) THEN NBUPROCCTR(:)=2 NBUCTR_ACTV(:)=2 ! - IF (LBUDGET_U) CALL BUDGET( PRUS, NBUDGET_U, 'ENDF_BU_RU' ) IF (LBUDGET_V) CALL BUDGET( PRVS, NBUDGET_V, 'ENDF_BU_RV' ) IF (LBUDGET_W) CALL BUDGET( PRWS, NBUDGET_W, 'ENDF_BU_RW' ) IF (LBUDGET_TH) CALL BUDGET( PRTHS, NBUDGET_TH, 'ENDF_BU_RTH' ) @@ -274,8 +276,6 @@ IF (LBU_ENABLE) THEN DO JSV=1,KSV IF (LBUDGET_SV) CALL BUDGET( PRSVS(:,:,:,JSV), JSV + NBUDGET_SV1 - 1, 'ENDF_BU_RSV' ) END DO -! - LBU_BEG=.FALSE. END IF ! NBUPROCCTR(:)=4 @@ -283,7 +283,12 @@ IF (LBU_ENABLE) THEN ! ! stores the Asselin source term ! - IF (LBUDGET_U) CALL BUDGET( PRUS, NBUDGET_U, 'ASSE_BU_RU' ) + !The Asselin source term is computed from the end of the previous time step to now + !Therefore, it has to be stored only if not the 1st timestep of the budget + if ( .not. lbu_beg ) then + if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'ASSE', prus ) + end if + IF (LBUDGET_V) CALL BUDGET( PRVS, NBUDGET_V, 'ASSE_BU_RV' ) IF (LBUDGET_W) CALL BUDGET( PRWS, NBUDGET_W, 'ASSE_BU_RW' ) IF (LBUDGET_TH) CALL BUDGET( PRTHS, NBUDGET_TH, 'ASSE_BU_RTH' ) @@ -299,7 +304,9 @@ IF (LBU_ENABLE) THEN IF (LBUDGET_SV) CALL BUDGET( PRSVS(:,:,:,JSV), JSV + NBUDGET_SV1 - 1, 'ASSE_BU_RSV' ) END DO END IF -! + +LBU_BEG=.FALSE. + !------------------------------------------------------------------------------- ! END SUBROUTINE INITIAL_GUESS diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index eab765970..0fa0909ad 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -265,7 +265,8 @@ END MODULE MODI_MODEL_n ! J. Escobar 09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T ! J. Escobar 09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management -! J. Escobar 27/09/2019: add missing report timing of RESOLVED_ELEC +! J. Escobar 27/09/2019: add missing report timing of RESOLVED_ELEC +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -277,19 +278,20 @@ USE MODD_AIRCRAFT_BALLOON USE MODD_BAKOUT USE MODD_BIKHARDT_n USE MODD_BLANK +USE MODD_BLOWSNOW +USE MODD_BLOWSNOW_n USE MODD_BUDGET USE MODD_CH_AERO_n, ONLY: XSOLORG, XMI USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LCH_CONV_LINOX,LUSECHAQ,LUSECHIC, & LCH_INIT_FIELD USE MODD_CLOUD_MF_n -USE MODD_VISCOSITY -USE MODD_DRAG_n USE MODD_CLOUDPAR_n USE MODD_CONF USE MODD_CONF_n USE MODD_CURVCOR_n USE MODD_DEEP_CONVECTION_n USE MODD_DIM_n +USE MODD_DRAG_n USE MODD_DUST, ONLY: LDUST USE MODD_DYN USE MODD_DYN_n @@ -327,8 +329,6 @@ USE MODD_PARAM_LIMA, ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, & MACTIT => LACTIT, LSCAV, LCOLD, & MSEDI => LSEDI, MHHONI => LHHONI, LHAIL, & XRTMIN_LIMA=>XRTMIN, MACTTKE=>LACTTKE -USE MODD_BLOWSNOW_n -USE MODD_BLOWSNOW USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PAST_FIELD_n @@ -348,7 +348,9 @@ USE MODD_TIME_n USE MODD_TIMEZ USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI USE MODD_TURB_n +USE MODD_VISCOSITY ! +use mode_budget, only: Budget_store_init USE MODE_DATETIME USE MODE_ELEC_ll USE MODE_GRIDCART @@ -392,7 +394,6 @@ USE MODI_INI_MEAN_FIELD USE MODI_INITIAL_GUESS USE MODI_LES_INI_TIMESTEP_n USE MODI_LES_N -USE MODI_VISCOSITY USE MODI_LIMA_PRECIP_SCAVENGING USE MODI_LS_COUPLING USE MODI_MASK_COMPRESS @@ -419,6 +420,7 @@ USE MODI_STATION_n USE MODI_TURB_CLOUD_INDEX USE MODI_TWO_WAY USE MODI_UPDATE_NSV +USE MODI_VISCOSITY USE MODI_WRITE_AIRCRAFT_BALLOON USE MODI_WRITE_DESFM_n USE MODI_WRITE_DIAG_SURF_ATM_N @@ -995,6 +997,10 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='MASK' ) THEN IF (ALLOCATED(XBURHODJ)) & XBURHODJ (:,NBUTIME,:) = XBURHODJ (:,NBUTIME,:) & + MASK_COMPRESS(XRHODJ) + if ( lbu_ru ) then + tbudgets(NBUDGET_U)%trhodj%xdata(:, nbutime, :) = tbudgets(NBUDGET_U)%trhodj%xdata(:, nbutime, :) & + + Mask_compress( Mxm( xrhodj(:, :, :) ) ) + end if END IF ! IF (NBUMOD==IMI .AND. CBUTYPE=='CART' ) THEN @@ -1007,6 +1013,9 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='CART' ) THEN IF (ALLOCATED(XBURHODJ)) & XBURHODJ (:,:,:) = XBURHODJ (:,:,:) & + CART_COMPRESS(XRHODJ) + if ( lbu_ru ) then + tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) = tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) + Cart_compress( Mxm( xrhodj(:, :, :) ) ) + end if END IF ! CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR, & @@ -1607,7 +1616,9 @@ ZRUS=XRUS ZRVS=XRVS ZRWS=XRWS ! - CALL RAD_BOUND (CLBCX,CLBCY,CTURB,XCARPKMAX, & +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'PRES', xrus ) + +CALL RAD_BOUND (CLBCX,CLBCY,CTURB,XCARPKMAX, & XTSTEP, & XDXHAT, XDYHAT, XZHAT, & XUT, XVT, & diff --git a/src/MNH/nudging.f90 b/src/MNH/nudging.f90 index 28d18b0e8..d65ad77ee 100644 --- a/src/MNH/nudging.f90 +++ b/src/MNH/nudging.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2006-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2006-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. @@ -74,13 +74,18 @@ END MODULE MODI_NUDGING !! MODIFICATIONS !! ------------- !! Original 15/05/06 +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET -! +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_rv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_RV, & + tbudgets + +use mode_budget, only: Budget_store_init, Budget_store_end + USE MODI_BUDGET ! IMPLICIT NONE @@ -109,6 +114,8 @@ REAL :: ZINVTAU ! inverse of nudging time scale ! ! ZINVTAU=1./PTNUDGING + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'NUD', prus ) ! !* 1. NUGDGING TOWARDS LS FIELDS ! -------------------------- @@ -124,7 +131,8 @@ IF (OUSERV) & !* 2. BUDGET CALLS ! ------------ ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'NUD_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'NUD', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'NUD_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'NUD_BU_RW') IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'NUD_BU_RTH') diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90 index 800f23a1b..eb0f21630 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -212,24 +212,30 @@ END MODULE MODI_NUM_DIFF !! J.Escobar : 05/12/2017 : Pb SegFault , correct IF(ONUMDIFTH/OZDIFFU) nesting ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! J. Escobar 09/07/2019: add TTZHALO2*LIST structure, to match all cases of diffusion/U/TH activation T/F -!! +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U +! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll ! -USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_BUDGET USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll -! -USE MODI_SHUMAN -USE MODI_BUDGET -! +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_tke, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets +USE MODD_CONF +USE MODD_PARAMETERS + +use mode_budget, only: Budget_store_init, Budget_store_end +USE MODE_ll USE MODE_TYPE_ZDIFFU -! + +USE MODI_BUDGET +USE MODI_SHUMAN + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -297,7 +303,9 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) IKU=SIZE(PUM,3) ! GTKEALLOC = SIZE(PTKEM,1) /= 0 -! + +if ( lbudget_u .and. onumdifu ) call Budget_store_init( tbudgets(NBUDGET_U), 'DIF', prus ) + !------------------------------------------------------------------------------- ! !* 2. CALL THE NUM_DIFF_ALGO ROUTINE FOR EACH FIELD @@ -440,7 +448,8 @@ END IF !* 3. STORES FIELDS IN BUDGET ARRAYS ! ------------------------------ ! -IF ( LBUDGET_U .AND. ONUMDIFU ) CALL BUDGET( PRUS, NBUDGET_U, 'DIF_BU_RU' ) +if ( lbudget_u .and. onumdifu ) call Budget_store_end( tbudgets(NBUDGET_U), 'DIF', prus ) + IF ( LBUDGET_V .AND. ONUMDIFU ) CALL BUDGET( PRVS, NBUDGET_V, 'DIF_BU_RV' ) IF ( LBUDGET_W .AND. ONUMDIFU ) CALL BUDGET( PRWS, NBUDGET_W, 'DIF_BU_RW' ) IF ( LBUDGET_TH .AND. ONUMDIFTH ) CALL BUDGET( PRTHS, NBUDGET_TH, 'DIF_BU_RTH' ) diff --git a/src/MNH/pressure.f90 b/src/MNH/pressure.f90 index c84dfaf95..def6e2370 100644 --- a/src/MNH/pressure.f90 +++ b/src/MNH/pressure.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -200,6 +200,7 @@ END MODULE MODI_PRESSURE !! 06/2011 (J.escobar ) Bypass Bug with ifort11/12 on HLBCX,HLBCY !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U ! !------------------------------------------------------------------------------- ! @@ -207,7 +208,7 @@ END MODULE MODI_PRESSURE ! ------------ ! USE MODD_PARAMETERS -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, NBUDGET_U, NBUDGET_V, NBUDGET_W, tbudgets USE MODD_CONF USE MODD_CST USE MODD_LUNIT_n, ONLY: TLUOUT @@ -223,6 +224,8 @@ USE MODI_P_ABS USE MODI_BUDGET ! USE MODD_ARGSLIST_ll, ONLY : LIST_ll + +use mode_budget, only: Budget_store_end USE MODE_ll ! IMPLICIT NONE @@ -362,8 +365,9 @@ ZPABS_S(:,:) = 0. ZPABS_N(:,:) = 0. ZPABS_E(:,:) = 0. ZPABS_W(:,:) = 0. -! -! + +! if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'PRES', prus ) + !------------------------------------------------------------------------------- ! !* 3. COMPUTE THE LINEIC MASS @@ -610,7 +614,8 @@ ENDIF !* 7. STORAGE OF THE FIELDS IN BUDGET ARRAYS ! -------------------------------------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'PRES', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW') ! diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index 976f428bd..72e24f8ad 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -219,13 +219,14 @@ END MODULE MODI_PRESSUREZ !! Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_ARGSLIST_ll, ONLY: LIST_ll -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, NBUDGET_U, NBUDGET_V, NBUDGET_W, tbudgets USE MODD_CST USE MODD_CONF USE MODD_DYN_n, ONLY: LRES, XRES @@ -236,6 +237,7 @@ use modd_precision, only: MNHREAL_MPI USE MODD_REF, ONLY: LBOUSS USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD , NPROC ! +use mode_budget, only: Budget_store_end USE MODE_ll USE MODE_MPPDB USE MODE_MSG @@ -401,8 +403,10 @@ ZPABS_S(:,:) = 0. ZPABS_N(:,:) = 0. ZPABS_E(:,:) = 0. ZPABS_W(:,:) = 0. -! -! + +! Done in model_n before call to Rad_bound +! if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'PRES', prus ) + !------------------------------------------------------------------------------- ! !* 3. COMPUTE THE LINEIC MASS @@ -677,7 +681,8 @@ ENDIF !* 7. STORAGE OF THE FIELDS IN BUDGET ARRAYS ! -------------------------------------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'PRES', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW') ! diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90 index df1c4133a..e6c57710c 100644 --- a/src/MNH/relaxation.f90 +++ b/src/MNH/relaxation.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -256,27 +256,31 @@ END MODULE MODI_RELAXATION !! 06/2011 (M.Chong) Case of ELEC !! 11/2011 (C.Lac) Adaptation to FIT temporal scheme !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U +! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_BUDGET -USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELECEND -USE MODD_ELEC_DESCR, ONLY: LRELAX2FW_ION -! -USE MODE_ll -! -USE MODI_SHUMAN -USE MODI_BUDGET -USE MODE_EXTRAPOL -! +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_tke, & + lbudget_rv, lbudget_rc, lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, & + NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets +USE MODD_CONF, only: cconf +USE MODD_ELEC_DESCR, ONLY: LRELAX2FW_ION +USE MODD_NSV, ONLY: NSV_ELECBEG, NSV_ELECEND +USE MODD_PARAMETERS, only: jphext, jpvext + +use mode_budget, only: Budget_store_init, Budget_store_end +USE MODE_EXTRAPOL, only: Extrapol +USE MODE_ll, only: Get_intersection_ll USE MODE_MPPDB -! -! + +USE MODI_BUDGET +USE MODI_SHUMAN + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -441,6 +445,8 @@ CALL GET_GLOBALDIMS_ll(IIU_ll,IJU_ll) IIU_ll=IIU_ll+2*JPHEXT IJU_ll=IJU_ll+2*JPHEXT ! +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'REL', prus ) + ZRHODJU(:,:,:) = MXM(PRHODJ) ZRHODJV(:,:,:) = MYM(PRHODJ) ZRHODJW(:,:,:) = MZM(1,IKU,1,PRHODJ) @@ -707,7 +713,9 @@ END DO ! ------------------------------ ! CALL EXTRAPOL('W ', PRUS) -IF ( LBUDGET_U ) CALL BUDGET( PRUS, NBUDGET_U, 'REL_BU_RU') + +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'REL', prus ) + IF ( LBUDGET_V ) CALL BUDGET( PRVS, NBUDGET_V, 'REL_BU_RV') IF ( LBUDGET_W ) CALL BUDGET( PRWS, NBUDGET_W, 'REL_BU_RW') IF ( LBUDGET_TH ) CALL BUDGET( PRTHS, NBUDGET_TH, 'REL_BU_RTH') diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90 index e5a23264c..33946f46e 100644 --- a/src/MNH/shallow_mf_pack.f90 +++ b/src/MNH/shallow_mf_pack.f90 @@ -119,12 +119,15 @@ END MODULE MODI_SHALLOW_MF_PACK ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF ! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U ! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_th, lbudget_rv, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_TH, NBUDGET_RV, NBUDGET_SV1, & + tbudgets USE MODD_CONF USE MODD_CST USE MODD_IO, ONLY: TFILEDATA @@ -135,6 +138,7 @@ USE MODD_PARAM_ICE, ONLY: CFRAC_ICE_SHALLOW_MF USE MODD_PARAM_MFSHALL_n use modd_precision, only: MNHTIME +use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODI_BUDGET @@ -276,6 +280,8 @@ IRR=SIZE(PRM,4) ! number of scalar var ISV=SIZE(PSVM,4) +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'MAFL', prus ) + ZSVM(:,:,:) = 0. ! ! @@ -371,10 +377,10 @@ DO JSV=1,ISV END DO !!! 7. call to MesoNH budgets +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'MAFL', prus ) IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'MAFL_BU_RTH') IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'MAFL_BU_RRV') -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'MAFL_BU_RU') IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'MAFL_BU_RV') DO JSV=1,ISV IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'MAFL_BU_RSV') diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 4e637204f..7f9877b56 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -338,15 +338,18 @@ END MODULE MODI_TURB !! 10/2012 (J. Colin) Correct bug in DearDoff for dry simulations !! 10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic !! 04/2016 (C.Lac) correction of negativity for KHKO -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 01/2018 (Q.Rodier) Introduction of RM17 +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! Q. Rodier 01/2018: introduction of RM17 ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -!! -------------------------------------------------------------------------- -! +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_rv, lbudget_rc, lbudget_ri, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & + tbudgets USE MODD_CONF USE MODD_CST USE MODD_CTURB @@ -374,6 +377,7 @@ USE MODI_TM06 USE MODI_UPDATE_LM USE MODI_GET_HALO ! +use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_SBL ! @@ -905,6 +909,8 @@ ENDIF !* 5. TURBULENT SOURCES ! ----------------- ! +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'VTURB', prus ) + CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & OCLOSE_OUT,OTURB_FLX, & HTURBDIM,HTOM,PIMPL,ZEXPL, & @@ -921,9 +927,9 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & PSBL_DEPTH,ZLMO, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS, & PDYP,PTHP,PSIGS,PWTH,PWRC,PWSV ) -! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VTURB_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'VTURB', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VTURB_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'VTURB_BU_RW') IF (LBUDGET_TH) THEN @@ -953,6 +959,8 @@ IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'VTURB_BU_RRC') IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'VTURB_BU_RRI') ! ! +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'HTURB', prus ) + IF (HTURBDIM=='3DIM') THEN CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP, & HLBCX,HLBCY,OCLOSE_OUT,OTURB_FLX,OSUBG_COND, & @@ -970,9 +978,9 @@ IF (HTURBDIM=='3DIM') THEN ZTRH, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS ) END IF -! -! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'HTURB_BU_RU') + +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'HTURB', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'HTURB_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'HTURB_BU_RW') IF (LBUDGET_TH) THEN diff --git a/src/MNH/two_way.f90 b/src/MNH/two_way.f90 index ba399f93a..38d2e2857 100644 --- a/src/MNH/two_way.f90 +++ b/src/MNH/two_way.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1999-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1999-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. @@ -92,22 +92,28 @@ END MODULE MODI_TWO_WAY !! hydrometeors, the Short and Long Wave !! + MASKkids array !! 20/05/06 Remove EPS -!! 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 28/01/2020: use the new data structures and subroutines for budgets for U +! !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ ! +use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets USE MODD_CONF USE MODD_NESTING -USE MODD_BUDGET + +use mode_budget, only: Budget_store_init, Budget_store_end +USE MODE_MODELN_HANDLER USE MODI_BUDGET -! USE MODI_TWO_WAY_n -USE MODE_MODELN_HANDLER -! + IMPLICIT NONE ! ! @@ -145,6 +151,9 @@ INTEGER :: JKID ! loop index to look for the KID models INTEGER :: JSV,JRR ! Loop index for scalar and moist variables ! !------------------------------------------------------------------------------- + +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'NEST', prus ) + ! !* 1. CALL THE RIGHT TWO_WAY$n ! ------------------------ @@ -165,7 +174,8 @@ CALL GOTO_MODEL(KMI) !* 2. BUDGET COMPUTATION ! ------------------ ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'NEST_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'NEST', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'NEST_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'NEST_BU_RW') IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'NEST_BU_RTH') diff --git a/src/MNH/viscosity.f90 b/src/MNH/viscosity.f90 index fb7a01b5c..f1f1da39d 100644 --- a/src/MNH/viscosity.f90 +++ b/src/MNH/viscosity.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -91,21 +91,29 @@ SUBROUTINE VISCOSITY(HLBCX, HLBCY, KRR, KSV, PNU, PPRANDTL, & !! 01/18 (C.Lac) Add budgets ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine ! P. Wautelet 08/11/2019: corrected wrong budget name VISC_BU_RU -> VISC_BU_RTH +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! - USE MODI_LAP_M - USE MODI_SHUMAN - USE MODD_PARAMETERS + USE MODD_ARGSLIST_ll, ONLY: LIST_ll + use modd_budget, only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, lbudget_rv, lbudget_rc, & + lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets USE MODD_CONF - USE MODD_VISCOSITY USE MODD_DRAG_n - USE MODD_BUDGET + USE MODD_PARAMETERS + USE MODD_VISCOSITY + + use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_ll - USE MODD_ARGSLIST_ll, ONLY : LIST_ll + USE MODI_BUDGET + USE MODI_SHUMAN + USE MODI_LAP_M ! !------------------------------------------------------------------------------- ! @@ -180,6 +188,8 @@ IIU=SIZE(PWT,1) IJU=SIZE(PWT,2) IKU=SIZE(PWT,3) +if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'VISC', prus ) + !* 1. Viscous forcing for potential temperature ! ----------------------------------------- ! @@ -334,7 +344,8 @@ ENDIF ENDIF END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VISC_BU_RU') +if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U), 'VISC', prus ) + IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VISC_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_V,'VISC_BU_RW') ! diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90 index a1234be7d..16c8fa6ca 100644 --- a/src/MNH/write_budget.f90 +++ b/src/MNH/write_budget.f90 @@ -29,6 +29,7 @@ ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management ! P. Wautelet 14/10/2019: complete restructuration and deduplication of code +! P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U !----------------------------------------------------------------- !####################### @@ -116,6 +117,7 @@ subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv ) lbu_rri, lbu_rrs, lbu_rrg, lbu_rrh, lbu_rsv, & NBUDGET_RHO, NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, & NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + tbudgets, & xburhodj, xburhodju, xburhodjv, xburhodjw, & xburu, xburv, xburw, xburth, xburtke, & xburrv, xburrc, xburrr, xburri, xburrs, xburrg, xburrh, xbursv @@ -270,8 +272,8 @@ subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv ) !* XBURHODJU and RU budgets ! IF (LBU_RU) THEN - call Store_one_budget_rho( tpdiafile, tzdates, xburhodju, NBUDGET_U, gnocompress, zrhodjn ) - call Store_one_budget( tpdiafile, tzdates, xburu, zrhodjn, NBUDGET_U, gnocompress, ptstep ) + call Store_one_budget_rho_new( tpdiafile, tzdates, tbudgets(NBUDGET_U), NBUDGET_U, gnocompress, zrhodjn ) + call Store_one_budget_new ( tpdiafile, tzdates, tbudgets(NBUDGET_U), zrhodjn, NBUDGET_U, gnocompress, ptstep ) END IF ! !* XBURHODJV and RV budgets -- GitLab