98 & LBi, UBi, LBj, UBj, &
99 & IminS, ImaxS, JminS, JmaxS, &
101 & h, z_r, z_w, angler, ZoBot, &
102#if defined SG_CALC_UB
107 & Dwave, Pwave_bot, &
111 & Ubot, Vbot, Ur, Vr, &
114 & bustrcwmax, bvstrcwmax, &
129 integer,
intent(in) :: ng, tile
130 integer,
intent(in) :: LBi, UBi, LBj, UBj
131 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
132 integer,
intent(in) :: nrhs
135 integer,
intent(inout) :: Iconv(LBi:,LBj:)
137 real(r8),
intent(in) :: h(LBi:,LBj:)
138 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
139 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
140 real(r8),
intent(in) :: angler(LBi:,LBj:)
141 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
142# if defined SG_CALC_UB
143 real(r8),
intent(in) :: Hwave(LBi:,LBj:)
145 real(r8),
intent(in) :: Uwave_rms(LBi:,LBj:)
147 real(r8),
intent(in) :: Dwave(LBi:,LBj:)
148 real(r8),
intent(in) :: Pwave_bot(LBi:,LBj:)
149 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
150 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
151 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
153 real(r8),
intent(inout) :: bottom(LBi:,LBj:,:)
155 real(r8),
intent(out) :: Ubot(LBi:,LBj:)
156 real(r8),
intent(out) :: Vbot(LBi:,LBj:)
157 real(r8),
intent(out) :: Ur(LBi:,LBj:)
158 real(r8),
intent(out) :: Vr(LBi:,LBj:)
159 real(r8),
intent(out) :: bustrc(LBi:,LBj:)
160 real(r8),
intent(out) :: bvstrc(LBi:,LBj:)
161 real(r8),
intent(out) :: bustrw(LBi:,LBj:)
162 real(r8),
intent(out) :: bvstrw(LBi:,LBj:)
163 real(r8),
intent(out) :: bustrcwmax(LBi:,LBj:)
164 real(r8),
intent(out) :: bvstrcwmax(LBi:,LBj:)
165 real(r8),
intent(out) :: bustr(LBi:,LBj:)
166 real(r8),
intent(out) :: bvstr(LBi:,LBj:)
168 integer,
intent(inout) :: Iconv(LBi:UBi,LBj:UBj)
170 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
171 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
172 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
173 real(r8),
intent(in) :: angler(LBi:UBi,LBj:UBj)
174 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
175# if defined SG_CALC_UB
176 real(r8),
intent(in) :: Hwave(LBi:UBi,LBj:UBj)
178 real(r8),
intent(in) :: Uwave_rms(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: Dwave(LBi:UBi,LBj:UBj)
181 real(r8),
intent(in) :: Pwave_bot(LBi:UBi,LBj:UBj)
182 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
183 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
184 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
186 real(r8),
intent(inout) :: bottom(LBi:UBi,LBj:UBj,MBOTP)
188 real(r8),
intent(out) :: Ubot(LBi:UBi,LBj:UBj)
189 real(r8),
intent(out) :: Vbot(LBi:UBi,LBj:UBj)
190 real(r8),
intent(out) :: Ur(LBi:UBi,LBj:UBj)
191 real(r8),
intent(out) :: Vr(LBi:UBi,LBj:UBj)
192 real(r8),
intent(out) :: bustrc(LBi:UBi,LBj:UBj)
193 real(r8),
intent(out) :: bvstrc(LBi:UBi,LBj:UBj)
194 real(r8),
intent(out) :: bustrw(LBi:UBi,LBj:UBj)
195 real(r8),
intent(out) :: bvstrw(LBi:UBi,LBj:UBj)
196 real(r8),
intent(out) :: bustrcwmax(LBi:UBi,LBj:UBj)
197 real(r8),
intent(out) :: bvstrcwmax(LBi:UBi,LBj:UBj)
198 real(r8),
intent(out) :: bustr(LBi:UBi,LBj:UBj)
199 real(r8),
intent(out) :: bvstr(LBi:UBi,LBj:UBj)
206 integer :: Iter, i, j, k
208 real(r8),
parameter :: eps = 1.0e-10_r8
210 real(r8) :: Fwave_bot, Kb, Kbh, KboKb0, Kb0, Kdelta, Ustr
211 real(r8) :: anglec, anglew
212 real(r8) :: cff, cff1, cff2, cff3, og, fac, fac1, fac2
213 real(r8) :: sg_ab, sg_abokb, sg_a1, sg_b1, sg_chi, sg_c1, sg_dd
214 real(r8) :: sg_epsilon, sg_eta, sg_fofa, sg_fofb, sg_fofc, sg_fwm
215 real(r8) :: sg_kbs, sg_lambda, sg_mu, sg_phicw, sg_ro, sg_row
216 real(r8) :: sg_shdnrm, sg_shld, sg_shldcr, sg_scf, sg_ss, sg_star
217 real(r8) :: sg_ub, sg_ubokur, sg_ubouc, sg_ubouwm, sg_ur
218 real(r8) :: sg_ustarc, sg_ustarcw, sg_ustarwm, sg_znot, sg_znotp
219 real(r8) :: sg_zr, sg_zrozn, sg_z1, sg_z1ozn, sg_z2, twopi, z1, z2
221 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ab
222 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauc
223 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauw
224 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Taucwmax
225 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ur_sg
226 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vr_sg
227 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ub
228 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Ucur
229 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Umag
230 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vcur
231 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Zr
232 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: phic
233 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: phicw
234 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rheight
235 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rlength
236 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: u100
237 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: znot
238 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: znotc
240#include "set_bounds.h"
265 zr(i,j)=z_r(i,j,1)-z_w(i,j,0)
266 ur_sg(i,j)=u(i,j,1,nrhs)
267 vr_sg(i,j)=v(i,j,1,nrhs)
275 z1=z_r(i,j,k-1)-z_w(i,j,0)
276 z2=z_r(i,j,k )-z_w(i,j,0)
278 fac=1.0_r8/log(z2/z1)
281 ur_sg(i,j)=fac1*u(i,j,k-1,nrhs)+fac2*u(i,j,k,nrhs)
282 vr_sg(i,j)=fac1*v(i,j,k-1,nrhs)+fac2*v(i,j,k,nrhs)
305 fwave_bot=twopi/max(pwave_bot(i,j),0.05_r8)
310 kb0=fwave_bot*fwave_bot*og
311 IF (kb0*h(i,j).ge.1.0_r8)
THEN
314 kb=fwave_bot/sqrt(
g*h(i,j))
324 kdelta=(1.0_r8-kbokb0*tanh(kbh))/ &
325 & (1.0_r8+kbh*(kbokb0-1.0_r8/kbokb0))
326 iterate=abs(kb*kdelta) .ge.
sg_tol
327 kb=kb*(1.0_r8+kdelta)
330 ab(i,j)=0.5_r8*hwave(i,j)/sinh(kb*h(i,j))+eps
331 ub(i,j)=fwave_bot*ab(i,j)+eps
333 ub(i,j)=abs(uwave_rms(i,j))+eps
334 ab(i,j)=ub(i,j)/fwave_bot+eps
339 ucur(i,j)=0.5_r8*(ur_sg(i,j)+ur_sg(i+1,j))
340 vcur(i,j)=0.5_r8*(vr_sg(i,j)+vr_sg(i,j+1))
341 umag(i,j)=sqrt(ucur(i,j)*ucur(i,j)+vcur(i,j)*vcur(i,j))+eps
345 IF (ucur(i,j).eq.0.0_r8)
THEN
346 phic(i,j)=0.5_r8*
pi*sign(1.0_r8,vcur(i,j))
348 phic(i,j)=atan2(vcur(i,j),ucur(i,j))
350 phicw(i,j)=1.5_r8*
pi-dwave(i,j)-phic(i,j)-angler(i,j)
360 IF (umag(i,j).gt.0.0_r8)
THEN
364 cff1=
vonkar/log(zr(i,j)/zobot(i,j))
366 tauc(i,j)=cff2*umag(i,j)*umag(i,j)
377 sg_dd=bottom(i,j,
isd50)
378 sg_ss=bottom(i,j,
idens)/(rho(i,j,1)+1000.0_r8)
389 sg_star=sg_dd/(4.0_r8*
sg_nu)*sqrt((sg_ss-1.0_r8)*
sg_g*sg_dd)
395 IF (sg_star.le.1.5_r8)
THEN
396 sg_shldcr=sg_scf*0.0932_r8*sg_star**(-0.707_r8)
397 ELSE IF ((1.5_r8.lt.sg_star).and.(sg_star.lt.4.0_r8))
THEN
398 sg_shldcr=sg_scf*0.0848_r8*sg_star**(-0.473_r8)
399 ELSE IF ((4.0_r8.le.sg_star).and.(sg_star.lt.10.0_r8))
THEN
400 sg_shldcr=sg_scf*0.0680_r8*sg_star**(-0.314_r8)
401 ELSE IF ((10.0_r8.le.sg_star).and.(sg_star.lt.34.0_r8))
THEN
402 sg_shldcr=sg_scf*0.033_r8
403 ELSE IF ((34.0_r8.le.sg_star).and.(sg_star.lt.270.0_r8))
THEN
404 sg_shldcr=sg_scf*0.0134_r8*sg_star**(0.255_r8)
406 sg_shldcr=sg_scf*0.056_r8
417 IF (sg_abokb.le.100.0_r8)
THEN
418 sg_fwm=exp(7.02_r8*sg_abokb**(-0.078_r8)-8.82_r8)
420 sg_fwm=exp(5.61_r8*sg_abokb**(-0.109_r8)-7.30_r8)
422 sg_ustarwm=sqrt(0.5_r8*sg_fwm)*sg_ub
423 sg_shdnrm=(sg_ss-1.0_r8)*sg_dd*
sg_g
424 sg_shld=sg_ustarwm*sg_ustarwm/sg_shdnrm
425 IF ((sg_shld/sg_shldcr).le.1.0_r8)
THEN
433 sg_chi=4.0_r8*
sg_nu*sg_ub*sg_ub/ &
434 & (sg_dd*((sg_ss-1.0_r8)*
sg_g*sg_dd)**1.5_r8)
435 IF (sg_chi.le.2.0_r8)
THEN
436 sg_eta=sg_ab*0.30_r8*sg_chi**(-0.39_r8)
437 sg_lambda=sg_ab*1.96_r8*sg_chi**(-0.28_r8)
439 sg_eta=sg_ab*0.45_r8*sg_chi**(-0.99_r8)
440 sg_lambda=sg_ab*2.71_r8*sg_chi**(-0.75_r8)
442 sg_kbs=sg_ab*0.0655_r8* &
443 & (sg_ub*sg_ub/((sg_ss-1.0_r8)*
sg_g*sg_ab))**1.4_r8
444 sg_znot=(sg_dd+2.3_r8*sg_eta+sg_kbs)/30.0_r8
448 sg_chi=4.0_r8*
sg_nu*sg_ub*sg_ub/ &
449 & (sg_dd*((sg_ss-1.0_r8)*
sg_g*sg_dd)**1.5_r8)
450 IF (sg_chi.le.2.0_r8)
THEN
451 sg_eta=sg_ab*0.32_r8*sg_chi**(-0.34_r8)
452 sg_lambda=sg_ab*2.04_r8*sg_chi**(-0.23_r8)
454 sg_eta=sg_ab*0.52_r8*sg_chi**(-1.01_r8)
455 sg_lambda=sg_ab*2.7_r8*sg_chi**(-0.78_r8)
460 rlength(i,j)=sg_lambda
464 sg_zrozn=sg_zr/sg_znot
465 IF ((sg_ur.gt.0.0_r8).and.(sg_ub.gt.0.0_r8).and. &
466 & (sg_zrozn.gt.1.0_r8))
THEN
473 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
474 & sg_a1, sg_mu, sg_epsilon, sg_ro, sg_fofa)
475 sg_abokb=sg_ab/(30.0_r8*sg_znot)
476 IF (sg_abokb.le.100.0_r8)
THEN
477 sg_fwm=exp(-8.82_r8+7.02_r8*sg_abokb**(-0.078_r8))
479 sg_fwm=exp(-7.30_r8+5.61_r8*sg_abokb**(-0.109_r8))
481 sg_ubouwm=sqrt(2.0_r8/sg_fwm)
486 CALL sg_purewave (sg_row, sg_ubouwm, sg_znotp, sg_ro)
493 sg_c1=0.5_r8*(sg_a1+sg_b1)
494 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
495 & sg_c1, sg_mu, sg_epsilon, sg_ro, sg_fofc)
502 IF ((sg_fofb*sg_fofc).lt.0.0_r8)
THEN
507 sg_c1=0.5_r8*(sg_a1+sg_b1)
508 CALL sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
509 & sg_c1, sg_mu, sg_epsilon, sg_ro, &
511 iterate=(sg_b1-sg_c1) .ge.
sg_tol
512 IF (iterate) iconv(i,j)=iter
519 sg_ustarcw=sg_ub/sg_ubouc
520 sg_ustarwm=sg_mu*sg_ustarcw
523 sg_ustarc=max(sqrt(tauc(i,j)),sg_epsilon*sg_ustarcw)
524 tauc(i,j)=sg_ustarc*sg_ustarc
525 tauw(i,j)=sg_ustarwm*sg_ustarwm
526 taucwmax(i,j)=sqrt((tauc(i,j)+ &
527 & tauw(i,j)*cos(phicw(i,j)))**2+ &
528 & (tauw(i,j)*sin(phicw(i,j)))**2)
532 IF (sg_epsilon.gt.0.0_r8)
THEN
534 sg_z2=sg_z1/sg_epsilon
535 sg_z1ozn=sg_z1/sg_znot
537 & exp(-(1.0_r8-sg_epsilon+ &
538 & sg_epsilon*log(sg_z1ozn)))
543 u100(i,j)=sg_ustarc* &
544 & (log(
sg_z100/sg_z2)+1.0_r8-sg_epsilon+ &
545 & sg_epsilon*log(sg_z1ozn))/
sg_kappa
546 ELSE IF ((
sg_z100.le.sg_z2).and.(sg_zr.gt.sg_z1))
THEN
547 u100(i,j)=sg_ustarc*sg_epsilon* &
550 u100(i,j)=sg_ustarc*sg_epsilon* &
565 anglec=ur_sg(i,j)/(0.5*(umag(i-1,j)+umag(i,j)))
566 bustr(i,j)=0.5_r8*(tauc(i-1,j)+tauc(i,j))*anglec
568 cff2=0.75_r8*0.5_r8*(z_w(i-1,j,1)+z_w(i,j,1)- &
569 & z_w(i-1,j,0)-z_w(i,j,0))
570 bustr(i,j)=sign(1.0_r8,bustr(i,j))*min(abs(bustr(i,j)), &
571 & abs(u(i,j,1,nrhs))*cff2/
dt(ng))
577 anglec=vr_sg(i,j)/(0.5_r8*(umag(i,j-1)+umag(i,j)))
578 bvstr(i,j)=0.5_r8*(tauc(i,j-1)+tauc(i,j))*anglec
580 cff2=0.75_r8*0.5_r8*(z_w(i,j-1,1)+z_w(i,j,1)- &
581 & z_w(i,j-1,0)-z_w(i,j,0))
582 bvstr(i,j)=sign(1.0_r8,bvstr(i,j))*min(abs(bvstr(i,j)), &
583 & abs(v(i,j,1,nrhs))*cff2/
dt(ng))
589 anglec=ucur(i,j)/umag(i,j)
590 anglew=cos(1.5_r8*
pi-dwave(i,j)-angler(i,j))
591 bustrc(i,j)=tauc(i,j)*anglec
592 bustrw(i,j)=tauw(i,j)*anglew
593 bustrcwmax(i,j)=taucwmax(i,j)*anglew
594 ubot(i,j)=ub(i,j)*anglew
597 anglec=vcur(i,j)/umag(i,j)
598 anglew=sin(1.5_r8*
pi-dwave(i,j)-angler(i,j))
599 bvstrc(i,j)=tauc(i,j)*anglec
600 bvstrw(i,j)=tauw(i,j)*anglew
601 bvstrcwmax(i,j)=taucwmax(i,j)*anglew
602 vbot(i,j)=ub(i,j)*anglew
605 bottom(i,j,
ibwav)=ab(i,j)
606 bottom(i,j,
irhgt)=rheight(i,j)
607 bottom(i,j,
irlen)=rlength(i,j)
608 bottom(i,j,
izdef)=znot(i,j)
609 bottom(i,j,
izapp)=znotc(i,j)
617 & lbi, ubi, lbj, ubj, &
620 & lbi, ubi, lbj, ubj, &
623 & lbi, ubi, lbj, ubj, &
626 & lbi, ubi, lbj, ubj, &
629 & lbi, ubi, lbj, ubj, &
632 & lbi, ubi, lbj, ubj, &
635 & lbi, ubi, lbj, ubj, &
638 & lbi, ubi, lbj, ubj, &
641 & lbi, ubi, lbj, ubj, &
644 & lbi, ubi, lbj, ubj, &
647 & lbi, ubi, lbj, ubj, &
650 & lbi, ubi, lbj, ubj, &
653 & lbi, ubi, lbj, ubj, &
656 & lbi, ubi, lbj, ubj, &
659 & lbi, ubi, lbj, ubj, &
662 & lbi, ubi, lbj, ubj, &
665 & lbi, ubi, lbj, ubj, &
669 & lbi, ubi, lbj, ubj, &
672 & bustr, bvstr, bustrc, bvstrc)
674 & lbi, ubi, lbj, ubj, &
677 & bustrw, bvstrw, bustrcwmax, bvstrcwmax)
679 & lbi, ubi, lbj, ubj, &
682 & ubot, vbot, ur, vr)
684 & lbi, ubi, lbj, ubj, &
687 & bottom(:,:,
ibwav), &
688 & bottom(:,:,
irhgt), &
691 & lbi, ubi, lbj, ubj, &
694 & bottom(:,:,
izdef), &
701 SUBROUTINE sg_bstress (sg_row, sg_zrozn, sg_phicw, sg_ubokur, &
702 & sg_ubouc, sg_mu, sg_epsilon, sg_ro, &
739 real(r8),
intent(in) :: sg_row, sg_zrozn, sg_phicw, sg_ubokur
741 real(r8),
intent(inout) :: sg_ubouc
743 real(r8),
intent(out) :: sg_mu, sg_epsilon, sg_ro, sg_fofx
751 real(r8) :: cff, sg_bei, sg_beip, sg_ber, sg_berp, sg_cosphi
752 real(r8) :: sg_eps2, sg_kei, sg_keip, sg_ker, sg_kerp, sg_mu2
753 real(r8) :: sg_phi, sg_ror, sg_x, sg_z2p, sg_znotp, sg_zroz1
754 real(r8) :: sg_zroz2, sg_z1ozn, sg_z2ozn
756 complex(c8) :: sg_argi, sg_bnot, sg_bnotp, sg_b1, sg_b1p
757 complex(c8) :: sg_gammai, sg_knot, sg_knotp, sg_k1, sg_k1p
758 complex(c8) :: sg_ll, sg_nn
771 sg_ro=sg_row/sg_ubouc
773 IF ((
sg_z1p/sg_znotp).gt.1.0_r8)
THEN
774 sg_x=2.0_r8*sqrt(sg_znotp)
775 IF (sg_x.le.8.0_r8)
THEN
776 CALL sg_kelvin8m (sg_x, sg_ber, sg_bei, sg_ker, sg_kei, &
777 & sg_berp, sg_beip, sg_kerp, sg_keip)
779 CALL sg_kelvin8p (sg_x, sg_ker, sg_kei, sg_ber, sg_bei, &
780 & sg_kerp, sg_keip, sg_berp, sg_beip)
782 cff=1.0_r8/sqrt(sg_znotp)
783 sg_bnot =cmplx(sg_ber,sg_bei)
784 sg_knot =cmplx(sg_ker,sg_kei)
785 sg_bnotp=cmplx(sg_berp,sg_beip)*cff
786 sg_knotp=cmplx(sg_kerp,sg_keip)*cff
789 IF (sg_x.le.8.0_r8)
THEN
790 CALL sg_kelvin8m (sg_x, sg_ber, sg_bei, sg_ker, sg_kei, &
791 & sg_berp, sg_beip, sg_kerp, sg_keip)
793 CALL sg_kelvin8p (sg_x, sg_ker, sg_kei, sg_ber, sg_bei, &
794 & sg_kerp, sg_keip, sg_berp, sg_beip)
797 sg_b1 =cmplx(sg_ber,sg_bei)
798 sg_k1 =cmplx(sg_ker,sg_kei)
799 sg_b1p=cmplx(sg_berp,sg_beip)*cff
800 sg_k1p=cmplx(sg_kerp,sg_keip)*cff
802 sg_ll=
sg_mp*sg_b1+sg_b1p
803 sg_nn=
sg_mp*sg_k1+sg_k1p
804 sg_argi=sg_bnotp*sg_nn/(sg_bnot*sg_nn-sg_knot*sg_ll)+ &
805 & sg_knotp*sg_ll/(sg_knot*sg_ll-sg_bnot*sg_nn)
806 sg_gammai=-
sg_kappa*sg_znotp*sg_argi
807 sg_phi=cabs(sg_gammai)
810 sg_phi=cabs(sg_gammai)
813 IF (sg_ubouc.gt.(1.0_r8/sg_phi))
THEN
814 sg_ubouc=1.0_r8/sg_phi
823 sg_mu=sqrt(sg_ubouc*sg_phi)
827 IF (sg_mu.eq.1.0_r8)
THEN
831 sg_cosphi=abs(cos(sg_phicw))
832 sg_eps2=-sg_mu2*sg_cosphi+ &
833 & sqrt(1.0_r8+sg_mu2*sg_mu2*(sg_cosphi*sg_cosphi-1.0_r8))
834 sg_epsilon=sqrt(sg_eps2)
839 IF (sg_epsilon.ne.0.0_r8)
THEN
841 sg_ror=sg_ro/sg_zrozn
843 sg_zroz2=sg_epsilon*sg_zroz1
845 sg_z2ozn=sg_z1ozn/sg_epsilon
847 IF ((sg_zroz2.gt.1.0_r8).and.(sg_z1ozn.gt.1.0_r8))
THEN
848 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon* &
849 & (log(sg_zroz2)+1.0_r8-sg_epsilon+ &
850 & sg_epsilon*log(sg_z1ozn))
851 ELSE IF ((sg_zroz2.le.1.0_r8).and.(sg_zroz1.gt.1.0_r8).and. &
852 & (sg_z1ozn.gt.1.0_r8))
THEN
853 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon*sg_epsilon* &
854 & (sg_zroz1-1.0_r8+log(sg_z1ozn))
855 ELSE IF ((sg_zroz1.le.1.0_r8).and.(sg_z1ozn.gt.1.0_r8))
THEN
856 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon*sg_epsilon* &
858 ELSE IF ((sg_zroz2.gt.1.0_r8).and.(sg_z1ozn.le.1.0_r8).and. &
859 & (sg_z2ozn.gt.1.0_r8))
THEN
860 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon* &
861 & (log(sg_zroz2)+1.0_r8-1.0_r8/sg_z2ozn)
862 ELSE IF ((sg_zroz2.le.1.0_r8).and.(sg_zroz1.gt.1.0_r8).and. &
863 & (sg_z1ozn.le.1.0_r8).and.(sg_z2ozn.gt.1.0_r8))
THEN
864 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon*sg_epsilon* &
865 & (sg_zroz1-1.0_r8/sg_z1ozn)
866 ELSE IF ((sg_zroz2.gt.1.0_r8).and.(sg_z2ozn.le.1.0_r8))
THEN
867 sg_fofx=-sg_ubouc+sg_ubokur*sg_epsilon*log(sg_zrozn)
903 real(r8),
intent(in) :: sg_row
905 real(r8),
intent(inout) :: sg_ubouwm
907 real(r8),
intent(out) :: sg_znotp, sg_ro
913 real(r8) :: cff, sg_bei, sg_beip, sg_ber, sg_berp, sg_kei
914 real(r8) :: sg_keip, sg_ker, sg_kerp, sg_phi, sg_ubouwmn, sg_x
916 complex(c8) :: sg_argi, sg_bnot, sg_bnotp, sg_b1, sg_b1p
917 complex(c8) :: sg_gammai, sg_knot, sg_knotp, sg_k1, sg_k1p
918 complex(c8) :: sg_ll, sg_nn
925 sg_ro=sg_row/sg_ubouwm
927 IF (
sg_z1p/sg_znotp.gt.1.0_r8)
THEN
928 sg_x=2.0_r8*sqrt(sg_znotp)
929 IF (sg_x.le.8.0_r8)
THEN
930 CALL sg_kelvin8m (sg_x, sg_ber, sg_bei, sg_ker, sg_kei, &
931 & sg_berp, sg_beip, sg_kerp, sg_keip)
933 CALL sg_kelvin8p (sg_x, sg_ker, sg_kei, sg_ber, sg_bei, &
934 & sg_kerp, sg_keip, sg_berp, sg_beip)
936 cff=1.0_r8/sqrt(sg_znotp)
937 sg_bnot =cmplx(sg_ber,sg_bei)
938 sg_knot =cmplx(sg_ker,sg_kei)
939 sg_bnotp=cmplx(sg_berp,sg_beip)*cff
940 sg_knotp=cmplx(sg_kerp,sg_keip)*cff
943 IF (sg_x.le.8.0_r8)
THEN
944 CALL sg_kelvin8m (sg_x, sg_ber, sg_bei, sg_ker, sg_kei, &
945 & sg_berp, sg_beip, sg_kerp, sg_keip)
947 CALL sg_kelvin8p (sg_x, sg_ker, sg_kei, sg_ber, sg_bei, &
948 & sg_kerp, sg_keip, sg_berp, sg_beip)
951 sg_b1 =cmplx(sg_ber,sg_bei)
952 sg_k1 =cmplx(sg_ker,sg_kei)
953 sg_b1p=cmplx(sg_berp,sg_beip)*cff
954 sg_k1p=cmplx(sg_kerp,sg_keip)*cff
956 sg_ll=
sg_mp*sg_b1+sg_b1p
957 sg_nn=
sg_mp*sg_k1+sg_k1p
958 sg_argi=sg_bnotp*sg_nn/(sg_bnot*sg_nn-sg_knot*sg_ll)+ &
959 & sg_knotp*sg_ll/(sg_knot*sg_ll-sg_bnot*sg_nn)
960 sg_gammai=-
sg_kappa*sg_znotp*sg_argi
961 sg_phi=cabs(sg_gammai)
964 sg_phi=cabs(sg_gammai)
967 sg_ubouwmn=1.0_r8/sg_phi
968 IF (abs((sg_ubouwmn-sg_ubouwm)/sg_ubouwmn).le.
sg_tol)
THEN
1073 real(r8),
intent(in) :: x
1074 real(r8),
intent(out) :: ker, kei, ber, bei
1075 real(r8),
intent(out) :: kerp, keip, berp, beip
1081 real(r8) :: cff, xhalf
1083 real(r8),
dimension(6) :: xm, xp
1085 complex(c8) :: argm, argp, fofx, gofx, phim, phip, thetam, thetap
1099 thetap=cmplx(0.0_r8,-0.3926991_r8)+ &
1100 & cmplx(0.0110486_r8,-0.0110485_r8)*xp(1)+ &
1101 & cmplx(0.0_r8,-0.0009765_r8)*xp(2)+ &
1102 & cmplx(-0.0000906_r8,-0.0000901_r8)*xp(3)+ &
1103 & cmplx(-0.0000252_r8,0.0_r8)*xp(4)+ &
1104 & cmplx(-0.0000034_r8,0.0000051_r8)*xp(5)+ &
1105 & cmplx(0.0000006,0.0000019)*xp(6)
1106 thetam=cmplx(0.0_r8,-0.3926991_r8)+ &
1107 & cmplx(0.0110486_r8,-0.0110485_r8)*xm(1)+ &
1108 & cmplx(0.0_r8,-0.0009765_r8)*xm(2)+ &
1109 & cmplx(-0.0000906_r8,-0.0000901_r8)*xm(3)+ &
1110 & cmplx(-0.0000252_r8,0.0_r8)*xm(4)+ &
1111 & cmplx(-0.0000034_r8,0.0000051_r8)*xm(5)+ &
1112 & cmplx(0.0000006_r8,0.0000019_r8)*xm(6)
1114 phip=cmplx(0.7071068_r8,0.7071068_r8)+ &
1115 & cmplx(-0.0625001_r8,-0.0000001_r8)*xp(1)+ &
1116 & cmplx(-0.0013813_r8,0.0013811_r8)*xp(2)+ &
1117 & cmplx(0.0000005_r8,0.0002452_r8)*xp(3)+ &
1118 & cmplx(0.0000346_r8,0.0000338_r8)*xp(4)+ &
1119 & cmplx(0.0000117_r8,-0.0000024_r8)*xp(5)+ &
1120 & cmplx(0.0000016_r8,-0.0000032_r8)*xp(6)
1121 phim=cmplx(0.7071068_r8,0.7071068_r8)+ &
1122 & cmplx(-0.0625001_r8,-0.0000001_r8)*xm(1)+ &
1123 & cmplx(-0.0013813_r8,0.0013811_r8)*xm(2)+ &
1124 & cmplx(0.0000005_r8,0.0002452_r8)*xm(3)+ &
1125 & cmplx(0.0000346_r8,0.0000338_r8)*xm(4)+ &
1126 & cmplx(0.0000117_r8,-0.0000024_r8)*xm(5)+ &
1127 & cmplx(0.0000016_r8,-0.0000032_r8)*xm(6)
1130 argm=-cff*cmplx(1.0_r8,1.0_r8)+thetam
1131 fofx=sqrt(
pi/(2.0_r8*x))*cexp(argm)
1135 argp=cff*cmplx(1.0_r8,1.0_r8)+thetap
1136 gofx=1.0_r8/sqrt(2.0_r8*
pi*x)*cexp(argp)
1137 ber=real(gofx)-kei/
pi
1138 bei=aimag(gofx)+ker/
pi
1140 kerp=real(-fofx*phim)
1141 keip=aimag(-fofx*phim)
1143 berp=real(gofx*phip)-keip/
pi
1144 beip=aimag(gofx*phip)+kerp/
pi