Skip to content
Snippets Groups Projects
endstep_budget.f90 7.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • !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.
    
    !-----------------------------------------------------------------
    !##########################
     MODULE MODI_ENDSTEP_BUDGET
    !##########################
    !
    INTERFACE
    !
    
          SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT,       &
    
    USE MODD_TYPE_DATE
    !
    
    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,       &
    
    !     ####################################################
    
    !
    !!****  *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
    
    !  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
    !              ------------
    !
    
    !
    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
    
    !-------------------------------------------------------------------------------
    !
    
    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 
    !
    
        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.
    
    
          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
    ! 
    
          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.
    
    
          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  
    
          NBUTIME=NBUTIME+1
          LBU_BEG=.TRUE.
        END IF
    !
    END SELECT            
    !
    !-------------------------------------------------------------------------------
    !
    END SUBROUTINE ENDSTEP_BUDGET