123 & LBi, UBi, LBj, UBj, &
124 & IminS, ImaxS, JminS, JmaxS, &
129# ifdef VAR_RHO_2D_NOT_YET
133# if defined BV_FREQUENCY_NOT_YET || defined VAR_RHO_2D_NOT_YET
137# ifdef VAR_RHO_2D_NOT_YET
138 & ad_rhoA, ad_rhoS, &
140# ifdef BV_FREQUENCY_NOT_YET
143# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
144 defined BULK_FLUXES_NOT_YET
145 & ad_alpha, ad_beta, &
146# ifdef LMD_DDMIX_NOT_YET
150# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
159# ifdef SEDIMENT_NOT_YET
171 integer,
intent(in) :: ng, tile, model
172 integer,
intent(in) :: LBi, UBi, LBj, UBj
173 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
174 integer,
intent(in) :: nrhs
178 real(r8),
intent(in) :: rmask(LBi:,LBj:)
180# ifdef VAR_RHO_2D_NOT_YET
181 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
183 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
184# if defined BV_FREQUENCY_NOT_YET || defined VAR_RHO_2D_NOT_YET
185 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
187 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
188 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
190# ifdef VAR_RHO_2D_NOT_YET
191 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
193 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
194# if defined BV_FREQUENCY_NOT_YET || defined VAR_RHO_2D_NOT_YET
195 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
197 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
198# ifdef VAR_RHO_2D_NOT_YET
199 real(r8),
intent(inout) :: ad_rhoA(LBi:,LBj:)
200 real(r8),
intent(inout) :: ad_rhoS(LBi:,LBj:)
202# ifdef BV_FREQUENCY_NOT_YET
203 real(r8),
intent(inout) :: ad_bvf(LBi:,LBj:,0:)
205# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
206 defined bulk_fluxes_not_yet
207 real(r8),
intent(inout) :: ad_alpha(LBi:,LBj:)
208 real(r8),
intent(inout) :: ad_beta(LBi:,LBj:)
209# ifdef LMD_DDMIX_NOT_YET
210 real(r8),
intent(inout) :: ad_alfaobeta(LBi:,LBj:,0:)
213# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
214 real(r8),
intent(inout) :: ad_pden(LBi:,LBj:,:)
216 real(r8),
intent(inout) :: ad_rho(LBi:,LBj:,:)
219 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
221# ifdef VAR_RHO_2D_NOT_YET
222 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
224 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
225# if defined BV_FREQUENCY_NOT_YET || defined VAR_RHO_2D_NOT_YET
226 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
228 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
229 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
231# ifdef VAR_RHO_2D_NOT_YET
232 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
234 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
235# if defined BV_FREQUENCY_NOT_YET || defined VAR_RHO_2D_NOT_YET
236 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
238 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
240# ifdef VAR_RHO_2D_NOT_YET
241 real(r8),
intent(inout) :: ad_rhoA(LBi:UBi,LBj:UBj)
242 real(r8),
intent(inout) :: ad_rhoS(LBi:UBi,LBj:UBj)
244# ifdef BV_FREQUENCY_NOT_YET
245 real(r8),
intent(inout) :: ad_bvf(LBi:UBi,LBj:UBj,0:N(ng))
247# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
248 defined bulk_fluxes_not_yet
249 real(r8),
intent(inout) :: ad_alpha(LBi:UBi,LBj:UBj)
250 real(r8),
intent(inout) :: ad_beta(LBi:UBi,LBj:UBj)
251# ifdef LMD_DDMIX_NOT_YET
252 real(r8),
intent(inout) :: ad_alfaobeta(LBi:UBi,LBj:UBj,0:N(ng))
255# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
256 real(r8),
intent(inout) :: ad_pden(LBi:UBi,LBj:UBj,N(ng))
258 real(r8),
intent(inout) :: ad_rho(LBi:UBi,LBj:UBj,N(ng))
263 integer :: i, ised, itrc, j, k
265 real(r8) :: SedDen, Tp, Tpr10, Ts, Tt, sqrtTs
266 real(r8) :: ad_SedDen, ad_Tp, ad_Tpr10, ad_Ts, ad_Tt, ad_sqrtTs
267# ifdef BV_FREQUENCY_NOT_YET
268 real(r8) :: bulk_dn, bulk_up, den_dn, den_up
269 real(r8) :: ad_bulk_dn, ad_bulk_up, ad_den_dn, ad_den_up
271 real(r8) :: cff, cff1, cff2, cff3
272 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3
273 real(r8) :: adfac, adfac1, adfac2, adfac3
275 real(r8),
dimension(0:9) :: C
276 real(r8),
dimension(0:9) :: ad_C
277# ifdef EOS_TDERIVATIVE
278 real(r8),
dimension(0:9) :: dCdT(0:9)
279 real(r8),
dimension(0:9) :: ad_dCdT(0:9)
280 real(r8),
dimension(0:9) :: d2Cd2T(0:9)
282 real(r8),
dimension(IminS:ImaxS,N(ng)) :: DbulkDS
283 real(r8),
dimension(IminS:ImaxS,N(ng)) :: DbulkDT
284 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Dden1DS
285 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Dden1DT
286 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Scof
287 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Tcof
288 real(r8),
dimension(IminS:ImaxS,N(ng)) :: wrk
290 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_DbulkDS
291 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_DbulkDT
292 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Dden1DS
293 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Dden1DT
294 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Scof
295 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Tcof
296 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_wrk
298 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bulk
299 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bulk0
300 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bulk1
301 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bulk2
302 real(r8),
dimension(IminS:ImaxS,N(ng)) :: den
303 real(r8),
dimension(IminS:ImaxS,N(ng)) :: den1
305 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bulk
306 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bulk0
307 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bulk1
308 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bulk2
309 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_den
310 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_den1
312# ifdef VAR_RHO_2D_NOT_YET
313 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhoA1
314 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhoS1
317# include "set_bounds.h"
327# ifdef BV_FREQUENCY_NOT_YET
344# ifdef EOS_TDERIVATIVE
345 ad_dbulkds(i,k)=0.0_r8
346 ad_dbulkdt(i,k)=0.0_r8
347 ad_dden1ds(i,k)=0.0_r8
348 ad_dden1dt(i,k)=0.0_r8
373# ifdef BV_FREQUENCY_NOT_YET
381 & lbi, ubi, lbj, ubj, 0, n(ng), &
386# ifdef VAR_RHO_2D_NOT_YET
394 & lbi, ubi, lbj, ubj, &
399# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
400 defined bulk_fluxes_not_yet
408 & lbi, ubi, lbj, ubj, &
412# ifdef LMD_DDMIX_NOT_YET
420 & lbi, ubi, lbj, ubj, 0, n(ng), &
426# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
434 & lbi, ubi, lbj, ubj, 1, n(ng), &
446 & lbi, ubi, lbj, ubj, 1, n(ng), &
454# ifdef BV_FREQUENCY_NOT_YET
460 & lbi, ubi, lbj, ubj, 0, n(ng), &
463# ifdef VAR_RHO_2D_NOT_YET
469 & lbi, ubi, lbj, ubj, &
476 & lbi, ubi, lbj, ubj, &
479# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
480 defined bulk_fluxes_not_yet
486 & lbi, ubi, lbj, ubj, &
493 & lbi, ubi, lbj, ubj, &
495# ifdef LMD_DDMIX_NOT_YET
501 & lbi, ubi, lbj, ubj, 0, n(ng), &
505# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
511 & lbi, ubi, lbj, ubj, 1, n(ng), &
519 & lbi, ubi, lbj, ubj, 1, n(ng), &
530 tt=max(-2.0_r8,t(i,j,k,nrhs,
itemp))
532 ts=max(0.0_r8,t(i,j,k,nrhs,
isalt))
554# ifdef EOS_TDERIVATIVE
556 dcdt(0)=
q01+tt*(2.0_r8*
q02+tt*(3.0_r8*
q03+tt*(4.0_r8*
q04+ &
558 dcdt(1)=
u01+tt*(2.0_r8*
u02+tt*(3.0_r8*
u03+tt*4.0_r8*
u04))
560 dcdt(3)=
a01+tt*(2.0_r8*
a02+tt*(3.0_r8*
a03+tt*4.0_r8*
a04))
561 dcdt(4)=
b01+tt*(2.0_r8*
b02+tt*3.0_r8*
b03)
563 dcdt(6)=
e01+tt*(2.0_r8*
e02+tt*3.0_r8*
e03)
568 d2cd2t(0)=2.0_r8*
q02+tt*(6.0_r8*
q03+tt*(12.0_r8*
q04+ &
570 d2cd2t(1)=2.0_r8*
u02+tt*(6.0_r8*
u03+tt*12.0_r8*
u04)
572 d2cd2t(3)=2.0_r8*
a02+tt*(6.0_r8*
a03+tt*12.0_r8*
a04)
573 d2cd2t(4)=2.0_r8*
b02+tt*6.0_r8*
b03
575 d2cd2t(6)=2.0_r8*
e02+tt*6.0_r8*
e03
584 den1(i,k)=c(0)+ts*(c(1)+sqrtts*c(2)+ts*
w00)
586# ifdef EOS_TDERIVATIVE
592 dden1ds(i,k)=c(1)+1.5_r8*c(2)*sqrtts+2.0_r8*
w00*ts
593 dden1dt(i,k)=dcdt(0)+ts*(dcdt(1)+sqrtts*dcdt(2))
598 bulk0(i,k)=c(3)+ts*(c(4)+sqrtts*c(5))
599 bulk1(i,k)=c(6)+ts*(c(7)+sqrtts*
g00)
600 bulk2(i,k)=c(8)+ts*c(9)
601 bulk(i,k)=bulk0(i,k)-tp*(bulk1(i,k)-tp*bulk2(i,k))
603# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
604 defined bulk_fluxes_not_yet
610 dbulkds(i,k)=c(4)+sqrtts*1.5_r8*c(5)- &
611 & tp*(c(7)+sqrtts*1.5_r8*
g00-tp*c(9))
612 dbulkdt(i,k)=dcdt(3)+ts*(dcdt(4)+sqrtts*dcdt(5))- &
613 & tp*(dcdt(6)+ts*dcdt(7)- &
614 & tp*(dcdt(8)+ts*dcdt(9)))
621 cff=1.0_r8/(bulk(i,k)+tpr10)
622 den(i,k)=den1(i,k)*bulk(i,k)*cff
623# if defined SEDIMENT_NOT_YET && defined SED_DENS_NOT_YET
626 cff1=1.0_r8/
srho(ised,ng)
628 & t(i,j,k,nrhs,
idsed(ised))* &
629 & (
srho(ised,ng)-den(i,k))*cff1
631 den(i,k)=den(i,k)+sedden
633 den(i,k)=den(i,k)-1000.0_r8
635 den(i,k)=den(i,k)*rmask(i,j)
640# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
641 defined bulk_fluxes_not_yet
648# ifdef LMD_DDMIX_NOT_YET
654 tpr10=0.1_r8*z_r(i,j,k)
661 wrk(i,k)=(den(i,k)+1000.0_r8)*cff*cff
662 tcof(i,k)=-(dbulkdt(i,k)*cff1+ &
664 scof(i,k)= (dbulkds(i,k)*cff1+ &
678# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
682 ad_pden(i,j,k)=ad_pden(i,k)*rmask(i,j)
686 ad_den1(i,k)=ad_den1(i,k)+ad_pden(i,j,k)
687 ad_pden(i,j,k)=0.0_r8
691 ad_den(i,k)=ad_den(i,k)+ad_rho(i,j,k)
696# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
697 defined bulk_fluxes_not_yet
704# ifdef LMD_DDMIX_NOT_YET
713 cff=1.0_r8/wrk(i,n(ng))
717 ad_scof(i,n(ng))=ad_scof(i,n(ng))+cff*ad_beta(i,j)
718 ad_tcof(i,n(ng))=ad_tcof(i,n(ng))+cff*ad_alpha(i,j)
719 ad_cff=ad_beta(i,j)*scof(i,n(ng))+ &
720 & ad_alpha(i,j)*tcof(i,n(ng))
725 ad_wrk(i,n(ng))=ad_wrk(i,n(ng))-cff*cff*ad_cff
730 tpr10=0.1_r8*z_r(i,j,k)
734# ifdef LMD_DDMIX_NOT_YET
739 adfac=ad_alfaobeta(i,j,k)/(scof(i,k)*scof(i,k))
740 ad_tcof(i,k)=ad_tcof(i,k)+scof(i,k)*adfac
741 ad_scof(i,k)=ad_scof(i,k)-tcof(i,k)*adfac
742 ad_alfaobeta(i,j,k)=0.0_r8
749 ad_dbulkds(i,k)=ad_dbulkds(i,k)+ad_scof(i,k)*cff1
750 ad_dden1ds(i,k)=ad_dden1ds(i,k)+ad_scof(i,k)*cff2
751 ad_cff1=dbulkds(i,k)*ad_scof(i,k)
752 ad_cff2=dden1ds(i,k)*ad_scof(i,k)
759 ad_dbulkdt(i,k)=ad_dbulkdt(i,k)-ad_tcof(i,k)*cff1
760 ad_dden1dt(i,k)=ad_dden1dt(i,k)-ad_tcof(i,k)*cff2
761 ad_cff1=ad_cff1-dbulkdt(i,k)*ad_tcof(i,k)
762 ad_cff2=ad_cff2-dden1dt(i,k)*ad_tcof(i,k)
767 adfac=cff*ad_wrk(i,k)
768 ad_den(i,k)=ad_den(i,k)+cff*adfac
769 ad_cff=ad_cff+2.0_r8*(den(i,k)+1000.0_r8)*adfac
773 ad_bulk(i,k)=ad_bulk(i,k)+ad_cff2*cff
774 ad_cff=ad_cff+bulk(i,k)*ad_cff2
778 ad_tpr10=ad_tpr10+ad_cff1*den1(i,k)
779 ad_den1(i,k)=ad_den1(i,k)+tpr10*ad_cff1
783 ad_bulk(i,k)=ad_bulk(i,k)+ad_cff
784 ad_tpr10=ad_tpr10+ad_cff
788 ad_z_r(i,j,k)=ad_z_r(i,j,k)+0.1_r8*ad_tpr10
794# if defined BV_FREQUENCY_NOT_YET
804 ad_bvf(i,j,n(ng))=0.0_r8
811 bulk_up=bulk0(i,k+1)- &
812 & z_w(i,j,k)*(bulk1(i,k+1)- &
813 & bulk2(i,k+1)*z_w(i,j,k))
814 bulk_dn=bulk0(i,k )- &
815 & z_w(i,j,k)*(bulk1(i,k )- &
816 & bulk2(i,k )*z_w(i,j,k))
817 cff1=1.0_r8/(bulk_up+0.1_r8*z_w(i,j,k))
818 cff2=1.0_r8/(bulk_dn+0.1_r8*z_w(i,j,k))
819 den_up=cff1*(den1(i,k+1)*bulk_up)
820 den_dn=cff2*(den1(i,k )*bulk_dn)
821 cff3=1.0_r8/(0.5_r8*(den_up+den_dn)* &
822 & (z_r(i,j,k+1)-z_r(i,j,k)))
826 adfac=-
g*ad_bvf(i,j,k)
828 ad_cff3=ad_cff3+(den_up-den_dn)*adfac
829 ad_den_up=ad_den_up+adfac1
830 ad_den_dn=ad_den_dn-adfac1
838 adfac=-cff3*cff3*0.5_r8*ad_cff3
839 adfac1=adfac*(z_r(i,j,k+1)-z_r(i,j,k))
840 adfac2=adfac*(den_up+den_dn)
841 ad_z_r(i,j,k )=ad_z_r(i,j,k )-adfac2
842 ad_z_r(i,j,k+1)=ad_z_r(i,j,k+1)+adfac2
843 ad_den_up=ad_den_up+adfac1
844 ad_den_dn=ad_den_dn+adfac1
853 adfac1=cff2*ad_den_dn
854 adfac2=cff1*ad_den_up
855 ad_cff2=ad_cff2+(den1(i,k )*bulk_dn)*ad_den_dn
856 ad_cff1=ad_cff1+(den1(i,k+1)*bulk_up)*ad_den_up
857 ad_den1(i,k )=ad_den1(i,k )+bulk_dn*adfac1
858 ad_den1(i,k+1)=ad_den1(i,k+1)+bulk_up*adfac2
859 ad_bulk_dn=ad_bulk_dn+den1(i,k )*adfac1
860 ad_bulk_up=ad_bulk_up+den1(i,k+1)*adfac2
866 adfac1=-cff2*cff2*ad_cff2
867 adfac2=-cff1*cff1*ad_cff1
868 ad_bulk_dn=ad_bulk_dn+adfac1
869 ad_bulk_up=ad_bulk_up+adfac2
870 ad_z_w(i,j,k)=ad_z_w(i,j,k)+ &
871 & 0.1_r8*(adfac1+adfac2)
887 adfac1=z_w(i,j,k)*ad_bulk_dn
888 adfac2=z_w(i,j,k)*ad_bulk_up
889 ad_bulk0(i,k )=ad_bulk0(i,k )+ad_bulk_dn
890 ad_bulk0(i,k+1)=ad_bulk0(i,k+1)+ad_bulk_up
891 ad_z_w(i,j,k)=ad_z_w(i,j,k)- &
893 & bulk2(i,k )*z_w(i,j,k)- &
894 & bulk2(i,k ))*ad_bulk_dn- &
896 & bulk2(i,k+1)*z_w(i,j,k)- &
897 & bulk2(i,k+1))*ad_bulk_up
898 ad_bulk1(i,k )=ad_bulk1(i,k )-adfac1
899 ad_bulk1(i,k+1)=ad_bulk1(i,k+1)-adfac2
900 ad_bulk2(i,k )=ad_bulk2(i,k )+z_w(i,j,k)*adfac1
901 ad_bulk2(i,k+1)=ad_bulk2(i,k+1)+z_w(i,j,k)*adfac2
908# ifdef VAR_RHO_2D_NOT_YET
919 cff1=den(i,n(ng))*hz(i,j,n(ng))
920 rhos1(i,j)=0.5_r8*cff1*hz(i,j,n(ng))
925 cff1=den(i,k)*hz(i,j,k)
926 rhos1(i,j)=rhos1(i,j)+hz(i,j,k)*(rhoa1(i,j)+0.5_r8*cff1)
927 rhoa1(i,j)=rhoa1(i,j)+cff1
933 cff1=1.0_r8/(z_w(i,j,n(ng))-z_w(i,j,0))
938 adfac=2.0_r8*cff2*cff1*ad_rhos(i,j)
939 ad_cff1=2.0_r8*rhos1(i,j)*adfac
940 ad_rhos(i,j)=cff1*adfac
943 adfac=cff2*ad_rhoa(i,j)
944 ad_cff1=ad_cff1+rhoa1(i,j)*adfac
945 ad_rhoa(i,j)=cff1*adfac
948 adfac=-cff1*cff1*ad_cff1
949 ad_z_w(i,j,n(ng))=ad_z_w(i,j,n(ng))+adfac
950 ad_z_w(i,j,0 )=ad_z_w(i,j,0 )-adfac
957 cff1=den(i,n(ng))*hz(i,j,n(ng))
962 cff1=den(i,k)*hz(i,j,k)
970 adfac=hz(i,j,k)*ad_rhos(i,j)
971 ad_rhoa(i,j)=ad_rhoa(i,j)+adfac
972 ad_cff1=ad_cff1+0.5_r8*adfac
973 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
974 & (rhoa1(i,j)+0.5_r8*cff1)*ad_rhos(i,j)
978 ad_den(i,k)=ad_den(i,k)+hz(i,j,k)*ad_cff1
979 ad_hz(i,j,k)=ad_hz(i,j,k)+den(i,k)*ad_cff1
981 rhoa1(i,j)=rhoa1(i,j)+cff1
985 cff1=den(i,n(ng))*hz(i,j,n(ng))
993 adfac=0.5_r8*ad_rhos(i,j)
994 ad_cff1=ad_cff1+hz(i,j,n(ng))*adfac
995 ad_hz(i,j,n(ng))=ad_hz(i,j,n(ng))+cff1*adfac
1000 ad_den(i,n(ng))=ad_den(i,n(ng))+hz(i,j,n(ng))*ad_cff1
1001 ad_hz(i,j,n(ng))=ad_hz(i,j,n(ng))+den(i,n(ng))*ad_cff1
1016 tt=max(-2.0_r8,t(i,j,k,nrhs,
itemp))
1018 ts=max(0.0_r8,t(i,j,k,nrhs,
isalt))
1042# ifdef EOS_TDERIVATIVE
1044 dcdt(0)=
q01+tt*(2.0_r8*
q02+tt*(3.0_r8*
q03+tt*(4.0_r8*
q04+ &
1046 dcdt(1)=
u01+tt*(2.0_r8*
u02+tt*(3.0_r8*
u03+tt*4.0_r8*
u04))
1047 dcdt(2)=
v01+tt*2.0_r8*
v02
1048 dcdt(3)=
a01+tt*(2.0_r8*
a02+tt*(3.0_r8*
a03+tt*4.0_r8*
a04))
1049 dcdt(4)=
b01+tt*(2.0_r8*
b02+tt*3.0_r8*
b03)
1050 dcdt(5)=
d01+tt*2.0_r8*
d02
1051 dcdt(6)=
e01+tt*(2.0_r8*
e02+tt*3.0_r8*
e03)
1052 dcdt(7)=
f01+tt*2.0_r8*
f02
1053 dcdt(8)=
g02+tt*2.0_r8*
g03
1054 dcdt(9)=
h01+tt*2.0_r8*
h02
1056 d2cd2t(0)=2.0_r8*
q02+tt*(6.0_r8*
q03+tt*(12.0_r8*
q04+ &
1058 d2cd2t(1)=2.0_r8*
u02+tt*(6.0_r8*
u03+tt*12.0_r8*
u04)
1059 d2cd2t(2)=2.0_r8*
v02
1060 d2cd2t(3)=2.0_r8*
a02+tt*(6.0_r8*
a03+tt*12.0_r8*
a04)
1061 d2cd2t(4)=2.0_r8*
b02+tt*6.0_r8*
b03
1062 d2cd2t(5)=2.0_r8*
d02
1063 d2cd2t(6)=2.0_r8*
e02+tt*6.0_r8*
e03
1064 d2cd2t(7)=2.0_r8*
f02
1065 d2cd2t(8)=2.0_r8*
g03
1066 d2cd2t(9)=2.0_r8*
h02
1073 cff=1.0_r8/(bulk(i,k)+tpr10)
1077 ad_den(i,k)=ad_den(i,k)*rmask(i,j)
1079# if defined SEDIMENT_NOT_YET && defined SED_DENS_NOT_YET
1082 ad_sedden=ad_sedden+ad_den(i,k)
1085 cff1=1.0_r8/
srho(ised,ng)
1092 adfac=cff1*ad_sedden
1093 ad_den(i,k)=ad_den(i,k)- &
1094 & t(i,j,k,nrhs,
idsed(ised))*adfac
1095 ad_t(i,j,k,nrhs,itrc)=ad_t(i,j,k,nrhs,itrc)+ &
1096 & (
srho(ised,ng)-den(i,k))*adfac
1106 adfac1=den1(i,k)*ad_den(i,k)
1107 ad_den1(i,k)=ad_den1(i,k)+bulk(i,k)*cff*ad_den(i,k)
1108 ad_bulk(i,k)=ad_bulk(i,k)+cff*adfac1
1109 ad_cff=ad_cff+bulk(i,k)*adfac1
1113 adfac=-cff*cff*ad_cff
1114 ad_bulk(i,k)=ad_bulk(i,k)+adfac
1115 ad_tpr10=ad_tpr10+adfac
1118# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
1119 defined bulk_fluxes_not_yet
1136 adfac1=ts*ad_dbulkdt(i,k)
1137 adfac2=tp*ad_dbulkdt(i,k)
1139 ad_dcdt(3)=ad_dcdt(3)+ad_dbulkdt(i,k)
1140 ad_dcdt(4)=ad_dcdt(4)+adfac1
1141 ad_dcdt(5)=ad_dcdt(5)+sqrtts*adfac1
1142 ad_dcdt(6)=ad_dcdt(6)-adfac2
1143 ad_dcdt(7)=ad_dcdt(7)-ts*adfac2
1144 ad_dcdt(8)=ad_dcdt(8)+adfac3
1145 ad_dcdt(9)=ad_dcdt(9)+ts*adfac3
1146 ad_sqrtts=ad_sqrtts+dcdt(5)*adfac1
1148 & ad_dbulkdt(i,k)* &
1149 & (dcdt(4)+sqrtts*dcdt(5)- &
1150 & tp*(dcdt(7)-tp*dcdt(9)))
1152 & ad_dbulkdt(i,k)* &
1153 & (dcdt(6)+ts*dcdt(7)- &
1154 & 2.0_r8*tp*(dcdt(8)+ts*dcdt(9)))
1155 ad_dbulkdt(i,k)=0.0_r8
1164 adfac1=1.5_r8*ad_dbulkds(i,k)
1165 adfac2=tp*ad_dbulkds(i,k)
1166 ad_c(4)=ad_c(4)+ad_dbulkds(i,k)
1167 ad_c(5)=ad_c(5)+sqrtts*adfac1
1168 ad_c(7)=ad_c(7)-adfac2
1169 ad_c(9)=ad_c(9)+tp*adfac2
1170 ad_sqrtts=ad_sqrtts+ &
1171 & (c(5)-tp*
g00)*adfac1
1173 & ad_dbulkds(i,k)* &
1174 & (c(7)+sqrtts*1.5_r8*
g00-tp*c(9)- &
1176 ad_dbulkds(i,k)=0.0_r8
1185 ad_tt=ad_tt+d2cd2t(9)*ad_dcdt(9)+ &
1186 & d2cd2t(8)*ad_dcdt(8)+ &
1187 & d2cd2t(7)*ad_dcdt(7)+ &
1188 & d2cd2t(6)*ad_dcdt(6)+ &
1189 & d2cd2t(5)*ad_dcdt(5)+ &
1190 & d2cd2t(4)*ad_dcdt(4)+ &
1191 & d2cd2t(3)*ad_dcdt(3)
1209 adfac=tp*ad_bulk(i,k)
1210 ad_bulk0(i,k)=ad_bulk0(i,k)+ad_bulk(i,k)
1211 ad_bulk1(i,k)=ad_bulk1(i,k)-adfac
1212 ad_bulk2(i,k)=ad_bulk2(i,k)+adfac*tp
1214 & ad_bulk(i,k)*(bulk1(i,k)-tp*bulk2(i,k))+ &
1219 ad_c(8)=ad_c(8)+ad_bulk2(i,k)
1220 ad_c(9)=ad_c(9)+ts*ad_bulk2(i,k)
1221 ad_ts=ad_ts+ad_bulk2(i,k)*c(9)
1222 ad_bulk2(i,k)=0.0_r8
1227 adfac=ts*ad_bulk1(i,k)
1228 ad_c(6)=ad_c(6)+ad_bulk1(i,k)
1229 ad_c(7)=ad_c(7)+adfac
1230 ad_ts=ad_ts+ad_bulk1(i,k)*(c(7)+sqrtts*
g00)
1231 ad_sqrtts=ad_sqrtts+adfac*
g00
1232 ad_bulk1(i,k)=0.0_r8
1238 adfac=ts*ad_bulk0(i,k)
1239 ad_c(3)=ad_c(3)+ad_bulk0(i,k)
1240 ad_c(4)=ad_c(4)+adfac
1241 ad_c(5)=ad_c(5)+sqrtts*adfac
1242 ad_ts=ad_ts+ad_bulk0(i,k)*(c(4)+sqrtts*c(5))
1243 ad_sqrtts=ad_sqrtts+c(5)*adfac
1244 ad_bulk0(i,k)=0.0_r8
1253 ad_tt=ad_tt+ad_c(9)*dcdt(9)+ &
1254 & ad_c(8)*dcdt(8)+ &
1255 & ad_c(7)*dcdt(7)+ &
1256 & ad_c(6)*dcdt(6)+ &
1257 & ad_c(5)*dcdt(5)+ &
1258 & ad_c(4)*dcdt(4)+ &
1268# ifdef EOS_TDERIVATIVE
1279 adfac1=ts*ad_dden1dt(i,k)
1280 ad_dcdt(0)=ad_dcdt(0)+ad_dden1dt(i,k)
1281 ad_dcdt(1)=ad_dcdt(1)+adfac1
1282 ad_dcdt(2)=ad_dcdt(2)+sqrtts*adfac1
1284 & (dcdt(1)+sqrtts*dcdt(2))*ad_dden1dt(i,k)
1285 ad_sqrtts=ad_sqrtts+dcdt(2)*adfac1
1286 ad_dden1dt(i,k)=0.0_r8
1292 adfac1=1.5_r8*ad_dden1ds(i,k)
1293 ad_c(1)=ad_c(1)+ad_dden1ds(i,k)
1294 ad_c(2)=ad_c(2)+sqrtts*adfac1
1295 ad_ts=ad_ts+2.0_r8*
w00*ad_dden1ds(i,k)
1296 ad_sqrtts=ad_sqrtts+c(2)*adfac1
1297 ad_dden1ds(i,k)=0.0_r8
1302 ad_tt=ad_tt+d2cd2t(2)*ad_dcdt(2)+ &
1303 & d2cd2t(1)*ad_dcdt(1)+ &
1304 & d2cd2t(0)*ad_dcdt(0)
1318 adfac=ts*ad_den1(i,k)
1319 ad_c(0)=ad_c(0)+ad_den1(i,k)
1320 ad_c(1)=ad_c(1)+adfac
1321 ad_c(2)=ad_c(2)+adfac*sqrtts
1323 & ad_den1(i,k)*(c(1)+sqrtts*c(2)+ts*
w00)+ &
1325 ad_sqrtts=ad_sqrtts+adfac*c(2)
1331 ad_tt=ad_tt+ad_c(2)*dcdt(2)+ &
1332 & ad_c(1)*dcdt(1)+ &
1343 ad_tp=ad_tp+0.1_r8*ad_tpr10
1347 ad_z_r(i,j,k)=ad_z_r(i,j,k)+ad_tp
1351 IF (ts.ne.0.0_r8)
THEN
1354 ad_ts=ad_ts+0.5_r8*ad_sqrtts/sqrt(ts)
1364 ad_t(i,j,k,nrhs,
isalt)=ad_t(i,j,k,nrhs,
isalt)+ &
1365 & (0.5_r8-sign(0.5_r8, &
1366 & -t(i,j,k,nrhs,
isalt)))* &
1380 ad_t(i,j,k,nrhs,
itemp)=ad_t(i,j,k,nrhs,
itemp)+ &
1381 & (0.5_r8-sign(0.5_r8,-2.0_r8- &
1382 & t(i,j,k,nrhs,
itemp)))* &