141
142
143
144
145 integer, intent(in) :: ng, tile, model
146 integer, intent(in) :: LBi, UBi, LBj, UBj
147 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
148 integer, intent(in) :: kstp, krhs, knew
149# ifdef SOLVE3D
150 integer, intent(in) :: nstp, nnew
151# endif
152
153# ifdef ASSUMED_SHAPE
154# ifdef MASKING
155 real(r8), intent(in) :: rmask(LBi:,LBj:)
156 real(r8), intent(in) :: umask(LBi:,LBj:)
157 real(r8), intent(in) :: vmask(LBi:,LBj:)
158# endif
159# ifdef SOLVE3D
160 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
161 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
162 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
163# endif
164 real(r8), intent(in) :: ubar(LBi:,LBj:,:)
165 real(r8), intent(in) :: vbar(LBi:,LBj:,:)
166 real(r8), intent(in) :: zeta(LBi:,LBj:,:)
167# ifdef SOLVE3D
168 real(r8), intent(inout) :: ad_Hz(LBi:,LBj:,:)
169 real(r8), intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
170 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
171 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
172# endif
173 real(r8), intent(inout) :: ad_ubar_sol(LBi:,LBj:)
174 real(r8), intent(inout) :: ad_vbar_sol(LBi:,LBj:)
175
176 real(r8), intent(inout) :: ad_ubar(LBi:,LBj:,:)
177 real(r8), intent(inout) :: ad_vbar(LBi:,LBj:,:)
178 real(r8), intent(inout) :: ad_zeta(LBi:,LBj:,:)
179
180# else
181
182# ifdef MASKING
183 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
184 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
185 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
186# endif
187# ifdef SOLVE3D
188 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
189 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
190 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
191# endif
192 real(r8), intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
193 real(r8), intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
194 real(r8), intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
195# ifdef SOLVE3D
196# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
197 real(r8), intent(inout) :: ad_bed(LBi:UBi,LBj:UBj,Nbed,MBEDP)
198 real(r8), intent(inout) :: ad_bed_thick0(LBi:UBi,LBj:UBj)
199 real(r8), intent(inout) :: ad_bed_thick(LBi:UBi,LBj:UBj,3)
200# endif
201 real(r8), intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
202 real(r8), intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
203 real(r8), intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
204 real(r8), intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
205
206 real(r8), intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
207 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
208 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
209# endif
210 real(r8), intent(inout) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
211 real(r8), intent(inout) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
212
213 real(r8), intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
214 real(r8), intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
215 real(r8), intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
216# endif
217
218
219
220 integer :: i, ic, itrc, j, k, kbed
221
222 real(r8) :: cff1
223 real(r8) :: adfac, ad_cff1, ad_cff2
224# ifdef SOLVE3D
225 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CF
226 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC
227
228 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: ad_CF
229 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: ad_DC
230# endif
231
232# include "set_bounds.h"
233
234
235
236
237
238 ad_cff1=0.0_r8
239 ad_cff2=0.0_r8
240# ifdef SOLVE3D
241 DO k=0,n(ng)
242 DO i=imins,imaxs
243 ad_cf(i,k)=0.0_r8
244 ad_dc(i,k)=0.0_r8
245 END DO
246 END DO
247# endif
248
249# ifdef SOLVE3D
250
251
252
253
254
255
256
257
258# ifdef DISTRIBUTE
259
260
261
262
263
264
265
266 CALL ad_mp_exchange4d (ng, tile, model, 1, &
267 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
268 & nghostpoints, &
269 & ewperiodic(ng), nsperiodic(ng), &
270 & ad_t(:,:,:,nstp,:))
271
272# endif
273
274 ic=0
275 DO itrc=1,nt(ng)
276 IF (ltracerclm(itrc,ng).and.lnudgetclm(itrc,ng)) THEN
277 ic=ic+1
278 END IF
279 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
280
281
282
283
284
285
286
287
288
289
290
291 CALL ad_exchange_r3d_tile (ng, tile, &
292 & lbi, ubi, lbj, ubj, 1, n(ng), &
293 & ad_t(:,:,:,nstp,itrc))
294 END IF
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313 CALL ad_t3dbc_tile (ng, tile, itrc, ic, &
314 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
315 & imins, imaxs, jmins, jmaxs, &
316 & nstp, nstp, &
317 & ad_t)
318
319
320
321 DO k=1,n(ng)
322 DO j=jstrb,jendb
323 DO i=istrb,iendb
324
325
326
327 ad_cff1=ad_cff1+ad_t(i,j,k,nstp,itrc)
328
329 ad_t(i,j,k,nstp,itrc)=0.0_r8
330
331# ifdef MASKING
332
333
334 ad_cff1=ad_cff1*rmask(i,j)
335# endif
336
337
338 ad_t(i,j,k,nstp,itrc)=ad_t(i,j,k,nstp,itrc)+ad_cff1
339 ad_cff1=0.0_r8
340 END DO
341 END DO
342 END DO
343 END DO
344# endif
345
346# ifdef SOLVE3D
347
348
349
350
351
352
353
354
355# ifdef DISTRIBUTE
356# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
357
358
359
360
361
362
363 CALL ad_mp_exchange2d (ng, tile, model, 2, &
364 & lbi, ubi, lbj, ubj, &
365 & nghostpoints, &
366 & ewperiodic(ng), nsperiodic(ng), &
367 & ad_ubar(:,:,kstp), ad_vbar(:,:,kstp))
368# else
369
370
371
372
373
374
375
376 CALL ad_mp_exchange2d (ng, tile, model, 4, &
377 & lbi, ubi, lbj, ubj, &
378 & nghostpoints, &
379 & ewperiodic(ng), nsperiodic(ng), &
380 & ad_ubar(:,:,kstp), ad_vbar(:,:,kstp), &
381 & ad_ubar(:,:,knew), ad_vbar(:,:,knew))
382# endif
383
384# endif
385
386 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
387# if !(defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3)
388
389
390
391
392 CALL ad_exchange_v2d_tile (ng, tile, &
393 & lbi, ubi, lbj, ubj, &
394 & ad_vbar(:,:,knew))
395
396
397
398
399 CALL ad_exchange_u2d_tile (ng, tile, &
400 & lbi, ubi, lbj, ubj, &
401 & ad_ubar(:,:,knew))
402# endif
403
404
405
406
407 CALL ad_exchange_v2d_tile (ng, tile, &
408 & lbi, ubi, lbj, ubj, &
409 & ad_vbar(:,:,kstp))
410
411
412
413
414 CALL ad_exchange_u2d_tile (ng, tile, &
415 & lbi, ubi, lbj, ubj, &
416 & ad_ubar(:,:,kstp))
417 END IF
418
419 IF (.not.(any(ad_lbc(:,isubar,ng)%radiation).or. &
420 & any(ad_lbc(:,isvbar,ng)%radiation).or. &
421 & any(ad_lbc(:,isubar,ng)%Flather).or. &
422 & any(ad_lbc(:,isvbar,ng)%Flather))) THEN
423# if !(defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3)
424
425
426
427
428
429
430
431 CALL ad_v2dbc_tile (ng, tile, &
432 & lbi, ubi, lbj, ubj, &
433 & imins, imaxs, jmins, jmaxs, &
434 & krhs, kstp, knew, &
435 & ubar, vbar, zeta, &
436 & ad_ubar, ad_vbar, ad_zeta)
437
438
439
440
441
442
443
444 CALL ad_u2dbc_tile (ng, tile, &
445 & lbi, ubi, lbj, ubj, &
446 & imins, imaxs, jmins, jmaxs, &
447 & krhs, kstp, knew, &
448 & ubar, vbar, zeta, &
449 & ad_ubar, ad_vbar, ad_zeta)
450# endif
451
452
453
454
455
456
457
458 CALL ad_v2dbc_tile (ng, tile, &
459 & lbi, ubi, lbj, ubj, &
460 & imins, imaxs, jmins, jmaxs, &
461 & krhs, kstp, kstp, &
462 & ubar, vbar, zeta, &
463 & ad_ubar, ad_vbar, ad_zeta)
464
465
466
467
468
469
470
471 CALL ad_u2dbc_tile (ng, tile, &
472 & lbi, ubi, lbj, ubj, &
473 & imins, imaxs, jmins, jmaxs, &
474 & krhs, kstp, kstp, &
475 & ubar, vbar, zeta, &
476 & ad_ubar, ad_vbar, ad_zeta)
477 END IF
478
479
480
481 DO j=jstrt,jendt
482 DO i=istrp,iendt
483# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
484 ad_ubar_sol(i,j)=ad_ubar(i,j,kstp)
485# else
486 ad_ubar_sol(i,j)=ad_ubar(i,j,kstp)+ad_ubar(i,j,knew)
487# endif
488 END DO
489 IF (j.ge.jstrp) THEN
490 DO i=istrt,iendt
491# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
492 ad_vbar_sol(i,j)=ad_vbar(i,j,kstp)
493# else
494 ad_vbar_sol(i,j)=ad_vbar(i,j,kstp)+ad_vbar(i,j,knew)
495# endif
496 END DO
497 END IF
498 END DO
499
500
501
502
503
504
505 DO j=jstrb,jendb
506 IF (j.ge.jstrm) THEN
507 DO i=istrb,iendb
508 dc(i,0)=0.0_r8
509 cf(i,0)=0.0_r8
510 END DO
511 DO k=1,n(ng)
512 DO i=istrb,iendb
513 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))
514 dc(i,0)=dc(i,0)+dc(i,k)
515 cf(i,0)=cf(i,0)+dc(i,k)*v(i,j,k,nstp)
516 END DO
517 END DO
518 DO i=istrb,iendb
519 cff1=1.0_r8/dc(i,0)
520# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
521
522
523 ad_cff2=ad_cff2+ad_vbar(i,j,kstp)
524 ad_vbar(i,j,kstp)=0.0_r8
525# else
526
527
528
529 ad_cff2=ad_cff2+ad_vbar(i,j,knew)+ &
530 & ad_vbar(i,j,kstp)
531 ad_vbar(i,j,knew)=0.0_r8
532 ad_vbar(i,j,kstp)=0.0_r8
533# endif
534# ifdef MASKING
535
536
537 ad_cff2=ad_cff2*vmask(i,j)
538# endif
539
540
541 ad_cff1=ad_cff1+cf(i,0)*ad_cff2
542 ad_cf(i,0)=ad_cf(i,0)+cff1*ad_cff2
543 ad_cff2=0.0_r8
544
545
546 ad_dc(i,0)=ad_dc(i,0)-cff1*cff1*ad_cff1
547 ad_cff1=0.0_r8
548 END DO
549 DO k=1,n(ng)
550 DO i=istrb,iendb
551
552
553
554 ad_dc(i,k)=ad_dc(i,k)+v(i,j,k,nstp)*ad_cf(i,0)
555 ad_v(i,j,k,nstp)=ad_v(i,j,k,nstp)+dc(i,k)*ad_cf(i,0)
556
557
558 ad_dc(i,k)=ad_dc(i,k)+ad_dc(i,0)
559
560
561 adfac=0.5_r8*ad_dc(i,k)
562 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
563 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
564 ad_dc(i,k)=0.0_r8
565 END DO
566 END DO
567 DO i=istrb,iendb
568
569
570 ad_cf(i,0)=0.0_r8
571
572
573 ad_dc(i,0)=0.0_r8
574 END DO
575 END IF
576
577 DO i=istrm,iendb
578 dc(i,0)=0.0_r8
579 cf(i,0)=0.0_r8
580 END DO
581 DO k=1,n(ng)
582 DO i=istrm,iendb
583 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))
584 dc(i,0)=dc(i,0)+dc(i,k)
585 cf(i,0)=cf(i,0)+dc(i,k)*u(i,j,k,nstp)
586 END DO
587 END DO
588 DO i=istrm,iendb
589 cff1=1.0_r8/dc(i,0)
590# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
591
592
593 ad_cff2=ad_cff2+ad_ubar(i,j,kstp)
594 ad_ubar(i,j,kstp)=0.0_r8
595# else
596
597
598
599 ad_cff2=ad_cff2+ad_ubar(i,j,knew)+ &
600 & ad_ubar(i,j,kstp)
601 ad_ubar(i,j,knew)=0.0_r8
602 ad_ubar(i,j,kstp)=0.0_r8
603# endif
604# ifdef MASKING
605
606
607 ad_cff2=ad_cff2*umask(i,j)
608# endif
609
610
611 ad_cff1=ad_cff1+cf(i,0)*ad_cff2
612 ad_cf(i,0)=ad_cf(i,0)+cff1*ad_cff2
613 ad_cff2=0.0_r8
614
615
616 ad_dc(i,0)=ad_dc(i,0)-cff1*cff1*ad_cff1
617 ad_cff1=0.0_r8
618 END DO
619 DO k=1,n(ng)
620 DO i=istrm,iendb
621
622
623
624 ad_dc(i,k)=ad_dc(i,k)+u(i,j,k,nstp)*ad_cf(i,0)
625 ad_u(i,j,k,nstp)=ad_u(i,j,k,nstp)+dc(i,k)*ad_cf(i,0)
626
627
628 ad_dc(i,k)=ad_dc(i,k)+ad_dc(i,0)
629
630
631 adfac=0.5_r8*ad_dc(i,k)
632 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
633 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
634 ad_dc(i,k)=0.0_r8
635 END DO
636 END DO
637 DO i=istrm,iendb
638
639
640 ad_cf(i,0)=0.0_r8
641
642
643 ad_dc(i,0)=0.0_r8
644 END DO
645 END DO
646
647# else
648
649
650
651
652
653
654
655# ifdef DISTRIBUTE
656
657
658
659
660
661
662
663 CALL ad_mp_exchange2d (ng, tile, model, 4, &
664 & lbi, ubi, lbj, ubj, &
665 & nghostpoints, &
666 & ewperiodic(ng), nsperiodic(ng), &
667 & ad_ubar(:,:,kstp), ad_vbar(:,:,kstp), &
668 & ad_ubar(:,:,krhs), ad_vbar(:,:,krhs))
669
670# endif
671
672 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
673
674
675
676
677 CALL ad_exchange_v2d_tile (ng, tile, &
678 & lbi, ubi, lbj, ubj, &
679 & ad_vbar(:,:,krhs))
680
681
682
683
684 CALL ad_exchange_u2d_tile (ng, tile, &
685 & lbi, ubi, lbj, ubj, &
686 & ad_ubar(:,:,krhs))
687
688
689
690
691
692 CALL ad_exchange_v2d_tile (ng, tile, &
693 & lbi, ubi, lbj, ubj, &
694 & ad_vbar(:,:,kstp))
695
696
697
698
699 CALL ad_exchange_u2d_tile (ng, tile, &
700 & lbi, ubi, lbj, ubj, &
701 & ad_ubar(:,:,kstp))
702 END IF
703
704 IF (.not.(any(ad_lbc(:,isubar,ng)%radiation).or. &
705 & any(ad_lbc(:,isvbar,ng)%radiation).or. &
706 & any(ad_lbc(:,isubar,ng)%Flather).or. &
707 & any(ad_lbc(:,isvbar,ng)%Flather))) THEN
708
709
710
711
712
713
714
715 CALL ad_v2dbc_tile (ng, tile, &
716 & lbi, ubi, lbj, ubj, &
717 & imins, imaxs, jmins, jmaxs, &
718 & krhs, kstp, krhs, &
719 & ubar, vbar, zeta, &
720 & ad_ubar, ad_vbar, ad_zeta)
721
722
723
724
725
726
727
728 CALL ad_u2dbc_tile (ng, tile, &
729 & lbi, ubi, lbj, ubj, &
730 & imins, imaxs, jmins, jmaxs, &
731 & krhs, kstp, krhs, &
732 & ubar, vbar, zeta, &
733 & ad_ubar, ad_vbar, ad_zeta)
734
735
736
737
738
739
740
741
742 CALL ad_v2dbc_tile (ng, tile, &
743 & lbi, ubi, lbj, ubj, &
744 & imins, imaxs, jmins, jmaxs, &
745 & krhs, kstp, kstp, &
746 & ubar, vbar, zeta, &
747 & ad_ubar, ad_vbar, ad_zeta)
748
749
750
751
752
753
754
755 CALL ad_u2dbc_tile (ng, tile, &
756 & lbi, ubi, lbj, ubj, &
757 & imins, imaxs, jmins, jmaxs, &
758 & krhs, kstp, kstp, &
759 & ubar, vbar, zeta, &
760 & ad_ubar, ad_vbar, ad_zeta)
761 END IF
762
763
764
765 DO j=jstrt,jendt
766 DO i=istrp,iendt
767# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
768 ad_ubar_sol(i,j)=ad_ubar(i,j,kstp)
769# else
770 ad_ubar_sol(i,j)=ad_ubar(i,j,kstp)+ad_ubar(i,j,krhs)
771# endif
772 END DO
773 IF (j.ge.jstrp) THEN
774 DO i=istrt,iendt
775# if defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3
776 ad_vbar_sol(i,j)=ad_vbar(i,j,kstp)
777# else
778 ad_vbar_sol(i,j)=ad_vbar(i,j,kstp)+ad_vbar(i,j,krhs)
779# endif
780 END DO
781 END IF
782 END DO
783
784
785
786 DO j=jstrb,jendb
787 IF (j.ge.jstrm) THEN
788 DO i=istrb,iendb
789# if !(defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3)
790
791
792 ad_cff2=ad_cff2+ad_vbar(i,j,krhs)
793 ad_vbar(i,j,krhs)=0.0_r8
794# endif
795
796
797 ad_cff2=ad_cff2+ad_vbar(i,j,kstp)
798 ad_vbar(i,j,kstp)=0.0_r8
799# ifdef MASKING
800
801
802 ad_cff2=ad_cff2*vmask(i,j)
803# endif
804
805
806 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+ad_cff2
807 ad_cff2=0.0_r8
808 END DO
809 END IF
810 DO i=istrm,iendb
811# if !(defined STEP2D_FB_AB3_AM4 || defined STEP2D_FB_LF_AM3)
812
813
814 ad_cff1=ad_cff1+ad_ubar(i,j,krhs)
815 ad_ubar(i,j,krhs)=0.0_r8
816# endif
817
818
819 ad_cff1=ad_cff1+ad_ubar(i,j,kstp)
820 ad_ubar(i,j,kstp)=0.0_r8
821# ifdef MASKING
822
823
824 ad_cff1=ad_cff1*umask(i,j)
825# endif
826
827
828 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+ad_cff1
829 ad_cff1=0.0_r8
830 END DO
831 END DO
832# endif
833
834# ifdef SOLVE3D
835
836
837
838
839
840
841
842# ifdef DISTRIBUTE
843
844
845
846
847
848
849
850 CALL ad_mp_exchange3d (ng, tile, model, 2, &
851 & lbi, ubi, lbj, ubj, 1, n(ng), &
852 & nghostpoints, &
853 & ewperiodic(ng), nsperiodic(ng), &
854 & ad_u(:,:,:,nstp), ad_v(:,:,:,nstp))
855# endif
856
857 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
858
859
860
861
862
863
864
865
866
867
868
869
870 CALL ad_exchange_v3d_tile (ng, tile, &
871 & lbi, ubi, lbj, ubj, 1, n(ng), &
872 & ad_v(:,:,:,nstp))
873
874
875
876
877 CALL ad_exchange_u3d_tile (ng, tile, &
878 & lbi, ubi, lbj, ubj, 1, n(ng), &
879 & ad_u(:,:,:,nstp))
880 END IF
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900 CALL ad_v3dbc_tile (ng, tile, &
901 & lbi, ubi, lbj, ubj, n(ng), &
902 & imins, imaxs, jmins, jmaxs, &
903 & nstp, nstp, &
904 & ad_v)
905
906
907
908
909
910
911 CALL ad_u3dbc_tile (ng, tile, &
912 & lbi, ubi, lbj, ubj, n(ng), &
913 & imins, imaxs, jmins, jmaxs, &
914 & nstp, nstp, &
915 & ad_u)
916
917
918
919 DO j=jstrb,jendb
920 IF (j.ge.jstrm) THEN
921 DO k=1,n(ng)
922 DO i=istrb,iendb
923
924
925
926 ad_cff2=ad_cff2+ad_v(i,j,k,nstp)
927
928 ad_v(i,j,k,nstp)=0.0_r8
929
930# ifdef MASKING
931
932
933 ad_cff2=ad_cff2*vmask(i,j)
934# endif
935
936
937 ad_v(i,j,k,nstp)=ad_v(i,j,k,nstp)+ad_cff2
938 ad_cff2=0.0_r8
939 END DO
940 END DO
941 END IF
942 DO k=1,n(ng)
943 DO i=istrm,iendb
944
945
946
947 ad_cff1=ad_cff1+ad_u(i,j,k,nstp)
948
949 ad_u(i,j,k,nstp)=0.0_r8
950
951# ifdef MASKING
952
953
954 ad_cff1=ad_cff1*umask(i,j)
955# endif
956
957
958 ad_u(i,j,k,nstp)=ad_u(i,j,k,nstp)+ad_cff1
959 ad_cff1=0.0_r8
960 END DO
961 END DO
962 END DO
963# endif
964
965 RETURN