SURFEX v8.1
General documentation of Surfex
trip_oasis_send.F90
Go to the documentation of this file.
1 !#########
2 SUBROUTINE trip_oasis_send (TP, TPG, &
3  KLISTING,KLON,KLAT,PTIMEC)
4 !############################################
5 !
6 !!**** *TRIP_OASIS_SEND* - Send coupling fields
7 !!
8 !! PURPOSE
9 !! -------
10 !!
11 !! All fluxes are sent in kg/m2/s
12 !!
13 !!** METHOD
14 !! ------
15 !!
16 !! EXTERNAL
17 !! --------
18 !!
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !! REFERENCE
24 !! ---------
25 !!
26 !!
27 !! AUTHOR
28 !! ------
29 !! B. Decharme *Meteo France*
30 !!
31 !! MODIFICATIONS
32 !! -------------
33 !! Original 10/2013
34 !-------------------------------------------------------------------------------
35 !
36 !* 0. DECLARATIONS
37 ! ------------
38 !
39 !
40 USE modd_trip, ONLY : trip_t
41 USE modd_trip_grid, ONLY : trip_grid_t
42 !
43 USE modd_trip_par, ONLY : xundef
44 !
47 !
48 !
49 USE modi_abort_trip
50 !
51 USE yomhook ,ONLY : lhook, dr_hook
52 USE parkind1 ,ONLY : jprb
53 !
54 #ifdef CPLOASIS
55 USE mod_oasis
56 #endif
57 !
58 IMPLICIT NONE
59 !
60 !* 0.1 Declarations of arguments
61 ! -------------------------
62 !
63 !
64 TYPE(trip_t), INTENT(INOUT) :: TP
65 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
66 !
67 INTEGER, INTENT(IN) :: KLISTING
68 INTEGER, INTENT(IN) :: KLON
69 INTEGER, INTENT(IN) :: KLAT
70 REAL, INTENT(IN) :: PTIMEC ! Cumulated run time step (s)
71 !
72 !
73 !* 0.2 Declarations of local variables
74 ! -------------------------------
75 !
76 INTEGER :: IDATE ! current coupling time step (s)
77 INTEGER :: IERR ! Error info
78 INTEGER :: JVAR
79  CHARACTER(LEN=50) :: YCOMMENT
80 !
81 REAL, DIMENSION(KLON,KLAT) :: ZWRITE
82 LOGICAL, DIMENSION(KLON,KLAT) :: LMASK
83 !
84 REAL(KIND=JPRB) :: ZHOOK_HANDLE
85 !
86 !-------------------------------------------------------------------------------
87 #ifdef CPLOASIS
88 !-------------------------------------------------------------------------------
89 !
90 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND',0,zhook_handle)
91 !
92 !* 1. Define current coupling time step in second :
93 ! ---------------------------------------------
94 !
95 idate = int(ptimec)
96 !
97 !-------------------------------------------------------------------------------
98 !
99 !* 2. Send coupling fields to land surface model :
100 ! -------------------------------------------
101 !
102 !
103 IF(lcpl_land.AND.mod(ptimec,xtstep_cpl_land)==0.0)THEN
104 !
105  IF(lcpl_gw)THEN
106 !
107  ycomment='Water table depth' !m
108  CALL oasis_put(nwtd_id,idate,tp%XCPL_WTD(:,:),ierr)
109  CALL check_trip_send(ycomment)
110 !
111  ycomment='Grid-cell fraction of WTD to rise'
112  CALL oasis_put(nfwtd_id,idate,tp%XCPL_FWTD(:,:),ierr)
113  CALL check_trip_send(ycomment)
114 !
115  ENDIF
116 !
117  IF(lcpl_flood)THEN
118 !
119  lmask(:,:) = tpg%GMASK(:,:)
120 !
121  ycomment='Flood fraction' !adim
122  CALL mask_trip(tp%XCPL_FFLOOD(:,:),zwrite(:,:),lmask(:,:),1.0)
123  CALL oasis_put(nfflood_id,idate,zwrite(:,:),ierr)
124  CALL check_trip_send(ycomment)
125 !
126  ycomment='Flood potential infiltration' !kg/m2/s
127  CALL mask_trip(tp%XCPL_PIFLOOD(:,:),zwrite(:,:),lmask(:,:),xtstep_cpl_land)
128  CALL oasis_put(npiflood_id,idate,zwrite(:,:),ierr)
129  CALL check_trip_send(ycomment)
130 !
131  ENDIF
132 !
133 ENDIF
134 !
135 !-------------------------------------------------------------------------------
136 !
137 !* 3. Send coupling fields to ocean :
138 ! -------------------------------
139 !
140 !
141 IF(lcpl_sea.AND.mod(ptimec,xtstep_cpl_sea)==0.0)THEN
142 !
143 ! * Sea output fields
144 !
145  lmask(:,:) = (tpg%NGRCN(:,:)==9.OR.tpg%NGRCN(:,:)==12)
146 !
147  ycomment='Discharge to ocean' !kg/m2/s
148  CALL mask_trip(tp%XCPL_RIVDIS(:,:),zwrite(:,:),lmask(:,:),xtstep_cpl_sea)
149  CALL oasis_put(nrivdis_id,idate,zwrite(:,:),ierr)
150  CALL check_trip_send(ycomment)
151 !
152 ! * Calving output fields
153 !
154  IF(lcpl_calvsea)THEN
155 !
156  lmask(:,:) = tpg%GMASK_GRE(:,:)
157 !
158  ycomment='Calving flux over greenland' !kg/m2/s
159  CALL mask_trip(tp%XCPL_CALVGRE(:,:),zwrite(:,:),lmask(:,:),xtstep_cpl_sea)
160  CALL oasis_put(ncalvgre_id,idate,zwrite(:,:),ierr)
161  CALL check_trip_send(ycomment)
162 !
163  lmask(:,:) = tpg%GMASK_ANT(:,:)
164 !
165  ycomment='Calving flux over antarctica' !kg/m2/s
166  CALL mask_trip(tp%XCPL_CALVANT(:,:),zwrite(:,:),lmask(:,:),xtstep_cpl_sea)
167  CALL oasis_put(ncalvant_id,idate,zwrite(:,:),ierr)
168  CALL check_trip_send(ycomment)
169 !
170  ENDIF
171 !
172 ENDIF
173 !
174 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND',1,zhook_handle)
175 !
176 !-------------------------------------------------------------------------------
177  CONTAINS
178 !-------------------------------------------------------------------------------
179 !
180 SUBROUTINE check_trip_send(HCOMMENT)
181 !
182 USE modi_abort_trip
183 !
184 IMPLICIT NONE
185 !
186  CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
187 !
188 REAL(KIND=JPRB) :: ZHOOK_HANDLE
189 !
190 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND:CHECK_TRIP_SEND',0,zhook_handle)
191 !
192 ! Check receiving field
193 !
194 IF (ierr/=oasis_ok.AND.ierr<oasis_sent) THEN
195  WRITE(klisting,'(A,I4)')'Return code from sending '//trim(hcomment)//' : ',ierr
196  CALL abort_trip('TRIP_OASIS_SEND: problem sending '//trim(hcomment))
197 ENDIF
198 !
199 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND:CHECK_TRIP_SEND',1,zhook_handle)
200 !
201 END SUBROUTINE check_trip_send
202 !
203 !-------------------------------------------------------------------------------
204 !
205 SUBROUTINE mask_trip(PIN,POUT,OMASK,PDIV)
206 !
207 IMPLICIT NONE
208 !
209 REAL, DIMENSION(:,:), INTENT(INOUT) :: PIN
210 REAL, DIMENSION(:,:), INTENT(OUT ) :: POUT
211 LOGICAL, DIMENSION(:,:), INTENT(IN ) :: OMASK
212 REAL , INTENT(IN ) :: PDIV
213 !
214 REAL(KIND=JPRB) :: ZHOOK_HANDLE
215 !
216 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND:MASK_TRIP',0,zhook_handle)
217 !
218 pout(:,:) = xundef
219 !
220 WHERE(omask(:,:))
221  pout(:,:) = pin(:,:)/pdiv
222  pin(:,:) = 0.0
223 ELSEWHERE
224  pin(:,:) = xundef
225 ENDWHERE
226 !
227 IF (lhook) CALL dr_hook('TRIP_OASIS_SEND:MASK_TRIP',1,zhook_handle)
228 !
229 END SUBROUTINE mask_trip
230 !
231 !
232 !-------------------------------------------------------------------------------
233 #endif
234 !-------------------------------------------------------------------------------
235 !
236 END SUBROUTINE trip_oasis_send
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine trip_oasis_send(TP, TPG, KLISTING, KLON, KLAT, PTIMEC)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine check_trip_send(HCOMMENT)
subroutine abort_trip(YTEXT)
Definition: abort_trip.F90:3
real, save xundef
subroutine mask_trip(PIN, POUT, OMASK, PDIV)