SURFEX v8.1
General documentation of Surfex
init_trip_cpl_esm.F90
Go to the documentation of this file.
1 SUBROUTINE init_trip_cpl_esm (TP, TPG, &
2  KLON,KLAT)
3 ! ##################################
4 !
5 !!**** *INIT_TRIP_CPL_ESM*
6 !!
7 !! PURPOSE
8 !! -------
9 !
10 ! TRIP cpl diag compuation
11 !
12 !!
13 !! AUTHOR
14 !! ------
15 !! B. Decharme
16 !!
17 !! MODIFICATIONS
18 !! -------------
19 !! Original 12/12/13
20 !! B. Decharme 10/2016 bug surface/groundwater coupling
21 !-------------------------------------------------------------------------------
22 !
23 !* 0. DECLARATIONS
24 ! ------------
25 !
26 !
27 USE modd_trip, ONLY : trip_t
28 USE modd_trip_grid, ONLY : trip_grid_t
29 !
32 !
33 USE modd_trip_par, ONLY : xundef
34 !
36 !
37 USE modi_trip_nearest
38 !
39 USE modi_gwf_cpl_update
40 !
41 USE yomhook ,ONLY : lhook, dr_hook
42 USE parkind1 ,ONLY : jprb
43 !
44 IMPLICIT NONE
45 !
46 !* 0.1 declarations of arguments
47 !
48 !
49 TYPE(trip_t), INTENT(INOUT) :: TP
50 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
51 !
52 INTEGER, INTENT(IN) :: KLON
53 INTEGER, INTENT(IN) :: KLAT
54 !
55 !* 0.2 declarations of local variables
56 !
57 REAL, DIMENSION(KLON,KLAT) :: ZHG_OLD !Water table elevation at t-1 [m]
58 REAL, DIMENSION(KLON,KLAT) :: ZWTD !Water table depth [m]
59 REAL, DIMENSION(KLON,KLAT) :: ZFWTD !Fraction of Water table to rise
60 !
61 INTEGER,DIMENSION(KLON*KLAT) :: ICODE
62 REAL, DIMENSION(KLON*KLAT) :: ZNEAR
63 REAL, DIMENSION(KLON*KLAT) :: ZX
64 REAL, DIMENSION(KLON*KLAT) :: ZY
65 REAL, DIMENSION(KLON) :: ZLON
66 REAL, DIMENSION(KLAT) :: ZLAT
67 !
68 INTEGER :: IWORK, JLON, JLAT
69 !
70 REAL(KIND=JPRB) :: ZHOOK_HANDLE
71 !
72 !-------------------------------------------------------------------------------
73 !
74 IF (lhook) CALL dr_hook('INIT_TRIP_CPL_ESM',0,zhook_handle)
75 !
76 zhg_old(:,:) = xundef
77 zwtd(:,:) = xundef
78 zfwtd(:,:) = xundef
79 !
80 !-------------------------------------------------------------------------------
81 ! * Allocate coupling variables
82 !-------------------------------------------------------------------------------
83 !
84 IF(lcpl_sea)THEN
85  ALLOCATE(tp%XCPL_RIVDIS(klon,klat))
86  tp%XCPL_RIVDIS(:,:) = xundef
87 ELSE
88  ALLOCATE(tp%XCPL_RIVDIS(0,0))
89 ENDIF
90 !
91 IF(lcpl_calvsea)THEN
92  ALLOCATE(tp%XCPL_CALVGRE(klon,klat))
93  ALLOCATE(tp%XCPL_CALVANT(klon,klat))
94  tp%XCPL_CALVGRE(:,:) = xundef
95  tp%XCPL_CALVANT(:,:) = xundef
96 ELSE
97  ALLOCATE(tp%XCPL_CALVGRE(0,0))
98  ALLOCATE(tp%XCPL_CALVANT(0,0))
99 ENDIF
100 !
101 IF(lcpl_land)THEN
102  IF(lcpl_gw)THEN
103  ALLOCATE(tp%XCPL_FWTD (klon,klat))
104  ALLOCATE(tp%XCPL_WTD (klon,klat))
105  ALLOCATE(tp%XNEAR_AQUI(klon,klat))
106  tp%XCPL_FWTD (:,:) = xundef
107  tp%XCPL_WTD (:,:) = xundef
108  tp%XNEAR_AQUI(:,:) = xundef
109  ELSE
110  ALLOCATE(tp%XCPL_FWTD (0,0))
111  ALLOCATE(tp%XCPL_WTD (0,0))
112  ALLOCATE(tp%XNEAR_AQUI(0,0))
113  ENDIF
114  IF(lcpl_flood)THEN
115  ALLOCATE(tp%XCPL_FFLOOD (klon,klat))
116  ALLOCATE(tp%XCPL_PIFLOOD(klon,klat))
117  tp%XCPL_FFLOOD (:,:) = xundef
118  tp%XCPL_PIFLOOD(:,:) = xundef
119  ELSE
120  ALLOCATE(tp%XCPL_FFLOOD (0,0))
121  ALLOCATE(tp%XCPL_PIFLOOD(0,0))
122  ENDIF
123 ELSE
124  ALLOCATE(tp%XCPL_FFLOOD (0,0))
125  ALLOCATE(tp%XCPL_PIFLOOD(0,0))
126  ALLOCATE(tp%XCPL_FWTD (0,0))
127  ALLOCATE(tp%XCPL_WTD (0,0))
128  ALLOCATE(tp%XNEAR_AQUI (0,0))
129 ENDIF
130 !
131 !-------------------------------------------------------------------------------
132 ! * Actualisation of coupling diagnostic:
133 !-------------------------------------------------------------------------------
134 !
135 IF(lcpl_sea)THEN
136  WHERE(tpg%NGRCN(:,:)==9.OR.tpg%NGRCN(:,:)==12)
137  tp%XCPL_RIVDIS(:,:) = 0.0
138  ENDWHERE
139 ENDIF
140 !
141 IF(lcpl_calvsea)THEN
142  WHERE(tpg%GMASK_GRE(:,:))
143  tp%XCPL_CALVGRE(:,:) = 0.0
144  ENDWHERE
145  WHERE(tpg%GMASK_ANT(:,:))
146  tp%XCPL_CALVANT(:,:) = 0.0
147  ENDWHERE
148 ENDIF
149 !
150 IF(lcpl_land)THEN
151 !
152  IF(lcpl_gw)THEN
153 !
154 ! Water table depth and fraction of water table to rise
155 !
156  CALL gwf_cpl_update(tp%XTABGW_H,tp%XTABGW_F,tpg%GMASK_GW,&
157  tp%XTOPO_RIV,tp%XHC_BED,tp%XHGROUND, &
158  zhg_old,zwtd,zfwtd )
159 !
160  WHERE(tpg%GMASK_GW(:,:))
161  tp%XCPL_WTD (:,:) = zwtd(:,:)
162  tp%XCPL_FWTD(:,:) = zfwtd(:,:)
163  ELSEWHERE(tpg%GMASK(:,:))
164  tp%XCPL_WTD (:,:) = xundef
165  tp%XCPL_FWTD(:,:) = 0.0
166  ENDWHERE
167 !
168 ! Find nearest aquifer
169 !
170  CALL get_trip_grid(tpg%XTRIP_GRID,plon=zlon,plat=zlat)
171 !
172  znear(:)=xundef
173  icode(:)=-1
174 !
175  iwork=0
176  DO jlat=1,klat
177  DO jlon=1,klon
178  IF(tpg%GMASK(jlon,jlat))THEN
179  iwork=iwork+1
180  icode(iwork)=0
181  zx(iwork)=zlon(jlon)
182  zy(iwork)=zlat(jlat)
183  znear(iwork)=tp%XNUM_AQUI(jlon,jlat)
184  IF(tpg%GMASK_GW(jlon,jlat))icode(iwork)=1
185  ENDIF
186  ENDDO
187  ENDDO
188 !
189  CALL trip_nearest(iwork,icode(1:iwork),zx(1:iwork),zy(1:iwork),znear(1:iwork))
190 !
191  iwork=0
192  DO jlat=1,klat
193  DO jlon=1,klon
194  IF(tpg%GMASK(jlon,jlat))THEN
195  iwork=iwork+1
196  tp%XNEAR_AQUI(jlon,jlat)=znear(iwork)
197  ENDIF
198  ENDDO
199  ENDDO
200 !
201  ENDIF
202 !
203 ! Flood fraction [-] and potential infiltration [kg/m2]
204 ! no flood for very smal flooded area (<0.1% of grid-cell)
205 !
206  IF(lcpl_flood)THEN
207  tp%XCPL_FFLOOD (:,:) = tp%XFFLOOD (:,:)
208  tp%XCPL_PIFLOOD(:,:) = tp%XFLOOD_STO (:,:) / tpg%XAREA(:,:)
209  ENDIF
210 !
211 ENDIF
212 !
213 IF (lhook) CALL dr_hook('INIT_TRIP_CPL_ESM',1,zhook_handle)
214 !
215 !-------------------------------------------------------------------------------
216 END SUBROUTINE init_trip_cpl_esm
subroutine trip_nearest(KNI, KCODE, PLON, PLAT, PFIELD)
Definition: trip_nearest.F90:3
subroutine init_trip_cpl_esm(TP, TPG, KLON, KLAT)
subroutine gwf_cpl_update(PTABGW_H, PTABGW_F, OMASK_GW, PTOPO_RIV, PHC_BED, PHGROUND, PHG_OLD, PWTD, PFWTD)
subroutine get_trip_grid(PTRIP_GRID, PLONMIN, PLONMAX, PLATMIN, PLATMAX, PRES, KLON, KLAT, PLON, PLAT)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
real, save xundef