154 & LBi, UBi, LBj, UBj, &
155 & IminS, ImaxS, JminS, JmaxS, &
156 & knew, nrhs, nstp, nnew, &
160# ifdef WET_DRY_NOT_YET
161 & umask_wet, vmask_wet, &
163 & om_v, on_u, pm, pn, &
168 & DU_avg1, ad_DU_avg1, &
169 & DV_avg1, ad_DV_avg1, &
170 & DU_avg2, ad_DU_avg2, &
171 & DV_avg2, ad_DV_avg2, &
173# ifdef DIAGNOSTICS_UV
174!! & DiaU2wrk, DiaV2wrk, &
175!! & DiaU2int, DiaV2int, &
176!! & DiaU3wrk, DiaV3wrk, &
181# ifdef AD_OUTPUT_STATE
182 & ad_u_sol, ad_v_sol, &
184 & ad_ubar, ad_vbar, &
185 & ad_ubar_sol, ad_vbar_sol, &
186# ifdef NEARSHORE_MELLOR
187 & ubar_stokes, ad_ubar_stokes, &
188 & vbar_stokes, ad_vbar_stokes, &
189 & u_stokes, ad_u_stokes, &
190 & v_stokes, ad_v_stokes, &
198 integer,
intent(in) :: ng, tile
199 integer,
intent(in) :: LBi, UBi, LBj, UBj
200 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
201 integer,
intent(in) :: knew, nrhs, nstp, nnew
205 real(r8),
intent(in) :: umask(LBi:,LBj:)
206 real(r8),
intent(in) :: vmask(LBi:,LBj:)
208# ifdef WET_DRY_NOT_YET
209 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
210 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
212 real(r8),
intent(in) :: om_v(LBi:,LBj:)
213 real(r8),
intent(in) :: on_u(LBi:,LBj:)
214 real(r8),
intent(in) :: pm(LBi:,LBj:)
215 real(r8),
intent(in) :: pn(LBi:,LBj:)
216 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
217 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
218 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
219 real(r8),
intent(in) :: Akv(LBi:,LBj:,0:)
220 real(r8),
intent(in) :: DU_avg1(LBi:,LBj:)
221 real(r8),
intent(in) :: DV_avg1(LBi:,LBj:)
222 real(r8),
intent(in) :: DU_avg2(LBi:,LBj:)
223 real(r8),
intent(in) :: DV_avg2(LBi:,LBj:)
224 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
225 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
226# ifdef NEARSHORE_MELLOR
227 real(r8),
intent(in) :: ubar_stokes(LBi:,LBj:)
228 real(r8),
intent(in) :: vbar_stokes(LBi:,LBj:)
229 real(r8),
intent(in) :: u_stokes(LBi:,LBj:,:)
230 real(r8),
intent(in) :: v_stokes(LBi:,LBj:,:)
232# ifdef DIAGNOSTICS_UV
242 real(r8),
intent(inout) :: Huon(LBi:,LBj:,:)
243 real(r8),
intent(inout) :: Hvom(LBi:,LBj:,:)
244 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
245 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
246 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
247 real(r8),
intent(inout) :: ad_Akv(LBi:,LBj:,0:)
248 real(r8),
intent(inout) :: ad_DU_avg1(LBi:,LBj:)
249 real(r8),
intent(inout) :: ad_DV_avg1(LBi:,LBj:)
250 real(r8),
intent(inout) :: ad_DU_avg2(LBi:,LBj:)
251 real(r8),
intent(inout) :: ad_DV_avg2(LBi:,LBj:)
252 real(r8),
intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
253 real(r8),
intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
254 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
255 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
256# ifdef AD_OUTPUT_STATE
257 real(r8),
intent(inout) :: ad_u_sol(LBi:,LBj:,:)
258 real(r8),
intent(inout) :: ad_v_sol(LBi:,LBj:,:)
260# ifdef NEARSHORE_MELLOR
261 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:,LBj:)
262 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:,LBj:)
263 real(r8),
intent(inout) :: ad_u_stokes(LBi:,LBj:,:)
264 real(r8),
intent(inout) :: ad_v_stokes(LBi:,LBj:,:)
266 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
267 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
268 real(r8),
intent(inout) :: ad_Huon(LBi:,LBj:,:)
269 real(r8),
intent(inout) :: ad_Hvom(LBi:,LBj:,:)
271 real(r8),
intent(out) :: ad_ubar_sol(LBi:,LBj:)
272 real(r8),
intent(out) :: ad_vbar_sol(LBi:,LBj:)
277 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
278 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
280# ifdef WET_DRY_NOT_YET
281 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
282 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
284 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
285 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
286 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
287 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
288 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
289 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
290 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
291 real(r8),
intent(in) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
292 real(r8),
intent(in) :: DU_avg1(LBi:UBi,LBj:UBj)
293 real(r8),
intent(in) :: DV_avg1(LBi:UBi,LBj:UBj)
294 real(r8),
intent(in) :: DU_avg2(LBi:UBi,LBj:UBj)
295 real(r8),
intent(in) :: DV_avg2(LBi:UBi,LBj:UBj)
296 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
297 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
298# ifdef NEARSHORE_MELLOR
299 real(r8),
intent(in) :: ubar_stokes(LBi:UBi,LBj:UBj)
300 real(r8),
intent(in) :: vbar_stokes(LBi:UBi,LBj:UBj)
301 real(r8),
intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
302 real(r8),
intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
304# ifdef DIAGNOSTICS_UV
314 real(r8),
intent(inout) :: Huon(LBi:UBi,LBj:UBj,N(ng))
315 real(r8),
intent(inout) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
316 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
317 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
318 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
319 real(r8),
intent(inout) :: ad_Akv(LBi:UBi,LBj:UBj,0:N(ng))
320 real(r8),
intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
321 real(r8),
intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
322 real(r8),
intent(inout) :: ad_DU_avg2(LBi:UBi,LBj:UBj)
323 real(r8),
intent(inout) :: ad_DV_avg2(LBi:UBi,LBj:UBj)
324 real(r8),
intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
325 real(r8),
intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
326 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
327 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
328# ifdef AD_OUTPUT_STATE
329 real(r8),
intent(inout) :: ad_u_sol(LBi:UBi,LBj:UBj,N(ng))
330 real(r8),
intent(inout) :: ad_v_sol(LBi:UBi,LBj:UBj,N(ng))
332# ifdef NEARSHORE_MELLOR
333 real(r8),
intent(in) :: ad_ubar_stokes(LBi:UBi,LBj:UBj)
334 real(r8),
intent(in) :: ad_vbar_stokes(LBi:UBi,LBj:UBj)
335 real(r8),
intent(inout) :: ad_u_stokes(LBi:UBi,LBj:UBj,N(ng))
336 real(r8),
intent(inout) :: ad_v_stokes(LBi:UBi,LBj:UBj,N(ng))
338 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,3)
339 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,3)
340 real(r8),
intent(inout) :: ad_Huon(LBi:UBi,LBj:UBj,N(ng))
341 real(r8),
intent(inout) :: ad_Hvom(LBi:UBi,LBj:UBj,N(ng))
343 real(r8),
intent(out) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
344 real(r8),
intent(out) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
349 integer :: i, idiag, is, j, k
351 real(r8) :: cff, cff1, cff2
352 real(r8) :: ad_cff, ad_cff1, ad_cff2
353 real(r8) :: adfac, adfac1, adfac2
355 real(r8),
dimension(IminS:ImaxS) :: CF1
356 real(r8),
dimension(IminS:ImaxS) :: FC1
357# ifdef NEARSHORE_MELLOR
358 real(r8),
dimension(IminS:ImaxS) :: CFs1
359 real(r8),
dimension(IminS:ImaxS) :: DCs1
361 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: AK
362 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BC
363 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
364 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
365 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC1
366 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
367# ifdef NEARSHORE_MELLOR
368 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CFs
369 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DCs
371 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hzk
372 real(r8),
dimension(IminS:ImaxS,N(ng)) :: oHz
373# ifdef DIAGNOSTICS_UV
377 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_AK
378 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_BC
379 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_CF
380 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_DC
381 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
382# ifdef NEARSHORE_MELLOR
383 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_CFs
384 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_DCs
386 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hzk
387 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_oHz
389# include "set_bounds.h"
403# ifdef NEARSHORE_MELLOR
417# ifdef UV_DESTAGGERED
443 & lbi, ubi, lbj, ubj, &
446 & ad_ubar(:,:,1), ad_vbar(:,:,1), &
447 & ad_ubar(:,:,2), ad_vbar(:,:,2))
457 & lbi, ubi, lbj, ubj, 1, n(ng), &
460 & ad_u(:,:,:,nnew), ad_v(:,:,:,nnew), &
472 & lbi, ubi, lbj, ubj, &
479 & lbi, ubi, lbj, ubj, &
484 & lbi, ubi, lbj, ubj, 1, n(ng), &
491 & lbi, ubi, lbj, ubj, 1, n(ng), &
495 & lbi, ubi, lbj, ubj, 1, n(ng), &
502 & lbi, ubi, lbj, ubj, 1, n(ng), &
510 & lbi, ubi, lbj, ubj, 1, n(ng), &
517 & lbi, ubi, lbj, ubj, 1, n(ng), &
527 j_loop1 :
DO j=jstrt,jendt
537# ifdef NEARSHORE_MELLOR
545 dc(i,k)=cff*(hz(i,j,k)+hz(i,j-1,k))
546 dc(i,0)=dc(i,0)+dc(i,k)
548 & dc(i,k)*v(i,j,k,nnew)
549# ifdef NEARSHORE_MELLOR
551 & dc(i,k)*v_stokes(i,j,k)
557# ifdef NEARSHORE_MELLOR
558 cff2=dc(i,0)*vbar_stokes(i,j)
560 dc(i,0)=1.0_r8/dc(i,0)
562 cf(i,0)=dc(i,0)*(cf(i,0)-dv_avg1(i,j))
563# ifdef NEARSHORE_MELLOR
565 cfs(i,0)=dc(i,0)*(cfs(i,0)-cff2)
571# ifdef NEARSHORE_MELLOR
577 & 0.5_r8*(hvom(i,j,k)+v(i,j,k,nnew)*dc(i,k))
578# ifdef NEARSHORE_MELLOR
580 & 0.5_r8*v_stokes(i,j,k)*dc(i,k)
586 fc(i,0)=dc(i,0)*(fc(i,0)-dv_avg2(i,j))
597 ad_dc(i,k)=ad_dc(i,k)-ad_hvom(i,j,k)*fc(i,0)
598 ad_fc(i,0)=ad_fc(i,0)-ad_hvom(i,j,k)*dc(i,k)
605 adfac=dc(i,0)*ad_fc(i,0)
606 ad_dc(i,0)=ad_dc(i,0)+ad_fc(i,0)*(fc1(i)-dv_avg2(i,j))
607 ad_dv_avg2(i,j)=ad_dv_avg2(i,j)-adfac
614# ifdef DIAGNOSTICS_UV
620 ad_hvom(i,j,k)=ad_hvom(i,j,k)+ad_fc(i,0)
621# ifdef NEARSHORE_MELLOR
626 adfac=0.5_r8*ad_hvom(i,j,k)
627 ad_dc(i,k)=ad_dc(i,k)+v_stokes(i,j,k)*adfac
628 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)+dc(i,k)*adfac
634 adfac=0.5_r8*ad_hvom(i,j,k)
635 ad_dc(i,k)=ad_dc(i,k)+v(i,j,k,nnew)*adfac
636 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)+dc(i,k)*adfac
648 IF (j.eq.
mm(ng)+1)
THEN
651# ifdef NEARSHORE_MELLOR
652# ifdef WET_DRY_NOT_YET
656 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)* &
663 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)* &
669 ad_cfs(i,0)=ad_cfs(i,0)-ad_v_stokes(i,j,k)
671# ifdef WET_DRY_NOT_YET
675 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)* &
682 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)* &
688 ad_cf(i,0)=ad_cf(i,0)-ad_v(i,j,k,nnew)
698# ifdef NEARSHORE_MELLOR
699# ifdef WET_DRY_NOT_YET
703 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)* &
710 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)* &
716 ad_cfs(i,0)=ad_cfs(i,0)-ad_v_stokes(i,j,k)
718# ifdef WET_DRY_NOT_YET
722 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)* &
729 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)* &
735 ad_cf(i,0)=ad_cf(i,0)-ad_v(i,j,k,nnew)
742 IF (
domain(ng)%Eastern_Edge(tile))
THEN
744# ifdef NEARSHORE_MELLOR
745# ifdef WET_DRY_NOT_YET
749 ad_v_stokes(iend+1,j,k)=ad_v_stokes(iend+1,j,k)* &
750 & vmask_wet(iend+1,j)
756 ad_v_stokes(iend+1,j,k)=ad_v_stokes(iend+1,j,k)* &
762 ad_cfs(iend+1,0)=ad_cfs(iend+1,0)- &
763 & ad_v_stokes(iend+1,j,k)
765# ifdef WET_DRY_NOT_YET
769 ad_v(iend+1,j,k,nnew)=ad_v(iend+1,j,k,nnew)* &
770 & vmask_wet(iend+1,j)
776 ad_v(iend+1,j,k,nnew)=ad_v(iend+1,j,k,nnew)* &
782 ad_cf(iend+1,0)=ad_cf(iend+1,0)- &
783 & ad_v(iend+1,j,k,nnew)
789 IF (
domain(ng)%Western_Edge(tile))
THEN
791# ifdef NEARSHORE_MELLOR
792# ifdef WET_DRY_NOT_YET
796 ad_v_stokes(istr-1,j,k)=ad_v_stokes(istr-1,j,k)* &
797 & vmask_wet(istr-1,j)
803 ad_v_stokes(istr-1,j,k)=ad_v_stokes(istr-1,j,k)* &
809 ad_cfs(istr-1,0)=ad_cfs(istr-1,0)- &
810 & ad_v_stokes(istr-1,j,k)
812# ifdef WET_DRY_NOT_YET
816 ad_v(istr-1,j,k,nnew)=ad_v(istr-1,j,k,nnew)* &
817 & vmask_wet(istr-1,j)
823 ad_v(istr-1,j,k,nnew)=ad_v(istr-1,j,k,nnew)* &
829 ad_cf(istr-1,0)=ad_cf(istr-1,0)- &
830 & ad_v(istr-1,j,k,nnew)
835# ifdef DIAGNOSTICS_UV
854 ad_vbar_sol(i,j)=ad_vbar(i,j,1)+ad_vbar(i,j,2)
863# ifdef DIAGNOSTICS_UV
872 ad_vbar(i,j,1)=ad_vbar(i,j,1)+ad_vbar(i,j,2)
873 ad_vbar(i,j,2)=0.0_r8
877 ad_dc(i,0)=ad_dc(i,0)+ad_vbar(i,j,1)*dv_avg1(i,j)
878 ad_dv_avg1(i,j)=ad_dv_avg1(i,j)+ad_vbar(i,j,1)*dc(i,0)
879 ad_vbar(i,j,1)=0.0_r8
880# ifdef NEARSHORE_MELLOR
884 adfac=dc(i,0)*ad_cfs(i,0)
885 ad_dc(i,0)=ad_dc(i,0)+(cfs1(i)-cff2)*ad_cfs(i,0)
886 ad_cff2=ad_cff2-adfac
887 ad_cfs(i,0)=ad_cfs(i,0)+adfac
893 adfac=dc(i,0)*ad_cf(i,0)
894 ad_dc(i,0)=ad_dc(i,0)+ad_cf(i,0)*(cf1(i)-dv_avg1(i,j))
895 ad_dv_avg1(i,j)=ad_dv_avg1(i,j)-adfac
899 ad_dc(i,0)=-ad_dc(i,0)/(dc1(i,0)*dc1(i,0))
900# ifdef NEARSHORE_MELLOR
904 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)+dc(i,0)*ad_cff2
905 ad_dc(i,0)=ad_dc(i,0)+vbar_stokes(i,j)*ad_cff2
912# ifdef NEARSHORE_MELLOR
920 dc(i,k)=cff*(hz(i,j,k)+hz(i,j-1,k))
921 dc(i,0)=dc(i,0)+dc(i,k)
923 & dc(i,k)*v(i,j,k,nnew)
924# ifdef NEARSHORE_MELLOR
925 cfs(i,0)=cfs(i,0)+dc(i,k)*v_stokes(i,j,k)
930 ad_dc(i,k)=ad_dc(i,k)+v_stokes(i,j,k)*ad_cfs(i,0)
931 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)+dc(i,k)*ad_cfs(i,0)
937 ad_dc(i,k)=ad_dc(i,k)+ad_cf(i,0)*v(i,j,k,nnew)
938 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)+ad_cf(i,0)*dc(i,k)
941 ad_dc(i,k)=ad_dc(i,k)+ad_dc(i,0)
945 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
946 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
954# ifdef NEARSHORE_MELLOR
976# ifdef NEARSHORE_MELLOR
984 dc(i,k)=cff*(hz(i,j,k)+hz(i-1,j,k))
985 dc(i,0)=dc(i,0)+dc(i,k)
987 & dc(i,k)*u(i,j,k,nnew)
988# ifdef NEARSHORE_MELLOR
990 & dc(i,k)*u_stokes(i,j,k)
996# ifdef NEARSHORE_MELLOR
997 cff2=dc(i,0)*ubar_stokes(i,j)
999 dc(i,0)=1.0_r8/dc(i,0)
1001 cf(i,0)=dc(i,0)*(cf(i,0)-du_avg1(i,j))
1002# ifdef NEARSHORE_MELLOR
1004 cfs(i,0)=dc(i,0)*(cfs(i,0)-cff2)
1010# ifdef NEARSHORE_MELLOR
1016 & 0.5_r8*(huon(i,j,k)+u(i,j,k,nnew)*dc(i,k))
1017# ifdef NEARSHORE_MELLOR
1019 & 0.5_r8*u_stokes(i,j,k)*dc(i,k)
1025 fc(i,0)=dc(i,0)*(fc(i,0)-du_avg2(i,j))
1036 ad_dc(i,k)=ad_dc(i,k)-ad_huon(i,j,k)*fc(i,0)
1037 ad_fc(i,0)=ad_fc(i,0)-ad_huon(i,j,k)*dc(i,k)
1044 adfac=dc(i,0)*ad_fc(i,0)
1045 ad_dc(i,0)=ad_dc(i,0)+ad_fc(i,0)*(fc1(i)-du_avg2(i,j))
1046 ad_du_avg2(i,j)=ad_du_avg2(i,j)-adfac
1053# ifdef DIAGNOSTICS_UV
1058 ad_huon(i,j,k)=ad_huon(i,j,k)+ad_fc(i,0)
1059# ifdef NEARSHORE_MELLOR
1064 adfac=0.5_r8*ad_huon(i,j,k)
1065 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+dc(i,k)*adfac
1066 ad_dc(i,k)=ad_dc(i,k)+u_stokes(i,j,k)*adfac
1072 adfac=0.5_r8*ad_huon(i,j,k)
1073 ad_dc(i,k)=ad_dc(i,k)+u(i,j,k,nnew)*adfac
1074 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)+dc(i,k)*adfac
1075 ad_huon(i,j,k)=adfac
1086 IF (j.eq.
mm(ng)+1)
THEN
1089# ifdef NEARSHORE_MELLOR
1090# ifdef WET_DRY_NOT_YET
1094 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)* &
1101 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)* &
1107 ad_cfs(i,0)=ad_cfs(i,0)-ad_u_stokes(i,j,k)
1109# ifdef WET_DRY_NOT_YET
1113 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)* &
1120 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)* &
1125 ad_cf(i,0)=ad_cf(i,0)-ad_u(i,j,k,nnew)
1135# ifdef NEARSHORE_MELLOR
1136# ifdef WET_DRY_NOT_YET
1140 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)* &
1147 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)* &
1153 ad_cfs(i,0)=ad_cfs(i,0)-ad_u_stokes(i,j,k)
1155# ifdef WET_DRY_NOT_YET
1159 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)* &
1166 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)* &
1171 ad_cf(i,0)=ad_cf(i,0)-ad_u(i,j,k,nnew)
1178 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1180# ifdef NEARSHORE_MELLOR
1181# ifdef WET_DRY_NOT_YET
1185 ad_u_stokes(iend+1,j,k)=ad_u_stokes(iend+1,j,k)* &
1186 & umask_wet(iend+1,j)
1192 ad_u_stokes(iend+1,j,k)=ad_u_stokes(iend+1,j,k)* &
1198 ad_cfs(iend+1,0)=ad_cfs(iend+1,0)- &
1199 & ad_u_stokes(iend+1,j,k)
1201# ifdef WET_DRY_NOT_YET
1205 ad_u(iend+1,j,k,nnew)=ad_u(iend+1,j,k,nnew)* &
1206 & umask_wet(iend+1,j)
1212 ad_u(iend+1,j,k,nnew)=ad_u(iend+1,j,k,nnew)* &
1218 ad_cf(iend+1,0)=ad_cf(iend+1,0)- &
1219 & ad_u(iend+1,j,k,nnew)
1225 IF (
domain(ng)%Western_Edge(tile))
THEN
1227# ifdef NEARSHORE_MELLOR
1228# ifdef WET_DRY_NOT_YET
1232 ad_u_stokes(istr,j,k)=ad_u_stokes(istr,j,k)* &
1239 ad_u_stokes(istr,j,k)=ad_u_stokes(istr,j,k)* &
1245 ad_cfs(istr,0)=ad_cfs(istr,0)- &
1246 & ad_u_stokes(istr,j,k)
1248# ifdef WET_DRY_NOT_YET
1252 ad_u(istr,j,k,nnew)=ad_u(istr,j,k,nnew)* &
1259 ad_u(istr,j,k,nnew)=ad_u(istr,j,k,nnew)* &
1265 ad_cf(istr,0)=ad_cf(istr,0)- &
1266 & ad_u(istr,j,k,nnew)
1271# ifdef DIAGNOSTICS_UV
1290 ad_ubar_sol(i,j)=ad_ubar(i,j,1)+ad_ubar(i,j,2)
1299# ifdef DIAGNOSTICS_UV
1305 ad_ubar(i,j,1)=ad_ubar(i,j,1)+ad_ubar(i,j,2)
1306 ad_ubar(i,j,2)=0.0_r8
1310 ad_dc(i,0)=ad_dc(i,0)+ad_ubar(i,j,1)*du_avg1(i,j)
1311 ad_du_avg1(i,j)=ad_du_avg1(i,j)+ad_ubar(i,j,1)*dc(i,0)
1312 ad_ubar(i,j,1)=0.0_r8
1313# ifdef NEARSHORE_MELLOR
1317 adfac=dc(i,0)*ad_cfs(i,0)
1318 ad_dc(i,0)=ad_dc(i,0)+(cfs1(i)-cff2)*ad_cfs(i,0)
1319 ad_cfs(i,0)=ad_cfs(i,0)+adfac
1320 ad_cff2=tl_cff2-adfac
1326 adfac=dc(i,0)*ad_cf(i,0)
1327 ad_dc(i,0)=ad_dc(i,0)+ad_cf(i,0)*(cf1(i)-du_avg1(i,j))
1328 ad_du_avg1(i,j)=ad_du_avg1(i,j)-adfac
1332 ad_dc(i,0)=-ad_dc(i,0)/(dc1(i,0)*dc1(i,0))
1333# ifdef NEARSHORE_MELLOR
1337 ad_dc(i,0)=ad_dc(i,0)+ubar_stokes(i,j)*ad_cff2
1338 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)+dc(i,0)*ad_cff2
1345# ifdef NEARSHORE_MELLOR
1352 cff=0.5_r8*on_u(i,j)
1353 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))*on_u(i,j)
1354 dc(i,0)=dc(i,0)+dc(i,k)
1356 & dc(i,k)*u(i,j,k,nnew)
1357# ifdef NEARSHORE_MELLOR
1358 cfs(i,0)=cfs(i,0)+ &
1359 & dc(i,k)*u_stokes(i,j,k)
1364 ad_dc(i,k)=ad_dc(i,k)+u_stokes(i,j,k)*ad_cfs(i,0)
1365 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+dc(i,k)*ad_cfs(i,0)
1371 ad_dc(i,k)=ad_dc(i,k)+ad_cf(i,0)*u(i,j,k,nnew)
1372 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)+ad_cf(i,0)*dc(i,k)
1375 ad_dc(i,k)=ad_dc(i,k)+ad_dc(i,0)
1378 adfac=cff*ad_dc(i,k)
1379 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
1380 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
1388# ifdef NEARSHORE_MELLOR
1411 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1412 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1413 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
1415 cff1=1.0_r8/(on_u(i,j)* &
1416 & 0.5_r8*(z_w(i-1,j,k)-z_w(i-1,j,k-1)+ &
1417 & z_w(i ,j,k)-z_w(i ,j,k-1)))
1422 & cff1*ad_u(i,j,k,nnew)
1424 &
sources(ng)%Qsrc(is,k)*ad_u(i,j,k,nnew)
1425 ad_u(i,j,k,nnew)=0.0_r8
1430 adfac=-0.5_r8*cff1*cff1*on_u(i,j)*ad_cff1
1431 ad_z_w(i-1,j,k-1)=ad_z_w(i-1,j,k-1)-adfac
1432 ad_z_w(i ,j,k-1)=ad_z_w(i ,j,k-1)-adfac
1433 ad_z_w(i-1,j,k )=ad_z_w(i-1,j,k )+adfac
1434 ad_z_w(i ,j,k )=ad_z_w(i ,j,k )+adfac
1437 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
1439 cff1=1.0_r8/(om_v(i,j)* &
1440 & 0.5_r8*(z_w(i,j-1,k)-z_w(i,j-1,k-1)+ &
1441 & z_w(i,j ,k)-z_w(i,j ,k-1)))
1446 & cff1*ad_v(i,j,k,nnew)
1448 &
sources(ng)%Qsrc(is,k)*ad_v(i,j,k,nnew)
1449 ad_v(i,j,k,nnew)=0.0_r8
1454 adfac=-0.5_r8*cff1*cff1*om_v(i,j)*ad_cff1
1455 ad_z_w(i,j-1,k-1)=ad_z_w(i,j-1,k-1)-adfac
1456 ad_z_w(i,j ,k-1)=ad_z_w(i,j ,k-1)-adfac
1457 ad_z_w(i,j-1,k )=ad_z_w(i,j-1,k )+adfac
1458 ad_z_w(i,j ,k )=ad_z_w(i,j ,k )+adfac
1477 & lbi, ubi, lbj, ubj, n(ng), &
1478 & imins, imaxs, jmins, jmaxs, &
1488 & lbi, ubi, lbj, ubj, n(ng), &
1489 & imins, imaxs, jmins, jmaxs, &
1497 j_loop2 :
DO j=jstr,jend
1498 IF (j.ge.jstrv)
THEN
1503 ak(i,0)=0.5_r8*(akv(i,j-1,0)+ &
1506 ak(i,k)=0.5_r8*(akv(i,j-1,k)+ &
1508 hzk(i,k)=0.5_r8*(hz(i,j-1,k)+ &
1510# if defined SPLINES_VVISC || defined DIAGNOSTICS_UV
1511 ohz(i,k)=1.0_r8/hzk(i,k)
1518# if defined DIAGNOSTICS_UV && defined MASKING
1530# ifdef DIAGNOSTICS_UV
1531# ifdef NEARSHORE_MELLOR
1543# if defined UV_VIS2 || defined UV_VIS4
1560# ifdef NEARSHORE_MELLOR
1561# ifdef WET_DRY_NOT_YET
1564 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)*vmask_wet(i,j)
1569 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)*vmask(i,j)
1573 ad_dcs(i,0)=ad_dcs(i,0)-ad_v_stokes(i,j,k)
1575# ifdef WET_DRY_NOT_YET
1578 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)*vmask_wet(i,j)
1583 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)*vmask(i,j)
1587 ad_dc(i,0)=ad_dc(i,0)-ad_v(i,j,k,nnew)
1596 dc(i,0)=v(i,j,1,nnew)*hzk(i,1)
1600 cf(i,0)=cf(i,0)+hzk(i,k)
1601 dc(i,0)=dc(i,0)+v(i,j,k,nnew)*hzk(i,k)
1606 cff1=1.0_r8/(cf(i,0)*om_v(i,j))
1607 dc(i,0)=(dc(i,0)*om_v(i,j)-dv_avg1(i,j))*cff1
1608# ifdef NEARSHORE_MELLOR
1611 dcs(i,0)=dcs(i,0)*cff2-vbar_stokes(i,j)
1613# ifdef DIAGNOSTICS_UV
1622# ifdef NEARSHORE_MELLOR
1626 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)-ad_dcs(i,0)
1627 ad_cff2=ad_cff2+dcs1(i,0)*ad_dcs(i,0)
1628 ad_dcs(i,0)=cff2*ad_dcs(i,0)
1631 ad_cf(i,0)=ad_cf(i,0)-cff2*cff2*tl_cff2
1637 adfac=cff1*ad_dc(i,0)
1638 ad_dv_avg1(i,j)=ad_dv_avg1(i,j)-adfac
1640 & (dc1(i,0)*om_v(i,j)-dv_avg1(i,j))*ad_dc(i,0)
1641 ad_dc(i,0)=om_v(i,j)*adfac
1644 ad_cf(i,0)=ad_cf(i,0)-cff1*cff1*om_v(i,j)*ad_cff1
1649 dc(i,0)=v(i,j,1,nnew)*hzk(i,1)
1653 cf(i,0)=cf(i,0)+hzk(i,k)
1654 dc(i,0)=dc(i,0)+v(i,j,k,nnew)*hzk(i,k)
1655# ifdef DIAGNOSTICS_UV
1656# ifdef NEARSHORE_MELLOR
1668# if defined UV_VIS2 || defined UV_VIS4
1685# ifdef NEARSHORE_MELLOR
1690 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)+hzk(i,k)*ad_dcs(i,0)
1691 ad_hzk(i,k)=ad_hzk(i,k)+v_stokes(i,j,k)*ad_dcs(i,0)
1697 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)+ad_dc(i,0)*hzk(i,k)
1698 ad_hzk(i,k)=ad_hzk(i,k)+v(i,j,k,nnew)*ad_dc(i,0)
1701 ad_hzk(i,k)=ad_hzk(i,k)+ad_cf(i,0)
1706 dc(i,0)=v(i,j,1,nnew)*hzk(i,1)
1707# ifdef DIAGNOSTICS_UV
1708# ifdef NEARSHORE_MELLOR
1716# if defined UV_VIS2 || defined UV_VIS4
1727# ifdef NEARSHORE_MELLOR
1731 ad_v_stokes(i,j,1)=ad_v_stokes(i,j,1)+hzk(i,1)*ad_dcs(i,0)
1732 ad_hzk(i,1)=ad_hzk(i,1)+v_stokes(i,j,1)*ad_dcs(i,0)
1738 ad_v(i,j,1,nnew)=ad_v(i,j,1,nnew)+ad_dc(i,0)*hzk(i,1)
1739 ad_hzk(i,1)=ad_hzk(i,1)+v(i,j,1,nnew)*ad_dc(i,0)
1743 ad_hzk(i,1)=ad_hzk(i,1)+ad_cf(i,0)
1747# if defined SPLINES_VVISC
1757 fc(i,k)=cff1*hzk(i,k )-
dt(ng)*ak(i,k-1)*ohz(i,k )
1758 cf(i,k)=cff1*hzk(i,k+1)-
dt(ng)*ak(i,k+1)*ohz(i,k+1)
1771 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
1772 &
dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
1773 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1775 dc(i,k)=cff*(v(i,j,k+1,nnew)-v(i,j,k,nnew)- &
1776 & fc(i,k)*dc(i,k-1))
1788 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
1796 dc1(i,k)=dc(i,k)*ak(i,k)
1803# ifdef DIAGNOSTICS_UV
1808 ad_cff=ad_cff+ad_v(i,j,k,nnew)
1813 adfac1=adfac*ohz(i,k)
1814 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac1
1815 ad_dc(i,k )=ad_dc(i,k )+adfac1
1816 ad_ohz(i,k)=ad_ohz(i,k)+(dc1(i,k)-dc1(i,k-1))*adfac
1820 ad_ak(i,k)=ad_ak(i,k)+dc(i,k)*ad_dc(i,k)
1821 ad_dc(i,k)=ak(i,k)*ad_dc(i,k)
1831 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
1837 ad_dc(i,n(ng))=0.0_r8
1845 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
1846 &
dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
1847 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1855 adfac=cff*ad_dc(i,k)
1856 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
1857 ad_cf(i,k)=ad_cf(i,k)-dc(i,k+1)*adfac
1858 ad_bc(i,k)=ad_bc(i,k)-dc(i,k )*adfac
1859 ad_fc(i,k)=ad_fc(i,k)-dc(i,k-1)*adfac
1860 ad_v(i,j,k, nnew)=ad_v(i,j,k ,nnew)-adfac
1861 ad_v(i,j,k+1,nnew)=ad_v(i,j,k+1,nnew)+adfac
1867 adfac=
dt(ng)*ad_bc(i,k)
1868 adfac1=adfac*ak(i,k)
1869 adfac2=cff1*ad_bc(i,k)
1870 ad_ohz(i,k )=ad_ohz(i,k )+adfac1
1871 ad_ohz(i,k+1)=ad_ohz(i,k+1)+adfac1
1872 ad_ak(i,k)=ad_ak(i,k)+(ohz(i,k)+ohz(i,k+1))*adfac
1873 ad_hzk(i,k )=ad_hzk(i,k )+adfac2
1874 ad_hzk(i,k+1)=ad_hzk(i,k+1)+adfac2
1898 adfac=
dt(ng)*ad_cf(i,k)
1899 ad_ohz(i,k+1)=ad_ohz(i,k+1)-ak(i,k+1)*adfac
1900 ad_ak(i,k+1)=ad_ak(i,k+1)-ohz(i,k+1)*adfac
1901 ad_hzk(i,k+1)=ad_hzk(i,k+1)+cff1*ad_cf(i,k)
1907 adfac=
dt(ng)*ad_fc(i,k)
1908 ad_ohz(i,k)=ad_ohz(i,k)-ak(i,k-1)*adfac
1909 ad_ak(i,k-1)=ad_ak(i,k-1)-ohz(i,k)*adfac
1910 ad_hzk(i,k)=ad_hzk(i,k)+cff1*ad_fc(i,k)
1929 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
1930 & z_r(i,j,k )-z_r(i,j-1,k ))
1931 fc(i,k)=cff*cff1*ak(i,k)
1940 bc(i,k)=hzk(i,k)-fc(i,k)-fc(i,k-1)
1949 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
1961# ifdef DIAGNOSTICS_UV
1967 ad_dc(i,k)=ad_dc(i,k)+ad_v(i,j,k,nnew)
1968 ad_v(i,j,k,nnew)=0.0_r8
1971 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
1972# ifdef DIAGNOSTICS_UV
1978# ifdef DIAGNOSTICS_UV
1984 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ad_v(i,j,n(ng),nnew)
1985 ad_v(i,j,n(ng),nnew)=0.0_r8
1989 adfac=ad_dc(i,n(ng))/ &
1990 & (bc(i,n(ng))-fc(i,n(ng)-1)*cf(i,n(ng)-1))
1991 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)-fc(i,n(ng)-1)*adfac
1992 ad_dc(i,n(ng) )=adfac
2002 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
2005 adfac=cff*ad_dc(i,k)
2006 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
2014 ad_dc(i,1)=cff*ad_dc(i,1)
2021 ad_bc(i,n(ng) )=-v(i,j,n(ng) ,nnew)*ad_dc(i,n(ng))
2022 ad_fc(i,n(ng)-1)=-v(i,j,n(ng)-1,nnew)*ad_dc(i,n(ng))
2023 ad_v(i,j,n(ng),nnew)=ad_dc(i,n(ng))
2024 ad_dc(i,n(ng))=0.0_r8
2029 ad_fc(i,1)=-v(i,j,2,nnew)*ad_dc(i,1)
2030 ad_bc(i,1)=-v(i,j,1,nnew)*ad_dc(i,1)
2031 ad_v(i,j,1,nnew)=ad_dc(i,1)
2041 ad_fc(i,k-1)=ad_fc(i,k-1)-v(i,j,k-1,nnew)*ad_dc(i,k)
2042 ad_fc(i,k )=ad_fc(i,k )-v(i,j,k+1,nnew)*ad_dc(i,k)
2043 ad_bc(i,k )=ad_bc(i,k )-v(i,j,k ,nnew)*ad_dc(i,k)
2044 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)+ad_dc(i,k)
2052 ad_hzk(i,k)=ad_hzk(i,k)+ad_bc(i,k)
2053 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_bc(i,k)
2054 ad_fc(i,k )=ad_fc(i,k )-ad_bc(i,k)
2066 ad_fc(i,n(ng))=0.0_r8
2074 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
2075 & z_r(i,j,k )-z_r(i,j-1,k ))
2078 adfac=cff*ad_fc(i,k)
2079 ad_ak(i,k)=ad_ak(i,k)+cff1*adfac
2080 ad_cff1=ad_cff1+ak(i,k)*adfac
2085 adfac=-cff1*cff1*ad_cff1
2086 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac
2087 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-adfac
2088 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+adfac
2089 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
2100 cff=0.25_r8*
dt(ng)*3.0_r8/2.0_r8
2102 cff=0.25_r8*
dt(ng)*23.0_r8/12.0_r8
2105 dc(i,0)=cff*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2113# ifdef DIAGNOSTICS_UV
2121# if defined UV_VIS2 || defined UV_VIS4
2133# ifdef SPLINES_VVISC
2137 ad_ohz(i,k)=ad_ohz(i,k)+ &
2138 & (v(i,j,k,nnew)*hzk(i,k))*ad_v(i,j,k,nnew)
2139 ad_v(i,j,k,nnew)=ad_v(i,j,k,nnew)*ohz(i,k)
2144 ad_rv(i,j,k,nrhs)=ad_rv(i,j,k,nrhs)+ &
2145 & dc(i,0)*ad_v(i,j,k,nnew)
2150# ifdef SPLINES_VVISC
2151 ohz(i,k)=1.0_r8/hzk(i,k)
2154 ad_hzk(i,k)=ad_hzk(i,k)-ohz(i,k)*ohz(i,k)*ad_ohz(i,k)
2160 adfac=0.5_r8*ad_hzk(i,k)
2161 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
2162 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
2167 adfac=0.5_r8*ad_ak(i,k)
2168 ad_akv(i,j-1,k)=ad_akv(i,j-1,k)+adfac
2169 ad_akv(i,j ,k)=ad_akv(i,j ,k)+adfac
2175 adfac=0.5_r8*ad_ak(i,0)
2176 ad_akv(i,j-1,0)=ad_akv(i,j-1,0)+adfac
2177 ad_akv(i,j ,0)=ad_akv(i,j ,0)+adfac
2189 ak(i,0)=0.5_r8*(akv(i-1,j,0)+ &
2192 ak(i,k)=0.5_r8*(akv(i-1,j,k)+ &
2194 hzk(i,k)=0.5_r8*(hz(i-1,j,k)+ &
2196# ifdef SPLINES_VVISC
2197 ohz(i,k)=1.0_r8/hzk(i,k)
2204# if defined DIAGNOSTICS_UV && defined MASKING
2216# ifdef DIAGNOSTICS_UV
2217# ifdef NEARSHORE_MELLOR
2229# if defined UV_VIS2 || defined UV_VIS4
2246# ifdef NEARSHORE_MELLOR
2247# ifdef WET_DRY_NOT_YET
2250 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)*umask_wet(i,j)
2255 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)*umask(i,j)
2259 ad_dcs(i,0)=ad_dcs(i,0)-ad_u_stokes(i,j,k)
2261# ifdef WET_DRY_NOT_YET
2264 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)*umask_wet(i,j)
2269 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)*umask(i,j)
2273 ad_dc(i,0)=ad_dc(i,0)-ad_u(i,j,k,nnew)
2282 dc(i,0)=u(i,j,1,nnew)*hzk(i,1)
2286 cf(i,0)=cf(i,0)+hzk(i,k)
2287 dc(i,0)=dc(i,0)+u(i,j,k,nnew)*hzk(i,k)
2292 cff1=1.0/(cf(i,0)*on_u(i,j))
2293 dc(i,0)=(dc(i,0)*on_u(i,j)-du_avg1(i,j))*cff1
2294# ifdef NEARSHORE_MELLOR
2297 dcs(i,0)=dcs(i,0)*cff2-ubar_stokes(i,j)
2299# ifdef DIAGNOSTICS_UV
2308# ifdef NEARSHORE_MELLOR
2312 ad_cff2=ad_cff2+dcs1(i)*ad_dcs(i,0)
2313 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)-ad_dcs(i,0)
2314 ad_dcs(i,0)=cff2*ad_dcs(i,0)
2317 ad_cf(i,0)=ad_cf(i,0)-cff2*cff2*ad_cff2
2323 adfac=cff1*ad_dc(i,0)
2324 ad_du_avg1(i,j)=ad_du_avg1(i,j)-adfac
2326 & (dc1(i,0)*on_u(i,j)-du_avg1(i,j))*ad_dc(i,0)
2327 ad_dc(i,0)=on_u(i,j)*adfac
2330 ad_cf(i,0)=ad_cf(i,0)-cff1*cff1*on_u(i,j)*ad_cff1
2335 dc(i,0)=u(i,j,1,nnew)*hzk(i,1)
2339 cf(i,0)=cf(i,0)+hzk(i,k)
2340 dc(i,0)=dc(i,0)+u(i,j,k,nnew)*hzk(i,k)
2341# ifdef NEARSHORE_MELLOR
2342 dcs(i,0)=dcs(i,0)+u_stokes(i,j,k)*hzk(i,k)
2344# ifdef DIAGNOSTICS_UV
2345# ifdef NEARSHORE_MELLOR
2357# if defined UV_VIS2 || defined UV_VIS4
2374# ifdef NEARSHORE_MELLOR
2379 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+hzk(i,k)*ad_dcs(i,0)
2380 ad_hzk(i,k)=ad_hzk(i,k)+u_stokes(i,j,k)*ad_dcs(i,0)
2386 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)+ad_dc(i,0)*hzk(i,k)
2387 ad_hzk(i,k)=ad_hzk(i,k)+u(i,j,k,nnew)*ad_dc(i,0)
2390 ad_hzk(i,k)=ad_hzk(i,k)+ad_cf(i,0)
2395 dc(i,0)=u(i,j,1,nnew)*hzk(i,1)
2396# ifdef NEARSHORE_MELLOR
2397 dcs(i,0)=u_stokes(i,j,1)*hzk(i,1)
2399# ifdef DIAGNOSTICS_UV
2400# ifdef NEARSHORE_MELLOR
2408# if defined UV_VIS2 || defined UV_VIS4
2419# ifdef NEARSHORE_MELLOR
2423 ad_u_stokes(i,j,1)=ad_u_stokes(i,j,1)+hzk(i,1)*ad_dcs(i,0)
2424 ad_hzk(i,1)=ad_hzk(i,1)+u_stokes(i,j,1)*ad_dcs(i,0)
2430 ad_u(i,j,1,nnew)=ad_u(i,j,1,nnew)+ad_dc(i,0)*hzk(i,1)
2431 ad_hzk(i,1)=ad_hzk(i,1)+u(i,j,1,nnew)*ad_dc(i,0)
2435 ad_hzk(i,1)=ad_hzk(i,1)+ad_cf(i,0)
2439# if defined SPLINES_VVISC
2449 fc(i,k)=cff1*hzk(i,k )-
dt(ng)*ak(i,k-1)*ohz(i,k )
2450 cf(i,k)=cff1*hzk(i,k+1)-
dt(ng)*ak(i,k+1)*ohz(i,k+1)
2463 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
2464 &
dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
2465 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
2467 dc(i,k)=cff*(u(i,j,k+1,nnew)-u(i,j,k,nnew)- &
2468 & fc(i,k)*dc(i,k-1))
2480 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
2488 dc1(i,k)=dc(i,k)*ak(i,k)
2495# ifdef DIAGNOSTICS_UV
2500 ad_cff=ad_cff+ad_u(i,j,k,nnew)
2505 adfac1=adfac*ohz(i,k)
2506 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac1
2507 ad_dc(i,k )=ad_dc(i,k )+adfac1
2508 ad_ohz(i,k)=ad_ohz(i,k)+(dc1(i,k)-dc1(i,k-1))*adfac
2512 ad_ak(i,k)=ad_ak(i,k)+dc(i,k)*ad_dc(i,k)
2513 ad_dc(i,k)=ak(i,k)*ad_dc(i,k)
2523 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
2529 ad_dc(i,n(ng))=0.0_r8
2537 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
2538 &
dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
2539 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
2547 adfac=cff*ad_dc(i,k)
2548 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
2549 ad_cf(i,k)=ad_cf(i,k)-dc(i,k+1)*adfac
2550 ad_bc(i,k)=ad_bc(i,k)-dc(i,k )*adfac
2551 ad_fc(i,k)=ad_fc(i,k)-dc(i,k-1)*adfac
2552 ad_u(i,j,k ,nnew)=ad_u(i,j,k ,nnew)-adfac
2553 ad_u(i,j,k+1,nnew)=ad_u(i,j,k+1,nnew)+adfac
2559 adfac=
dt(ng)*ad_bc(i,k)
2560 adfac1=adfac*ak(i,k)
2561 adfac2=cff1*ad_bc(i,k)
2562 ad_ohz(i,k )=ad_ohz(i,k )+adfac1
2563 ad_ohz(i,k+1)=ad_ohz(i,k+1)+adfac1
2564 ad_ak(i,k)=ad_ak(i,k)+(ohz(i,k)+ohz(i,k+1))*adfac
2565 ad_hzk(i,k )=ad_hzk(i,k )+adfac2
2566 ad_hzk(i,k+1)=ad_hzk(i,k+1)+adfac2
2590 adfac=
dt(ng)*ad_cf(i,k)
2591 ad_ohz(i,k+1)=ad_ohz(i,k+1)-ak(i,k+1)*adfac
2592 ad_ak(i,k+1)=ad_ak(i,k+1)-ohz(i,k+1)*adfac
2593 ad_hzk(i,k+1)=ad_hzk(i,k+1)+cff1*ad_cf(i,k)
2599 adfac=
dt(ng)*ad_fc(i,k)
2600 ad_ohz(i,k)=ad_ohz(i,k)-ak(i,k-1)*adfac
2601 ad_ak(i,k-1)=ad_ak(i,k-1)-ohz(i,k)*adfac
2602 ad_hzk(i,k)=ad_hzk(i,k)+cff1*ad_fc(i,k)
2621 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
2622 & z_r(i,j,k )-z_r(i-1,j,k ))
2623 fc(i,k)=cff*cff1*ak(i,k)
2632 bc(i,k)=hzk(i,k)-fc(i,k)-fc(i,k-1)
2641 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
2653# ifdef DIAGNOSTICS_UV
2659 ad_dc(i,k)=ad_dc(i,k)+ad_u(i,j,k,nnew)
2660 ad_u(i,j,k,nnew)=0.0_r8
2663 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
2664# ifdef DIAGNOSTICS_UV
2670# ifdef DIAGNOSTICS_UV
2676 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ad_u(i,j,n(ng),nnew)
2677 ad_u(i,j,n(ng),nnew)=0.0_r8
2681 adfac=ad_dc(i,n(ng))/ &
2682 & (bc(i,n(ng))-fc(i,n(ng)-1)*cf(i,n(ng)-1))
2683 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)-fc(i,n(ng)-1)*adfac
2684 ad_dc(i,n(ng) )=adfac
2694 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
2697 adfac=cff*ad_dc(i,k)
2698 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
2706 ad_dc(i,1)=cff*ad_dc(i,1)
2713 ad_bc(i,n(ng) )=-u(i,j,n(ng) ,nnew)*ad_dc(i,n(ng))
2714 ad_fc(i,n(ng)-1)=-u(i,j,n(ng)-1,nnew)*ad_dc(i,n(ng))
2715 ad_u(i,j,n(ng),nnew)=ad_dc(i,n(ng))
2716 ad_dc(i,n(ng))=0.0_r8
2721 ad_fc(i,1)=-u(i,j,2,nnew)*ad_dc(i,1)
2722 ad_bc(i,1)=-u(i,j,1,nnew)*ad_dc(i,1)
2723 ad_u(i,j,1,nnew)=ad_dc(i,1)
2733 ad_fc(i,k-1)=ad_fc(i,k-1)-u(i,j,k-1,nnew)*ad_dc(i,k)
2734 ad_fc(i,k )=ad_fc(i,k )-u(i,j,k+1,nnew)*ad_dc(i,k)
2735 ad_bc(i,k )=ad_bc(i,k )-u(i,j,k ,nnew)*ad_dc(i,k)
2736 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)+ad_dc(i,k)
2744 ad_hzk(i,k)=ad_hzk(i,k)+ad_bc(i,k)
2745 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_bc(i,k)
2746 ad_fc(i,k )=ad_fc(i,k )-ad_bc(i,k)
2766 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
2767 & z_r(i,j,k )-z_r(i-1,j,k ))
2770 adfac=cff*ad_fc(i,k)
2771 ad_ak(i,k)=ad_ak(i,k)+cff1*adfac
2772 ad_cff1=ad_cff1+ak(i,k)*adfac
2777 adfac=-cff1*cff1*ad_cff1
2778 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac
2779 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-adfac
2780 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+adfac
2781 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
2792 cff=0.25_r8*
dt(ng)*3.0_r8/2.0_r8
2794 cff=0.25_r8*
dt(ng)*23.0_r8/12.0_r8
2797 dc(i,0)=cff*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
2805# ifdef DIAGNOSTICS_UV
2813# if defined UV_VIS2 || defined UV_VIS4
2824# ifdef SPLINES_VVISC
2828 ad_ohz(i,k)=ad_ohz(i,k)+ &
2829 & (u(i,j,k,nnew)*hzk(i,k))*ad_u(i,j,k,nnew)
2830 ad_u(i,j,k,nnew)=ad_u(i,j,k,nnew)*ohz(i,k)
2835 ad_ru(i,j,k,nrhs)=ad_ru(i,j,k,nrhs)+ &
2836 & dc(i,0)*ad_u(i,j,k,nnew)
2841# if defined SPLINES_VVISC || defined DIAGNOSTICS_UV
2842 ohz(i,k)=1.0_r8/hzk(i,k)
2845 ad_hzk(i,k)=ad_hzk(i,k)-ohz(i,k)*ohz(i,k)*ad_ohz(i,k)
2851 adfac=0.5_r8*ad_hzk(i,k)
2852 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
2853 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
2858 adfac=0.5_r8*ad_ak(i,k)
2859 ad_akv(i-1,j,k)=ad_akv(i-1,j,k)+adfac
2860 ad_akv(i ,j,k)=ad_akv(i ,j,k)+adfac
2866 adfac=0.5_r8*ad_ak(i,0)
2867 ad_akv(i-1,j,0)=ad_akv(i-1,j,0)+adfac
2868 ad_akv(i ,j,0)=ad_akv(i ,j,0)+adfac
2873# ifdef AD_OUTPUT_STATE
2884 IF (j.ge.jstrm)
THEN
2887 ad_v_sol(i,j,k)=ad_v(i,j,k,nnew)
2893 ad_u_sol(i,j,k)=ad_u(i,j,k,nnew)