Newer
Older

WAUTELET Philippe
committed
!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

WAUTELET Philippe
committed
!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_ENDSTEP_BUDGET
!##########################
!
INTERFACE
!
SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT, &

WAUTELET Philippe
committed
TPDTCUR,PTSTEP,KSV)

WAUTELET Philippe
committed
USE MODD_IO, ONLY: TFILEDATA
TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
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
!
END SUBROUTINE ENDSTEP_BUDGET
!
END INTERFACE
!
END MODULE MODI_ENDSTEP_BUDGET
!
! ####################################################
SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT, &

WAUTELET Philippe
committed
TPDTCUR,PTSTEP,KSV)
! ####################################################
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
!
!!**** *ENDSTEP_BUDGET* - routine to call the routine write_budget
!!
!!
!! PURPOSE
!! -------
! If CART case, this routine sets the logical variable LBU_BEG (for budget
! beginning) to .TRUE. calls the routine write_budget and reset the budget
! arrays to 0.
! If MASK case this routine increases the time variable NBUTIME if the
! budget is not terminated or calls the routine write_budget if it is.
!
!!** METHOD
!! ------
!!
!!
!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_BUDGET
!! CBUTYPE : budget type : CART, MASK or NONE
!! LBU_BEG : switch for the budget begining
!! NBUTIME : number of the budget step
!! NBUWRI : NUMBER of budget steps when the budget
!! is written on FM-file
!! XBURU : budget array of the variable RU
!! XBURV : budget array of the variable RV
!! XBURW : budget array of the variable RW
!! XBURTH : budget array of the variable RTH
!! XBURTKE : budget array of the variable RTKE
!! XBURRV : budget array of the variable RRV
!! XBURRC : budget array of the variable RRC
!! XBURRR : budget array of the variable RRR
!! XBURRI : budget array of the variable RRI
!! XBURRS : budget array of the variable RRS
!! XBURRG : budget array of the variable RRG
!! XBURRH : budget array of the variable RRH
!! XBURSVx : budget array of the variable RSVx
!!
!!
!! REFERENCE
!! ---------
!! Book2 of MESO-NH documentation (routine ENDSTEP_BUDGET)
!!
!!
!! AUTHOR
!! ------
!! J. Nicolau * Meteo France *
!!
!! MODIFICATIONS
!! -------------
!! Original 27/02/95
!! 09/07/96 control the writing in the CART case
!! JP Lafore 10/02/98 reinitialization of the BURHODJ after writings
!! V. Ducrocq 07/06/99 //
!! 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

WAUTELET Philippe
committed
! 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
! ------------
!

WAUTELET Philippe
committed
USE MODD_BUDGET

WAUTELET Philippe
committed
USE MODD_IO, ONLY: TFILEDATA

WAUTELET Philippe
committed
use mode_msg

WAUTELET Philippe
committed
use mode_write_budget, only: Write_budget
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments :
!
TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
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

WAUTELET Philippe
committed
integer :: jbu, jgrp
!-------------------------------------------------------------------------------
!

WAUTELET Philippe
committed
call Print_msg( NVERB_DEBUG, 'BUD', 'Endstep_budget', 'called' )
SELECT CASE(CBUTYPE)
!
!
!* 1. 'CART' CASE
! -----------
!
CASE('CART','SKIP')
!
!* 1.1 storage of the budget fields
!

WAUTELET Philippe
committed
IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN
call Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
!
!* 1.2 resetting the budget arrays to 0.
!
IF (ALLOCATED(XBURU)) XBURU=0.
IF (ALLOCATED(XBURV)) XBURV=0.
IF (ALLOCATED(XBURW)) XBURW=0.
IF (ALLOCATED(XBURTH)) XBURTH=0.
IF (ALLOCATED(XBURTKE)) XBURTKE=0.
IF (ALLOCATED(XBURRV)) XBURRV=0.
IF (ALLOCATED(XBURRC)) XBURRC=0.
IF (ALLOCATED(XBURRR)) XBURRR=0.
IF (ALLOCATED(XBURRI)) XBURRI=0.
IF (ALLOCATED(XBURRS)) XBURRS=0.
IF (ALLOCATED(XBURRG)) XBURRG=0.
IF (ALLOCATED(XBURRH)) XBURRH=0.
IF (ALLOCATED(XBURSV)) XBURSV=0.
IF (ALLOCATED(XBURHODJU)) XBURHODJU=0.
IF (ALLOCATED(XBURHODJV)) XBURHODJV=0.
IF (ALLOCATED(XBURHODJW)) XBURHODJW=0.
IF (ALLOCATED(XBURHODJ)) XBURHODJ =0.

WAUTELET Philippe
committed
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
!
LBU_BEG=.TRUE.
END IF
!
!
!* 2. 'MASK' CASE
! -----------
!
CASE('MASK')
IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN
!
!* 2.1 storage of the budget fields
!

WAUTELET Philippe
committed
call Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
!
!* 2.2 reset the budget fields to 0.
!
IF (ALLOCATED(XBURU)) XBURU=0.
IF (ALLOCATED(XBURV)) XBURV=0.
IF (ALLOCATED(XBURW)) XBURW=0.
IF (ALLOCATED(XBURTH)) XBURTH=0.
IF (ALLOCATED(XBURTKE)) XBURTKE=0.
IF (ALLOCATED(XBURRV)) XBURRV=0.
IF (ALLOCATED(XBURRC)) XBURRC=0.
IF (ALLOCATED(XBURRR)) XBURRR=0.
IF (ALLOCATED(XBURRI)) XBURRI=0.
IF (ALLOCATED(XBURRS)) XBURRS=0.
IF (ALLOCATED(XBURRG)) XBURRG=0.
IF (ALLOCATED(XBURRH)) XBURRH=0.
IF (ALLOCATED(XBURSV)) XBURSV=0.
IF (ALLOCATED(XBURHODJU)) XBURHODJU=0.
IF (ALLOCATED(XBURHODJV)) XBURHODJV=0.
IF (ALLOCATED(XBURHODJW)) XBURHODJW=0.
IF (ALLOCATED(XBURHODJ)) XBURHODJ =0.

WAUTELET Philippe
committed
do jbu = 1, nbudgets
do jgrp = 1, tbudgets(jbu)%ngroups
tbudgets(jbu)%tgroups(jgrp)%xdata(:, :, : ) = 0.
end do
end do
!
NBUTIME=0
!
END IF
!
!* 2.3 update of the budget temporal increment and reset the budget
! initialization
!
IF( MODULO(KTCOUNT,NBUSTEP) == 0 ) THEN