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
5f2c6f12
Commit
5f2c6f12
authored
1 year ago
by
CHABOUREAU Jean-Pierre
Committed by
RODIER Quentin
1 year ago
Browse files
Options
Downloads
Patches
Plain Diff
Jean-Pierre 21/12/2023: remove CRAD_SAT and old RTTOV versions
parent
bbe7b82b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/mesonh/micro/radtr_satel.f90
+0
-756
0 additions, 756 deletions
src/mesonh/micro/radtr_satel.f90
with
0 additions
and
756 deletions
src/mesonh/micro/radtr_satel.f90
deleted
100644 → 0
+
0
−
756
View file @
bbe7b82b
!MNH_LIC Copyright 2000-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
MODI_RADTR_SATEL
! #######################
IMPLICIT
NONE
INTERFACE
!
SUBROUTINE
RADTR_SATEL
(
KYEARF
,
KMONTHF
,
KDAYF
,
PSECF
,
&
KDLON
,
KFLEV
,
KSTATM
,
KRAD_COLNBR
,
PEMIS
,
PCCO2
,
&
PTSRAD
,
PSTATM
,
PTHT
,
PRT
,
PPABST
,
PZZ
,
&
PSIGS
,
PMFCONV
,
PCLDFR
,
OUSERI
,
OSIGMAS
,
&
OSUBG_COND
,
ORAD_SUBG_COND
,
PIRBT
,
PWVBT
,
KGEO
,
PSIGQSAT
)
IMPLICIT
NONE
!
INTEGER
,
INTENT
(
IN
)
::
KYEARF
! year of Final date
INTEGER
,
INTENT
(
IN
)
::
KMONTHF
! month of Final date
INTEGER
,
INTENT
(
IN
)
::
KDAYF
! day of Final date
REAL
,
INTENT
(
IN
)
::
PSECF
! number of seconds since date at 00 UTC
!
INTEGER
,
INTENT
(
IN
)
::
KDLON
!number of columns where the
!radiation calculations are performed
INTEGER
,
INTENT
(
IN
)
::
KFLEV
!number of vertical levels where the
!radiation calculations are performed
INTEGER
,
INTENT
(
IN
)
::
KSTATM
!index of the standard atmosphere level
!just above the model top
INTEGER
,
INTENT
(
IN
)
::
KRAD_COLNBR
!factor by which the memory is split
!
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PEMIS
!Surface IR EMISsivity
REAL
,
INTENT
(
IN
)
::
PCCO2
!CO2 content
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PTSRAD
!RADiative Surface Temperature
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PSTATM
!selected standard atmosphere
!
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PTHT
!THeta at t
REAL
,
DIMENSION
(:,:,:,:),
INTENT
(
IN
)
::
PRT
!moist variables at t
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PPABST
!pressure at t
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PZZ
!Model level heights
!
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PSIGS
! Sigma_s from turbulence scheme
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PMFCONV
! convective mass flux (kg /s m^2)
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PCLDFR
! cloud fraction
!
LOGICAL
,
INTENT
(
IN
)
::
OUSERI
! logical switch to compute both
! liquid and solid condensate (OUSERI=.TRUE.)
! or only liquid condensate (OUSERI=.FALSE.)
LOGICAL
,
INTENT
(
IN
)
::
OSIGMAS
! use present global Sigma_s values
! or that from turbulence scheme
LOGICAL
,
INTENT
(
IN
)
::
OSUBG_COND
! Switch for Subgrid Condensation
! (prognotic mode)
LOGICAL
,
INTENT
(
IN
)
::
ORAD_SUBG_COND
! Switch for Subgrid Condensation
! (diagnostic mode)
!
REAL
,
DIMENSION
(:,:),
INTENT
(
OUT
)::
PIRBT
!IR Brightness Temp. (K)
REAL
,
DIMENSION
(:,:),
INTENT
(
OUT
)::
PWVBT
!WV Brightness Temp. (K)
!
INTEGER
,
INTENT
(
IN
)
::
KGEO
!SATELLITE INDEX
REAL
,
INTENT
(
IN
)
::
PSIGQSAT
! use an extra "qsat" variance contribution (OSIGMAS case)
!
END
SUBROUTINE
RADTR_SATEL
END
INTERFACE
END
MODULE
MODI_RADTR_SATEL
! #####################################################################
SUBROUTINE
RADTR_SATEL
(
KYEARF
,
KMONTHF
,
KDAYF
,
PSECF
,
&
KDLON
,
KFLEV
,
KSTATM
,
KRAD_COLNBR
,
PEMIS
,
PCCO2
,
&
PTSRAD
,
PSTATM
,
PTHT
,
PRT
,
PPABST
,
PZZ
,
&
PSIGS
,
PMFCONV
,
PCLDFR
,
OUSERI
,
OSIGMAS
,
&
OSUBG_COND
,
ORAD_SUBG_COND
,
PIRBT
,
PWVBT
,
KGEO
,
PSIGQSAT
)
! #####################################################################
!
!!**** *RADTR_SATEL* -
!!
!! PURPOSE
!! -------
!!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!! Chaboureau, J.-P., J.-P. Cammas, P. Mascart, J.-P. Pinty, C. Claud, R. Roca,
!! and J.-J. Morcrette, 2000: Evaluation of a cloud system life-cycle simulated
!! by Meso-NH during FASTEX using METEOSAT radiances and TOVS-3I cloud retrievals.
!! Q. J. R. Meteorol. Soc., 126, 1735-1750.
!! Chaboureau, J.-P. and P. Bechtold, 2002: A simple cloud parameterization from
!! cloud resolving model data: Theory and application. J. Atmos. Sci., 59, 2362-2372.
!!
!! AUTHOR
!! ------
!! J.-P. Chaboureau *L.A.*
!!
!! MODIFICATIONS
!! -------------
!! Original 29/03/00
!! J.-P. Chaboureau 15/04/03 add call to the subgrid condensation scheme
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!! G.Delautier 04/2016 : BUG JPHEXT
!! S. Riette 11/2016 : Condensation interface changed
! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE
MODD_CST
USE
MODD_PARAMETERS
USE
MODD_GRID_n
USE
MODD_RAIN_ICE_PARAM_n
,
ONLY
:
RAIN_ICE_PARAMN
USE
MODD_NEB_n
,
ONLY
:
NEBN
USE
MODD_TURB_n
,
ONLY
:
TURBN
USE
MODD_DIMPHYEX
,
ONLY
:
DIMPHYEX_t
!
USE
MODD_RAD_TRANSF
USE
MODE_ll
USE
MODE_FILL_DIMPHYEX
,
ONLY
:
FILL_DIMPHYEX
!
USE
MODI_INIT_NBMOD
USE
MODI_DETER_ANGLE
USE
MODI_MAKE_RADSAT
!
USE
MODI_CONDENSATION
!
IMPLICIT
NONE
!
!* 0.1 DECLARATIONS OF DUMMY ARGUMENTS :
!
INTEGER
,
INTENT
(
IN
)
::
KYEARF
! year of Final date
INTEGER
,
INTENT
(
IN
)
::
KMONTHF
! month of Final date
INTEGER
,
INTENT
(
IN
)
::
KDAYF
! day of Final date
REAL
,
INTENT
(
IN
)
::
PSECF
! number of seconds since date at 00 UTC
!
INTEGER
,
INTENT
(
IN
)
::
KDLON
!number of columns where the
! radiation calculations are performed
INTEGER
,
INTENT
(
IN
)
::
KFLEV
!number of vertical levels where the
! radiation calculations are performed
INTEGER
,
INTENT
(
IN
)
::
KSTATM
!index of the standard atmosphere level
!just above the model top
INTEGER
,
INTENT
(
IN
)
::
KRAD_COLNBR
!factor by which the memory is split
!
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PEMIS
!Surface IR EMISsivity
REAL
,
INTENT
(
IN
)
::
PCCO2
!CO2 content
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PTSRAD
!RADiative Surface Temperature
REAL
,
DIMENSION
(:,:),
INTENT
(
IN
)
::
PSTATM
!selected standard atmosphere
!
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PTHT
!THeta at t
REAL
,
DIMENSION
(:,:,:,:),
INTENT
(
IN
)
::
PRT
!moist variables at t
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PPABST
!pressure at t
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PZZ
!Model level heights
!
!
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PSIGS
! Sigma_s from turbulence scheme
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PMFCONV
! convective mass flux (kg /s m^2)
REAL
,
DIMENSION
(:,:,:),
INTENT
(
IN
)
::
PCLDFR
! cloud fraction
!
LOGICAL
,
INTENT
(
IN
)
::
OUSERI
! logical switch to compute both
! liquid and solid condensate (OUSERI=.TRUE.)
! or only liquid condensate (OUSERI=.FALSE.)
LOGICAL
,
INTENT
(
IN
)
::
OSIGMAS
! use present global Sigma_s values
! or that from turbulence scheme
LOGICAL
,
INTENT
(
IN
)
::
OSUBG_COND
! Switch for Subgrid Condensation
! (prognotic mode)
LOGICAL
,
INTENT
(
IN
)
::
ORAD_SUBG_COND
! Switch for Subgrid Condensation
! (diagnostic mode)
!
REAL
,
DIMENSION
(:,:),
INTENT
(
OUT
)::
PIRBT
!IR Brightness Temp. (K)
REAL
,
DIMENSION
(:,:),
INTENT
(
OUT
)::
PWVBT
!WV Brightness Temp. (K)
!
INTEGER
,
INTENT
(
IN
)
::
KGEO
!SATELLITE INDEX
REAL
,
INTENT
(
IN
)
::
PSIGQSAT
! use an extra "qsat" variance contribution (OSIGMAS case)
!
!* 0.2 DECLARATIONS OF LOCAL VARIABLES
!
LOGICAL
::
GPTDEP
,
GPVOIGT
!
! reference state
!from inprof
INTEGER
::
IGL
,
ICABS
,
ING1
,
IUABS
,
IINIS
,
IENDS
,
ICONF
,
ICLOUD
,
IOVLP
INTEGER
::
IH2O
,
ICO2
,
IO3
,
ICNT
,
IN2O
,
ICH4
,
ICO
,
IC11
,
IC12
,
ICFC
!
LOGICAL
,
DIMENSION
(
KDLON
)
::
GDOIT_2D
! .TRUE. for the larger scale
LOGICAL
,
DIMENSION
(
KDLON
,
KFLEV
)
::
GDOIT
! .TRUE. for all the levels of the
! larger scale columns
!
INTEGER
::
JI
,
JJ
,
JK
,
JK1
,
JK2
,
JKRAD
! loop indexes
!
INTEGER
::
IIB
,
IIE
! I index value of the first/last inner mass point
INTEGER
::
IJB
,
IJE
! J index value of the first/last inner mass point
INTEGER
::
IKB
,
IKE
! K index value of the first/last inner mass point
INTEGER
::
IIU
! array size for the first index
INTEGER
::
IJU
! array size for the second index
INTEGER
::
IKU
! array size for the third index
INTEGER
::
IIJ
! reformatted array index
INTEGER
::
IKSTAE
! level number of the STAndard atmosphere array
INTEGER
::
IKUP
! vertical level above which STAndard atmosphere data
INTEGER
::
IDOIT_COL
! number of larger scale columns
INTEGER
::
IDOIT
! number of levels corresponding of the larger scale
! columns are filled in
INTEGER
::
IDIM
! effective number of columns for which the radiation
! code is run
INTEGER
,
DIMENSION
(
SIZE
(
PZZ
,
1
),
SIZE
(
PZZ
,
3
))
::
IKKOZ
! indice array used to
! vertically interpolate the ozone content on the model grid
!
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZTAVE
! mean-layer temperature
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZQVAVE
! mean-layer specific humidity
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZO3AVE
! mean-layer ozone content
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZPRES_HL
! half-level pressure
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZT_HL
! half-level temperature
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZCLDLD
! Downward cloud emissivity
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZCLDLU
! Upward cloud emissivity
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZVIEW
! cosecant of viewing angle
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZREMIS
! Reformatted PEMIS array
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZEXNT
! Exner function
REAL
,
DIMENSION
(
SIZE
(
PSTATM
,
1
))
::
ZSTAZZ
,
ZSTAOZ
! STAndard atmosphere height
! and OZone content
REAL
::
ZOZ
! variable used to interpolate the ozone profile
!
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZDT0
! surface discontinuity
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZRADBT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZRADBC
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZRADFT
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZULAT
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZULON
!
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZZRADFT
!
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZWORK1
,
ZWORK3
!
! split arrays used to split the memory required by the ECMWF_radiation
! subroutine, the fields have the same meaning as their complete counterpart
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZREMIS_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZO3AVE_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZT_HL_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZPRES_HL_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZQVAVE_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZTAVE_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZCLDLD_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZCLDLU_SPLIT
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZVIEW_SPLIT
REAL
,
DIMENSION
(:),
ALLOCATABLE
::
ZDT0_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZRADBT_SPLIT
REAL
,
DIMENSION
(:,:),
ALLOCATABLE
::
ZRADBC_SPLIT
!
INTEGER
::
JI_SPLIT
! loop on the split array
INTEGER
::
INUM_CALL
! number of CALL of the radiation scheme
INTEGER
::
IDIM_EFF
! effective number of air-columns to compute
INTEGER
::
IDIM_RESIDUE
! number of remaining air-columns to compute
INTEGER
::
IBEG
,
IEND
! auxiliary indices
!
! Other arrays for emissivity
REAL
::
ZFLWP
,
ZFIWP
,
ZANGCOR
,
ZRADLP
,
ZMULTS
,
ZTMP
,
ZKI
!
! Other arrays for condensation
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZTEMP
! Temperature
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZSIGRC
! s r_c / sig_s^2
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZNCLD
! grid scale cloud fraction
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZRC_IN
,
ZRC_OUT
! grid scale r_c mixing ratio (kg/kg)
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZRI_IN
,
ZRI_OUT
! grid scale r_i (kg/kg)
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZRV_IN
,
ZRV_OUT
! grid scale r_v (kg/kg)
REAL
,
DIMENSION
(:,:,:),
ALLOCATABLE
::
ZRHO
REAL
,
DIMENSION
(
SIZE
(
PPABST
,
1
),
SIZE
(
PPABST
,
2
))
::
ZSIGQSAT2D
,
ZDUM
TYPE
(
DIMPHYEX_t
)
::
D
!----------------------------------------------------------------------------
!
!* 1. INITIALIZATION OF CONSTANTS FOR TRANSFERT CODE
! ----------------------------------------------
!
CALL
INIT_NBMOD
(
KFLEV
,
IGL
,
ICABS
,
ING1
,
IUABS
,
IINIS
,
IENDS
,
&
IH2O
,
ICO2
,
IO3
,
ICNT
,
IN2O
,
ICH4
,
ICO
,
IC11
,
IC12
,
ICFC
,
&
ICONF
,
ICLOUD
,
IOVLP
,
GPVOIGT
,
GPTDEP
)
X1CO2
=
PCCO2
/
44.0
*
XMD
!
!----------------------------------------------------------------------------
!
!* 2. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES
! ----------------------------------------------
!
IIU
=
SIZE
(
PTHT
,
1
)
IJU
=
SIZE
(
PTHT
,
2
)
IKU
=
SIZE
(
PTHT
,
3
)
CALL
GET_INDICE_ll
(
IIB
,
IJB
,
IIE
,
IJE
)
IKB
=
1
+
JPVEXT
IKE
=
IKU
-
JPVEXT
CALL
FILL_DIMPHYEX
(
D
,
IIU
,
IJU
,
IKU
)
!
IKSTAE
=
SIZE
(
PSTATM
,
1
)
IKUP
=
IKE
-
JPVEXT
+1
!
!----------------------------------------------------------------------------
!
!* 3. INITIALIZES THE MEAN-LAYER VARIABLES
! ------------------------------------
!
ALLOCATE
(
ZEXNT
(
SIZE
(
PTHT
,
1
),
SIZE
(
PTHT
,
2
),
SIZE
(
PTHT
,
3
)))
ZEXNT
(:,:,:)
=
(
PPABST
(:,:,:)/
XP00
)
**
(
XRD
/
XCPD
)
!
ALLOCATE
(
ZTAVE
(
KDLON
,
KFLEV
))
ALLOCATE
(
ZQVAVE
(
KDLON
,
KFLEV
))
!
ZQVAVE
(:,:)
=
0.0
!
DO
JK
=
IKB
,
IKE
JKRAD
=
JK
-
JPVEXT
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZTAVE
(
IIJ
,
JKRAD
)
=
PTHT
(
JI
,
JJ
,
JK
)
*
ZEXNT
(
JI
,
JJ
,
JK
)
END
DO
END
DO
END
DO
!
! Check if the humidity mixing ratio is available
!
IF
(
SIZE
(
PRT
(:,:,:,:),
4
)
>=
1
)
THEN
DO
JK
=
IKB
,
IKE
JKRAD
=
JK
-
JPVEXT
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZQVAVE
(
IIJ
,
JKRAD
)
=
PRT
(
JI
,
JJ
,
JK
,
1
)
END
DO
END
DO
END
DO
END
IF
!
! Standard atmosphere extension
!
DO
JK
=
IKUP
,
KFLEV
JK1
=
(
KSTATM
-1
)
+
(
JK
-
IKUP
)
JK2
=
JK1
+1
ZTAVE
(:,
JK
)
=
0.5
*
(
PSTATM
(
JK1
,
3
)
+
PSTATM
(
JK2
,
3
)
)
ZQVAVE
(:,
JK
)
=
0.5
*
(
PSTATM
(
JK1
,
5
)/
PSTATM
(
JK1
,
4
)
+
&
PSTATM
(
JK2
,
5
)/
PSTATM
(
JK2
,
4
)
)
END
DO
!
!----------------------------------------------------------------------------
!
!* 4. INITIALIZES THE HALF-LEVEL VARIABLES
! ------------------------------------
!
ALLOCATE
(
ZPRES_HL
(
KDLON
,
KFLEV
+1
))
ALLOCATE
(
ZT_HL
(
KDLON
,
KFLEV
+1
))
!
DO
JK
=
IKB
,
IKE
+1
JKRAD
=
JK
-
JPVEXT
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZPRES_HL
(
IIJ
,
JKRAD
)
=
XP00
*
&
(
0.5
*
(
ZEXNT
(
JI
,
JJ
,
JK
)
+
ZEXNT
(
JI
,
JJ
,
JK
-1
)))
**
(
XCPD
/
XRD
)
END
DO
END
DO
END
DO
!
! Standard atmosphere extension
! begining at ikup+1 level allows to use a model domain higher than 50km
!
DO
JK
=
IKUP
+1
,
KFLEV
+1
JK1
=
(
KSTATM
-1
)
+
(
JK
-
IKUP
)
ZPRES_HL
(:,
JK
)
=
PSTATM
(
JK1
,
2
)
*
100.0
END
DO
!
! Surface temperature at the first level
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZT_HL
(
IIJ
,
1
)
=
PTSRAD
(
JI
,
JJ
)
END
DO
END
DO
!
! Temperature at half levels
ZT_HL
(:,
2
:
IKE
-
JPVEXT
)
=
0.5
*
(
ZTAVE
(:,
1
:
IKE
-
JPVEXT
-1
)
+
ZTAVE
(:,
2
:
IKE
-
JPVEXT
))
!
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZT_HL
(
IIJ
,
IKE
-
JPVEXT
+1
)
=
0.5
*
PTHT
(
JI
,
JJ
,
IKE
)
*
ZEXNT
(
JI
,
JJ
,
IKE
)
&
+
0.5
*
PTHT
(
JI
,
JJ
,
IKE
+1
)
*
ZEXNT
(
JI
,
JJ
,
IKE
+1
)
END
DO
END
DO
!
! Standard atmosphere extension
! begining at ikup+1 level allows to use a model domain higher than 50km
!
DO
JK
=
IKUP
+1
,
KFLEV
+1
JK1
=
(
KSTATM
-1
)
+
(
JK
-
IKUP
)
ZT_HL
(:,
JK
)
=
PSTATM
(
JK1
,
3
)
END
DO
!
!----------------------------------------------------------------------------
!
!* 5. INITIALIZES THE OZONE PROFILES from the standard atmosphere
! ------------------------------
!
ALLOCATE
(
ZO3AVE
(
KDLON
,
KFLEV
))
!
ZSTAOZ
(:)
=
PSTATM
(:,
6
)/
PSTATM
(:,
4
)
ZSTAZZ
(:)
=
1000.0
*
PSTATM
(:,
1
)
!
DO
JJ
=
IJB
,
IJE
DO
JK2
=
IKB
,
IKE
JKRAD
=
JK2
-
JPVEXT
IKKOZ
(:,
JK2
)
=
IKB
-1
DO
JK1
=
1
,
IKSTAE
DO
JI
=
IIB
,
IIE
IKKOZ
(
JI
,
JK2
)
=
IKKOZ
(
JI
,
JK2
)
+
NINT
(
0.5
+
SIGN
(
0.5
,
&
-
ZSTAZZ
(
JK1
)
+0.5
*
(
PZZ
(
JI
,
JJ
,
JK2
)
+
PZZ
(
JI
,
JJ
,
JK2
+1
))
))
END
DO
END
DO
DO
JI
=
IIB
,
IIE
ZOZ
=
(
0.5
*
(
PZZ
(
JI
,
JJ
,
JK2
)
+
PZZ
(
JI
,
JJ
,
JK2
+1
))
-
ZSTAZZ
(
IKKOZ
(
JI
,
JK2
)))
&
/(
ZSTAZZ
(
IKKOZ
(
JI
,
JK2
)
+1
)
-
ZSTAZZ
(
IKKOZ
(
JI
,
JK2
)))
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZO3AVE
(
IIJ
,
JKRAD
)
=
(
(
1.
-
ZOZ
)
*
ZSTAOZ
(
IKKOZ
(
JI
,
JK2
))
&
+
ZOZ
*
ZSTAOZ
(
IKKOZ
(
JI
,
JK2
)
+1
))
END
DO
END
DO
END
DO
!
DO
JK
=
IKUP
,
KFLEV
JK1
=
(
KSTATM
)
+
(
JK
-
IKUP
)
ZO3AVE
(:,
JK
)
=
ZSTAOZ
(
JK1
)
END
DO
!
!----------------------------------------------------------------------------
!
!* 6. CALLS THE E.C.M.W.F. RADIATION CODE
! -----------------------------------
!
!* 6.1 INITIALIZES 2D AND SURFACE FIELDS
!
ALLOCATE
(
ZREMIS
(
KDLON
))
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZREMIS
(
IIJ
)
=
PEMIS
(
JI
,
JJ
)
END
DO
END
DO
!
! initializes surface discontinuity field
ALLOCATE
(
ZDT0
(
KDLON
))
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZDT0
(
IIJ
)
=
PTSRAD
(
JI
,
JJ
)
-
PTHT
(
JI
,
JJ
,
1
)
*
ZEXNT
(
JI
,
JJ
,
1
)
END
DO
END
DO
!
ALLOCATE
(
ZULAT
(
KDLON
))
ALLOCATE
(
ZULON
(
KDLON
))
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
ZULON
(
IIJ
)
=
XLON
(
JI
,
JJ
)
ZULAT
(
IIJ
)
=
XLAT
(
JI
,
JJ
)
END
DO
END
DO
ALLOCATE
(
ZVIEW
(
KDLON
))
CALL
DETER_ANGLE
(
KGEO
,
KDLON
,
ZULAT
,
ZULON
,
ZVIEW
)
DEALLOCATE
(
ZULAT
)
DEALLOCATE
(
ZULON
)
!
!
ALLOCATE
(
ZCLDLD
(
KDLON
,
KFLEV
))
ALLOCATE
(
ZCLDLU
(
KDLON
,
KFLEV
))
ZCLDLD
=
0.
ZCLDLU
=
0.
!
IF
(
SIZE
(
PRT
(:,:,:,:),
4
)
>=
2
)
THEN
ALLOCATE
(
ZNCLD
(
IIU
,
IJU
,
IKU
))
ALLOCATE
(
ZRC_IN
(
IIU
,
IJU
,
IKU
))
ALLOCATE
(
ZRC_OUT
(
IIU
,
IJU
,
IKU
))
ZRC_IN
=
PRT
(:,:,:,
2
)
ALLOCATE
(
ZRI_IN
(
IIU
,
IJU
,
IKU
))
ALLOCATE
(
ZRI_OUT
(
IIU
,
IJU
,
IKU
))
ZRI_IN
=
0.
IF
(
OUSERI
)
ZRI_IN
=
PRT
(:,:,:,
4
)
IF
(
.NOT.
OSUBG_COND
.AND.
ORAD_SUBG_COND
)
THEN
PRINT
*
,
' THE SUBGRID CONDENSATION SCHEME IN DIAGNOSTIC MODE IS ACTIVATED'
ALLOCATE
(
ZTEMP
(
IIU
,
IJU
,
IKU
))
ZTEMP
=
PTHT
*
ZEXNT
ALLOCATE
(
ZSIGRC
(
IIU
,
IJU
,
IKU
))
ALLOCATE
(
ZRV_IN
(
IIU
,
IJU
,
IKU
))
ZRV_IN
=
PRT
(:,:,:,
1
)
ALLOCATE
(
ZRHO
(
IIU
,
IJU
,
IKU
))
ZRHO
=
1.
!unused
ZSIGQSAT2D
(:,:)
=
PSIGQSAT
!CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, &
! 'T', 'CB02', 'CB',&
! PPABST, PZZ, ZRHO, ZTEMP, ZRV_IN, ZRV_OUT, ZRC_IN, ZRC_OUT, ZRI_IN, ZRI_OUT, &
! PRT(:,:,:,2), PRT(:,:,:,5), PRT(:,:,:,6), PSIGS, PMFCONV, ZNCLD, &
! ZSIGRC, OUSERI, OSIGMAS, .FALSE., .FALSE., &
! ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D )
CALL
CONDENSATION
(
D
,
CST
,
RAIN_ICE_PARAMN
,
NEBN
,
TURBN
,
&
&
'T'
,
'CB02'
,
'CB'
,
&
&
PPABST
,
PZZ
,
ZRHO
,
ZTEMP
,
ZRV_IN
,
ZRV_OUT
,
ZRC_IN
,
ZRC_OUT
,
ZRI_IN
,
ZRI_OUT
,
&
&
PRT
(:,:,:,
2
),
PRT
(:,:,:,
5
),
PRT
(:,:,:,
6
),
PSIGS
,
.FALSE.
,
PMFCONV
,
ZNCLD
,
ZSIGRC
,
.FALSE.
,
&
&
OSIGMAS
,
.FALSE.
,
&
&
ZDUM
,
ZDUM
,
ZDUM
,
ZDUM
,
ZDUM
,
ZSIGQSAT2D
)
DEALLOCATE
(
ZTEMP
,
ZSIGRC
)
DEALLOCATE
(
ZRV_OUT
)
ELSE
ZNCLD
=
PCLDFR
END
IF
DO
JK
=
IKB
,
IKE
-1
JKRAD
=
JK
-
JPVEXT
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
IF
(
ZVIEW
(
IIJ
)
/
=
XUNDEF
.AND.
&
(
ZRC_OUT
(
JI
,
JJ
,
JK
)
>
0.
.OR.
ZRI_OUT
(
JI
,
JJ
,
JK
)
>
0.
)
)
THEN
ZFLWP
=
ZRC_OUT
(
JI
,
JJ
,
JK
)
/
XG
/
MAX
(
1.E-10
,
ZNCLD
(
JI
,
JJ
,
JK
))
&
*
(
PPABST
(
JI
,
JJ
,
JK
)
-
PPABST
(
JI
,
JJ
,
JK
+1
))
ZFIWP
=
ZRI_OUT
(
JI
,
JJ
,
JK
)
/
XG
/
MAX
(
1.E-10
,
ZNCLD
(
JI
,
JJ
,
JK
))
&
*
(
PPABST
(
JI
,
JJ
,
JK
)
-
PPABST
(
JI
,
JJ
,
JK
+1
))
ZANGCOR
=
ZVIEW
(
IIJ
)
/
1.66
!!!Parametrization following Ou and Chou, 1995 (Atmos. Res.)
ZTMP
=
ZTAVE
(
IIJ
,
JKRAD
)
-
XTT
!ZTMP in Celsius degree
ZRADLP
=
326.3+12.42
*
ZTMP
+0.197
*
(
ZTMP
**
2
)
+0.0012
*
(
ZTMP
**
3
)
ZRADLP
=
MIN
(
140.
,
MAX
(
20.
,
ZRADLP
))
!!! Parametrization following Ebert and Curry, 1992 (JGR-d)
ZKI
=
0.3
+
1290.
/
ZRADLP
ZCLDLD
(
IIJ
,
JKRAD
)
=
ZNCLD
(
JI
,
JJ
,
JK
)
*
(
1.
-
EXP
&
(
-158.
*
ZFLWP
*
ZANGCOR
-
ZKI
*
ZFIWP
*
ZVIEW
(
IIJ
)))
ZCLDLU
(
IIJ
,
JKRAD
)
=
ZNCLD
(
JI
,
JJ
,
JK
)
*
(
1.
-
EXP
&
(
-130.
*
ZFLWP
*
ZANGCOR
-
ZKI
*
ZFIWP
*
ZVIEW
(
IIJ
)))
END
IF
END
DO
END
DO
END
DO
DEALLOCATE
(
ZNCLD
,
ZRC_OUT
,
ZRI_OUT
)
END
IF
!
DEALLOCATE
(
ZEXNT
)
!
GDOIT_2D
(:)
=
.FALSE.
!
! Flags the columns for which the computations have to be performed
!
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
IF
(
ZVIEW
(
IIJ
)
/
=
XUNDEF
)
GDOIT_2D
(
IIJ
)
=
.TRUE.
END
DO
END
DO
IDOIT_COL
=
COUNT
(
GDOIT_2D
(:)
)
! number of larger scale columns
!
GDOIT
(:,:)
=
SPREAD
(
GDOIT_2D
(:),
DIM
=
2
,
NCOPIES
=
KFLEV
)
IDOIT
=
IDOIT_COL
*
KFLEV
ALLOCATE
(
ZWORK1
(
IDOIT
))
!
! temperature profiles
ZWORK1
(:)
=
PACK
(
ZTAVE
(:,:),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZTAVE
)
ALLOCATE
(
ZTAVE
(
IDOIT_COL
,
KFLEV
))
ZTAVE
(:,:)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
!
! vapor mixing ratio profiles
ZWORK1
(:)
=
PACK
(
ZQVAVE
(:,:),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZQVAVE
)
ALLOCATE
(
ZQVAVE
(
IDOIT_COL
,
KFLEV
))
ZQVAVE
(:,:)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
!
! cloud emissivities
ZWORK1
(:)
=
PACK
(
ZCLDLD
(:,:),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZCLDLD
)
ALLOCATE
(
ZCLDLD
(
IDOIT_COL
,
KFLEV
))
ZCLDLD
(:,:)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
!
ZWORK1
(:)
=
PACK
(
ZCLDLU
(:,:),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZCLDLU
)
ALLOCATE
(
ZCLDLU
(
IDOIT_COL
,
KFLEV
))
ZCLDLU
(:,:)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
!
! ozone content profiles
ZWORK1
(:)
=
PACK
(
ZO3AVE
(:,:),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZO3AVE
)
ALLOCATE
(
ZO3AVE
(
IDOIT_COL
,
KFLEV
))
ZO3AVE
(:,:)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
!
! half-level variables
ZWORK1
(:)
=
PACK
(
ZPRES_HL
(:,
1
:
KFLEV
),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZPRES_HL
)
ALLOCATE
(
ZPRES_HL
(
IDOIT_COL
,
KFLEV
+1
))
ZPRES_HL
(:,
1
:
KFLEV
)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
ZPRES_HL
(:,
KFLEV
+1
)
=
PSTATM
(
IKSTAE
,
2
)
*
100.0
!
ZWORK1
(:)
=
PACK
(
ZT_HL
(:,
1
:
KFLEV
),
MASK
=
GDOIT
(:,:)
)
DEALLOCATE
(
ZT_HL
)
ALLOCATE
(
ZT_HL
(
IDOIT_COL
,
KFLEV
+1
))
ZT_HL
(:,
1
:
KFLEV
)
=
RESHAPE
(
ZWORK1
(:),(/
IDOIT_COL
,
KFLEV
/)
)
ZT_HL
(:,
KFLEV
+1
)
=
PSTATM
(
IKSTAE
,
3
)
!
! surface fields
ALLOCATE
(
ZWORK3
(
IDOIT_COL
))
ZWORK3
(:)
=
PACK
(
ZVIEW
(:),
MASK
=
GDOIT_2D
(:)
)
DEALLOCATE
(
ZVIEW
)
ALLOCATE
(
ZVIEW
(
IDOIT_COL
))
ZVIEW
(:)
=
ZWORK3
(:)
!
ZWORK3
(:)
=
PACK
(
ZREMIS
(:),
MASK
=
GDOIT_2D
(:)
)
DEALLOCATE
(
ZREMIS
)
ALLOCATE
(
ZREMIS
(
IDOIT_COL
))
ZREMIS
(:)
=
ZWORK3
(:)
!
ZWORK3
(:)
=
PACK
(
ZDT0
(:),
MASK
=
GDOIT_2D
(:)
)
DEALLOCATE
(
ZDT0
)
ALLOCATE
(
ZDT0
(
IDOIT_COL
))
ZDT0
(:)
=
ZWORK3
(:)
!
DEALLOCATE
(
ZWORK1
)
DEALLOCATE
(
ZWORK3
)
!
! radiation fields
ALLOCATE
(
ZRADBC
(
IDOIT_COL
,
JPWVINT
))
ALLOCATE
(
ZRADBT
(
IDOIT_COL
,
JPWVINT
))
!
IDIM
=
IDOIT_COL
PRINT
*
,
'KGEO ='
,
KGEO
,
' IDIM ='
,
IDIM
!
!* 6.2 CALLS THE ECMWF_RADIATION ROUTINES
!
! ***********************************************************
! *CAUTION: Routine nbmvec is written in FORTRAN 77*
! ***********************************************************
!
! mixing ratio -> specific humidity conversion
ZQVAVE
(:,:)
=
ZQVAVE
(:,:)
/
(
1.
+
ZQVAVE
(:,:))
!
IF
(
IDIM
<=
KRAD_COLNBR
)
THEN
!
! there is less than KRAD_COLNBR verticals to be considered therefore
! no split of the arrays is performed
!
CALL
NBMVEC
(
1
,
IDIM
,
IDIM
,
KFLEV
,
IGL
,
ICABS
,
ING1
,
IUABS
,
&
IH2O
,
ICO2
,
IO3
,
ICNT
,
IN2O
,
ICH4
,
ICO
,
IC11
,
IC12
,
ICFC
,
&
IINIS
,
IENDS
,
ICONF
,
ICLOUD
,
IOVLP
,
GPVOIGT
,
GPTDEP
,
&
ZTAVE
,
ZQVAVE
,
ZO3AVE
,
ZPRES_HL
,
ZT_HL
,
&
ZVIEW
,
ZCLDLD
,
ZCLDLU
,
ZDT0
,
ZREMIS
,
ZRADBC
,
ZRADBT
)
ELSE
!
! the splitting of the arrays will be performed
!
INUM_CALL
=
CEILING
(
REAL
(
IDIM
)
/
REAL
(
KRAD_COLNBR
)
)
IDIM_RESIDUE
=
IDIM
DO
JI_SPLIT
=
1
,
INUM_CALL
IDIM_EFF
=
MIN
(
IDIM_RESIDUE
,
KRAD_COLNBR
)
!
IF
(
JI_SPLIT
==
1
.OR.
JI_SPLIT
==
INUM_CALL
)
THEN
ALLOCATE
(
ZREMIS_SPLIT
(
IDIM_EFF
))
ALLOCATE
(
ZO3AVE_SPLIT
(
IDIM_EFF
,
KFLEV
))
ALLOCATE
(
ZT_HL_SPLIT
(
IDIM_EFF
,
KFLEV
+1
))
ALLOCATE
(
ZPRES_HL_SPLIT
(
IDIM_EFF
,
KFLEV
+1
))
ALLOCATE
(
ZQVAVE_SPLIT
(
IDIM_EFF
,
KFLEV
))
ALLOCATE
(
ZTAVE_SPLIT
(
IDIM_EFF
,
KFLEV
))
ALLOCATE
(
ZCLDLU_SPLIT
(
IDIM_EFF
,
KFLEV
))
ALLOCATE
(
ZCLDLD_SPLIT
(
IDIM_EFF
,
KFLEV
))
ALLOCATE
(
ZVIEW_SPLIT
(
IDIM_EFF
))
ALLOCATE
(
ZDT0_SPLIT
(
IDIM_EFF
))
ALLOCATE
(
ZRADBT_SPLIT
(
IDIM_EFF
,
JPWVINT
))
ALLOCATE
(
ZRADBC_SPLIT
(
IDIM_EFF
,
JPWVINT
))
END
IF
!
! fill the split arrays with their values
! taken from the full arrays
!
IBEG
=
IDIM
-
IDIM_RESIDUE
+1
IEND
=
IBEG
+
IDIM_EFF
-1
ZREMIS_SPLIT
(:)
=
ZREMIS
(
IBEG
:
IEND
)
ZO3AVE_SPLIT
(:,:)
=
ZO3AVE
(
IBEG
:
IEND
,:)
ZT_HL_SPLIT
(:,:)
=
ZT_HL
(
IBEG
:
IEND
,:)
ZPRES_HL_SPLIT
(:,:)
=
ZPRES_HL
(
IBEG
:
IEND
,:)
ZQVAVE_SPLIT
(:,:)
=
ZQVAVE
(
IBEG
:
IEND
,:)
ZTAVE_SPLIT
(:,:)
=
ZTAVE
(
IBEG
:
IEND
,:)
ZCLDLU_SPLIT
(:,:)
=
ZCLDLU
(
IBEG
:
IEND
,:)
ZCLDLD_SPLIT
(:,:)
=
ZCLDLD
(
IBEG
:
IEND
,:)
ZVIEW_SPLIT
(:)
=
ZVIEW
(
IBEG
:
IEND
)
ZDT0_SPLIT
(:)
=
ZDT0
(
IBEG
:
IEND
)
!
! call ECMWF_radiation with the split arrays
!
CALL
NBMVEC
(
1
,
IDIM_EFF
,
IDIM_EFF
,
KFLEV
,
IGL
,
ICABS
,
ING1
,
IUABS
,&
IH2O
,
ICO2
,
IO3
,
ICNT
,
IN2O
,
ICH4
,
ICO
,
IC11
,
IC12
,
ICFC
,
&
IINIS
,
IENDS
,
ICONF
,
ICLOUD
,
IOVLP
,
GPVOIGT
,
GPTDEP
,
&
ZTAVE_SPLIT
,
ZQVAVE_SPLIT
,
ZO3AVE_SPLIT
,
&
ZPRES_HL_SPLIT
,
ZT_HL_SPLIT
,
&
ZVIEW_SPLIT
,
ZCLDLD_SPLIT
,
ZCLDLU_SPLIT
,
ZDT0_SPLIT
,
&
ZREMIS_SPLIT
,
ZRADBC_SPLIT
,
ZRADBT_SPLIT
)
!
! fill the full output arrays with the split arrays
!
ZRADBT
(
IBEG
:
IEND
,:)
=
ZRADBT_SPLIT
(:,:)
ZRADBC
(
IBEG
:
IEND
,:)
=
ZRADBC_SPLIT
(:,:)
!
IDIM_RESIDUE
=
IDIM_RESIDUE
-
IDIM_EFF
!
! desallocation of the split arrays
!
IF
(
JI_SPLIT
>=
INUM_CALL
-1
)
THEN
DEALLOCATE
(
ZREMIS_SPLIT
)
DEALLOCATE
(
ZO3AVE_SPLIT
)
DEALLOCATE
(
ZT_HL_SPLIT
)
DEALLOCATE
(
ZPRES_HL_SPLIT
)
DEALLOCATE
(
ZQVAVE_SPLIT
)
DEALLOCATE
(
ZTAVE_SPLIT
)
DEALLOCATE
(
ZCLDLU_SPLIT
)
DEALLOCATE
(
ZCLDLD_SPLIT
)
DEALLOCATE
(
ZVIEW_SPLIT
)
DEALLOCATE
(
ZDT0_SPLIT
)
DEALLOCATE
(
ZRADBT_SPLIT
)
DEALLOCATE
(
ZRADBC_SPLIT
)
END
IF
END
DO
END
IF
!
DEALLOCATE
(
ZTAVE
,
ZQVAVE
,
ZO3AVE
)
DEALLOCATE
(
ZPRES_HL
,
ZT_HL
)
DEALLOCATE
(
ZREMIS
)
DEALLOCATE
(
ZDT0
)
DEALLOCATE
(
ZCLDLD
,
ZCLDLU
)
DEALLOCATE
(
ZVIEW
)
!
ZRADBT
=
ZRADBT
/
XPI
ALLOCATE
(
ZRADFT
(
IDIM
,
JPCAN
))
CALL
MAKE_RADSAT
(
KYEARF
,
KMONTHF
,
KDAYF
,
PSECF
,
&
KGEO
,
IDIM
,
ZRADBT
,
ZRADFT
)
DEALLOCATE
(
ZRADBT
)
DEALLOCATE
(
ZRADBC
)
!
ALLOCATE
(
ZWORK1
(
IDIM
*
JPCAN
))
ZWORK1
(:)
=
PACK
(
ZRADFT
(:,:),
MASK
=
.TRUE.
)
ALLOCATE
(
ZZRADFT
(
KDLON
,
JPCAN
))
ZZRADFT
(:,:)
=
UNPACK
(
ZWORK1
(:),
MASK
=
GDOIT
(:,
1
:
JPCAN
),
FIELD
=
XUNDEF
)
DEALLOCATE
(
ZRADFT
)
DEALLOCATE
(
ZWORK1
)
!
PIRBT
=
XUNDEF
PWVBT
=
XUNDEF
DO
JJ
=
IJB
,
IJE
DO
JI
=
IIB
,
IIE
IIJ
=
1
+
(
JI
-
IIB
)
+
(
IIE
-
IIB
+1
)
*
(
JJ
-
IJB
)
PIRBT
(
JI
,
JJ
)
=
ZZRADFT
(
IIJ
,
1
)
PWVBT
(
JI
,
JJ
)
=
ZZRADFT
(
IIJ
,
2
)
END
DO
END
DO
DEALLOCATE
(
ZZRADFT
)
!
END
SUBROUTINE
RADTR_SATEL
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