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
Méso-NH
Méso-NH code
Commits
888772b2
Commit
888772b2
authored
2 years ago
by
RODIER Quentin
Browse files
Options
Downloads
Patches
Plain Diff
Quentin 15/08/2022: Packing turb_ver
parent
7ebe3d13
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/common/turb/mode_turb_ver.F90
+95
-109
95 additions, 109 deletions
src/common/turb/mode_turb_ver.F90
with
95 additions
and
109 deletions
src/common/turb/mode_turb_ver.F90
+
95
−
109
View file @
888772b2
...
@@ -224,28 +224,23 @@ USE MODD_TURB_n, ONLY: TURB_t
...
@@ -224,28 +224,23 @@ USE MODD_TURB_n, ONLY: TURB_t
!
!
USE
MODE_EMOIST
,
ONLY
:
EMOIST
USE
MODE_EMOIST
,
ONLY
:
EMOIST
USE
MODE_ETHETA
,
ONLY
:
ETHETA
USE
MODE_ETHETA
,
ONLY
:
ETHETA
USE
MODI_GRADIENT_M
USE
MODI_GRADIENT_W
USE
MODE_GRADIENT_M_PHY
,
ONLY
:
GZ_M_W_PHY
USE
MODE_GRADIENT_M_PHY
,
ONLY
:
GZ_M_W_PHY
USE
MODI_TURB
USE
MODE_IO_FIELD_WRITE
,
ONLY
:
IO_FIELD_WRITE_PHY
USE
MODE_PRANDTL
,
ONLY
:
PSI_SV
,
PSI3
,
PHI3
,
PRANDTL
USE
MODE_SBL_DEPTH
,
ONLY
:
SBL_DEPTH
USE
MODE_TURB_VER_THERMO_FLUX
,
ONLY
:
TURB_VER_THERMO_FLUX
USE
MODE_TURB_VER_THERMO_FLUX
,
ONLY
:
TURB_VER_THERMO_FLUX
USE
MODE_TURB_VER_THERMO_CORR
,
ONLY
:
TURB_VER_THERMO_CORR
USE
MODE_TURB_VER_THERMO_CORR
,
ONLY
:
TURB_VER_THERMO_CORR
USE
MODE_TURB_VER_DYN_FLUX
,
ONLY
:
TURB_VER_DYN_FLUX
USE
MODE_TURB_VER_DYN_FLUX
,
ONLY
:
TURB_VER_DYN_FLUX
USE
MODE_TURB_VER_SV_FLUX
,
ONLY
:
TURB_VER_SV_FLUX
USE
MODE_TURB_VER_SV_FLUX
,
ONLY
:
TURB_VER_SV_FLUX
USE
MODE_TURB_VER_SV_CORR
,
ONLY
:
TURB_VER_SV_CORR
USE
MODE_TURB_VER_SV_CORR
,
ONLY
:
TURB_VER_SV_CORR
USE
MODI_LES_MEAN_SUBGRID
USE
MODE_SBL_DEPTH
,
ONLY
:
SBL_DEPTH
USE
MODI_SECOND_MNH
!
!
USE
MOD
E_IO_FIELD_WRITE
,
only
:
IO_Field_write
USE
MOD
I_LES_MEAN_SUBGRID_PHY
USE
MOD
E_PRANDTL
,
ONLY
:
PSI_SV
,
PSI3
,
PHI3
,
PRANDTL
USE
MOD
I_SECOND_MNH
!
!
IMPLICIT
NONE
IMPLICIT
NONE
!
!
!* 0.1 declarations of arguments
!* 0.1 declarations of arguments
!
!
!
!
TYPE
(
DIMPHYEX_t
),
INTENT
(
IN
)
::
D
TYPE
(
DIMPHYEX_t
),
INTENT
(
IN
)
::
D
TYPE
(
CST_t
),
INTENT
(
IN
)
::
CST
TYPE
(
CST_t
),
INTENT
(
IN
)
::
CST
TYPE
(
CSTURB_t
),
INTENT
(
IN
)
::
CSTURB
TYPE
(
CSTURB_t
),
INTENT
(
IN
)
::
CSTURB
...
@@ -275,97 +270,91 @@ REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc.
...
@@ -275,97 +270,91 @@ REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc.
REAL
,
INTENT
(
IN
)
::
PTSTEP
! timestep
REAL
,
INTENT
(
IN
)
::
PTSTEP
! timestep
TYPE
(
TFILEDATA
),
INTENT
(
IN
)
::
TPFILE
! Output file
TYPE
(
TFILEDATA
),
INTENT
(
IN
)
::
TPFILE
! Output file
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PDXX
,
PDYY
,
PDZZ
,
PDZX
,
PDZY
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PDXX
,
PDYY
,
PDZZ
,
PDZX
,
PDZY
! Metric coefficients
! Metric coefficients
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PDIRCOSZW
! Director Cosinus of the
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PDIRCOSZW
! Director Cosinus of the
! normal to the ground surface
! normal to the ground surface
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PZZ
! altitudes at flux points
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PZZ
! altitudes at flux points
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PCOSSLOPE
! cosinus of the angle
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PCOSSLOPE
! cosinus of the angle
! between i and the slope vector
! between i and the slope vector
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PSINSLOPE
! sinus of the angle
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PSINSLOPE
! sinus of the angle
! between i and the slope vector
! between i and the slope vector
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PRHODJ
! dry density * grid volum
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PRHODJ
! dry density * grid volum
! MFMOIST used in case of OHARATU
! MFMOIST used in case of OHARATU
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
MFMOIST
! moist mass flux dual scheme
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
MFMOIST
! moist mass flux dual scheme
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PTHVREF
! ref. state Virtual
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PTHVREF
! ref. state Virtual
! Potential Temperature
! Potential Temperature
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PSFTHM
,
PSFRM
! surface fluxes at time
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PSFTHM
,
PSFRM
! surface fluxes at time
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
KSV
),
INTENT
(
IN
)
::
PSFSVM
! t - deltat
REAL
,
DIMENSION
(
D
%
NIJT
,
KSV
),
INTENT
(
IN
)
::
PSFSVM
! t - deltat
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PSFTHP
,
PSFRP
! surface fluxes at time
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PSFTHP
,
PSFRP
! surface fluxes at time
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
KSV
),
INTENT
(
IN
)
::
PSFSVP
! t + deltat
REAL
,
DIMENSION
(
D
%
NIJT
,
KSV
),
INTENT
(
IN
)
::
PSFSVP
! t + deltat
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PCDUEFF
! Cd * || u || at time t
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PCDUEFF
! Cd * || u || at time t
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PTAU11M
! <uu> in the axes linked
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PTAU11M
! <uu> in the axes linked
! to the maximum slope direction and the surface normal and the binormal
! to the maximum slope direction and the surface normal and the binormal
! at time t - dt
! at time t - dt
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PTAU12M
! <uv> in the same axes
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PTAU12M
! <uv> in the same axes
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PTAU33M
! <ww> in the same axes
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PTAU33M
! <ww> in the same axes
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PUM
,
PVM
,
PWM
,
PTHLM
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PUM
,
PVM
,
PWM
,
PTHLM
! Wind and potential temperature at t-Delta t
! Wind and potential temperature at t-Delta t
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
,
KRR
),
INTENT
(
IN
)
::
PRM
! Mixing ratios
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KRR
),
INTENT
(
IN
)
::
PRM
! Mixing ratios
! at t-Delta t
! at t-Delta t
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
,
KSV
),
INTENT
(
IN
)
::
PSVM
! scalar var. at t-Delta t
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KSV
),
INTENT
(
IN
)
::
PSVM
! scalar var. at t-Delta t
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PUSLOPEM
! wind component along the
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PUSLOPEM
! wind component along the
! maximum slope direction
! maximum slope direction
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
)
::
PVSLOPEM
! wind component along the
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PVSLOPEM
! wind component along the
! direction normal to the maximum slope one
! direction normal to the maximum slope one
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PTKEM
! TKE at time t
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PTKEM
! TKE at time t
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLM
! Turb. mixing length
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLM
! Turb. mixing length
! PLENGTHM PLENGTHH used in case of OHARATU
! PLENGTHM PLENGTHH used in case of OHARATU
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLENGTHM
! Turb. mixing length momentum
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLENGTHM
! Turb. mixing length momentum
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLENGTHH
! Turb. mixing length heat/moisture
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLENGTHH
! Turb. mixing length heat/moisture
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLEPS
! dissipative length
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLEPS
! dissipative length
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLOCPEXNM
! Lv(T)/Cp/Exnref at time t-1
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PLOCPEXNM
! Lv(T)/Cp/Exnref at time t-1
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PATHETA
! coefficients between
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PATHETA
! coefficients between
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PAMOIST
! s and Thetal and Rnp
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PAMOIST
! s and Thetal and Rnp
REAL
,
DIMENSION
(
MERGE
(
D
%
NIT
,
0
,
OCOMPUTE_SRC
),&
REAL
,
DIMENSION
(
MERGE
(
D
%
NIJT
,
0
,
OCOMPUTE_SRC
),&
MERGE
(
D
%
NJT
,
0
,
OCOMPUTE_SRC
),&
MERGE
(
D
%
NKT
,
0
,
OCOMPUTE_SRC
)),
INTENT
(
IN
)
::
PSRCM
! normalized
MERGE
(
D
%
NKT
,
0
,
OCOMPUTE_SRC
)),
INTENT
(
IN
)
::
PSRCM
! normalized
! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFRAC_ICE
! ri fraction of rc+ri
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFRAC_ICE
! ri fraction of rc+ri
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFWTH
! d(w'2th' )/dz
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFWTH
! d(w'2th' )/dz
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFWR
! d(w'2r' )/dz
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFWR
! d(w'2r' )/dz
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFTH2
! d(w'th'2 )/dz
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFTH2
! d(w'th'2 )/dz
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFR2
! d(w'r'2 )/dz
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFR2
! d(w'r'2 )/dz
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFTHR
! d(w'th'r')/dz
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
IN
)
::
PFTHR
! d(w'th'r')/dz
REAL
,
DIMENSION
(
MERGE
(
D
%
NIT
,
0
,
HTOM
==
'TM06'
),&
REAL
,
DIMENSION
(
MERGE
(
D
%
NIJT
,
0
,
HTOM
==
'TM06'
)),
INTENT
(
INOUT
)
::
PBL_DEPTH
! BL height for TOMS
MERGE
(
D
%
NJT
,
0
,
HTOM
==
'TM06'
)),
INTENT
(
INOUT
)
::
PBL_DEPTH
! BL height for TOMS
REAL
,
DIMENSION
(
MERGE
(
D
%
NIJT
,
0
,
ORMC01
)),
INTENT
(
INOUT
)
::
PSBL_DEPTH
! SBL depth for RMC01
REAL
,
DIMENSION
(
MERGE
(
D
%
NIT
,
0
,
ORMC01
),&
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
)
::
PLMO
! Monin-Obukhov length
MERGE
(
D
%
NJT
,
0
,
ORMC01
)),
INTENT
(
INOUT
)
::
PSBL_DEPTH
! SBL depth for RMC01
!
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
),
INTENT
(
IN
)
::
PLMO
! Monin-Obukhov length
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
INOUT
)
::
PRUS
,
PRVS
,
PRWS
,
PRTHLS
!
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KRR
),
INTENT
(
INOUT
)
::
PRRS
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
),
INTENT
(
INOUT
)
::
PRUS
,
PRVS
,
PRWS
,
PRTHLS
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KSV
),
INTENT
(
INOUT
)
::
PRSVS
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
,
KRR
),
INTENT
(
INOUT
)
::
PRRS
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
,
KSV
),
INTENT
(
INOUT
)
::
PRSVS
! cumulated sources for the prognostic variables
! cumulated sources for the prognostic variables
!
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PDP
,
PTP
! Dynamic and thermal
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PDP
,
PTP
! Dynamic and thermal
! TKE production terms
! TKE production terms
REAL
,
DIMENSION
(
MERGE
(
D
%
NIT
,
0
,
OCOMPUTE_SRC
),&
REAL
,
DIMENSION
(
MERGE
(
D
%
NIJT
,
0
,
OCOMPUTE_SRC
),&
MERGE
(
D
%
NJT
,
0
,
OCOMPUTE_SRC
),&
MERGE
(
D
%
NKT
,
0
,
OCOMPUTE_SRC
)),
INTENT
(
OUT
)
::
PSIGS
MERGE
(
D
%
NKT
,
0
,
OCOMPUTE_SRC
)),
INTENT
(
OUT
)
::
PSIGS
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PWTH
! heat flux
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PWTH
! heat flux
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PWRC
! cloud water flux
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
),
INTENT
(
OUT
)
::
PWRC
! cloud water flux
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
,
KSV
),
INTENT
(
OUT
)
::
PWSV
! scalar flux
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KSV
),
INTENT
(
OUT
)
::
PWSV
! scalar flux
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSTFL
! Time evol Flux of T at sea surface (LOCEAN)!
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSTFL
! Time evol Flux of T at sea surface (LOCEAN)!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSTFL_C
! O-A interface flux for theta(LOCEAN and LCOUPLES)
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSTFL_C
! O-A interface flux for theta(LOCEAN and LCOUPLES)
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSRFL_C
! O-A interface flux for vapor (LOCEAN and LCOUPLES)
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSRFL_C
! O-A interface flux for vapor (LOCEAN and LCOUPLES)
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSUFL_C
! Time evol Flux of U at sea surface (LOCEAN)
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSUFL_C
! Time evol Flux of U at sea surface (LOCEAN)
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSVFL_C
!
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSVFL_C
!
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSUFL
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSUFL
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
),
INTENT
(
IN
),
OPTIONAL
::
PSSVFL
!
REAL
,
DIMENSION
(
D
%
NIJT
),
INTENT
(
IN
),
OPTIONAL
::
PSSVFL
!
!
!
!* 0.2 declaration of local variables
!* 0.2 declaration of local variables
!
!
!JUAN BUG PGI
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
)
::
&
!!$REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: &
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
)
::
&
ZBETA
,
&
! buoyancy coefficient
ZBETA
,
&
! buoyancy coefficient
ZSQRT_TKE
,&
! sqrt(e)
ZSQRT_TKE
,&
! sqrt(e)
ZDTH_DZ
,
&
! d(th)/dz
ZDTH_DZ
,
&
! d(th)/dz
...
@@ -386,19 +375,18 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: &
...
@@ -386,19 +375,18 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: &
ZWV
,
&
! (v'w')
ZWV
,
&
! (v'w')
ZTHLP
,
&
! guess of potential temperature due to vert. turbulent flux
ZTHLP
,
&
! guess of potential temperature due to vert. turbulent flux
ZRP
! guess of total water due to vert. turbulent flux
ZRP
! guess of total water due to vert. turbulent flux
!
!!$REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV) :: &
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
,
KSV
)
::
&
REAL
,
DIMENSION
(
D
%
NIT
,
D
%
NJT
,
D
%
NKT
,
KSV
)
::
&
ZPSI_SV
,
&
! Prandtl number for scalars
ZPSI_SV
,
&
! Prandtl number for scalars
ZREDS1
,
&
! 1D Redelsperger number R_sv
ZREDS1
,
&
! 1D Redelsperger number R_sv
ZRED2THS
,
&
! 3D Redelsperger number R*2_thsv
ZRED2THS
,
&
! 3D Redelsperger number R*2_thsv
ZRED2RS
! 3D Redelsperger number R*2_rsv
ZRED2RS
! 3D Redelsperger number R*2_rsv
REAL
,
DIMENSION
(
D
%
NI
T
,
D
%
N
JT
,
D
%
NKT
)
::
ZLM
REAL
,
DIMENSION
(
D
%
NIJT
,
D
%
NKT
)
::
ZLM
!
!
LOGICAL
::
GUSERV
! flag to use water vapor
LOGICAL
::
GUSERV
! flag to use water vapor
INTEGER
::
IKB
,
IKE
,
II
B
,
II
E
,
IJB
,
IJE
! index value for the Beginning
INTEGER
::
IKB
,
IKE
,
II
J
E
,
I
IJB
! index value for the Beginning
! and the End of the physical domain for the mass points
! and the End of the physical domain for the mass points
INTEGER
::
JSV
,
JI
,
J
J
,
JK
! loop counter
INTEGER
::
JSV
,
JIJ
,
JK
! loop counter
REAL
::
ZTIME1
REAL
::
ZTIME1
REAL
::
ZTIME2
REAL
::
ZTIME2
REAL
(
KIND
=
JPRB
)
::
ZHOOK_HANDLE
REAL
(
KIND
=
JPRB
)
::
ZHOOK_HANDLE
...
@@ -413,10 +401,8 @@ IF (LHOOK) CALL DR_HOOK('TURB_VER',0,ZHOOK_HANDLE)
...
@@ -413,10 +401,8 @@ IF (LHOOK) CALL DR_HOOK('TURB_VER',0,ZHOOK_HANDLE)
!
!
IKB
=
D
%
NKTB
IKB
=
D
%
NKTB
IKE
=
D
%
NKTE
IKE
=
D
%
NKTE
IIE
=
D
%
NIEC
IIJE
=
D
%
NIJE
IIB
=
D
%
NIBC
IIJB
=
D
%
NIJB
IJE
=
D
%
NJEC
IJB
=
D
%
NJBC
!
!
!
!
! 3D Redelsperger numbers
! 3D Redelsperger numbers
...
@@ -437,39 +423,39 @@ CALL PRANDTL(D,CST,CSTURB,KRR,KSV,KRRI,OTURB_FLX, &
...
@@ -437,39 +423,39 @@ CALL PRANDTL(D,CST,CSTURB,KRR,KSV,KRRI,OTURB_FLX, &
! Buoyancy coefficient
! Buoyancy coefficient
!
!
IF
(
OOCEAN
)
THEN
IF
(
OOCEAN
)
THEN
!$mnh_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ZBETA
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
=
CST
%
XG
*
CST
%
XALPHAOC
ZBETA
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
=
CST
%
XG
*
CST
%
XALPHAOC
!$mnh_end_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_end_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ELSE
ELSE
!$mnh_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ZBETA
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
=
CST
%
XG
/
PTHVREF
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
ZBETA
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
=
CST
%
XG
/
PTHVREF
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
!$mnh_end_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_end_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
END
IF
END
IF
!
!
! Square root of Tke
! Square root of Tke
!
!
!$mnh_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ZSQRT_TKE
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
=
SQRT
(
PTKEM
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
))
ZSQRT_TKE
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
=
SQRT
(
PTKEM
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
))
!$mnh_end_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_end_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
!
!
! gradients of mean quantities at previous time-step
! gradients of mean quantities at previous time-step
!
!
CALL
GZ_M_W_PHY
(
D
,
PTHLM
,
PDZZ
,
ZDTH_DZ
)
CALL
GZ_M_W_PHY
(
D
,
PTHLM
,
PDZZ
,
ZDTH_DZ
)
ZDR_DZ
(:,:
,:
)
=
0.
ZDR_DZ
(:,:)
=
0.
IF
(
KRR
>
0
)
CALL
GZ_M_W_PHY
(
D
,
PRM
(:,:,
:,
1
),
PDZZ
,
ZDR_DZ
)
IF
(
KRR
>
0
)
CALL
GZ_M_W_PHY
(
D
,
PRM
(:,:,
1
),
PDZZ
,
ZDR_DZ
)
!
!
!
!
! Denominator factor in 3rd order terms
! Denominator factor in 3rd order terms
!
!
IF
(
.NOT.
OHARAT
)
THEN
IF
(
.NOT.
OHARAT
)
THEN
!$mnh_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ZD
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
=
(
1.
+
ZREDTH1
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
+
ZREDR1
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
))
*
&
ZD
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
=
(
1.
+
ZREDTH1
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
+
ZREDR1
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
))
*
&
&(
1.+0.5
*
(
ZREDTH1
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
+
ZREDR1
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)))
&(
1.+0.5
*
(
ZREDTH1
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
+
ZREDR1
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)))
!$mnh_end_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_end_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ELSE
ELSE
!$mnh_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ZD
(
I
IB
:
IIE
,
IJB
:
IJE
,
1
:
D
%
NKT
)
=
1.
ZD
(
IIJB
:
I
IJE
,
1
:
D
%
NKT
)
=
1.
!$mnh_end_expand_array(JI
=IIB:IIE,J
J=IJB:IJE,JK=1:D%NKT)
!$mnh_end_expand_array(JIJ=
I
IJB:
I
IJE,JK=1:D%NKT)
ENDIF
ENDIF
!
!
! Phi3 and Psi3 Prandtl numbers
! Phi3 and Psi3 Prandtl numbers
...
@@ -488,9 +474,9 @@ CALL PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3,ZPSI
...
@@ -488,9 +474,9 @@ CALL PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3,ZPSI
!
!
IF
(
OLES_CALL
)
THEN
IF
(
OLES_CALL
)
THEN
CALL
SECOND_MNH
(
ZTIME1
)
CALL
SECOND_MNH
(
ZTIME1
)
CALL
LES_MEAN_SUBGRID
(
ZPHI3
,
X_LES_SUBGRID_PHI3
)
CALL
LES_MEAN_SUBGRID
_PHY
(
D
,
ZPHI3
,
X_LES_SUBGRID_PHI3
)
IF
(
KRR
/
=
0
)
THEN
IF
(
KRR
/
=
0
)
THEN
CALL
LES_MEAN_SUBGRID
(
ZPSI3
,
X_LES_SUBGRID_PSI3
)
CALL
LES_MEAN_SUBGRID
_PHY
(
D
,
ZPSI3
,
X_LES_SUBGRID_PSI3
)
END
IF
END
IF
CALL
SECOND_MNH
(
ZTIME2
)
CALL
SECOND_MNH
(
ZTIME2
)
XTIME_LES
=
XTIME_LES
+
ZTIME2
-
ZTIME1
XTIME_LES
=
XTIME_LES
+
ZTIME2
-
ZTIME1
...
@@ -511,9 +497,9 @@ END IF
...
@@ -511,9 +497,9 @@ END IF
!
!
IF
(
OHARAT
)
THEN
IF
(
OHARAT
)
THEN
ZLM
=
PLENGTHH
ZLM
(:,:)
=
PLENGTHH
(:,:)
ELSE
ELSE
ZLM
=
PLM
ZLM
(:,:)
=
PLM
(:,:)
ENDIF
ENDIF
!
!
CALL
TURB_VER_THERMO_FLUX
(
D
,
CST
,
CSTURB
,
TURBN
,
&
CALL
TURB_VER_THERMO_FLUX
(
D
,
CST
,
CSTURB
,
TURBN
,
&
...
@@ -566,7 +552,7 @@ ENDIF
...
@@ -566,7 +552,7 @@ ENDIF
! -----------------------------------------------
! -----------------------------------------------
!
!
!
!
IF
(
OHARAT
)
ZLM
=
PLENGTHM
IF
(
OHARAT
)
ZLM
(:,:)
=
PLENGTHM
(:,:)
!
!
CALL
TURB_VER_DYN_FLUX
(
D
,
CST
,
CSTURB
,
TURBN
,
KSV
,
O2D
,
OFLAT
,
&
CALL
TURB_VER_DYN_FLUX
(
D
,
CST
,
CSTURB
,
TURBN
,
KSV
,
O2D
,
OFLAT
,
&
OTURB_FLX
,
KRR
,
OOCEAN
,
OHARAT
,
OCOUPLES
,
OLES_CALL
,&
OTURB_FLX
,
KRR
,
OOCEAN
,
OHARAT
,
OCOUPLES
,
OLES_CALL
,&
...
@@ -586,7 +572,7 @@ CALL TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT, &
...
@@ -586,7 +572,7 @@ CALL TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT, &
!* 8. SOURCES OF PASSIVE SCALAR VARIABLES
!* 8. SOURCES OF PASSIVE SCALAR VARIABLES
! -----------------------------------
! -----------------------------------
!
!
IF
(
OHARAT
)
ZLM
=
PLENGTHH
IF
(
OHARAT
)
ZLM
(:,:)
=
PLENGTHH
(:,:)
!
!
IF
(
KSV
>
0
)
&
IF
(
KSV
>
0
)
&
CALL
TURB_VER_SV_FLUX
(
D
,
CST
,
CSTURB
,
ONOMIXLG
,
&
CALL
TURB_VER_SV_FLUX
(
D
,
CST
,
CSTURB
,
ONOMIXLG
,
&
...
@@ -640,7 +626,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
...
@@ -640,7 +626,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
TZFIELD
%
NTYPE
=
TYPEREAL
TZFIELD
%
NTYPE
=
TYPEREAL
TZFIELD
%
NDIMS
=
3
TZFIELD
%
NDIMS
=
3
TZFIELD
%
LTIMEDEP
=
.TRUE.
TZFIELD
%
LTIMEDEP
=
.TRUE.
CALL
IO_F
ield_write
(
TPFILE
,
TZFIELD
,
ZPHI3
)
CALL
IO_F
IELD_WRITE_PHY
(
D
,
TPFILE
,
TZFIELD
,
ZPHI3
)
!
!
! stores the Turbulent Schmidt number
! stores the Turbulent Schmidt number
!
!
...
@@ -654,7 +640,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
...
@@ -654,7 +640,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
TZFIELD
%
NTYPE
=
TYPEREAL
TZFIELD
%
NTYPE
=
TYPEREAL
TZFIELD
%
NDIMS
=
3
TZFIELD
%
NDIMS
=
3
TZFIELD
%
LTIMEDEP
=
.TRUE.
TZFIELD
%
LTIMEDEP
=
.TRUE.
CALL
IO_F
ield_write
(
TPFILE
,
TZFIELD
,
ZPSI3
)
CALL
IO_F
IELD_WRITE_PHY
(
D
,
TPFILE
,
TZFIELD
,
ZPSI3
)
!
!
!
!
! stores the Turbulent Schmidt number for the scalar variables
! stores the Turbulent Schmidt number for the scalar variables
...
@@ -670,7 +656,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
...
@@ -670,7 +656,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. OHARAT) THEN
WRITE
(
TZFIELD
%
CMNHNAME
,
'("PSI_SV_",I3.3)'
)
JSV
WRITE
(
TZFIELD
%
CMNHNAME
,
'("PSI_SV_",I3.3)'
)
JSV
TZFIELD
%
CLONGNAME
=
TRIM
(
TZFIELD
%
CMNHNAME
)
TZFIELD
%
CLONGNAME
=
TRIM
(
TZFIELD
%
CMNHNAME
)
TZFIELD
%
CCOMMENT
=
'X_Y_Z_'
//
TRIM
(
TZFIELD
%
CMNHNAME
)
TZFIELD
%
CCOMMENT
=
'X_Y_Z_'
//
TRIM
(
TZFIELD
%
CMNHNAME
)
CALL
IO_F
ield_write
(
TPFILE
,
TZFIELD
,
ZPSI_SV
(:,:,
:,
JSV
))
CALL
IO_F
IELD_WRITE_PHY
(
D
,
TPFILE
,
TZFIELD
,
ZPSI_SV
(:,:,
JSV
))
END
DO
END
DO
!
!
END
IF
END
IF
...
...
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