SURFEX v8.1
General documentation of Surfex
co2_initn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE co2_init_n (IO, S, PK, PEK, KSIZE, PCO2 )
7 ! #####################
8 !
9 !!**** *CO2_INIT_n* - routine to initialize ISBA-AGS variables
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! V. Masson *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 02/2003
35 !! J.C. Calvet 01/2004 Externalization
36 !! P Le Moigne 11/2004 cotwoinit changed into cotwoinit_n
37 !! P Le Moigne 09/2005 AGS modifs of L. Jarlan
38 !! S Lafont 09/2008 Add initialisation of POI and ABC (needed for TORI)
39 !! A.L. Gibelin 04/2009 : TAU_WOOD for NCB option
40 !! A.L. Gibelin 04/2009 : Add carbon spinup
41 !! A.L. Gibelin 07/2009 : Suppress RDK and transform GPP as a diagnostic
42 !! A.L. Gibelin 07/2009 : Suppress PPST and PPSTF as outputs
43 !!
44 !-------------------------------------------------------------------------------
45 !
46 !* 0. DECLARATIONS
47 ! ------------
48 !
51 !
52 USE modd_surfex_mpi, ONLY : nrank,npio
53 USE modd_surf_par, ONLY : xundef
54 USE modd_data_cover_par, ONLY : nvegtype
55 !
56 USE modi_cotwoinit_n
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 IMPLICIT NONE
62 !
63 !* 0.1 Declarations of arguments
64 ! -------------------------
65 !
66 TYPE(isba_options_t), INTENT(INOUT) :: IO
67 TYPE(isba_s_t), INTENT(INOUT) :: S
68 TYPE(isba_p_t), INTENT(INOUT) :: PK
69 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
70 !
71 INTEGER, INTENT(IN) :: KSIZE
72 !
73 REAL, DIMENSION(:), INTENT(IN) :: PCO2 ! air CO2 concentration (kg/kg)
74 !
75 !* 0.2 Declarations of local variables
76 ! -------------------------------
77 !
78 REAL, DIMENSION(:), ALLOCATABLE :: ZP_CO2 ! air CO2 concentration (kg/kg)
79 !
80 INTEGER :: IPATCH
81 INTEGER :: INBIOMASS
82 INTEGER :: JP ! loop on tiles
83 REAL(KIND=JPRB) :: ZHOOK_HANDLE
84 !-------------------------------------------------------------------------------
85 IF (lhook) CALL dr_hook('CO2_INIT_N',0,zhook_handle)
86 !
87 inbiomass = SIZE(pk%XINCREASE,2)
88 !
89 IF (ksize == 0 ) THEN
90  IF (lhook) CALL dr_hook('CO2_INIT_N',1,zhook_handle)
91  RETURN
92 ENDIF
93 !
94 IF (maxval(pek%XGMES(:)).NE.xundef .OR. minval(pek%XGMES(:)).NE.xundef) THEN
95 
96  CALL pack_co2_init(pk%NR_P(:),ksize)
97  !
98  CALL cotwoinit_n(io, s, pk, pek, zp_co2 )
99 
100  pk%XINCREASE = 0.
101  pk%XTURNOVER = 0.
102  !
103 
104 ENDIF
105 !
106 !-------------------------------------------------------------------------------
107 IF (lhook) CALL dr_hook('CO2_INIT_N',1,zhook_handle)
108 CONTAINS
109 !-------------------------------------------------------------------------------
110 SUBROUTINE pack_co2_init(KMASK,KSIZE)
111 IMPLICIT NONE
112 INTEGER, INTENT(IN) :: KSIZE
113 INTEGER, DIMENSION(:), INTENT(IN) :: KMASK
114 !
115 INTEGER JJ, JI
116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
117 !
118 IF (lhook) CALL dr_hook('PACK_CO2_INIT',0,zhook_handle)
119 !
120 ALLOCATE(zp_co2(ksize))
121 !
122 DO jj=1,ksize
123  ji = kmask(jj)
124  zp_co2(jj) = pco2(ji)
125 END DO
126 !
127 IF (lhook) CALL dr_hook('PACK_CO2_INIT',1,zhook_handle)
128 !-------------------------------------------------------------------------------
129 END SUBROUTINE pack_co2_init
130 !
131 END SUBROUTINE co2_init_n
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine co2_init_n(IO, S, PK, PEK, KSIZE, PCO2)
Definition: co2_initn.F90:7
subroutine cotwoinit_n(IO, S, PK, PEK, PCO2)
Definition: cotwoinitn.F90:7
subroutine pack_co2_init(KMASK, KSIZE)
Definition: co2_initn.F90:111