103
104
110
111
112
113 integer, intent(in) :: ng, tile
114 integer, intent(in) :: LBi, UBi, LBj, UBj
115 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
116 integer, intent(in) :: knew
117# ifdef SOLVE3D
118 integer, intent(in) :: nnew, nstp
119# endif
120
121# ifdef ASSUMED_SHAPE
122 real(r8), intent(in) :: Rscope(LBi:,LBj:)
123 real(r8), intent(in) :: Uscope(LBi:,LBj:)
124 real(r8), intent(in) :: Vscope(LBi:,LBj:)
125# ifdef SOLVE3D
126 real(r8), intent(in) :: u_ads(LBi:,LBj:,:)
127 real(r8), intent(in) :: v_ads(LBi:,LBj:,:)
128 real(r8), intent(in) :: wvel_ads(LBi:,LBj:,:)
129 real(r8), intent(in) :: t_ads(LBi:,LBj:,:,:)
130# endif
131 real(r8), intent(in) :: ubar_ads(LBi:,LBj:)
132 real(r8), intent(in) :: vbar_ads(LBi:,LBj:)
133 real(r8), intent(in) :: zeta_ads(LBi:,LBj:)
134# ifdef SOLVE3D
135 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
136 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
137 real(r8), intent(inout) :: ad_wvel(LBi:,LBj:,:)
138 real(r8), intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
139 real(r8), intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
140# else
141 real(r8), intent(inout) :: ad_zeta(LBi:,LBj:,:)
142# endif
143 real(r8), intent(inout) :: ad_ubar(LBi:,LBj:,:)
144 real(r8), intent(inout) :: ad_vbar(LBi:,LBj:,:)
145# else
146 real(r8), intent(in) :: Rscope(LBi:UBi,LBj:UBj)
147 real(r8), intent(in) :: Uscope(LBi:UBi,LBj:UBj)
148 real(r8), intent(in) :: Vscope(LBi:UBi,LBj:UBj)
149# ifdef SOLVE3D
150 real(r8), intent(in) :: u_ads(LBi:UBi,LBj:UBj,N(ng))
151 real(r8), intent(in) :: v_ads(LBi:UBi,LBj:UBj,N(ng))
152 real(r8), intent(in) :: wvel_ads(LBi:UBi,LBj:UBj,N(ng))
153 real(r8), intent(in) :: t_ads(LBi:UBi,LBj:UBj,N(ng),NT(ng))
154# endif
155 real(r8), intent(in) :: ubar_ads(LBi:UBi,LBj:UBj)
156 real(r8), intent(in) :: vbar_ads(LBi:UBi,LBj:UBj)
157 real(r8), intent(in) :: zeta_ads(LBi:UBi,LBj:UBj)
158# ifdef SOLVE3D
159 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
160 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
161 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,0:N(ng))
162 real(r8), intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
163 real(r8), intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
164# else
165 real(r8), intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
166# endif
167 real(r8), intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
168 real(r8), intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
169# endif
170
171
172
173 integer :: Kfrc, Nfrc, i, itrc, j, k
174
175 real(r8) :: adFac
176
177# include "set_bounds.h"
178
179
180
181
182
183
184
186 kfrc=knew
187 nfrc=nstp
188 ELSE
189 kfrc=1
190 nfrc=nnew
191 END IF
192
193# ifdef AD_IMPULSE
194
195
196
197
198
199
200
201 adfac=0.0_r8
202# ifdef I4DVAR_ANA_SENSITIVITY
203 IF ((mod(
iic(ng)-1,
nhis(ng)).eq.0).and. &
205# else
206 IF ((mod(
iic(ng)-1,
ntlm(ng)).eq.0).and. &
208# endif
209 adfac=1.0_r8
212 10 FORMAT (2x,'ADSEN_FORCE - forcing Adjoint model at', &
213 & ' TimeStep: ', i0)
214 END IF
215 END IF
216# else
217 adfac=1.0_r8
218# endif
219
220
221
223# ifdef SOLVE3D
224 DO j=jstrr,jendr
225 DO i=istrr,iendr
226 ad_zt_avg1(i,j)=ad_zt_avg1(i,j)+ &
227 & adfac*zeta_ads(i,j)*rscope(i,j)
228 END DO
229 END DO
230# else
231 DO j=jstrr,jendr
232 DO i=istrr,iendr
233 ad_zeta(i,j,kfrc)=ad_zeta(i,j,kfrc)+ &
234 & adfac*zeta_ads(i,j)*rscope(i,j)
235 END DO
236 END DO
237# endif
238 END IF
239
240
241
243 DO j=jstrr,jendr
244 DO i=istr,iendr
245 ad_ubar(i,j,kfrc)=ad_ubar(i,j,kfrc)+ &
246 & adfac*ubar_ads(i,j)*uscope(i,j)
247 END DO
248 END DO
249 END IF
250
252 DO j=jstr,jendr
253 DO i=istrr,iendr
254 ad_vbar(i,j,kfrc)=ad_vbar(i,j,kfrc)+ &
255 & adfac*vbar_ads(i,j)*vscope(i,j)
256 END DO
257 END DO
258 END IF
259# ifdef SOLVE3D
260
261
262
265 DO j=jstrr,jendr
266 DO i=istr,iendr
267 ad_u(i,j,k,nfrc)=ad_u(i,j,k,nfrc)+ &
268 & adfac*u_ads(i,j,k)*uscope(i,j)
269 END DO
270 END DO
271 END DO
272 END IF
273
276 DO j=jstr,jendr
277 DO i=istrr,iendr
278 ad_v(i,j,k,nfrc)=ad_v(i,j,k,nfrc)+ &
279 & adfac*v_ads(i,j,k)*vscope(i,j)
280 END DO
281 END DO
282 END DO
283 END IF
284
285
286
287
288
289
290
292
294 DO j=jstrr,jendr
295 DO i=istrr,iendr
296 ad_wvel(i,j,k)=ad_wvel(i,j,k)+ &
297 & adfac*wvel_ads(i,j,k)*rscope(i,j)
298 END DO
299 END DO
300 END DO
301 END IF
302
303
304
308 DO j=jstrr,jendr
309 DO i=istrr,iendr
310 ad_t(i,j,k,nfrc,itrc)=ad_t(i,j,k,nfrc,itrc)+ &
311 & adfac*t_ads(i,j,k,itrc)* &
312 & rscope(i,j)
313 END DO
314 END DO
315 END DO
316 END IF
317 END DO
318# endif
319
320 RETURN
integer, dimension(:), allocatable istvar
integer, dimension(:), allocatable nt
integer, dimension(:), allocatable kends
integer, dimension(:), allocatable iic
integer, dimension(:), allocatable ntlm
real(dp), dimension(:), allocatable tdays
real(r8), dimension(:), allocatable dends
integer, dimension(:), allocatable kstrs
integer, dimension(:), allocatable ntend
integer, dimension(:), allocatable nhis
type(t_scalars), dimension(:), allocatable scalars
real(r8), dimension(:), allocatable dstrs