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
3afef857
Commit
3afef857
authored
3 years ago
by
RODIER Quentin
Browse files
Options
Downloads
Patches
Plain Diff
P.Tulet 04/01/2022: update Megan PFT with Ecoclimap-SG
parent
ab17122a
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/SURFEX/init_megann.F90
+29
-73
29 additions, 73 deletions
src/SURFEX/init_megann.F90
with
29 additions
and
73 deletions
src/SURFEX/init_megann.F90
+
29
−
73
View file @
3afef857
...
@@ -26,6 +26,7 @@ SUBROUTINE INIT_MEGAN_n(IO, S, K, NP, MSF, MGN, PLAT, HSV, PMEGAN_FIELDS)
...
@@ -26,6 +26,7 @@ SUBROUTINE INIT_MEGAN_n(IO, S, K, NP, MSF, MGN, PLAT, HSV, PMEGAN_FIELDS)
!! Original: 25/10/14
!! Original: 25/10/14
!! Modified: 06/2017, J. Pianezze, adaptation for SurfEx v8.0
!! Modified: 06/2017, J. Pianezze, adaptation for SurfEx v8.0
!! Modified: 06/2018, P. Tulet, add PFT and LAI
!! Modified: 06/2018, P. Tulet, add PFT and LAI
!! Modified: 11/2021, P. Tulet, update PFT with Ecoclimap-SG
!!
!!
!!
!!
!! EXTERNAL
!! EXTERNAL
...
@@ -40,10 +41,7 @@ USE MODD_MEGAN_n, ONLY : MEGAN_t
...
@@ -40,10 +41,7 @@ USE MODD_MEGAN_n, ONLY : MEGAN_t
USE
MODD_ISBA_OPTIONS_n
,
ONLY
:
ISBA_OPTIONS_t
USE
MODD_ISBA_OPTIONS_n
,
ONLY
:
ISBA_OPTIONS_t
USE
MODD_ISBA_n
,
ONLY
:
ISBA_S_t
,
ISBA_P_t
,
ISBA_K_t
,
ISBA_NP_t
USE
MODD_ISBA_n
,
ONLY
:
ISBA_S_t
,
ISBA_P_t
,
ISBA_K_t
,
ISBA_NP_t
!
!
USE
MODD_DATA_COVER_PAR
,
ONLY
:
NVT_C4
,
NVT_TRBE
,
NVT_TRBD
,
NVT_TEBE
,
&
USE
MODD_DATA_COVER_PAR
NVT_TEBD
,
NVT_TENE
,
NVT_BOBD
,
NVT_BONE
,
NVT_BOND
,
&
NVT_BOGR
,
NVT_SHRB
,
NVT_GRAS
,
NVT_TROG
,
NVT_C3
,
&
NVT_NO
,
NVT_ROCK
,
NVT_SNOW
,
NVT_IRR
,
NVT_PARK
!
!
USE
MODD_SURF_PAR
,
ONLY
:
XUNDEF
USE
MODD_SURF_PAR
,
ONLY
:
XUNDEF
USE
MODD_DATA_COVER
,
ONLY
:
XDATA_LAI
USE
MODD_DATA_COVER
,
ONLY
:
XDATA_LAI
...
@@ -94,6 +92,7 @@ REAL,DIMENSION(SIZE(K%XCLAY,1)) :: ZLAI
...
@@ -94,6 +92,7 @@ REAL,DIMENSION(SIZE(K%XCLAY,1)) :: ZLAI
!
!
ALLOCATE
(
MGN
%
XPFT
(
N_MGN_PFT
,
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XPFT
(
N_MGN_PFT
,
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XEF
(
N_MGN_SPC
,
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XEF
(
N_MGN_SPC
,
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XLAI
(
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
NSLTYP
(
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
NSLTYP
(
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XBIOFLX
(
SIZE
(
K
%
XCLAY
,
1
)))
ALLOCATE
(
MGN
%
XBIOFLX
(
SIZE
(
K
%
XCLAY
,
1
)))
MGN
%
XBIOFLX
(:)
=
0.
MGN
%
XBIOFLX
(:)
=
0.
...
@@ -313,134 +312,91 @@ ENDDO
...
@@ -313,134 +312,91 @@ ENDDO
!
!
! 1 Needleleaf evergreen temperate tree
! 1 Needleleaf evergreen temperate tree
! -------------------------------------
! -------------------------------------
! utilisation de la classe NVT_CONI pour 30 < LAT < 60
! utilisation de la classe NVT_TENE
WHERE
((
PLAT
(:)
.GE.
30.
)
.AND.
(
PLAT
(:)
.LT.
60.
))
MGN
%
XPFT
(
1
,:)
=
S
%
XVEGTYPE
(:,
NVT_TENE
)
MGN
%
XPFT
(
1
,:)
=
S
%
XVEGTYPE
(:,
NVT_TENE
)
END
WHERE
WHERE
((
PLAT
(:)
.LE.
-30.
)
.AND.
(
PLAT
(:)
.GT.
-60.
))
MGN
%
XPFT
(
1
,:)
=
S
%
XVEGTYPE
(:,
NVT_TENE
)
END
WHERE
!
!
! 2 Needleleaf evergreen boreal tree
! 2 Needleleaf evergreen boreal tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_CONI pour LAT > 60
!utilisation de la classe NVT_BONE
WHERE
((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
))
MGN
%
XPFT
(
2
,:)
=
S
%
XVEGTYPE
(:,
NVT_BONE
)
MGN
%
XPFT
(
2
,:)
=
S
%
XVEGTYPE
(:,
NVT_BONE
)
END
WHERE
!
!
!3 Needleleaf deciduous boreal tree
!3 Needleleaf deciduous boreal tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour LAT > 60
!utilisation de la classe NVT_BOND
WHERE
((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
))
MGN
%
XPFT
(
3
,:)
=
S
%
XVEGTYPE
(:,
NVT_BOND
)
MGN
%
XPFT
(
3
,:)
=
S
%
XVEGTYPE
(:,
NVT_BOND
)
END
WHERE
!
!
!4 Broadleaf evergreen tropical tree
!4 Broadleaf evergreen tropical tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_EVER pour -30 < LAT < 30
!utilisation de la classe NVT_TRBE
! et une hauteur d'arbre supérieur à 3 m
WHERE
(((
PLAT
(:)
.GE.
-30.
)
.AND.
(
PLAT
(:)
.LE.
30.
))
.AND.
&
(
ZH_TREE
(:,
IP_TRBE
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_TRBE
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
4
,:)
=
S
%
XVEGTYPE
(:,
NVT_TRBE
)
MGN
%
XPFT
(
4
,:)
=
S
%
XVEGTYPE
(:,
NVT_TRBE
)
END
WHERE
!
!
!5 Broadleaf evergreen temperate tree
!5 Broadleaf evergreen temperate tree
! -------------------------------------
! -------------------------------------
! utilisation de la classe NVT_EVER pour 30 < LAT < 60
! et une hauteur d'arbre supérieur à 3 m.
WHERE
(((
PLAT
(:)
.GE.
30.
)
.AND.
(
PLAT
(:)
.LT.
60.
))
.AND.
&
(
ZH_TREE
(:,
IP_TEBE
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_TEBE
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
5
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBE
)
MGN
%
XPFT
(
5
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBE
)
END
WHERE
WHERE
(((
PLAT
(:)
.LE.
-30.
)
.AND.
(
PLAT
(:)
.GT.
-60.
))
.AND.
&
(
ZH_TREE
(:,
IP_TEBE
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_TEBE
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
5
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBE
)
END
WHERE
!
!
!6 Broadleaf deciduous tropical tree
!6 Broadleaf deciduous tropical tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour -30 < LAT < 30
WHERE
((
PLAT
(:)
.GE.
-30.
)
.AND.
(
PLAT
(:)
.LE.
30.
))
MGN
%
XPFT
(
6
,:)
=
S
%
XVEGTYPE
(:,
NVT_TRBD
)
MGN
%
XPFT
(
6
,:)
=
S
%
XVEGTYPE
(:,
NVT_TRBD
)
END
WHERE
!
!
!7 Broadleaf deciduous temperate tree
!7 Broadleaf deciduous temperate tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour 30 < LAT < 60
! en utilisant une hauteur d'arbre supérieur à 3 m
WHERE
(((
PLAT
(:)
.GE.
30.
)
.AND.
(
PLAT
(:)
.LT.
60.
))
.AND.
&
(
ZH_TREE
(:,
IP_TEBD
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_TEBD
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
7
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBD
)
MGN
%
XPFT
(
7
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBD
)
END
WHERE
WHERE
(((
PLAT
(:)
.LE.
-30.
)
.AND.
(
PLAT
(:)
.GT.
-60.
))
.AND.
&
(
ZH_TREE
(:,
IP_TEBD
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_TEBD
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
7
,:)
=
S
%
XVEGTYPE
(:,
NVT_TEBD
)
END
WHERE
!
!
!8 Broadleaf deciduous boreal tree
!8 Broadleaf deciduous boreal tree
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour LAT > 60
WHERE
(((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
))
.AND.
&
(
ZH_TREE
(:,
IP_BOBD
)
.GE.
3.
)
.AND.
(
ZH_TREE
(:,
IP_BOBD
)
.NE.
XUNDEF
))
MGN
%
XPFT
(
8
,:)
=
S
%
XVEGTYPE
(:,
NVT_BOBD
)
MGN
%
XPFT
(
8
,:)
=
S
%
XVEGTYPE
(:,
NVT_BOBD
)
END
WHERE
!
!
!9 Broadleaf evergreen shrub
!9 Broadleaf evergreen shrub
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_
EVE
R pour
une hauteur d'arbre inférieure à 3 m
!utilisation de la classe NVT_
SHB
R pour
-30 < LAT < 30
WHERE
(
ZH_TREE
(:,
IP_SHRB
)
.LT
.
3.
)
WHERE
(
((
PLAT
(:)
.GE.
-30.
)
.AND.
(
PLAT
(:)
.LE
.
3
0
.
)
))
MGN
%
XPFT
(
9
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
MGN
%
XPFT
(
9
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
ELSE
WHERE
MGN
%
XPFT
(
9
,:)
=
0.
END
WHERE
END
WHERE
!
!
!10 Broadleaf deciduous temperate shrub
!10 Broadleaf deciduous temperate shrub
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour une hauteur d'arbre inférieure à 3 m
!utilisation de la classe NVT_SHBR pour 30 < LAT < 60
! et pour 30 < LAT < 60
WHERE
(((
PLAT
(:)
.GE.
30.
)
.AND.
(
PLAT
(:)
.LT.
60.
))
.OR.
&
WHERE
((
ZH_TREE
(:,
IP_SHRB
)
.LT.
3.
)
.AND.
(
ZH_TREE
(:,
IP_SHRB
)
.NE.
XUNDEF
)
.AND.
&
((
PLAT
(:)
.GE.
30.
)
.AND.
(
PLAT
(:)
.LT.
60.
)))
MGN
%
XPFT
(
10
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
END
WHERE
WHERE
((
ZH_TREE
(:,
IP_SHRB
)
.LT.
3.
)
.AND.
(
ZH_TREE
(:,
IP_SHRB
)
.NE.
XUNDEF
)
.AND.
&
((
PLAT
(:)
.LE.
-30.
)
.AND.
(
PLAT
(:)
.GT.
-60.
)))
((
PLAT
(:)
.LE.
-30.
)
.AND.
(
PLAT
(:)
.GT.
-60.
)))
MGN
%
XPFT
(
10
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
MGN
%
XPFT
(
10
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
ELSE
WHERE
MGN
%
XPFT
(
10
,:)
=
0.
END
WHERE
END
WHERE
!
!
!11 Broadleaf deciduous boreal_shrub
!11 Broadleaf deciduous boreal_shrub
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_TREE pour une hauteur d'arbre inférieure à 3 m
!utilisation de la classe NVT_SHBR pour LAT > 60
! et pour LAT > 60
WHERE
(((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
)))
WHERE
((
ZH_TREE
(:,
IP_SHRB
)
.LT.
3.
)
.AND.
(
ZH_TREE
(:,
IP_SHRB
)
.NE.
XUNDEF
)
.AND.
&
((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
)))
MGN
%
XPFT
(
11
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
MGN
%
XPFT
(
11
,:)
=
S
%
XVEGTYPE
(:,
NVT_SHRB
)
ELSE
WHERE
MGN
%
XPFT
(
11
,:)
=
0.
END
WHERE
END
WHERE
!
!
!12 C3 arctic grass
!12 C3 arctic grass
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_GRAS + NVT_PARK pour LAT > 60
MGN
%
XPFT
(
12
,:)
=
S
%
XVEGTYPE
(:,
NVT_BOGR
)
WHERE
((
PLAT
(:)
.GE.
60.
)
.OR.
(
PLAT
(:)
.LE.
-60.
))
MGN
%
XPFT
(
12
,:)
=
S
%
XVEGTYPE
(:,
NVT_GRAS
)
+
S
%
XVEGTYPE
(:,
NVT_PARK
)
ELSEWHERE
!
!
!13 C3 non-arctic grass
!13 C3 non-arctic grass
! -------------------------------------
! -------------------------------------
!utilisation de la classe NVT_GRAS + NVT_PARK ailleur
MGN
%
XPFT
(
13
,:)
=
S
%
XVEGTYPE
(:,
NVT_GRAS
)
MGN
%
XPFT
(
13
,:)
=
S
%
XVEGTYPE
(:,
NVT_GRAS
)
+
S
%
XVEGTYPE
(:,
NVT_PARK
)
END
WHERE
!
!
!14 C4 grass
!14 C4 grass
! -------------------------------------
! -------------------------------------
! utilisation de la classe NVT_TROG
MGN
%
XPFT
(
14
,:)
=
S
%
XVEGTYPE
(:,
NVT_TROG
)
MGN
%
XPFT
(
14
,:)
=
S
%
XVEGTYPE
(:,
NVT_TROG
)
!
!
!15 Corn
!15 Corn
! -------------------------------------
! -------------------------------------
! utilisation de la classe NVT_C4
MGN
%
XPFT
(
15
,:)
=
S
%
XVEGTYPE
(:,
NVT_C4
)
MGN
%
XPFT
(
15
,:)
=
S
%
XVEGTYPE
(:,
NVT_C4
)
!
!
!16 Wheat
!16 Wheat
! -------------------------------------
! -------------------------------------
! utilisation de la classe NVT_C3
IF
(
NVT_C3W
.NE.
0
)
THEN
! use ecoclimap_sg
MGN
%
XPFT
(
16
,:)
=
S
%
XVEGTYPE
(:,
NVT_C3W
)
+
S
%
XVEGTYPE
(:,
NVT_C3S
)
ELSE
! use ecaclimap2.0
MGN
%
XPFT
(
16
,:)
=
S
%
XVEGTYPE
(:,
NVT_C3
)
MGN
%
XPFT
(
16
,:)
=
S
%
XVEGTYPE
(:,
NVT_C3
)
END
IF
!
!
! Emission factor
! Emission factor
MGN
%
XEF
(:,:)
=
0.
MGN
%
XEF
(:,:)
=
0.
...
@@ -499,7 +455,6 @@ DO JSV=1, MSF%NMEGAN_NBR
...
@@ -499,7 +455,6 @@ DO JSV=1, MSF%NMEGAN_NBR
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFBIDER"
)
MGN
%
XEF
(
18
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFBIDER"
)
MGN
%
XEF
(
18
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFSTRESS"
)
MGN
%
XEF
(
19
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFSTRESS"
)
MGN
%
XEF
(
19
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFOTHER"
)
MGN
%
XEF
(
20
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"EFOTHER"
)
MGN
%
XEF
(
20
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
! IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "LAI") PLAI(:,1) = PMEGAN_FIELDS(:,JSV)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT1"
)
MGN
%
XPFT
(
1
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT1"
)
MGN
%
XPFT
(
1
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT2"
)
MGN
%
XPFT
(
2
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT2"
)
MGN
%
XPFT
(
2
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT3"
)
MGN
%
XPFT
(
3
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT3"
)
MGN
%
XPFT
(
3
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
...
@@ -516,6 +471,7 @@ DO JSV=1, MSF%NMEGAN_NBR
...
@@ -516,6 +471,7 @@ DO JSV=1, MSF%NMEGAN_NBR
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT14"
)
MGN
%
XPFT
(
14
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT14"
)
MGN
%
XPFT
(
14
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT15"
)
MGN
%
XPFT
(
15
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT15"
)
MGN
%
XPFT
(
15
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT16"
)
MGN
%
XPFT
(
16
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"PFT16"
)
MGN
%
XPFT
(
16
,:)
=
PMEGAN_FIELDS
(:,
JSV
)
IF
(
TRIM
(
MSF
%
CMEGAN_NAME
(
JSV
))
==
"LAI"
)
MGN
%
XLAI
(:)
=
PMEGAN_FIELDS
(:,
JSV
)
END
DO
END
DO
#endif
#endif
...
...
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