65
66
74
75
76
77 integer, intent(in) :: ng, tile
78 integer, intent(in) :: LBi, UBi, LBj, UBj
79 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
80 integer, intent(in) :: krhs, kstp, kout
81
82# ifdef ASSUMED_SHAPE
83 real(r8), intent(in) :: ubar(LBi:,LBj:,:)
84 real(r8), intent(in) :: vbar(LBi:,LBj:,:)
85 real(r8), intent(in) :: zeta(LBi:,LBj:,:)
86
87 real(r8), intent(inout) :: ad_ubar(LBi:,LBj:,:)
88 real(r8), intent(inout) :: ad_vbar(LBi:,LBj:,:)
89 real(r8), intent(inout) :: ad_zeta(LBi:,LBj:,:)
90# else
91 real(r8), intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
92 real(r8), intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
93 real(r8), intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
94
95 real(r8), intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
96 real(r8), intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
97 real(r8), intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
98# endif
99
100
101
102 integer :: Jmin, Jmax
103 integer :: i, j, know
104
105 real(r8) :: Ce, Cx, Ze
106 real(r8) :: bry_pgr, bry_cor, bry_str, bry_val
107 real(r8) :: cff, cff1, cff2, cff3, dt2d
108 real(r8) :: obc_in, obc_out, tau
109# if defined ATM_PRESS && defined PRESS_COMPENSATE
110 real(r8) :: OneAtm, fac
111# endif
112
113 real(r8) :: ad_Ce, ad_Cx
114 real(r8) :: ad_bry_pgr, ad_bry_cor, ad_bry_str, ad_bry_val, ad_Ze
115 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3
116 real(r8) :: adfac
117
118 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
119
120# include "set_bounds.h"
121
122
123
124
125
126 ad_ce=0.0_r8
127 ad_cx=0.0_r8
128 ad_ze=0.0_r8
129 ad_cff=0.0_r8
130 ad_cff1=0.0_r8
131 ad_cff2=0.0_r8
132 ad_cff3=0.0_r8
133 ad_bry_pgr=0.0_r8
134 ad_bry_cor=0.0_r8
135 ad_bry_str=0.0_r8
136 ad_bry_val=0.0_r8
137
138 ad_grad(lbi:ubi,lbj:ubj)=0.0_r8
139
140
141
142
143
144 IF (first_2d_step) THEN
145 know=krhs
148 know=krhs
150 ELSE
151 know=kstp
153 END IF
154# if defined ATM_PRESS && defined PRESS_COMPENSATE
155 oneatm=1013.25_r8
156 fac=100.0_r8/(
g*
rho0)
157# endif
158
159# if defined WET_DRY_NOT_YET
160
161
162
163
164
165
166
168 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
173
174
175
176
177
178
179 END IF
180 END IF
181 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
186
187
188
189
190
191
192 END IF
193 END IF
194 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
199
200
201
202
203
204
205 END IF
206 END IF
207 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
212
213
214
215
216
217
218 END IF
219 END IF
220 END IF
221
223 IF (
domain(ng)%Northern_Edge(tile))
THEN
224 DO i=istr,iend
227
228
229
230
231
232
233 END IF
234 END DO
235 END IF
236 IF (
domain(ng)%Southern_Edge(tile))
THEN
237 DO i=istr,iend
240
241
242
243
244
245
246 END IF
247 END DO
248 END IF
249 END IF
250
252 IF (
domain(ng)%Eastern_Edge(tile))
THEN
253 DO j=jstrv,jend
256
257
258
259
260
261
262 END IF
263 END DO
264 END IF
265 IF (
domain(ng)%Western_Edge(tile))
THEN
266 DO j=jstrv,jend
269
270
271
272
273
274
275 END IF
276 END DO
277 END IF
278 ENDIF
279# endif
280
281
282
283
284
286 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
289
290
291
292
293 adfac=0.5_r8*ad_vbar(iend+1,jend+1,kout)
294 ad_vbar(iend+1,jend ,kout)=ad_vbar(iend+1,jend ,kout)+ &
295 & adfac
296 ad_vbar(iend ,jend+1,kout)=ad_vbar(iend ,jend+1,kout)+ &
297 & adfac
298 ad_vbar(iend+1,jend+1,kout)=0.0_r8
299 END IF
300 END IF
301 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
304
305
306
307
308 adfac=0.5_r8*ad_vbar(istr-1,jend+1,kout)
309 ad_vbar(istr-1,jend ,kout)=ad_vbar(istr-1,jend ,kout)+ &
310 & adfac
311 ad_vbar(istr ,jend+1,kout)=ad_vbar(istr ,jend+1,kout)+ &
312 & adfac
313 ad_vbar(istr-1,jend+1,kout)=0.0_r8
314 END IF
315 END IF
316 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
319
320
321
322
323 adfac=0.5_r8*ad_vbar(iend+1,jstr,kout)
324 ad_vbar(iend ,jstr ,kout)=ad_vbar(iend ,jstr ,kout)+ &
325 & adfac
326 ad_vbar(iend+1,jstr+1,kout)=ad_vbar(iend+1,jstr+1,kout)+ &
327 & adfac
328 ad_vbar(iend+1,jstr ,kout)=0.0_r8
329 END IF
330 END IF
331 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
334
335
336
337
338 adfac=0.5_r8*ad_vbar(istr-1,jstr,kout)
339 ad_vbar(istr ,jstr ,kout)=ad_vbar(istr ,jstr ,kout)+ &
340 & adfac
341 ad_vbar(istr-1,jstr+1,kout)=ad_vbar(istr-1,jstr+1,kout)+ &
342 & adfac
343 ad_vbar(istr-1,jstr ,kout)=0.0_r8
344 END IF
345 END IF
346 END IF
347
348
349
350
351
352 IF (
domain(ng)%Eastern_Edge(tile))
THEN
353
354
355
357 IF (
iic(ng).ne.0)
THEN
358 DO j=jstrv,jend
360# if defined CELERITY_READ && defined FORWARD_READ
363 obc_out=0.5_r8* &
364 & (
clima(ng)%M2nudgcof(iend+1,j-1)+ &
365 &
clima(ng)%M2nudgcof(iend+1,j ))
366 obc_in =
obcfac(ng)*obc_out
367 ELSE
370 END IF
371 IF (
boundary(ng)%vbar_east_Cx(j).lt.0.0_r8)
THEN
372 tau=obc_in
373 ELSE
374 tau=obc_out
375 END IF
376 tau=tau*dt2d
377 END IF
379# ifdef RADIATION_2D
381# else
382 ce=0.0_r8
383# endif
385# endif
386# ifdef MASKING
387
388
389
390 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
391 &
grid(ng)%vmask(iend+1,j)
392# endif
394
395
396
397 ad_vbar(iend+1 ,j,know)=ad_vbar(iend+1 ,j,know)- &
398 & tau*ad_vbar(iend+1,j,kout)
399 END IF
400
401
402
403
404
405
406
407
408 adfac=ad_vbar(iend+1,j,kout)/(cff+cx)
409 ad_grad(iend+1,j-1)=ad_grad(iend+1,j-1)- &
410 & max(ce,0.0_r8)*adfac
411 ad_grad(iend+1,j )=ad_grad(iend+1,j )- &
412 & min(ce,0.0_r8)*adfac
413 ad_vbar(iend ,j,kout)=ad_vbar(iend ,j,kout)+cx* adfac
414 ad_vbar(iend+1,j,know)=ad_vbar(iend+1,j,know)+cff*adfac
415 ad_vbar(iend+1,j,kout)=0.0_r8
416 END IF
417 END DO
418 END IF
419
420
421
425 DO j=jstrv,jend
427 cff=dt2d*0.5_r8*(
grid(ng)%pm(iend,j-1)+ &
428 &
grid(ng)%pm(iend,j ))
429 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(iend,j-1)+ &
430 & zeta(iend,j-1,know)+ &
431 &
grid(ng)%h(iend,j )+ &
432 & zeta(iend,j ,know)))
433 cx=cff*cff1
434 cff2=1.0_r8/(1.0_r8+cx)
435# ifdef MASKING
436
437
438
439 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
440 &
grid(ng)%vmask(iend+1,j)
441# endif
442
443
444
445
446
447
448 adfac=cff2*ad_vbar(iend+1,j,kout)
449 ad_vbar(iend ,j,kout)=ad_vbar(iend ,j,kout)+cx*adfac
450 ad_vbar(iend+1,j,know)=ad_vbar(iend+1,j,know)+adfac
451 ad_cx=ad_cx+vbar(iend,j,kout)*adfac
452 ad_cff2=ad_cff2+ &
453 & (vbar(iend+1,j,know)+ &
454 & cx*vbar(iend,j,kout))*ad_vbar(iend+1,j,kout)
455 ad_vbar(iend+1,j,kout)=0.0_r8
456
457
458 ad_cx=ad_cx-cff2*cff2*ad_cff2
459 ad_cff2=0.0_r8
460
461
462 ad_cff1=ad_cff1+cff*ad_cx
463 ad_cx=0.0_r8
464
465
466
467
468
469 adfac=0.25_r8*
g*ad_cff1/cff1
470 grid(ng)%ad_h(iend,j-1)=
grid(ng)%ad_h(iend,j-1)+adfac
471 grid(ng)%ad_h(iend,j )=
grid(ng)%ad_h(iend,j )+adfac
472 ad_zeta(iend,j-1,know)=ad_zeta(iend,j-1,know)+adfac
473 ad_zeta(iend,j ,know)=ad_zeta(iend,j ,know)+adfac
474 ad_cff1=0.0_r8
475 END IF
476 END DO
477
478
479
481 DO j=jstrv,jend
483# ifdef MASKING
484
485
486
487 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
488 &
grid(ng)%vmask(iend+1,j)
489# endif
490# ifdef ADJUST_BOUNDARY
492
493
496 & ad_vbar(iend+1,j,kout)
497 ad_vbar(iend+1,j,kout)=0.0_r8
498 ELSE
499
500
501 ad_vbar(iend+1,j,kout)=0.0_r8
502 END IF
503# else
504
505
506 ad_vbar(iend+1,j,kout)=0.0_r8
507# endif
508 END IF
509 END DO
510
511
512
514 DO j=jstrv,jend
516# ifdef MASKING
517
518
519
520 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
521 &
grid(ng)%vmask(iend+1,j)
522# endif
523
524
525 ad_vbar(iend ,j,kout)=ad_vbar(iend,j,kout)+ &
526 & ad_vbar(iend+1,j,kout)
527 ad_vbar(iend+1,j,kout)=0.0_r8
528 END IF
529 END DO
530
531
532
533
536 jmin=jstrv
537 jmax=jend
538 ELSE
539 jmin=jstr
540 jmax=jendr
541 END IF
542 DO j=jmin,jmax
544# ifdef MASKING
545
546
547
548 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
549 &
grid(ng)%vmask(iend+1,j)
550# endif
551
552
553 ad_vbar(iend ,j,kout)=ad_vbar(iend,j,kout)+ &
554 &
gamma2(ng)*ad_vbar(iend+1,j,kout)
555 ad_vbar(iend+1,j,kout)=0.0_r8
556 END IF
557 END DO
558 END IF
559 END IF
560
561
562
563
564
565 IF (
domain(ng)%Western_Edge(tile))
THEN
566
567
568
570 IF (
iic(ng).ne.0)
THEN
571 DO j=jstrv,jend
573# if defined CELERITY_READ && defined FORWARD_READ
576 obc_out=0.5_r8* &
577 & (
clima(ng)%M2nudgcof(istr-1,j-1)+ &
578 &
clima(ng)%M2nudgcof(istr-1,j ))
579 obc_in =
obcfac(ng)*obc_out
580 ELSE
583 END IF
584 IF (
boundary(ng)%vbar_west_Cx(j).lt.0.0_r8)
THEN
585 tau=obc_in
586 ELSE
587 tau=obc_out
588 END IF
589 tau=tau*dt2d
590 END IF
592# ifdef RADIATION_2D
594# else
595 ce=0.0_r8
596# endif
598# endif
599# ifdef MASKING
600
601
602
603 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
604 &
grid(ng)%vmask(istr-1,j)
605# endif
607
608
609
610 ad_vbar(istr,j,know)=ad_vbar(istr,j,know)- &
611 & tau*ad_vbar(istr-1,j,kout)
612 END IF
613
614
615
616
617
618
619
620
621 adfac=ad_vbar(istr-1,j,kout)/(cff+cx)
622 ad_grad(istr-1,j-1)=ad_grad(istr-1,j-1)- &
623 & max(ce,0.0_r8)*adfac
624 ad_grad(istr-1,j )=ad_grad(istr-1,j )- &
625 & min(ce,0.0_r8)*adfac
626 ad_vbar(istr-1,j,know)=ad_vbar(istr-1,j,know)+cff*adfac
627 ad_vbar(istr ,j,kout)=ad_vbar(istr ,j,kout)+cx *adfac
628 ad_vbar(istr-1,j,kout)=0.0_r8
629 END IF
630 END DO
631 END IF
632
633
634
638 DO j=jstrv,jend
640 cff=dt2d*0.5_r8*(
grid(ng)%pm(istr,j-1)+ &
641 &
grid(ng)%pm(istr,j ))
642 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(istr,j-1)+ &
643 & zeta(istr,j-1,know)+ &
644 &
grid(ng)%h(istr,j )+ &
645 & zeta(istr,j ,know)))
646 cx=cff*cff1
647 cff2=1.0_r8/(1.0_r8+cx)
648# ifdef MASKING
649
650
651
652 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
653 &
grid(ng)%vmask(istr-1,j)
654# endif
655
656
657
658
659
660
661 adfac=cff2*ad_vbar(istr-1,j,kout)
662 ad_vbar(istr-1,j,know)=ad_vbar(istr-1,j,know)+adfac
663 ad_vbar(istr ,j,kout)=ad_vbar(istr ,j,kout)+cx*adfac
664 ad_cx=ad_cx+vbar(istr,j,kout)*adfac
665 ad_cff2=ad_cff2+ &
666 & (vbar(istr-1,j,know)+ &
667 & cx*vbar(istr,j,kout))*ad_vbar(istr-1,j,kout)
668 ad_vbar(istr-1,j,kout)=0.0_r8
669
670
671 ad_cx=ad_cx-cff2*cff2*ad_cff2
672 ad_cff2=0.0_r8
673
674
675 ad_cff1=ad_cff1+cff*ad_cx
676 ad_cx=0.0_r8
677
678
679
680
681
682 adfac=0.25_r8*
g*ad_cff1/cff1
683 grid(ng)%ad_h(istr,j-1)=
grid(ng)%ad_h(istr,j-1)+adfac
684 grid(ng)%ad_h(istr,j )=
grid(ng)%ad_h(istr,j )+adfac
685 ad_zeta(istr,j-1,know)=ad_zeta(istr,j-1,know)+adfac
686 ad_zeta(istr,j ,know)=ad_zeta(istr,j ,know)+adfac
687 ad_cff1=0.0_r8
688 END IF
689 END DO
690
691
692
694 DO j=jstrv,jend
696# ifdef MASKING
697
698
699
700 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
701 &
grid(ng)%vmask(istr-1,j)
702# endif
703# ifdef ADJUST_BOUNDARY
705
706
709 & ad_vbar(istr-1,j,kout)
710 ad_vbar(istr-1,j,kout)=0.0_r8
711 ELSE
712
713
714 ad_vbar(istr-1,j,kout)=0.0_r8
715 END IF
716# else
717
718
719 ad_vbar(istr-1,j,kout)=0.0_r8
720# endif
721 END IF
722 END DO
723
724
725
727 DO j=jstrv,jend
729# ifdef MASKING
730
731
732
733 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
734 &
grid(ng)%vmask(istr-1,j)
735# endif
736
737
738 ad_vbar(istr ,j,kout)=ad_vbar(istr,j,kout)+ &
739 & ad_vbar(istr-1,j,kout)
740 ad_vbar(istr-1,j,kout)=0.0_r8
741 END IF
742 END DO
743
744
745
746
749 jmin=jstrv
750 jmax=jend
751 ELSE
752 jmin=jstr
753 jmax=jendr
754 END IF
755 DO j=jmin,jmax
757# ifdef MASKING
758
759
760
761 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
762 &
grid(ng)%vmask(istr-1,j)
763# endif
764
765
766 ad_vbar(istr ,j,kout)=ad_vbar(istr,j,kout)+ &
767 &
gamma2(ng)*ad_vbar(istr-1,j,kout)
768 ad_vbar(istr-1,j,kout)=0.0_r8
769 END IF
770 END DO
771 END IF
772 END IF
773
774
775
776
777
778 IF (
domain(ng)%Northern_Edge(tile))
THEN
779
780
781
783 IF (
iic(ng).ne.0)
THEN
784 DO i=istr,iend
786# if defined CELERITY_READ && defined FORWARD_READ
789 obc_out=0.5_r8* &
790 & (
clima(ng)%M2nudgcof(i,jend )+ &
791 &
clima(ng)%M2nudgcof(i,jend+1))
792 obc_in =
obcfac(ng)*obc_out
793 ELSE
796 END IF
797 IF (
boundary(ng)%vbar_north_Ce(i).lt.0.0_r8)
THEN
798 tau=obc_in
799 ELSE
800 tau=obc_out
801 END IF
802 tau=tau*dt2d
803 END IF
804# ifdef RADIATION_2D
806# else
807 cx=0.0_r8
808# endif
811# endif
812# ifdef MASKING
813
814
815
816 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
817 &
grid(ng)%vmask(i,jend+1)
818# endif
820
821
822
823 ad_vbar(i,jend+1 ,know)=ad_vbar(i,jend+1 ,know)- &
824 & tau*ad_vbar(i,jend+1,kout)
825 END IF
826
827
828
829
830
831
832
833
834 adfac=ad_vbar(i,jend+1,kout)/(cff+ce)
835 ad_grad(i ,jend+1)=ad_grad(i ,jend+1)- &
836 & max(cx,0.0_r8)*adfac
837 ad_grad(i+1,jend+1)=ad_grad(i+1,jend+1)- &
838 & min(cx,0.0_r8)*adfac
839 ad_vbar(i,jend ,kout)=ad_vbar(i,jend ,kout)+ce*adfac
840 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+cff*adfac
841 ad_vbar(i,jend+1,kout)=0.0_r8
842 END IF
843 END DO
844 END IF
845
846
847
849 DO i=istr,iend
851 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
852 & zeta(i,jend ,know)+ &
853 &
grid(ng)%h(i,jend+1)+ &
854 & zeta(i,jend+1,know)))
856# ifdef MASKING
857
858
859
860 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
861 &
grid(ng)%vmask(i,jend+1)
862# endif
863# ifdef ADJUST_BOUNDARY
865
866
867
869 & ad_zeta_north(i)- &
870 & ce*ad_vbar(i,jend+1,kout)
871 END IF
872# endif
873# if defined ATM_PRESS && defined PRESS_COMPENSATE
874
875
876
877
878
879
880
881
882
883
884
885
886
887 adfac=ce*0.5_r8*ad_vbar(i,jend+1,kout)
888 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
889 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
890 ad_ce=ad_ce+ &
891 & (0.5_r8*(zeta(i,jend ,know)+ &
892 & zeta(i,jend+1,know)+ &
893 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
894 &
forces(ng)%Pair(i,jstr )- &
895 & 2.0_r8*oneatm))- &
896 &
boundary(ng)%zeta_north(i))*ad_vbar(i,jend+1,kout)
897 ad_bry_val=ad_bry_val+ad_vbar(i,jend+1,kout)
898 ad_vbar(i,jend+1,kout)=0.0_r8
899# else
900
901
902
903
904
905
906
907
908
909 adfac=ce*0.5_r8*ad_vbar(i,jend+1,kout)
910 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
911 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
912 ad_ce=ad_ce+ &
913 & (0.5_r8*(zeta(i,jend ,know)+ &
914 & zeta(i,jend+1,know))- &
915 &
boundary(ng)%zeta_north(i))*ad_vbar(i,jend+1,kout)
916 ad_bry_val=ad_bry_val+ad_vbar(i,jend+1,kout)
917 ad_vbar(i,jend+1,kout)=0.0_r8
918# endif
919
920
921 ad_cff=ad_cff+0.5_r8*
g*ad_ce/ce
922 ad_ce=0.0_r8
923
924
925
926
927
928 adfac=-cff*cff*0.5_r8*ad_cff
929 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
930 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
931 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
932 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
933 ad_cff=0.0_r8
934
935# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
937 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
938 & zeta(i,jend,know))* &
939 & 0.5_r8*
grid(ng)%pn(i,jend)
940 ELSE
941 bry_pgr=-
g*(zeta(i,jend+1,know)- &
942 & zeta(i,jend ,know))* &
943 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
944 &
grid(ng)%pn(i,jend+1))
945 END IF
946# ifdef UV_COR
947 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
948 & ubar(i+1,jend ,know)+ &
949 & ubar(i ,jend+1,know)+ &
950 & ubar(i+1,jend+1,know))* &
951 & (
grid(ng)%f(i,jend )+ &
952 &
grid(ng)%f(i,jend+1))
953# else
954 bry_cor=0.0_r8
955# endif
956 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
957 & zeta(i,jend ,know)+ &
958 &
grid(ng)%h(i,jend+1)+ &
959 & zeta(i,jend+1,know)))
960 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
961 &
forces(ng)%bvstr(i,jend+1))
962 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
963 & zeta(i,jend+1,know)+ &
964 &
grid(ng)%h(i,jend )+ &
965 & zeta(i,jend ,know)))
966 cff2=
grid(ng)%on_v(i,jend+1)*ce
967
968
969
970
971
972
973
974
975 adfac=cff2*ad_bry_val
976 ad_bry_pgr=ad_bry_pgr+adfac
977 ad_bry_cor=ad_bry_cor+adfac
978 ad_bry_str=ad_bry_str+adfac
979 ad_cff2=ad_cff2+(bry_pgr+ &
980 & bry_cor+ &
981 & bry_str)*ad_bry_val
982 ad_vbar(i,jend,know)=ad_vbar(i,jend,know)+ad_bry_val
983 ad_bry_val=0.0_r8
984
985
986 ad_ce=ad_ce+
grid(ng)%on_v(i,jend+1)*ad_cff2
987 ad_cff2=0.0_r8
988
989
990
991
992
993 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
994 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
995 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
996 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
997 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
998 ad_ce=0.0_r8
999
1000
1001
1002
1003
1004 adfac=cff1*ad_bry_str
1005 forces(ng)%ad_svstr(i,jend+1)= &
1006 &
forces(ng)%ad_svstr(i,jend+1)+ &
1007 & adfac
1008 forces(ng)%ad_bvstr(i,jend+1)= &
1009 &
forces(ng)%ad_bvstr(i,jend+1)- &
1010 & adfac
1011 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jend+1)- &
1012 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1013
1014 ad_bry_str=0.0_r8
1015
1016
1017
1018
1019
1020 adfac=-cff1*cff1*0.5_r8*ad_cff1
1021 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1022 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1023 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1024 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1025 ad_cff1=0.0_r8
1026# ifdef UV_COR
1027
1028
1029
1030
1031
1032
1033
1034 adfac=0.125_r8*(
grid(ng)%f(i,jend )+ &
1035 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1036 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)-adfac
1037 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)-adfac
1038 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)-adfac
1039 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)-adfac
1040 ad_bry_cor=0.0_r8
1041# else
1042
1043
1044# endif
1046# ifdef ADJUST_BOUNDARY
1048
1049
1050
1051
1053 & ad_zeta_north(i)- &
1055 &
grid(ng)%pn(i,jend)* &
1056 & ad_bry_pgr
1057 END IF
1058# endif
1059
1060
1061
1062 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1063 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1064 & ad_bry_pgr
1065 ad_bry_pgr=0.0_r8
1066 ELSE
1067
1068
1069
1070
1071
1072 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1073 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1074 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1075 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1076 ad_bry_pgr=0.0_r8
1077 END IF
1078# else
1079# ifdef ADJUST_BOUNDARY
1081
1082
1084 & ad_vbar_north(i)+ &
1085 & ad_bry_val
1086 ad_bry_val=0.0_r8
1087 ELSE
1088
1089
1090 ad_bry_val=0.0_r8
1091 END IF
1092# else
1093
1094
1095 ad_bry_val=0.0_r8
1096# endif
1097# endif
1098 END IF
1099 END DO
1100
1101
1102
1104 DO i=istr,iend
1106 cff=0.5_r8*(
grid(ng)%h(i,jend )+ &
1107 &
grid(ng)%h(i,jend+1))
1109 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1110 &
grid(ng)%pn(i,jend+1))
1111 ze=(0.5_r8+ce)*zeta(i,jend ,know)+ &
1112 & (0.5_r8-ce)*zeta(i,jend+1,know)
1114 cff2=(1.0_r8-
co/ce)**2
1115 cff3=zeta(i,jend,kout)+ &
1116 & ce*zeta(i,jend+1,know)- &
1117 & (1.0_r8+ce)*zeta(i,jend,know)
1118 ze=ze+cff2*cff3
1119 END IF
1120# ifdef MASKING
1121
1122
1123
1124 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1125 &
grid(ng)%vmask(i,jend+1)
1126# endif
1127# ifdef ADJUST_BOUNDARY
1129
1130
1131
1133 & ad_zeta_north(i)- &
1134 & ce*ad_vbar(i,jend+1,kout)
1135 END IF
1136# endif
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148 adfac=0.5_r8*ad_vbar(i,jend+1,kout)
1149 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+ &
1150 & (1.0_r8-ce)*adfac
1151 ad_vbar(i,jend ,know)=ad_vbar(i,jend ,know)+ &
1152 & ce*adfac
1153 ad_ce=ad_ce+ &
1154 & (vbar(i,jend ,know)- &
1155 & vbar(i,jend+1,know))*adfac
1156 ad_cff1=ad_cff1+ &
1157 & (ze-
boundary(ng)%zeta_north(i))*adfac
1158 ad_ze=ad_ze-cff1*adfac
1159 ad_vbar(i,jend+1,kout)=0.0_r8
1160
1162
1163
1164
1165 ad_cff2=ad_cff2+cff3*ad_ze
1166 ad_cff3=ad_cff3+cff2*ad_ze
1167
1168
1169
1170
1171
1172
1173 ad_zeta(i,jend ,kout)=ad_zeta(i,jend ,kout)+ &
1174 & ad_cff3
1175 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)- &
1176 & (1.0_r8+ce)*ad_cff3
1177 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+ &
1178 & ce*ad_cff3
1179 ad_ce=ad_ce+ &
1180 & (zeta(i,jend ,know)+ &
1181 & zeta(i,jend+1,know))*ad_cff3
1182 ad_cff3=0.0_r8
1183
1184
1185 ad_ce=ad_ce+ &
1186 & 2.0_r8*cff2*
co*ad_cff2/(ce*ce)
1187 ad_cff2=0.0_r8
1188 END IF
1189
1190
1191
1192
1193
1194 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+ &
1195 & (0.5_r8+ce)*ad_ze
1196 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+ &
1197 & (0.5_r8-ce)*ad_ze
1198 ad_ce=ad_ce+ &
1199 & (zeta(i,jend ,know)- &
1200 & zeta(i,jend+1,know))*ad_ze
1201 ad_ze=0.0_r8
1202
1203
1204
1205
1206
1207 adfac=dt2d*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1208 &
grid(ng)%pn(i,jend+1))*ad_ce
1209 ad_cff=ad_cff+cff1*adfac
1210 ad_cff1=ad_cff1+cff*adfac
1211 ad_ce=0.0_r8
1212
1213
1214 ad_cff=ad_cff- &
1215 & 0.5_r8*cff1*ad_cff1/cff
1216 ad_cff1=0.0_r8
1217
1218# ifdef WET_DRY_NOT_YET
1219
1220
1221
1222
1223
1224 adfac=0.5_r8*ad_cff
1225 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1226 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1227 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1228 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1229 ad_cff=0.0_r8
1230# else
1231
1232
1233
1234 adfac=0.5_r8*ad_cff
1235 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1236 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1237 ad_cff=0.0_r8
1238# endif
1239
1240# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
1242 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
1243 & zeta(i,jend,know))* &
1244 & 0.5_r8*
grid(ng)%pn(i,jend)
1245 ELSE
1246 bry_pgr=-
g*(zeta(i,jend+1,know)- &
1247 & zeta(i,jend ,know))* &
1248 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
1249 &
grid(ng)%pn(i,jend+1))
1250 END IF
1251# ifdef UV_COR
1252 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
1253 & ubar(i+1,jend ,know)+ &
1254 & ubar(i ,jend+1,know)+ &
1255 & ubar(i+1,jend+1,know))* &
1256 & (
grid(ng)%f(i,jend )+ &
1257 &
grid(ng)%f(i,jend+1))
1258# else
1259 bry_cor=0.0_r8
1260# endif
1261 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1262 & zeta(i,jend ,know)+ &
1263 &
grid(ng)%h(i,jend+1)+ &
1264 & zeta(i,jend+1,know)))
1265 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
1266 &
forces(ng)%bvstr(i,jend+1))
1267 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
1268 & zeta(i,jend+1,know)+ &
1269 &
grid(ng)%h(i,jend )+ &
1270 & zeta(i,jend ,know)))
1271 cff2=
grid(ng)%on_v(i,jend+1)*ce
1272
1273
1274
1275
1276
1277
1278
1279
1280 adfac=cff2*ad_bry_val
1281 ad_bry_pgr=ad_bry_pgr+adfac
1282 ad_bry_cor=ad_bry_cor+adfac
1283 ad_bry_str=ad_bry_str+adfac
1284 ad_cff2=ad_cff2+(bry_pgr+ &
1285 & bry_cor+ &
1286 & bry_str)*ad_bry_val
1287 ad_vbar(i,jend,know)=ad_vbar(i,jend,know)+ad_bry_val
1288 ad_bry_val=0.0_r8
1289
1290
1291 ad_ce=ad_ce+
grid(ng)%on_v(i,jend+1)*ad_cff2
1292 ad_cff2=0.0_r8
1293
1294
1295
1296
1297
1298 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
1299 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1300 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1301 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1302 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1303 ad_ce=0.0_r8
1304
1305
1306
1307
1308
1309 adfac=cff1*ad_bry_str
1310 forces(ng)%ad_svstr(i,jend+1)= &
1311 &
forces(ng)%ad_svstr(i,jend+1)+ &
1312 & adfac
1313 forces(ng)%ad_bvstr(i,jend+1)= &
1314 &
forces(ng)%ad_bvstr(i,jend+1)- &
1315 & adfac
1316 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jend+1)- &
1317 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1318
1319 ad_bry_str=0.0_r8
1320
1321
1322
1323
1324
1325 adfac=-cff1*cff1*0.5_r8*ad_cff1
1326 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1327 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1328 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1329 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1330 ad_cff1=0.0_r8
1331# ifdef UV_COR
1332
1333
1334
1335
1336
1337
1338
1339 adfac=0.125_r8*(
grid(ng)%f(i,jend )+ &
1340 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1341 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)-adfac
1342 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)-adfac
1343 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)-adfac
1344 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)-adfac
1345 ad_bry_cor=0.0_r8
1346# else
1347
1348
1349# endif
1351# ifdef ADJUST_BOUNDARY
1353
1354
1355
1356
1358 & ad_zeta_north(i)- &
1360 &
grid(ng)%pn(i,jend)* &
1361 & ad_bry_pgr
1362 END IF
1363# endif
1364
1365
1366
1367 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1368 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1369 & ad_bry_pgr
1370 ad_bry_pgr=0.0_r8
1371 ELSE
1372
1373
1374
1375
1376
1377 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1378 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1379 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1380 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1381 ad_bry_pgr=0.0_r8
1382 END IF
1383# else
1384# ifdef ADJUST_BOUNDARY
1386
1387
1389 & ad_vbar_north(i)+ &
1390 & ad_bry_val
1391 ad_bry_val=0.0_r8
1392 ELSE
1393
1394
1395 ad_bry_val=0.0_r8
1396 END IF
1397# else
1398
1399
1400 ad_bry_val=0.0_r8
1401# endif
1402# endif
1403 END IF
1404 END DO
1405
1406
1407
1409 DO i=istr,iend
1411# ifdef MASKING
1412
1413
1414
1415 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1416 &
grid(ng)%vmask(i,jend+1)
1417# endif
1418# ifdef ADJUST_BOUNDARY
1420
1421
1423 & ad_vbar_north(i)+ &
1424 & ad_vbar(i,jend+1,kout)
1425 ad_vbar(i,jend+1,kout)=0.0_r8
1426 ELSE
1427
1428
1429 ad_vbar(i,jend+1,kout)=0.0_r8
1430 END IF
1431# else
1432
1433
1434 ad_vbar(i,jend+1,kout)=0.0_r8
1435# endif
1436 END IF
1437 END DO
1438
1439
1440
1442 DO i=istr,iend
1444# ifdef MASKING
1445
1446
1447
1448 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1449 &
grid(ng)%vmask(i,jend+1)
1450# endif
1451
1452
1453 ad_vbar(i,jend ,kout)=ad_vbar(i,jend,kout)+ &
1454 & ad_vbar(i,jend+1,kout)
1455 ad_vbar(i,jend+1,kout)=0.0_r8
1456 END IF
1457 END DO
1458
1459
1460
1462 DO i=istr,iend
1464 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1465 & zeta(i,jend ,know)+ &
1466 &
grid(ng)%h(i,jend+1)+ &
1467 & zeta(i,jend+1,know)))
1468# ifdef MASKING
1469
1470
1471
1472 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1473 &
grid(ng)%vmask(i,jend+1)
1474# endif
1475
1476
1477
1478
1479
1480 adfac=dt2d*ad_vbar(i,jend+1,kout)
1481 ad_bry_pgr=ad_bry_pgr+adfac
1482 ad_bry_cor=ad_bry_cor+adfac
1483 ad_bry_str=ad_bry_str+adfac
1484 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+ &
1485 & ad_vbar(i,jend+1,kout)
1486 ad_vbar(i,jend+1,kout)=0.0_r8
1487
1488
1489
1490
1491
1492 adfac=cff*ad_bry_str
1493 forces(ng)%ad_svstr(i,jend+1)= &
1494 &
forces(ng)%ad_svstr(i,jend+1)+ &
1495 & adfac
1496 forces(ng)%ad_bvstr(i,jend+1)= &
1497 &
forces(ng)%ad_bvstr(i,jend+1)- &
1498 & adfac
1499 ad_cff=ad_cff+(
forces(ng)%svstr(i,jend+1)- &
1500 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1501 ad_bry_str=0.0_r8
1502
1503
1504
1505
1506
1507 adfac=-cff*cff*0.5_r8*ad_cff
1508 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1509 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1510 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1511 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1512 ad_cff=0.0_r8
1513# ifdef UV_COR
1514
1515
1516
1517
1518
1519
1520
1521 adfac=-0.125_r8*(
grid(ng)%f(i,jend )+ &
1522 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1523 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)+adfac
1524 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)+adfac
1525 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)+adfac
1526 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)+adfac
1527 ad_bry_cor=0.0_r8
1528# else
1529
1530
1531 ad_bry_cor=0.0_r8
1532# endif
1534# ifdef ADJUST_BOUNDARY
1536
1537
1538
1539
1541 & ad_zeta_north(i)- &
1543 &
grid(ng)%pn(i,jend)* &
1544 & ad_bry_pgr
1545 END IF
1546# endif
1547
1548
1549
1550 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1551 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1552 & ad_bry_pgr
1553 ad_bry_pgr=0.0_r8
1554 ELSE
1555
1556
1557
1558
1559
1560 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1561 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1562 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1563 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1564 ad_bry_pgr=0.0_r8
1565 END IF
1566 END IF
1567 END DO
1568
1569
1570
1572 DO i=istr,iend
1574
1575
1576 ad_vbar(i,jend+1,kout)=0.0_r8
1577 END IF
1578 END DO
1579 END IF
1580 END IF
1581
1582
1583
1584
1585
1586 IF (
domain(ng)%Southern_Edge(tile))
THEN
1587
1588
1589
1591 IF (
iic(ng).ne.0)
THEN
1592 DO i=istr,iend
1594# if defined CELERITY_READ && defined FORWARD_READ
1597 obc_out=0.5_r8* &
1598 & (
clima(ng)%M2nudgcof(i,jstr-1)+ &
1599 &
clima(ng)%M2nudgcof(i,jstr ))
1600 obc_in =
obcfac(ng)*obc_out
1601 ELSE
1604 END IF
1605 IF (
boundary(ng)%vbar_south_Ce(i).lt.0.0_r8)
THEN
1606 tau=obc_in
1607 ELSE
1608 tau=obc_out
1609 END IF
1610 tau=tau*dt2d
1611 END IF
1612# ifdef RADIATION_2D
1614# else
1615 cx=0.0_r8
1616# endif
1619# endif
1620# ifdef MASKING
1621
1622
1623
1624 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1625 &
grid(ng)%vmask(i,jstr)
1626# endif
1628
1629
1630
1631 ad_vbar(i,jstr,know)=ad_vbar(i,jstr,know)- &
1632 & tau*ad_vbar(i,jstr,kout)
1633 END IF
1634
1635
1636
1637
1638
1639
1640
1641
1642 adfac=ad_vbar(i,jstr,kout)/(cff+ce)
1643 ad_grad(i ,jstr)=ad_grad(i ,jstr)-max(cx,0.0_r8)*adfac
1644 ad_grad(i+1,jstr)=ad_grad(i+1,jstr)-min(cx,0.0_r8)*adfac
1645 ad_vbar(i,jstr ,know)=ad_vbar(i,jstr ,know)+cff*adfac
1646 ad_vbar(i,jstr-1,kout)=ad_vbar(i,jstr-1,kout)+ce *adfac
1647 ad_vbar(i,jstr ,kout)=0.0_r8
1648 END IF
1649 END DO
1650 END IF
1651
1652
1653
1655 DO i=istr,iend
1657 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1658 & zeta(i,jstr-1,know)+ &
1659 &
grid(ng)%h(i,jstr )+ &
1660 & zeta(i,jstr ,know)))
1662# ifdef MASKING
1663
1664
1665
1666 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1667 &
grid(ng)%vmask(i,jstr)
1668# endif
1669# ifdef ADJUST_BOUNDARY
1671
1672
1673
1675 & ad_zeta_south(i)+ &
1676 & ce*ad_vbar(i,jstr,kout)
1677 END IF
1678# endif
1679# if defined ATM_PRESS && defined PRESS_COMPENSATE
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693 adfac=ce*0.5_r8*ad_vbar(i,jstr,kout)
1694 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1695 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)-adfac
1696 ad_ce=ad_ce- &
1697 & (0.5_r8*(zeta(i,jstr-1,know)+ &
1698 & zeta(i,jstr ,know)+ &
1699 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
1700 &
forces(ng)%Pair(i,jstr )- &
1701 & 2.0_r8*oneatm))- &
1702 &
boundary(ng)%zeta_south(i))*ad_vbar(i,jstr,kout)
1703 ad_bry_val=ad_bry_val+ad_vbar(i,jstr,kout)
1704 ad_vbar(i,jstr,kout)=0.0_r8
1705# else
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715 adfac=ce*0.5_r8*ad_vbar(i,jstr,kout)
1716 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1717 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)-adfac
1718 ad_ce=ad_ce- &
1719 & (0.5_r8*(zeta(i,jstr-1,know)+ &
1720 & zeta(i,jstr ,know))- &
1721 &
boundary(ng)%zeta_south(i))*ad_vbar(i,jstr,kout)
1722 ad_bry_val=ad_bry_val+ad_vbar(i,jstr,kout)
1723 ad_vbar(i,jstr,kout)=0.0_r8
1724# endif
1725
1726
1727 ad_cff=ad_cff+0.5_r8*
g*ad_ce/ce
1728 ad_ce=0.0_r8
1729
1730
1731
1732
1733
1734 adfac=-cff*cff*0.5_r8*ad_cff
1735 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1736 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1737 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1738 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1739 ad_cff=0.0_r8
1740
1741# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
1743 bry_pgr=-
g*(zeta(i,jstr,know)- &
1745 & 0.5_r8*
grid(ng)%pn(i,jstr)
1746 ELSE
1747 bry_pgr=-
g*(zeta(i,jstr ,know)- &
1748 & zeta(i,jstr-1,know))* &
1749 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1750 &
grid(ng)%pn(i,jstr ))
1751 END IF
1752# ifdef UV_COR
1753 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
1754 & ubar(i+1,jstr-1,know)+ &
1755 & ubar(i ,jstr ,know)+ &
1756 & ubar(i+1,jstr ,know))* &
1757 & (
grid(ng)%f(i,jstr-1)+ &
1758 &
grid(ng)%f(i,jstr ))
1759# else
1760 bry_cor=0.0_r8
1761# endif
1762 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1763 & zeta(i,jstr-1,know)+ &
1764 &
grid(ng)%h(i,jstr )+ &
1765 & zeta(i,jstr ,know)))
1766 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
1767 &
forces(ng)%bvstr(i,jstr))
1768 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1769 & zeta(i,jstr-1,know)+ &
1770 &
grid(ng)%h(i,jstr )+ &
1771 & zeta(i,jstr ,know)))
1772 cff2=
grid(ng)%on_v(i,jstr)*ce
1773
1774
1775
1776
1777
1778
1779
1780
1781 adfac=cff2*ad_bry_val
1782 tl_bry_pgr=tl_bry_pgr+adfac
1783 tl_bry_cor=tl_bry_cor+adfac
1784 tl_bry_str=tl_bry_str+adfac
1785 ad_cff2=ad_cff2+(bry_pgr+ &
1786 & bry_cor+ &
1787 & bry_str)*ad_bry_val
1788 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ad_bry_val
1789 ad_bry_val=0.0_r8
1790
1791
1792 ad_ce=ad_ce+
grid(ng)%on_v(i,jstr)*ad_cff2
1793 ad_cff2=0.0_r8
1794
1795
1796
1797
1798
1799 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
1800 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1801 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1802 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1803 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1804 ad_ce=0.0_r8
1805
1806
1807
1808
1809
1810 adfac=cff1*ad_bry_str
1811 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
1812 & adfac
1813 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
1814 & adfac
1815 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jstr)- &
1816 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
1817 ad_bry_str=0.0_r8
1818
1819
1820
1821
1822
1823 adfac=-cff1*cff1*0.5_r8*ad_cff1
1824 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1825 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1826 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1827 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1828 ad_cff1=0.0_r8
1829# ifdef UV_COR
1830
1831
1832
1833
1834
1835
1836
1837 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
1838 &
grid(ng)%f(i,jstr ))*ad_bry_cor
1839 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
1840 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
1841 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
1842 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
1843 ad_bry_cor=0.0_r8
1844# else
1845
1846
1847 ad_bry_cor=0.0_r8
1848# endif
1850# ifdef ADJUST_BOUNDARY
1852
1853
1854
1855
1857 & ad_zeta_south(i)+ &
1859 &
grid(ng)%pn(i,jstr)* &
1860 & ad_bry_pgr
1861 END IF
1862# endif
1863
1864
1865
1866 tl_zeta(i,jstr,know)=tl_zeta(i,jstr,know)- &
1867 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
1868 & ad_bry_pgr
1869 ad_bry_pgr=0.0_r8
1870 ELSE
1871
1872
1873
1874
1875
1876 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1877 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
1878 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1879 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1880 ad_bry_pgr=0.0_r8
1881 END IF
1882# else
1883# ifdef ADJUST_BOUNDARY
1885
1886
1888 & ad_vbar_south(i)+ &
1889 & ad_bry_val
1890 ad_bry_val=0.0_r8
1891 ELSE
1892
1893
1894 ad_bry_val=0.0_r8
1895 END IF
1896# else
1897
1898
1899 ad_bry_val=0.0_r8
1900# endif
1901# endif
1902 END IF
1903 END DO
1904
1905
1906
1908 DO i=istr,iend
1910 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1911 &
grid(ng)%h(i,jstr ))
1913 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1914 &
grid(ng)%pn(i,jstr ))
1915 ze=(0.5_r8+ce)*zeta(i,jstr ,know)+ &
1916 & (0.5_r8-ce)*zeta(i,jstr-1,know)
1918 cff2=(1.0_r8-
co/ce)**2
1919 cff3=zeta(i,jstr,kout)+ &
1920 & ce*zeta(i,jstr-1,know)- &
1921 & (1.0_r8+ce)*zeta(i,jstr,know)
1922 ze=ze+cff2*cff3
1923 END IF
1924# ifdef MASKING
1925
1926
1927
1928 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1929 &
grid(ng)%vmask(i,jstr)
1930# endif
1931# ifdef ADJUST_BOUNDARY
1933
1934
1935
1937 & ad_zeta_south(i)+ &
1938 & ce*ad_vbar(i,jstr,kout)
1939 END IF
1940# endif
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952 adfac=0.5_r8*ad_vbar(i,jstr,kout)
1953 ad_vbar(i,jstr ,know)=ad_vbar(i,jstr,know)+ &
1954 & (1.0_r8-ce)*adfac
1955 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ &
1956 & ce*adfac
1957 ad_ce=ad_ce- &
1958 & (vbar(i,jstr ,know)- &
1959 & vbar(i,jstr+1,know))*adfac
1960 ad_bry_val=ad_bry_val+adfac
1961 ad_cff1=ad_cff1- &
1962 & (ze-
boundary(ng)%zeta_south(i))*adfac
1963 ad_ze=ad_ze+cff1*adfac
1964 ad_vbar(i,jstr,kout)=0.0_r8
1966
1967
1968
1969 ad_cff2=ad_cff2+cff3*ad_ze
1970 ad_cff3=ad_cff3+cff2*ad_ze
1971
1972
1973
1974
1975
1976
1977 ad_zeta(i,jstr ,kout)=ad_zeta(i,jstr ,kout)+ &
1978 & ad_cff3
1979 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)- &
1980 & (1.0_r8+ce)*ad_cff3
1981 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+ &
1982 & ce*ad_cff3
1983 ad_ce=ad_ce+ &
1984 & (zeta(i,jstr-1,know)+ &
1985 & zeta(i,jstr ,know))*ad_cff3
1986 ad_cff3=0.0_r8
1987
1988
1989 ad_ce=ad_ce+ &
1990 & 2.0_r8*cff2*
co*ad_cff2/(ce*ce)
1991 ad_cff2=0.0_r8
1992 END IF
1993
1994
1995
1996
1997
1998 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+ &
1999 & (0.5_r8+ce)*ad_ze
2000 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+ &
2001 & (0.5_r8-ce)*ad_ze
2002 ad_ce=ad_ce+ &
2003 & (zeta(i,jstr ,know)- &
2004 & zeta(i,jstr-1,know))*ad_ze
2005 ad_ze=0.0_r8
2006
2007
2008
2009
2010
2011 adfac=dt2d*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2012 &
grid(ng)%pn(i,jstr ))*ad_ce
2013 ad_cff=ad_cff+cff1*adfac
2014 ad_cff1=ad_cff1+cff*adfac
2015 ad_ce=0.0_r8
2016
2017
2018 ad_cff=ad_cff- &
2019 & 0.5_r8*cff1*ad_cff1/cff
2020 ad_cff1=0.0_r8
2021
2022# ifdef WET_DRY_NOT_YET
2023
2024
2025
2026
2027
2028 adfac=0.5_r8*ad_cff
2029 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2030 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2031 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2032 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2033 ad_cff=0.0_r8
2034# else
2035
2036
2037
2038 adfac=0.5_r8*ad_cff
2039 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2040 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2041 ad_cff=0.0_r8
2042# endif
2043
2044# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
2046 bry_pgr=-
g*(zeta(i,jstr,know)- &
2048 & 0.5_r8*
grid(ng)%pn(i,jstr)
2049 ELSE
2050 bry_pgr=-
g*(zeta(i,jstr ,know)- &
2051 & zeta(i,jstr-1,know))* &
2052 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2053 &
grid(ng)%pn(i,jstr ))
2054 END IF
2055# ifdef UV_COR
2056 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
2057 & ubar(i+1,jstr-1,know)+ &
2058 & ubar(i ,jstr ,know)+ &
2059 & ubar(i+1,jstr ,know))* &
2060 & (
grid(ng)%f(i,jstr-1)+ &
2061 &
grid(ng)%f(i,jstr ))
2062# else
2063 bry_cor=0.0_r8
2064# endif
2065 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2066 & zeta(i,jstr-1,know)+ &
2067 &
grid(ng)%h(i,jstr )+ &
2068 & zeta(i,jstr ,know)))
2069 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
2070 &
forces(ng)%bvstr(i,jstr))
2071 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2072 & zeta(i,jstr-1,know)+ &
2073 &
grid(ng)%h(i,jstr )+ &
2074 & zeta(i,jstr ,know)))
2075 cff2=
grid(ng)%on_v(i,jstr)*ce
2076
2077
2078
2079
2080
2081
2082
2083
2084 adfac=cff2*ad_bry_val
2085 tl_bry_pgr=tl_bry_pgr+adfac
2086 tl_bry_cor=tl_bry_cor+adfac
2087 tl_bry_str=tl_bry_str+adfac
2088 ad_cff2=ad_cff2+(bry_pgr+ &
2089 & bry_cor+ &
2090 & bry_str)*ad_bry_val
2091 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ad_bry_val
2092 ad_bry_val=0.0_r8
2093
2094
2095 ad_ce=ad_ce+
grid(ng)%on_v(i,jstr)*ad_cff2
2096 ad_cff2=0.0_r8
2097
2098
2099
2100
2101
2102 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
2103 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2104 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2105 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2106 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2107 ad_ce=0.0_r8
2108
2109
2110
2111
2112
2113 adfac=cff1*ad_bry_str
2114 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
2115 & adfac
2116 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
2117 & adfac
2118 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jstr)- &
2119 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
2120 ad_bry_str=0.0_r8
2121
2122
2123
2124
2125
2126 adfac=-cff1*cff1*0.5_r8*ad_cff1
2127 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2128 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2129 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2130 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2131 ad_cff1=0.0_r8
2132# ifdef UV_COR
2133
2134
2135
2136
2137
2138
2139
2140 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
2141 &
grid(ng)%f(i,jstr ))*ad_bry_cor
2142 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
2143 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
2144 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
2145 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
2146 ad_bry_cor=0.0_r8
2147# else
2148
2149
2150 ad_bry_cor=0.0_r8
2151# endif
2153# ifdef ADJUST_BOUNDARY
2155
2156
2157
2158
2160 & ad_zeta_south(i)+ &
2162 &
grid(ng)%pn(i,jstr)* &
2163 & ad_bry_pgr
2164 END IF
2165# endif
2166
2167
2168
2169 tl_zeta(i,jstr,know)=tl_zeta(i,jstr,know)- &
2170 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
2171 & ad_bry_pgr
2172 ad_bry_pgr=0.0_r8
2173 ELSE
2174
2175
2176
2177
2178
2179 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2180 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
2181 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
2182 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2183 ad_bry_pgr=0.0_r8
2184 END IF
2185# else
2186# ifdef ADJUST_BOUNDARY
2188
2189
2191 & ad_vbar_south(i)+ &
2192 & ad_bry_val
2193 ad_bry_val=0.0_r8
2194 ELSE
2195
2196
2197 ad_bry_val=0.0_r8
2198 END IF
2199# else
2200
2201
2202 ad_bry_val=0.0_r8
2203# endif
2204# endif
2205 END IF
2206 END DO
2207
2208
2209
2211 DO i=istr,iend
2213# ifdef MASKING
2214
2215
2216
2217 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2218 &
grid(ng)%vmask(i,jstr)
2219# endif
2220# ifdef ADJUST_BOUNDARY
2222
2223
2225 & ad_vbar_south(i)+ &
2226 & ad_vbar(i,jstr,kout)
2227 ad_vbar(i,jstr,kout)=0.0_r8
2228 ELSE
2229
2230
2231 ad_vbar(i,jstr,kout)=0.0_r8
2232 END IF
2233# else
2234
2235
2236 ad_vbar(i,jstr,kout)=0.0_r8
2237# endif
2238 END IF
2239 END DO
2240
2241
2242
2244 DO i=istr,iend
2246# ifdef MASKING
2247
2248
2249
2250 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2251 &
grid(ng)%vmask(i,jstr)
2252# endif
2253
2254
2255 ad_vbar(i,jstr+1,kout)=ad_vbar(i,jstr+1,kout)+ &
2256 & ad_vbar(i,jstr,kout)
2257 ad_vbar(i,jstr ,kout)=0.0_r8
2258 END IF
2259 END DO
2260
2261
2262
2264 DO i=istr,iend
2266 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2267 & zeta(i,jstr-1,know)+ &
2268 &
grid(ng)%h(i,jstr )+ &
2269 & zeta(i,jstr ,know)))
2270# ifdef MASKING
2271
2272
2273
2274 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2275 &
grid(ng)%vmask(i,jstr)
2276# endif
2277
2278
2279
2280
2281
2282 adfac=dt2d*ad_vbar(i,jstr,kout)
2283 ad_bry_pgr=ad_bry_pgr+adfac
2284 ad_bry_cor=ad_bry_cor+adfac
2285 ad_bry_str=ad_bry_str+adfac
2286 ad_vbar(i,jstr,know)=ad_vbar(i,jstr,know)+ &
2287 & ad_vbar(i,jstr,kout)
2288 ad_vbar(i,jstr,kout)=0.0_r8
2289
2290
2291
2292
2293
2294 adfac=cff*ad_bry_str
2295 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
2296 & adfac
2297 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
2298 & adfac
2299 ad_cff=ad_cff+(
forces(ng)%svstr(i,jstr)- &
2300 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
2301 ad_bry_str=0.0_r8
2302
2303
2304
2305
2306
2307 adfac=-cff*cff*0.5_r8*ad_cff
2308 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2309 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2310 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2311 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2312 ad_cff=0.0_r8
2313# ifdef UV_COR
2314
2315
2316
2317
2318
2319
2320
2321 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
2322 &
grid(ng)%f(i,jstr ))*ad_bry_cor
2323 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
2324 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
2325 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
2326 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
2327 ad_bry_cor=0.0_r8
2328# else
2329
2330
2331 tl_bry_cor=0.0_r8
2332# endif
2334# ifdef ADJUST_BOUNDARY
2336
2337
2338
2339
2341 & ad_zeta_south(i)+ &
2343 &
grid(ng)%pn(i,jstr)* &
2344 & ad_bry_pgr
2345 END IF
2346# endif
2347
2348
2349
2350 ad_zeta(i,jstr,know)=ad_zeta(i,jstr,know)- &
2351 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
2352 & ad_bry_pgr
2353 ad_bry_pgr=0.0_r8
2354 ELSE
2355
2356
2357
2358
2359
2360 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2361 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
2362 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
2363 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2364 ad_bry_pgr=0.0_r8
2365 END IF
2366 END IF
2367 END DO
2368
2369
2370
2372 DO i=istr,iend
2374
2375
2376 ad_vbar(i,jstr,kout)=0.0_r8
2377 END IF
2378 END DO
2379 END IF
2380 END IF
2381
2382 RETURN
type(t_boundary), dimension(:), allocatable boundary
type(t_apply), dimension(:), allocatable lbc_apply
type(t_clima), dimension(:), allocatable clima
type(t_forces), dimension(:), allocatable forces
type(t_grid), dimension(:), allocatable grid
type(t_lbc), dimension(:,:,:), allocatable ad_lbc
type(t_lbc), dimension(:,:,:), allocatable lbc
type(t_domain), dimension(:), allocatable domain
logical, dimension(:), allocatable lnudgem2clm
integer, dimension(:), allocatable iic
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable predictor_2d_step
real(dp), dimension(:), allocatable obcfac
real(r8), dimension(:), allocatable gamma2
integer, parameter isouth
real(dp), dimension(:), allocatable dtfast
real(dp), dimension(:,:), allocatable m2obc_out
integer, parameter inorth
real(dp), dimension(:,:), allocatable m2obc_in