Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
Méso-NH code
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RODIER Quentin
Méso-NH code
Commits
ab140526
Commit
ab140526
authored
3 years ago
by
RODIER Quentin
Browse files
Options
Downloads
Patches
Plain Diff
Quentin 01/03/2022: add mesonH/modd_budget.f90 from 5.5.0
parent
d236bf1c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/mesonh/aux/modd_budget.f90
+368
-0
368 additions, 0 deletions
src/mesonh/aux/modd_budget.f90
with
368 additions
and
0 deletions
src/mesonh/aux/modd_budget.f90
0 → 100644
+
368
−
0
View file @
ab140526
!MNH_LIC Copyright 1995-2021 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
MODD_BUDGET
! ##################
!
!!**** *MODD_BUDGET* - declaration of budget variables
!!
!! PURPOSE
!! -------
! The purpose of this declarative module is to specify the budget
! variables
!
!!
!!** IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!! Book2 of documentation of Meso-NH (module MODD_BUDGET)
!!
!! AUTHOR
!! ------
!! P. Hereil *Meteo France*
!!
!! MODIFICATIONS
!! -------------
!! Original 23/02/95
!! J.-P. Lafore 10/02/98 adding of rhodj declaration for budget
!! V. Ducrocq 4/06/99 //
! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
! P. Wautelet 19/07/2019: parameters to identify budget number
! P. Wautelet 15/11/2019: remove unused CBURECORD variable
! P. Wautelet 17/01/2020: add new budget data types
! P. Wautelet 27/01/2020: use the tfield_metadata_base abstract datatype
! P. Wautelet 28/01/2020: add trhodj in tbudgetdata datatype
! P. Wautelet 09/03/2020: add tburhodj variable
! P. Wautelet 17/04/2020: set default values for budgets switch values
! P. Wautelet 23/04/2020: add nid in tbudgetdata datatype
! P. Wautelet 17/08/2020: add xtmplesstore in tbudgetdata datatype
! P. Wautelet 08/10/2020: add clessource in tbudgetdata datatype
! P. Wautelet 08/12/2020: add nbusubwrite and nbutotwrite
! P. Wautelet 11/01/2021: remove nbuwrnb (replaced by nbusubwrite)
! P. Wautelet 14/01/2021: change xbusurf type to integer (+ rename it to nbusurf)
! P. Wautelet 03/03/2021: add tbudiachrometadata type (useful to pass more information to Write_diachro)
! P. Wautelet 17/03/2021: choose source terms for budgets with character strings instead of multiple integer variables
! P. Wautelet 30/03/2021: budgets: cartesian subdomain limits are defined in the physical domain
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
use
modd_field
,
only
:
tfield_metadata_base
use
modd_parameters
,
only
:
NBUNAMELGTMAX
,
NCOMMENTLGTMAX
implicit
none
public
integer
,
parameter
::
NBULISTMAXLEN
=
256
integer
,
parameter
::
NBULISTMAXLINES
=
50
integer
,
parameter
::
NBUDGET_RHO
=
0
! Reference number for budget of RhoJ
integer
,
parameter
::
NBUDGET_U
=
1
! Reference number for budget of RhoJu and/or LES budgets with u
integer
,
parameter
::
NBUDGET_V
=
2
! Reference number for budget of RhoJv and/or LES budgets with u
integer
,
parameter
::
NBUDGET_W
=
3
! Reference number for budget of RhoJw and/or LES budgets with u
integer
,
parameter
::
NBUDGET_TH
=
4
! Reference number for budget of RhoJTh and/or LES budgets with th
integer
,
parameter
::
NBUDGET_TKE
=
5
! Reference number for budget of RhoJTke and/or LES budgets with Tke
integer
,
parameter
::
NBUDGET_RV
=
6
! Reference number for budget of RhoJrv and/or LES budgets with rv
integer
,
parameter
::
NBUDGET_RC
=
7
! Reference number for budget of RhoJrc and/or LES budgets with rc
integer
,
parameter
::
NBUDGET_RR
=
8
! Reference number for budget of RhoJrr and/or LES budgets with rr
integer
,
parameter
::
NBUDGET_RI
=
9
! Reference number for budget of RhoJri and/or LES budgets with ri
integer
,
parameter
::
NBUDGET_RS
=
10
! Reference number for budget of RhoJrs and/or LES budgets with rs
integer
,
parameter
::
NBUDGET_RG
=
11
! Reference number for budget of RhoJrg and/or LES budgets with rg
integer
,
parameter
::
NBUDGET_RH
=
12
! Reference number for budget of RhoJrh and/or LES budgets with rh
integer
,
parameter
::
NBUDGET_SV1
=
13
! Reference number for 1st budget of RhoJsv and/or LES budgets with sv
integer
,
parameter
::
NMAXLEVELS
=
7
integer
,
parameter
::
NLVL_ROOT
=
0
integer
,
parameter
::
NLVL_CATEGORY
=
1
integer
,
parameter
::
NLVL_SUBCATEGORY
=
2
integer
,
parameter
::
NLVL_GROUP
=
3
integer
,
parameter
::
NLVL_SHAPE
=
4
integer
,
parameter
::
NLVL_TIMEAVG
=
5
integer
,
parameter
::
NLVL_NORM
=
6
integer
,
parameter
::
NLVL_MASK
=
7
#ifdef MNH_IOCDF4
character
(
len
=*
),
dimension
(
NMAXLEVELS
),
parameter
::
CNCGROUPNAMES
=
[
&
'category '
,
&
!Name of the different type of groups/levels in the netCDF file
'subcategory'
,
&
'group '
,
&
'shape '
,
&
'timeavg '
,
&
'norm '
,
&
'mask '
]
#endif
integer
::
nbudgets
! Number of budget categories
type
,
extends
(
tfield_metadata_base
)
::
tbusourcedata
integer
::
ngroup
=
0
! Number of the source term group in which storing the source term
! (0: no store, 1: individual store, >1: number of the group)
logical
::
lavailable
=
.false.
! If true, the source is available in the run (conditions to access it are met),
! but it doesn't mean it is used (see lenabled field)
logical
::
lenabled
=
.false.
logical
::
ldonotinit
=
.false.
! if true, does not need a call to Budget_store_init
! It may be true only if the source term is in a group not containing other sources
logical
::
loverwrite
=
.false.
! if true, source term values will overwrite the previous ones
! It may be true only if the source term is in a group not containing other sources
end
type
tbusourcedata
type
,
extends
(
tfield_metadata_base
)
::
tbugroupdata
integer
::
nsources
=
0
! Number of source terms composing this group
integer
,
dimension
(:),
allocatable
::
nsourcelist
! List of the source terms composing this group
real
,
dimension
(:,:,:),
allocatable
::
xdata
! Array to store the budget data
end
type
tbugroupdata
type
,
extends
(
tfield_metadata_base
)
::
tburhodata
real
,
dimension
(:,:,:),
allocatable
::
xdata
! Array to store the budget data
end
type
tburhodata
type
::
tbudiachrometadata
character
(
len
=
NBUNAMELGTMAX
),
dimension
(
NMAXLEVELS
)
::
clevels
=
''
!Name of the different groups/levels in the netCDF file
character
(
len
=
NCOMMENTLGTMAX
),
dimension
(
NMAXLEVELS
)
::
ccomments
=
''
!Comments for the different groups/levels in the netCDF file
character
(
len
=
1
)
::
cdirection
=
''
!Used for 2pt correlation and spectrum
logical
::
lmobile
=
.false.
!Is the domain moving? (ie for aircrafts and balloons)
logical
::
licompress
=
.false.
logical
::
ljcompress
=
.false.
logical
::
lkcompress
=
.false.
logical
::
ltcompress
=
.false.
! true if values are time averaged (can be on multiple time periods)
logical
::
lnorm
=
.false.
! true if values are normalized
logical
,
dimension
(
NMAXLEVELS
)
::
lleveluse
=
.false.
integer
::
nil
=
-1
!Cartesian box boundaries in physical domain coordinates
integer
::
nih
=
-1
integer
::
njl
=
-1
integer
::
njh
=
-1
integer
::
nkl
=
-1
integer
::
nkh
=
-1
integer
::
nsv
=
-1
!Reference number of the corresponding scalar variable
end
type
tbudiachrometadata
type
tbudgetdata
character
(
len
=
NBUNAMELGTMAX
)
::
cname
=
''
character
(
len
=
NCOMMENTLGTMAX
)
::
ccomment
=
''
character
(
len
=
100
)
::
clessource
=
''
! Last source stored
integer
::
nid
=
-1
!Identifier number (based on parameters NBUDGET_*)
integer
::
ngroups
=
0
!Number of groups of source terms to store
integer
::
nsources
=
0
!Number of available source terms
integer
::
nsourcesmax
=
0
!Maximum number of source terms
integer
::
ntmpstoresource
=
0
!Reference of the source term using the xtmpstore array
logical
::
lenabled
=
.false.
! True if corresponding budget flag is set to true
real
,
dimension
(:,:,:),
allocatable
::
xtmpstore
! Array to store temporary data
! (to allow to store the difference between 2 places)
real
,
dimension
(:,:,:),
allocatable
::
xtmplesstore
! Array to store temporary data for LES budgets
! (to allow to store the difference between 2 places)
type
(
tbusourcedata
),
dimension
(:),
allocatable
::
tsources
! Full list of source terms (used or not)
type
(
tbugroupdata
),
dimension
(:),
allocatable
::
tgroups
! Full list of groups of source terms (to be written)
type
(
tburhodata
),
pointer
::
trhodj
=>
null
()
! Budget array for rhodj
end
type
tbudgetdata
type
(
tbudgetdata
),
dimension
(:),
allocatable
,
save
::
tbudgets
type
(
tburhodata
),
pointer
,
save
::
tburhodj
=>
null
()
! Budget array for rhodj used inside some tbudgets
! General variables
LOGICAL
,
SAVE
::
LBU_ENABLE
!
CHARACTER
(
LEN
=
4
),
SAVE
::
CBUTYPE
! type of desired budget 'CART'
! (cartesian box) or 'MASK' (budget
! zone defined by a mask) or 'NONE'
! (no budget)
INTEGER
,
SAVE
::
NBUMOD
! model in which budget is
! calculated
!
LOGICAL
,
SAVE
::
LBU_BEG
! switch for budget beginning
!
REAL
,
SAVE
::
XBULEN
! length in seconds of the budget
! temporal average
!
INTEGER
,
SAVE
::
NBUSTEP
! number of model timesteps required
! for the budget time average
REAL
,
SAVE
::
XBUWRI
! period in seconds between
! budget writing for budget masks
INTEGER
,
SAVE
::
NBUTSHIFT
! temporal shift for budgets writing
integer
,
save
::
nbusubwrite
=
0
! Number of budget time average periods for each write
integer
,
save
::
nbutotwrite
=
0
! Total number of budget time average periods
!
INTEGER
,
SAVE
::
NBUKL
,
NBUKH
! lowest and highest K indice values
! of the budget box in the physical domain
LOGICAL
,
SAVE
::
LBU_KCP
! switch for compression in K
! direction
!
! Variables used by the cartesian box case ('CART') only
!
INTEGER
,
SAVE
::
NBUIL
,
NBUIH
! lowest and highest I indice values
! of the cartesian box in the physical domain
INTEGER
,
SAVE
::
NBUJL
,
NBUJH
! lowest and highest J indice values
! of the cartesian box in the physical domain
LOGICAL
,
SAVE
::
LBU_ICP
! switch for compression in I
! direction
LOGICAL
,
SAVE
::
LBU_JCP
! switch for comppression in J
! direction
!
! Variables used by the mask case ('MASK') only
!
INTEGER
,
SAVE
::
NBUMASK
! number of MASK zones for which
! budgets are performed
LOGICAL
,
SAVE
,
DIMENSION
(:,:,:),
&
! define the zone where the MASK
ALLOCATABLE
::
LBU_MASK
! is True
!
INTEGER
,
SAVE
,
DIMENSION
(:,:,:,:),
&
! surface for each mask at each
ALLOCATABLE
::
NBUSURF
! budget step
!
INTEGER
,
SAVE
::
NBUTIME
! number of budget time periods
!
! Variables for budget storage
!
! General variables
INTEGER
,
SAVE
::
NBUSIL
,
NBUSIH
! lowest and highest I indices of the intersection
! of the cartesian box with the sub-domain
INTEGER
,
SAVE
::
NBUSJL
,
NBUSJH
! lowest and highest J indices of the intersection
! of the global cartesian box
INTEGER
,
SAVE
::
NBUIMAX_ll
! second dimension of the budget
INTEGER
,
SAVE
::
NBUJMAX_ll
! second dimension of the budget
! array in the global domain (in CART case)
!
INTEGER
,
SAVE
::
NBUIMAX
! first dimension of the budget
! tabular
INTEGER
,
SAVE
::
NBUJMAX
! second dimension of the budget
! tabular
INTEGER
,
SAVE
::
NBUKMAX
! dimension along K of the budget
! tabular
!
! Allowed processes for the budget of the x scalar variables
! (transport part only)
!
! For each budget, the switches values for budgets
! activation may be set by the user in a namelist. Their default value is 0.
! In the following declaration, the corresponding process names are given
! beside as comments.
!
! Allowed processes for the budget of RU (wind component along x)
!
! Current namelist: NAM_BU_RU
!
LOGICAL
,
SAVE
::
LBU_RU
=
.FALSE.
! True when the budget of RU is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RU
!
! Allowed processes for the budget of RV (wind component along y)
!
! Current namelist: NAM_BU_RV
!
LOGICAL
,
SAVE
::
LBU_RV
=
.FALSE.
! True when the budget of RV is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RV
!
! Allowed processes for the budget of RW (wind vertical component)
!
! Current namelist: NAM_BU_RW
!
LOGICAL
,
SAVE
::
LBU_RW
=
.FALSE.
! True when the budget of RW is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RW
!
! Allowed processes for the budget of RTH (potential temperature)
!
! Current namelist: NAM_BU_RTH
!
LOGICAL
,
SAVE
::
LBU_RTH
=
.FALSE.
! True when the budget of RTH is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RTH
!
! Allowed processes for the budget of RTKE (kinetic energy)
!
! Current namelist: NAM_BU_RTKE
!
LOGICAL
,
SAVE
::
LBU_RTKE
=
.FALSE.
! True when the budget of RTKE is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RTKE
!
! Allowed processes for the budget of moist variable RRV (water vapor)
!
! Current namelist: NAM_BU_RRV
!
LOGICAL
,
SAVE
::
LBU_RRV
=
.FALSE.
! true when the budget of RRV is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRV
!
! Allowed processes for the budget of moist variable RRC (cloud water)
!
! Current namelist: NAM_BU_RRC
!
LOGICAL
,
SAVE
::
LBU_RRC
=
.FALSE.
! True when the budget of RRC is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRC
!
! Allowed processes for the budget of moist variable RRR (rain water)
!
! Current namelist: NAM_BU_RRR
!
LOGICAL
,
SAVE
::
LBU_RRR
=
.FALSE.
! True when the budget of RRR is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRR
!
! Allowed processes for the budget of moist variable RRI (ice)
!
! Current namelist: NAM_BU_RRI
!
LOGICAL
,
SAVE
::
LBU_RRI
=
.FALSE.
! True when the budget of RRI is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRI
!
! Allowed processes for the budget of moist variable RRS (snow)
!
! Current namelist: NAM_BU_RRS
!
LOGICAL
,
SAVE
::
LBU_RRS
=
.FALSE.
! True when the budget of RRS is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRS
!
! Allowed processes for the budget of moist variable RRG (graupel)
!
! Current namelist: NAM_BU_RRG
!
LOGICAL
,
SAVE
::
LBU_RRG
=
.FALSE.
! True when the budget of RRG is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRG
!
! Allowed processes for the budget of moist variable RRH (hail)
!
! Current namelist: NAM_BU_RRH
!
LOGICAL
,
SAVE
::
LBU_RRH
=
.FALSE.
! True when the budget of RRH is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RRH
!
! Current namelist: NAM_BU_RSV
!
LOGICAL
,
SAVE
::
LBU_RSV
=
.FALSE.
! True when the budget of RSVx is performed
!
CHARACTER
(
LEN
=
NBULISTMAXLEN
),
DIMENSION
(:),
ALLOCATABLE
::
CBULIST_RSV
!
!
REAL
::
XTIME_BU
! budget time in this time-step
REAL
::
XTIME_BU_PROCESS
! budget time per process for this time-step
!
LOGICAL
::
LBUDGET_U
! flag to compute budget of RhoJu and/or LES budgets with u
LOGICAL
::
LBUDGET_V
! flag to compute budget of RhoJv and/or LES budgets with u
LOGICAL
::
LBUDGET_W
! flag to compute budget of RhoJw and/or LES budgets with u
LOGICAL
::
LBUDGET_TH
! flag to compute budget of RhoJTh and/or LES budgets with th
LOGICAL
::
LBUDGET_TKE
! flag to compute budget of RhoJTke and/or LES budgets with Tke
LOGICAL
::
LBUDGET_RV
! flag to compute budget of RhoJrv and/or LES budgets with rv
LOGICAL
::
LBUDGET_RC
! flag to compute budget of RhoJrc and/or LES budgets with rc
LOGICAL
::
LBUDGET_RR
! flag to compute budget of RhoJrr and/or LES budgets with rr
LOGICAL
::
LBUDGET_RI
! flag to compute budget of RhoJri and/or LES budgets with ri
LOGICAL
::
LBUDGET_RS
! flag to compute budget of RhoJrs and/or LES budgets with rs
LOGICAL
::
LBUDGET_RG
! flag to compute budget of RhoJrg and/or LES budgets with rg
LOGICAL
::
LBUDGET_RH
! flag to compute budget of RhoJrh and/or LES budgets with rh
LOGICAL
::
LBUDGET_SV
! flag to compute budget of RhoJsv and/or LES budgets with sv
!
END
MODULE
MODD_BUDGET
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment