Juan 24/05/2017: add MPPDB_CHECK on SURFEX routine for reprod check with MNH_PARALLEL key
[MNH-git_open_source-lfs.git] / src / SURFEX / pgd_teb.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE PGD_TEB(HPROGRAM,OECOCLIMAP,OGARDEN)
7 !     ##############################################################
8 !
9 !!**** *PGD_TEB* monitor for averaging and interpolations of TEB physiographic fields
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!    METHOD
15 !!    ------
16 !!   
17 !
18 !!    EXTERNAL
19 !!    --------
20 !!
21 !!    IMPLICIT ARGUMENTS
22 !!    ------------------
23 !!
24 !!    REFERENCE
25 !!    ---------
26 !!
27 !!    AUTHOR
28 !!    ------
29 !!
30 !!    V. Masson        Meteo-France
31 !!
32 !!    MODIFICATION
33 !!    ------------
34 !!
35 !!    Original    10/12/97
36 !!    A. Lemonsu      05/2009         Key for garden option
37 !!    G. Pigeon     /09/12: WALL, ROOF, FLOOR, MASS LAYER default to 5
38 !!    M. Moge       02/2015 : MPPDB_CHECK
39 !!
40 !----------------------------------------------------------------------------
41 !
42 !*    0.     DECLARATION
43 !            -----------
44 !
45 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
46 USE MODD_TEB_n,          ONLY : XCOVER, LCOVER, XZS,                   &
47                                 NROAD_LAYER, NWALL_LAYER, NROOF_LAYER, &
48                                 LECOCLIMAP, LGARDEN, NTEB_PATCH,       &
49                                 CBLD_ATYPE, CBEM, LGREENROOF, LHYDRO 
50 USE MODD_BEM_n,          ONLY : NFLOOR_LAYER, CCOOL_COIL, CHEAT_COIL, LAUTOSIZE
51 USE MODD_TEB_GRID_n,     ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE, NDIM
52 !
53 USE MODI_GET_SURF_SIZE_n
54 USE MODI_PACK_PGD
55 USE MODI_PGD_TEB_PAR
56 USE MODI_PGD_TEB_VEG
57 USE MODI_GET_LUOUT
58 USE MODI_READ_NAM_PGD_TEB
59 USE MODI_TEST_NAM_VAR_SURF
60 USE MODI_PGD_BEM_PAR
61 USE MODI_ABOR1_SFX
62 !
63 !
64 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
65 USE PARKIND1  ,ONLY : JPRB
66 !
67 #ifdef MNH_PARALLEL
68 USE MODE_MPPDB
69 !
70 #endif
71 USE MODI_WRITE_COVER_TEX_TEB
72 !
73 IMPLICIT NONE
74 !
75 !*    0.1    Declaration of arguments
76 !            ------------------------
77 !
78  CHARACTER(LEN=6), INTENT(IN)  :: HPROGRAM   ! Type of program
79 LOGICAL,          INTENT(IN)  :: OECOCLIMAP ! T if parameters are computed with ecoclimap
80 !                                           ! F if all parameters must be specified
81 LOGICAL,          INTENT(IN)  :: OGARDEN    ! T if urban green areas
82 !
83 !
84 !*    0.2    Declaration of local variables
85 !            ------------------------------
86 !
87 INTEGER         :: ILUOUT    ! output listing logical unit
88 REAL(KIND=JPRB) :: ZHOOK_HANDLE
89 !
90 !-------------------------------------------------------------------------------
91 !
92 !*    1.      Initializations of defaults
93 !             ---------------------------
94 !
95 IF (LHOOK) CALL DR_HOOK('PGD_TEB',0,ZHOOK_HANDLE)
96  CALL GET_LUOUT(HPROGRAM,ILUOUT)
97
98 NROOF_LAYER  = 5
99 NROAD_LAYER  = 5
100 NWALL_LAYER  = 5
101 NFLOOR_LAYER = 5
102 !
103 !-------------------------------------------------------------------------------
104 !
105 !*    2.      Reading of namelist
106 !             -------------------
107 !
108  CALL READ_NAM_PGD_TEB(HPROGRAM,NTEB_PATCH,CBEM,CCOOL_COIL,CHEAT_COIL,LAUTOSIZE,&
109                       NROAD_LAYER,NROOF_LAYER,NWALL_LAYER,NFLOOR_LAYER,        &
110                       LGREENROOF,LHYDRO                                        )
111 !
112 !-------------------------------------------------------------------------------
113 !
114 !*    3.      Coherence of options
115 !             --------------------
116 !
117  CALL TEST_NAM_VAR_SURF(ILUOUT,'CBLD',CBEM,'DEF','BEM ')
118  CALL TEST_NAM_VAR_SURF(ILUOUT,'CCOOL_COIL',CCOOL_COIL,'IDEAL ','DXCOIL')
119  CALL TEST_NAM_VAR_SURF(ILUOUT,'CHEAT_COIL',CHEAT_COIL,'IDEAL ','FINCAP')
120 !
121 IF (.NOT. OGARDEN) THEN
122   IF (LGREENROOF) CALL ABOR1_SFX('ERROR: You cannot activate LGREENROOF if LGARDEN is FALSE')
123   IF (LHYDRO    ) CALL ABOR1_SFX('ERROR: You cannot activate LHYDRO     if LGARDEN is FALSE')
124 ENDIF
125 !
126 !-------------------------------------------------------------------------------
127 !
128 !*    4.      Number of points and packing
129 !             ----------------------------
130 !
131  CALL GET_SURF_SIZE_n('TOWN  ',NDIM)
132 !
133 ALLOCATE(LCOVER     (JPCOVER))
134 ALLOCATE(XCOVER     (NDIM,JPCOVER))
135 ALLOCATE(XZS        (NDIM))
136 ALLOCATE(XLAT       (NDIM))
137 ALLOCATE(XLON       (NDIM))
138 ALLOCATE(XMESH_SIZE (NDIM))
139 !
140  CALL PACK_PGD(HPROGRAM, 'TOWN  ',                    &
141                 CGRID,  XGRID_PAR,                   &
142                 LCOVER, XCOVER, XZS,                 &
143                 XLAT, XLON, XMESH_SIZE               )  
144 #ifdef MNH_PARALLEL
145  CALL MPPDB_CHECK_SURFEX3D(XCOVER,"PGD_TEB after PACK_PGD:XCOVER",PRECISION,ILUOUT, 'TOWN  ',JPCOVER)
146  CALL MPPDB_CHECK_SURFEX2D(XLAT,"PGD_TEB after PACK_PGD:XLAT",PRECISION,ILUOUT, 'TOWN  ')
147  CALL MPPDB_CHECK_SURFEX2D(XLON,"PGD_TEB after PACK_PGD:XLON",PRECISION,ILUOUT, 'TOWN  ')
148  CALL MPPDB_CHECK_SURFEX2D(XMESH_SIZE,"PGD_TEB after PACK_PGD:XMESH_SIZE",PRECISION,ILUOUT, 'TOWN  ')
149 #endif
150 !
151 !-------------------------------------------------------------------------------
152 !
153 !*    5.      TEB specific fields
154 !             -------------------
155 !
156 LECOCLIMAP = OECOCLIMAP
157  CALL PGD_TEB_PAR(HPROGRAM,OGARDEN,LGREENROOF,CBLD_ATYPE)
158 !
159 !-------------------------------------------------------------------------------
160 !
161 !*    6.      Prints of cover parameters in a tex file
162 !             ----------------------------------------
163 !
164 IF (OECOCLIMAP) CALL WRITE_COVER_TEX_TEB
165 !
166 !
167 !-------------------------------------------------------------------------------
168 !
169 !*    7.      Case of urban green areas (and hydrology)
170 !             -----------------------------------------
171 !
172 LGARDEN       = OGARDEN
173 !
174 IF (LGARDEN) CALL PGD_TEB_VEG(HPROGRAM)
175 !
176 !-------------------------------------------------------------------------------
177 !
178 !*    8.      Case of Building Energy Model
179 !             -----------------------------
180 !
181 IF (CBEM .EQ. 'BEM') CALL PGD_BEM_PAR(HPROGRAM,LAUTOSIZE)
182 !
183 IF (LHOOK) CALL DR_HOOK('PGD_TEB',1,ZHOOK_HANDLE)
184 !
185 !-------------------------------------------------------------------------------
186 !
187 END SUBROUTINE PGD_TEB