127 & LBi, UBi, LBj, UBj, &
128 & IminS, ImaxS, JminS, JmaxS, &
129# if defined SCORRECTION || defined SRELAXATION
132# if defined UV_LOGDRAG
134# elif defined UV_LDRAG
136# elif defined UV_QDRAG
139# if defined UV_LOGDRAG && (!defined BBL_MODEL_NOT_YET || defined ICESHELF)
146# if defined QCORRECTION || defined SALINITY
149# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
156# if defined SCORRECTION || defined SRELAXATION
163 & ad_sustr, ad_svstr, &
165# ifndef BBL_MODEL_NOT_YET
166 & ad_bustr, ad_bustr_sol, &
167 & ad_bvstr, ad_bvstr_sol, &
170# if defined QCORRECTION || defined SALINITY
189 integer,
intent(in) :: ng, tile
190 integer,
intent(in) :: LBi, UBi, LBj, UBj
191 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
192 integer,
intent(in) :: nrhs
195# if defined SCORRECTION || defined SRELAXATION
196 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
198# if defined UV_LOGDRAG
199 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
200# elif defined UV_LDRAG
201 real(r8),
intent(in) :: rdrag(LBi:,LBj:)
202# elif defined UV_QDRAG
203 real(r8),
intent(in) :: rdrag2(LBi:,LBj:)
205# if defined UV_LOGDRAG && (!defined BBL_MODEL_NOT_YET || defined ICESHELF)
206 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
207 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
210 real(r8),
intent(in) :: zice(LBi:,LBj:)
212# if defined QCORRECTION || defined SALINITY
213 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
215# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
216 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
217 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
219# if defined QCORRECTION || defined SALINITY
220 real(r8),
intent(in) :: stflx(LBi:,LBj:,:)
223 real(r8),
intent(in) :: btflx(LBi:,LBj:,:)
226 real(r8),
intent(in) :: dqdt(LBi:,LBj:)
227 real(r8),
intent(in) :: sst(LBi:,LBj:)
229# if defined SCORRECTION || defined SRELAXATION
230 real(r8),
intent(in) :: sss(LBi:,LBj:)
232 real(r8),
intent(in) :: stflux(LBi:,LBj:,:)
233 real(r8),
intent(in) :: btflux(LBi:,LBj:,:)
234# if defined SCORRECTION || defined SRELAXATION
235 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
237# if defined QCORRECTION || defined SALINITY
238 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
240# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
241 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
242 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
244# if defined UV_LOGDRAG && (!defined BBL_MODEL_NOT_YET || defined ICESHELF)
245 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
246 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
250 real(r8),
intent(inout) :: srflx(LBi:,LBj:)
252 real(r8),
intent(inout) :: ad_sustr(LBi:,LBj:)
253 real(r8),
intent(inout) :: ad_svstr(LBi:,LBj:)
255# ifndef BBL_MODEL_NOT_YET
256 real(r8),
intent(inout) :: ad_bustr(LBi:,LBj:)
257 real(r8),
intent(inout) :: ad_bvstr(LBi:,LBj:)
259# if defined QCORRECTION || defined SALINITY
260 real(r8),
intent(inout) :: ad_stflx(LBi:,LBj:,:)
263 real(r8),
intent(inout) :: ad_btflx(LBi:,LBj:,:)
265# ifndef BBL_MODEL_NOT_YET
266 real(r8),
intent(out) :: ad_bustr_sol(LBi:,LBj:)
267 real(r8),
intent(out) :: ad_bvstr_sol(LBi:,LBj:)
270# if defined SCORRECTION || defined SRELAXATION
271 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
273# if defined UV_LOGDRAG
274 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
275# elif defined UV_LDRAG
276 real(r8),
intent(in) :: rdrag(LBi:UBi,LBj:UBj)
277# elif defined UV_QDRAG
278 real(r8),
intent(in) :: rdrag2(LBi:UBi,LBj:UBj)
280# if defined UV_LOGDRAG && (!defined BBL_MODEL_NOT_YET || defined ICESHELF)
281 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
282 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
285 real(r8),
intent(in) :: zice(LBi:UBi,LBj:UBj)
287# if defined QCORRECTION || defined SALINITY
288 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
290# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
291 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
292 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
294# if defined QCORRECTION || defined SALINITY
295 real(r8),
intent(in) :: stflx(LBi:UBi,LBj:UBj,NT(ng))
298 real(r8),
intent(in) :: btflx(LBi:UBi,LBj:UBj,NT(ng))
301 real(r8),
intent(in) :: dqdt(LBi:UBi,LBj:UBj)
302 real(r8),
intent(in) :: sst(LBi:UBi,LBj:UBj)
304# if defined SCORRECTION || defined SRELAXATION
305 real(r8),
intent(in) :: sss(LBi:UBi,LBj:UBj)
307 real(r8),
intent(in) :: stflx(LBi:UBi,LBj:UBj,NT(ng))
308 real(r8),
intent(in) :: btflx(LBi:UBi,LBj:UBj,NT(ng))
309# if defined SCORRECTION || defined SRELAXATION
310 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
312# if defined QCORRECTION || defined SALINITY
313 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
315# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
316 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
317 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
319# if defined UV_LOGDRAG && (!defined BBL_MODEL_NOT_YET || defined ICESHELF)
320 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
321 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
325 real(r8),
intent(inout) :: srflx(LBi:UBi,LBj:UBj)
327 real(r8),
intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
328 real(r8),
intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
330# ifndef BBL_MODEL_NOT_YET
331 real(r8),
intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
332 real(r8),
intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
334# if defined QCORRECTION || defined SALINITY
335 real(r8),
intent(inout) :: ad_stflx(LBi:UBi,LBj:UBj,NT(ng))
338 real(r8),
intent(inout) :: ad_btflx(LBi:UBi,LBj:UBj,NT(ng))
340# ifndef BBL_MODEL_NOT_YET
341 real(r8),
intent(inout) :: ad_bustr_sol(LBi:UBi,LBj:UBj)
342 real(r8),
intent(inout) :: ad_bvstr_sol(LBi:UBi,LBj:UBj)
348 integer :: i, j, itrc
350 real(r8) :: EmP, ad_EmP
351 real(r8) :: cff1, cff2, cff3
352 real(r8) :: ad_cff1, ad_cff2, ad_cff3, adfac, adfac1, adfac2
354# if (!defined BBL_MODEL_NOT_YET || defined ICESHELF) && \
356 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
357 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_wrk
360# include "set_bounds.h"
371# if (!defined BBL_MODEL_NOT_YET || defined ICESHELF) && \
380# ifndef BBL_MODEL_NOT_YET
396 & lbi, ubi, lbj, ubj, &
399 & ad_bustr, ad_bvstr)
406 & lbi, ubi, lbj, ubj, &
413 & lbi, ubi, lbj, ubj, &
420 ad_bustr_sol(i,j)=ad_bustr(i,j)
424 ad_bvstr_sol(i,j)=ad_bvstr(i,j)
432# if defined UV_LOGDRAG
438 cff1=1.0_r8/log((z_r(i,j,1)-z_w(i,j,0))/zobot(i,j))
445 cff1=0.25_r8*(u(i ,j ,1,nrhs)+ &
446 & u(i+1,j ,1,nrhs)+ &
447 & u(i ,j-1,1,nrhs)+ &
449 cff2=sqrt(cff1*cff1+v(i,j,1,nrhs)*v(i,j,1,nrhs))
457 adfac=0.5_r8*ad_bvstr(i,j)
458 adfac1=adfac*v(i,j,1,nrhs)*cff2
459 adfac2=adfac*(wrk(i,j-1)+wrk(i,j))
460 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac1
461 ad_wrk(i,j )=ad_wrk(i,j )+adfac1
462 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac2*cff2
463 ad_cff2=ad_cff2+adfac2*v(i,j,1,nrhs)
465 IF (cff2.ne.0.0_r8)
THEN
469 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac*v(i,j,1,nrhs)
470 ad_cff1=ad_cff1+adfac*cff1
482 adfac=0.25_r8*ad_cff1
483 ad_u(i ,j-1,1,nrhs)=ad_u(i ,j-1,1,nrhs)+adfac
484 ad_u(i+1,j-1,1,nrhs)=ad_u(i+1,j-1,1,nrhs)+adfac
485 ad_u(i ,j ,1,nrhs)=ad_u(i ,j ,1,nrhs)+adfac
486 ad_u(i+1,j ,1,nrhs)=ad_u(i+1,j ,1,nrhs)+adfac
492 cff1=0.25_r8*(v(i ,j ,1,nrhs)+ &
493 & v(i ,j+1,1,nrhs)+ &
494 & v(i-1,j ,1,nrhs)+ &
496 cff2=sqrt(u(i,j,1,nrhs)*u(i,j,1,nrhs)+cff1*cff1)
504 adfac=0.5_r8*ad_bustr(i,j)
505 adfac1=adfac*u(i,j,1,nrhs)*cff2
506 adfac2=adfac*(wrk(i-1,j)+wrk(i,j))
507 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac1
508 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac1
509 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac2*cff2
510 ad_cff2=ad_cff2+adfac1*u(i,j,1,nrhs)
512 IF (cff2.ne.0.0_r8)
THEN
516 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac*u(i,j,1,nrhs)
517 ad_cff1=ad_cff1+adfac*cff1
529 adfac=0.25_r8*ad_cff1
530 ad_v(i-1,j ,1,nrhs)=ad_v(i-1,j ,1,nrhs)+adfac
531 ad_v(i ,j ,1,nrhs)=ad_v(i ,j ,1,nrhs)+adfac
532 ad_v(i-1,j+1,1,nrhs)=ad_v(i-1,j+1,1,nrhs)+adfac
533 ad_v(i ,j+1,1,nrhs)=ad_v(i ,j+1,1,nrhs)+adfac
539 cff1=1.0_r8/log((z_r(i,j,1)-z_w(i,j,0))/zobot(i,j))
546 & (0.5_r8-sign(0.5_r8,cff3-
cdb_max))*ad_wrk(i,j)
551 & (0.5_r8-sign(0.5_r8,
cdb_min-cff2))*ad_cff3
560 adfac=-cff1*cff1*ad_cff1/(z_r(i,j,1)-z_w(i,j,0))
561 ad_z_r(i,j,1)=ad_z_r(i,j,1)+adfac
562 ad_z_w(i,j,0)=ad_z_w(i,j,0)-adfac
566# elif defined UV_QDRAG
572 cff1=0.25_r8*(u(i ,j ,1,nrhs)+ &
573 & u(i+1,j ,1,nrhs)+ &
574 & u(i ,j-1,1,nrhs)+ &
576 cff2=sqrt(cff1*cff1+v(i,j,1,nrhs)*v(i,j,1,nrhs))
581 adfac=0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
583 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac*cff2
584 ad_cff2=ad_cff2+adfac*v(i,j,1,nrhs)
586 IF (cff2.ne.0.0_r8)
THEN
590 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac*v(i,j,1,nrhs)
591 ad_cff1=ad_cff1+adfac*cff1
603 adfac=0.25_r8*ad_cff1
604 ad_u(i ,j-1,1,nrhs)=ad_u(i ,j-1,1,nrhs)+adfac
605 ad_u(i+1,j-1,1,nrhs)=ad_u(i+1,j-1,1,nrhs)+adfac
606 ad_u(i ,j ,1,nrhs)=ad_u(i ,j ,1,nrhs)+adfac
607 ad_u(i+1,j ,1,nrhs)=ad_u(i+1,j ,1,nrhs)+adfac
613 cff1=0.25_r8*(v(i ,j ,1,nrhs)+ &
614 & v(i ,j+1,1,nrhs)+ &
615 & v(i-1,j ,1,nrhs)+ &
617 cff2=sqrt(u(i,j,1,nrhs)*u(i,j,1,nrhs)+cff1*cff1)
622 adfac=0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
624 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac*cff2
625 ad_cff2=ad_cff2+adfac*u(i,j,1,nrhs)
627 IF (cff2.ne.0.0_r8)
THEN
631 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac*u(i,j,1,nrhs)
632 ad_cff1=ad_cff1+adfac*cff1
644 adfac=0.25_r8*ad_cff1
645 ad_v(i-1,j ,1,nrhs)=ad_v(i-1,j ,1,nrhs)+adfac
646 ad_v(i ,j ,1,nrhs)=ad_v(i ,j ,1,nrhs)+adfac
647 ad_v(i-1,j+1,1,nrhs)=ad_v(i-1,j+1,1,nrhs)+adfac
648 ad_v(i ,j+1,1,nrhs)=ad_v(i ,j+1,1,nrhs)+adfac
652# elif defined UV_LDRAG
661 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+ &
662 & 0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
672 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+ &
673 & 0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
699 & lbi, ubi, lbj, ubj, &
702 & ad_sustr, ad_svstr)
709 & lbi, ubi, lbj, ubj, &
716 & lbi, ubi, lbj, ubj, &
719# if defined UV_LOGDRAG
725 cff1=1.0_r8/log((z_w(i,j,n(ng))-z_r(i,j,n(ng)))/zobot(i,j))
733 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
734 cff1=0.25_r8*(u(i ,j ,n(ng),nrhs)+ &
735 & u(i+1,j ,n(ng),nrhs)+ &
736 & u(i ,j-1,n(ng),nrhs)+ &
737 & u(i+1,j-1,n(ng),nrhs))
738 & cff2=sqrt(cff1*cff1+v(i,j,n(ng),nrhs)*v(i,j,n(ng),nrhs))
746 adfac=-0.5_r8*ad_svstr(i,j)
747 adfac1=adfac*v(i,j,n(ng),nrhs)*cff2
748 adfac2=adfac*(wrk(i,j-1)+wrk(i,j))
749 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac1
750 ad_wrk(i,j )=ad_wrk(i,j )+adfac1
751 ad_v(i,j,n(ng),nrhs)=ad_v(i,j,n(ng),nrhs)+adfac2*cff2
752 ad_cff2=ad_cff2+adfac2*v(i,j,n(ng),nrhs)
754 IF (cff2.ne.0.0_r8)
THEN
759 ad_v(i,j,n(ng),nrhs)=ad_v(i,j,n(ng),nrhs)+ &
760 & adfac*v(i,j,n(ng),nrhs)
761 ad_cff1=ad_cff1+adfac*cff1
773 adfac=0.25_r8*ad_cff1
774 ad_u(i ,j-1,n(ng),nrhs)=ad_u(i ,j-1,n(ng),nrhs)+adfac
775 ad_u(i+1,j-1,n(ng),nrhs)=ad_u(i+1,j-1,n(ng),nrhs)+adfac
776 ad_u(i ,j ,n(ng),nrhs)=ad_u(i ,j ,n(ng),nrhs)+adfac
777 ad_u(i+1,j ,n(ng),nrhs)=ad_u(i+1,j ,n(ng),nrhs)+adfac
784 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
785 cff1=0.25_r8*(v(i ,j ,n(ng),nrhs)+ &
786 & v(i ,j+1,n(ng),nrhs)+ &
787 & v(i-1,j ,n(ng),nrhs)+ &
788 & v(i-1,j+1,n(ng),nrhs))
789 cff2=sqrt(u(i,j,n(ng),nrhs)*u(i,j,n(ng),nrhs)+cff1*cff1)
797 adfac=-0.5_r8*ad_sustr(i,j)
798 adfac1=adfac*u(i,j,n(ng),nrhs)*cff2
799 adfac2=adfac*(wrk(i-1,j)+wrk(i,j))
800 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac1
801 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac1
802 ad_u(i,j,n(ng),nrhs)=ad_u(i,j,n(ng),nrhs)+adfac2*cff2
803 ad_cff2=ad_cff2+adfac2*u(i,j,n(ng),nrhs)
805 IF (cff2.ne.0.0_r8)
THEN
810 ad_u(i,j,n(ng),nrhs)=ad_u(i,j,n(ng),nrhs)+ &
811 & adfac*u(i,j,n(ng),nrhs)
812 ad_cff1=ad_cff1+adfac*cff1
824 adfac=0.25_r8*ad_cff1
825 ad_v(i-1,j ,n(ng),nrhs)=ad_v(i-1,j ,n(ng),nrhs)+adfac
826 ad_v(i ,j ,n(ng),nrhs)=ad_v(i ,j ,n(ng),nrhs)+adfac
827 ad_v(i-1,j+1,n(ng),nrhs)=ad_v(i-1,j+1,n(ng),nrhs)+adfac
828 ad_v(i ,j+1,n(ng),nrhs)=ad_v(i ,j+1,n(ng),nrhs)+adfac
835 cff1=1.0_r8/log((z_w(i,j,n(ng))-z_r(i,j,n(ng)))/zobot(i,j))
842 & (0.5_r8-sign(0.5_r8,cff3-
cdb_max))*ad_wrk(i,j)
847 & (0.5_r8-sign(0.5_r8,
cdb_min-cff2))*ad_cff3
856 adfac=-cff1*cff1*ad_cff1/(z_w(i,j,n(ng))-z_r(i,j,n(ng)))
857 ad_z_r(i,j,n(ng))=ad_z_r(i,j,n(ng))-adfac
858 ad_z_w(i,j,n(ng))=ad_z_w(i,j,n(ng))+adfac
862# elif defined UV_QDRAG
868 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
869 cff1=0.25_r8*(u(i ,j ,n(ng),nrhs)+ &
870 & u(i+1,j ,n(ng),nrhs)+ &
871 & u(i ,j-1,n(ng),nrhs)+ &
872 & u(i+1,j-1,n(ng),nrhs))
873 cff2=sqrt(cff1*cff1+v(i,j,n(ng),nrhs)*v(i,j,n(ng),nrhs))
878 adfac=-0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))*ad_svstr(i,j)
879 ad_v(i,j,n(ng),nrhs)=ad_v(i,j,n(ng),nrhs)+adfac*cff2
880 ad_cff2=ad_cff2+adfac*v(i,j,n(ng),nrhs)
882 IF (cff2.ne.0.0_r8)
THEN
887 ad_v(i,j,n(ng),nrhs)=ad_v(i,j,n(ng),nrhs)+ &
888 & adfac*v(i,j,n(ng),nrhs)
889 ad_cff1=ad_cff1+adfac*cff1
901 adfac=0.25_r8*ad_cff1
902 ad_u(i ,j-1,n(ng),nrhs)=ad_u(i ,j-1,n(ng),nrhs)+adfac
903 ad_u(i+1,j-1,n(ng),nrhs)=ad_u(i+1,j-1,n(ng),nrhs)+adfac
904 ad_u(i ,j ,n(ng),nrhs)=ad_u(i ,j ,n(ng),nrhs)+adfac
905 ad_u(i+1,j ,n(ng),nrhs)=ad_u(i+1,j ,n(ng),nrhs)+adfac
912 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
913 cff1=0.25_r8*(v(i ,j ,n(ng),nrhs)+ &
914 & v(i ,j+1,n(ng),nrhs)+ &
915 & v(i-1,j ,n(ng),nrhs)+ &
916 & v(i-1,j+1,n(ng),nrhs))
917 cff2=sqrt(u(i,j,n(ng),nrhs)*u(i,j,n(ng),nrhs)+cff1*cff1)
922 adfac=-0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))*ad_sustr(i,j)
923 ad_u(i,j,n(ng),nrhs)=ad_u(i,j,n(ng),nrhs)+adfac*cff2
924 ad_cff2=ad_cff2+adfac*u(i,j,n(ng),nrhs)
926 IF (cff2.ne.0.0_r8)
THEN
931 ad_u(i,j,n(ng),nrhs)=ad_u(i,j,n(ng),nrhs)+ &
932 & adfac*u(i,j,n(ng),nrhs)
933 ad_cff1=ad_cff1+adfac*cff1
945 adfac=0.25_r8*ad_cff1
946 ad_v(i-1,j ,n(ng),nrhs)=ad_v(i-1,j ,n(ng),nrhs)+adfac
947 ad_v(i ,j ,n(ng),nrhs)=ad_v(i ,j ,n(ng),nrhs)+adfac
948 ad_v(i-1,j+1,n(ng),nrhs)=ad_v(i-1,j+1,n(ng),nrhs)+adfac
949 ad_v(i ,j+1,n(ng),nrhs)=ad_v(i ,j+1,n(ng),nrhs)+adfac
954# elif defined UV_LDRAG
960 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
964 ad_v(i,j,n(ng),nrhs)=ad_v(i,j,n(ng),nrhs)- &
965 & 0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
973 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
977 ad_u(i,j,n(ng),nrhs)=ad_u(i,j,n(ng),nrhs)- &
978 & 0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
987 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
996 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
1013 IF (zice(i,j).ne.0.0_r8)
THEN
1022 IF (zice(i,j).ne.0.0_r8)
THEN
1025 ad_stflx(i,j,itrc)=0.0_r8
1032# if defined BIOLOGY || defined SEDIMENT || defined T_PASSIVE
1038 DO itrc=
nat+1,nt(ng)
1043 ad_btflx(i,j,itrc)=0.0_r8
1046 ad_stflx(i,j,itrc)=0.0_r8
1060 emp=stflux(i,j,
isalt)
1064 ad_t(i,j,1,nrhs,
isalt)=ad_t(i,j,1,nrhs,
isalt)+ &
1066# if !(defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1067 defined opt_observations || defined so_semi)
1068 ad_btflx(i,j,
isalt)=0.0_r8
1070# if defined SCORRECTION
1080 ad_hz(i,j,n(ng))=ad_hz(i,j,n(ng))- &
1081 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))*adfac
1082 ad_t(i,j,n(ng),nrhs,
isalt)=ad_t(i,j,n(ng),nrhs,
isalt)- &
1083 & hz(i,j,n(ng))*adfac
1084 ad_t(i,j,n(ng),nrhs,
isalt)=ad_t(i,j,n(ng),nrhs,
isalt)+ &
1085 & emp*ad_stflx(i,j,
isalt)
1088# if !(defined ADJUST_STFLUX || defined AD_SENSITIVITY || \
1089 defined i4dvar_ana_sensitivity || defined opt_observations || \
1091 ad_stflx(i,j,
isalt)=0.0_r8
1093# elif defined SRELAXATION
1101 ad_hz(i,j,n(ng))=ad_hz(i,j,n(ng))+ &
1102 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))*adfac
1103 ad_t(i,j,n(ng),nrhs,
isalt)=ad_t(i,j,n(ng),nrhs,
isalt)+ &
1104 & hz(i,j,n(ng))*adfac
1105# if !(defined ADJUST_STFLUX || defined AD_SENSITIVITY || \
1106 defined i4dvar_ana_sensitivity || defined opt_observations || \
1108 ad_stflx(i,j,
isalt)=0.0_r8
1114 ad_t(i,j,n(ng),nrhs,
isalt)=ad_t(i,j,n(ng),nrhs,
isalt)+ &
1115 & emp*ad_stflx(i,j,
isalt)
1118# if !(defined ADJUST_STFLUX || defined AD_SENSITIVITY || \
1119 defined i4dvar_ana_sensitivity || defined opt_observations || \
1121 ad_stflx(i,j,
isalt)=0.0_r8
1131# ifdef LIMIT_STFLX_COOLING
1152 cff2=stflx(i,j,
itemp)
1153 cff3=0.5_r8*(1.0_r8+sign(1.0_r8,cff1-t(i,j,n(ng),nrhs,
itemp)))
1159 & (1.0_r8-cff3*0.5_r8*(1.0_r8-sign(1.0_r8,cff2)))* &
1160 & ad_stflx(i,j,
itemp)
1161 ad_stflx(i,j,
itemp)=0.0_r8
1167 ad_stflx(i,j,
itemp)=ad_stflx(i,j,
itemp)+ad_cff2
1186 ad_t(i,j,n(ng),nrhs,
itemp)=ad_t(i,j,n(ng),nrhs,
itemp)+ &
1187 & dqdt(i,j)*ad_stflx(i,j,
itemp)
1188# if !(defined ADJUST_STFLUX || defined AD_SENSITIVITY || \
1189 defined i4dvar_ana_sensitivity || defined opt_observations || \
1191 ad_stflx(i,j,
itemp)=0.0_r8