7 pfsol,pfnsol,psfteau,psfu,psfv,pseatemp)
68 USE yomhook
,ONLY : lhook, dr_hook
69 USE parkind1
,ONLY : jprb
77 TYPE(ocean_t),
INTENT(INOUT) :: o
81 REAL,
DIMENSION(:) ,
INTENT(IN) :: pfsol
82 REAL,
DIMENSION(:) ,
INTENT(IN) :: pfnsol
83 REAL,
DIMENSION(:) ,
INTENT(IN) :: psfteau
84 REAL,
DIMENSION(:) ,
INTENT(IN) :: psfu
85 REAL,
DIMENSION(:) ,
INTENT(IN) :: psfv
87 REAL,
DIMENSION(:) ,
INTENT(OUT) :: pseatemp
90 COMPLEX,
DIMENSION(NOCKMIN:NOCKMAX,2) :: zuc
91 COMPLEX,
DIMENSION(NOCKMIN:NOCKMAX) :: zai, zbi, zci
92 COMPLEX,
DIMENSION(NOCKMIN:NOCKMAX) :: zau, zbu, zcu, zyu
93 COMPLEX,
DIMENSION(NOCKMIN:NOCKMAX) :: zomu,zwu
95 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zseat, zseas, zseae, zseav, zseau
96 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zseat_rel, zseas_rel, zseav_rel, zseau_rel
98 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: za, zb, zc, za2, zb2, zc2, zyt, zys, zye
100 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: advt,advs
101 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: advu,advv
102 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: adve
104 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: ztdtrel
105 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zsdtrel
106 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zudtrel
107 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zvdtrel
109 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zle,zkmel,zkmelm
110 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zkmes,zkmed,zkmewm,zkmews
111 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zpth,zpdy
112 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: ztende,zdiffv
113 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zomt, zoms, zome
114 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zwt, zws, zwe
115 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zu,zv,zt,zs,ze
116 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zzdrho
117 REAL,
DIMENSION(NOCKMIN:NOCKMAX) :: zdtfsol
121 REAL :: zsfu, zsfv, zfnsol, zfsol, zsfteau, zlat
122 REAL :: zseahmo, zseatemp
124 REAL :: zseuil,zemin,zemax,ztest
128 REAL :: zee,zpot,zxlme,zxlpe,zxrod,zaux,zxdl
129 REAL :: zdu,zdv,zrich,zdrhodz
130 REAL :: zt1, zt2, zt3, zs1, zs2
133 INTEGER :: j,jj,jpt,jin,ikhml
135 REAL(KIND=JPRB) :: zhook_handle
144 IF (lhook) CALL dr_hook(
'MIXTL_N',0,zhook_handle)
240 zsfteau = psfteau(jpt)
243 zews = sqrt(zsfu**2+zsfv**2)/xrhosw
244 zf = 4.*xpi*sin(zlat*xpi/180.)/86400.
248 zseat(j) = o%XSEAT(jpt,j)
249 zseas(j) = o%XSEAS(jpt,j)
250 zseau(j) = o%XSEAU(jpt,j)
251 zseav(j) = o%XSEAV(jpt,j)
252 zseae(j) = o%XSEAE(jpt,j)
254 zseau_rel(j) = or%XSEAU_REL(jpt,j)
255 zseav_rel(j) = or%XSEAV_REL(jpt,j)
256 zseat_rel(j) = or%XSEAT_REL(jpt,j)
257 zseas_rel(j) = or%XSEAS_REL(jpt,j)
259 IF (j>=iup .AND. zseae(j)>=(zemin*sqrt(2.))) zseahmo = zseahmo-xdz1(j)
261 o%XSEAHMO(jpt) = zseahmo
275 zzdrho(j)=(zseat(j)-zt1)*(zt2+zt3*(zseat(j)-zt1)) + zs2*(zseas(j)-zs1)
303 IF ((ztest==0.).AND.(zseae(j)>=zseuil))
THEN
310 IF (or%LDIAPYCNAL)
THEN
313 zdrhodz=(zzdrho(j)-zzdrho(j+1))/xdz1(j)
314 zdu=zseau(j+1)-zseau(j)
315 zdv=zseav(j+1)-zseav(j)
316 IF((zdu*zdu+zdv*zdv).LE.1.e-7)
THEN
319 zrich = -zalg*zdrhodz/(zdu**2+zdv**2)/xk4(j)
327 ELSEIF(zrich>=0.)
THEN
328 zkmes(j) = 5.e-3*(1.-(zrich/0.7)*(zrich/0.7))**3
345 zxrod=(zzdrho(j)+ zzdrho(j+1))*0.5
351 zaux=zpot + xdz2(jj)*(zzdrho(jj)-zxrod)
359 zxlme=2.*(xz2(j)-xzhoc(j+1))/(zzdrho(j+1)-zxrod)/zalg
360 zxlme=sqrt(zxlme)*zseae(j)
363 zxdl=(zee-zpot)/(zzdrho(jin+1)-zxrod)
372 zaux=zpot + xdz2(jj+1)*(zxrod-zzdrho(jj+1))
376 zxlpe=zxlpe+xdz2(jj+1)
380 zxlpe=2.*(xz2(j)-xzhoc(j))/(zzdrho(j)-zxrod)/zalg
381 zxlpe=sqrt(zxlpe)*zseae(j)
383 IF (jin/=nockmin)
THEN
384 zxdl=- (zee-zpot)/(zzdrho(jin)-zxrod)
389 zle(j)=sqrt(zxlme*zxlpe)
390 zkmel(j)=xckl*zle(j)*zseae(j)
394 zle(ibot)=zle(ibot-1)
395 zkmel(ibot)=xckl*zle(ibot)*zseae(ibot)
398 zkmelm(iup)=zkmel(iup)
400 zkmelm(j)= (zkmel(j)+zkmel(j-1))/2.
409 IF (or%LREL_CUR)
THEN
410 zudtrel(j) = - (zseau(j)-zseau_rel(j)) / or%XTAU_REL
411 zvdtrel(j) = - (zseav(j)-zseav_rel(j)) / or%XTAU_REL
414 zdtfsol(j) = xray(j)*zfsol/xdz2(j)
423 ztdtrel(j) = - (zseat(j)-zseat_rel(j)) / or%XTAU_REL
424 zsdtrel(j) = - (zseas(j)-zseas_rel(j)) / or%XTAU_REL
428 IF (or%LFLX_CORR)
THEN
432 ztdtrel(iup) = or%XQCORR *(zseat_rel(iup)-zseat(iup)) / (xrhosw*xcpsw)
433 zfnsol = zfnsol + ztdtrel(iup)
437 zdtfnsol = zfnsol/xdz2(iup)
451 za(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmews(j-1) + zkmed(j-1))
452 zai(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmewm(j-1) + zkmed(j-1))
453 za2(j) = o%XOCEAN_TSTEP * xk2(j) * zkmelm(j)
455 zc(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmews(j) + zkmed(j))
456 zci(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmewm(j) + zkmed(j))
457 zc2(j) = o%XOCEAN_TSTEP * xk3(j) * zkmelm(j+1)
460 zb(j) = 1. - za(j) - zc(j)
461 zbi(j) = 1. - zai(j) - zci(j)
462 zb2(j) = 1. - za2(j) - zc2(j) + o%XOCEAN_TSTEP * zseae(j)/zle(j)/xzce
464 zau(j) = zai(j) * (1.,0.)
465 zcu(j) = zci(j) * (1.,0.)
466 zbu(j) = zbi(j) * (1.,0.) + o%XOCEAN_TSTEP * zf * xgama * (0.,1.)
469 zomt(j) = 1./(zb(j) - za(j) * zomt(j-1) * zc(j-1))
470 zoms(j) = 1./(zb(j) - za(j) * zoms(j-1) * zc(j-1))
471 zomu(j) = 1./(zbu(j) - zau(j) * zomu(j-1) * zcu(j-1))
472 zome(j) = 1./(zb2(j) - za2(j) * zome(j-1) * zc2(j-1))
475 zyt(j) = zseat(j) + o%XOCEAN_TSTEP * (zdtfsol(j) + advt(j))
476 zys(j) = zseas(j) + o%XOCEAN_TSTEP * ( advs(j))
478 IF (.NOT.or%LFLX_CORR) zyt(j) = zyt(j) + o%XOCEAN_TSTEP * ztdtrel(j)
479 zys(j) = zys(j) + o%XOCEAN_TSTEP * zsdtrel(j)
482 zuc(j,1) = zseau(j)*(1.,0.) + zseav(j)*(0.,1.)
483 zyu(j) = zuc(j,1) + o%XOCEAN_TSTEP * (zuc(j,1)*zf*(1.-xgama)*(0.,-1.) + advu(j)*(1.,0.) + advv(j)*(0.,1.))
485 IF (or%LREL_CUR) zyu(j) = zyu(j) + o%XOCEAN_TSTEP * (zudtrel(j)*(1.,0.) + zvdtrel(j)*(0.,1.))
488 zdrhodz = (zzdrho(j)-zzdrho(j+1))/xdz1(j)
489 zdu = zseau(j+1)-zseau(j)
490 zdv = zseav(j+1)-zseav(j)
492 zpth(j) = xckl * zle(j) * zalg * zdrhodz
493 zpdy(j) = xckl * zle(j) * xk4(j) * (zdu**2+zdv**2)
499 zye(j) = zseae(j) + o%XOCEAN_TSTEP * (0.5 * zseae(j)**2/zle(j)/xzce + adve(j)) + zpth(j) + zpdy(j)
502 zyt(j) = zyt(j) + o%XOCEAN_TSTEP * zdtfnsol
503 zys(j) = zys(j) + o%XOCEAN_TSTEP * zseas(iup) * zsfteau / xdz2(iup)
504 zyu(j) = zyu(j) - o%XOCEAN_TSTEP * ( zsfu*(1.,0.) + zsfv*(0.,1.) ) / xdz2(iup) / xrhosw
505 zye(j) = zye(j) + o%XOCEAN_TSTEP * zews / xdz1(iup)
509 zwt(j) = zomt(j) * (zyt(j)- za(j)*zwt(j-1))
510 zws(j) = zoms(j) * (zys(j)- za(j)*zws(j-1))
511 zwu(j) = zomu(j) * (zyu(j)- zau(j)*zwu(j-1))
512 zwe(j) = zome(j) * (zye(j)- za2(j)*zwe(j-1))
520 zuc(ibot,2) = zwu(ibot)
523 zt(j) = zwt(j) - zc(j) * zomt(j) * zt(j+1)
524 zs(j) = zws(j) - zc(j) * zoms(j) * zs(j+1)
525 zuc(j,2) = zwu(j) - zcu(j) * zomu(j) * zuc(j+1,2)
526 ze(j) = zwe(j) - zc2(j) * zome(j) * ze(j+1)
531 zu(j) = real(zuc(j,2))
532 zv(j) = aimag(zuc(j,2))
534 ze(j) = max(zemin,ze(j))
536 ze(j) = min(ze(j),zemax)
552 IF (o%LPROGSST) o%XSEATEND(jpt) = (zt(iup)-zseat(iup)) / o%XOCEAN_TSTEP
553 zseat(nockmin) = zt(iup)
554 zseas(nockmin) = zs(iup)
555 zseau(nockmin) = zu(iup)
556 zseav(nockmin) = zv(iup)
557 zseae(nockmin) = ze(iup)
561 IF (o%XSEABATH(jpt,j)==0.)
THEN
562 zseat(j) = zseat(j-1)
563 zseas(j) = zseas(j-1)
564 zseau(j) = zseau(j-1)
565 zseav(j) = zseav(j-1)
566 zseae(j) = zseae(j-1)
571 zseatemp = zseat(iup) + xtt
572 pseatemp(jpt) = zseatemp
575 o%XLE (jpt,j) = zle(j)
576 o%XLK (jpt,j) = zle(j)
577 o%XKMEL (jpt,j) = zkmel(j)
578 o%XKMELM(jpt,j) = zkmelm(j)
582 o%XSEAT(jpt,j) = zseat(j)
583 o%XSEAS(jpt,j) = zseas(j)
584 o%XSEAU(jpt,j) = zseau(j)
585 o%XSEAV(jpt,j) = zseav(j)
586 o%XSEAE(jpt,j) = zseae(j)
587 o%XDTFSOL(jpt,j) = zdtfsol(j)
590 o%XDTFNSOL(jpt) = zdtfnsol
594 IF (lhook) CALL dr_hook(
'MIXTL_N',1,zhook_handle)
subroutine mixtl_n(O, OR, SG, PFSOL, PFNSOL, PSFTEAU, PSFU, PSFV, PSEATEMP)