Computes coastal and iceberg/island reflections and adds free IG energy.
217 REAL,
INTENT(IN) :: CG(NK), WN(NK), DEPTH, EMEAN, FMEAN
218 REAL,
INTENT(INOUT) :: A(NSPEC)
219 REAL,
INTENT(IN) :: CX1, CY1, DT
220 INTEGER,
INTENT(IN) :: REFLD(6), IX, IY, JSEA
221 REAL,
INTENT(IN) :: REFLC(4), TRNX, &
223 REAL,
INTENT(OUT) :: S(NSPEC)
228 INTEGER :: ISPECI, ISPEC, IK, ITH, ITH2, ITH3, ITH2X, ITH2Y, &
230 INTEGER :: ISEA, ICALC, IOBPDIP(NTH)
231 LOGICAL :: IGBCOVERWRITE, IGSWELLMAX
232 REAL :: R1, R2, R3, R4, R2X, R2Y, DEPTHIG
233 REAL :: DELA, DELX, DELY, FACX
234 REAL :: FAC1, FAC2, FAC3, FAC4, RAMP0, RAMP, &
235 RAMP1, RAMP2, RAMP4, MICHEFAC, SLOPE
236 REAL :: HS, HIG, HIG1, HIG2, EB, SB, EMEANA, FMEAN2, &
237 FMEANA, FREQIG, EFIG, EFIG1, SQRTH, SMEANA
239 INTEGER :: NKIG,NSPECIG,NSPECIGSTART, I1, I2
240 REAL :: ATMP(NSPEC),ATMP2(NSPEC), STMP1(NSPEC), &
241 STMP2(NSPEC), WNB(NK), CGB(NK), SIX, IGFAC1, IGFAC2
244 INTEGER,
SAVE :: IENT = 0
245 CALL strace (ient,
'W3SREF')
251 igbcoverwrite =(mod( nint(
igpars(4)),2).EQ.1)
252 igswellmax =( nint(
igpars(4)).GE.2)
254 IF (gtype.EQ.ungtype) igswellmax =.false.
273 IF (gtype.EQ.rlgtype .OR. gtype.EQ.smctype)
THEN
274 delx=sx*clats(isea)/facx
278 IF (gtype.EQ.clgtype)
THEN
280 delx=hpfac(iy,ix)/ facx
281 dely=hqfac(iy,ix)/ facx
284 IF (gtype.EQ.ungtype)
THEN
299 nspecigstart = nint(
igpars(5))*nth
304 eb = eb + a(ith+(ik-1)*nth)
306 eb = eb * dden(ik) / cg(ik)
308 fmean2 = fmean2 + eb /sig(ik)**2
309 fmeana = fmeana + eb /sig(ik)
311 fmeana =
tpiinv * (emeana / max( 1.e-7 , fmeana ))
312 fmean2 =
tpiinv * sqrt(emeana / max( 1.e-7 , fmean2 ))
313 fmeana = max(fmeana,sig(1))
326 IF (igbcoverwrite.AND.reflc(1).GT.0)
THEN
328 atmp2(1:nspecigstart) = 0.
337 IF (igbcoverwrite) a(1:nspecigstart)=0.
338 IF (icalc.EQ.1) a=atmp2
353 atmp(1:nspecigstart)=0.
355 IF (nint(
igpars(3)).EQ.1)
THEN
356 IF (nint(
igpars(8)).EQ.1)
THEN
357 depthig=max(1.,hs/0.3)
366 sqrth = sqrt(depthig)
367 six = sig(ik) * sqrth
369 IF (i1.LE.
n1max)
THEN
371 r1 = six/
dsie - real(i1)
373 wnb(ik) = ( r2*
ewn1(i1) + r1*
ewn1(i2) ) / depth
374 cgb(ik) = ( r2*
ecg1(i1) + r1*
ecg1(i2) ) * sqrth
376 wnb(ik) = sig(ik)*sig(ik)/
grav
377 cgb(ik) = 0.5 *
grav / sig(ik)
383 IF (nint(
igpars(1)).EQ.1)
THEN
384 CALL w3addig(atmp,depthig,wnb,cgb,1)
390 atmp(1+(ik-1)*nth:ik*nth)=atmp(1+(ik-1)*nth:ik*nth)*(cgb(ik)*wn(ik))/(cg(ik)*wnb(ik))
392 a(1:nspecig)=atmp(1:nspecig)
395 a(ispec)=max(atmp(ispec)-a(ispec),0.)
398 a(1:nspecig)=atmp(1:nspecig)
401 ELSEIF (nint(
igpars(3)).EQ.2)
THEN
410 hig= hs/(max(fmean2,freqig)**2)
411 efig=(hig*0.25)**2/0.0279
417 efig1=efig*min(0.0036,
igpars(11)*wn(ik)/cg(ik)*
grav**2/sig(ik))
423 efig1=efig1*igfac1*1.2*min(1.,0.013/(sig(ik)*
tpiinv))**1.0
425 efig1=efig1*igfac2*1.2*min(1.,0.013/(sig(ik)*
tpiinv))**1.0
430 a(1+(ik-1)*nth:ik*nth)=efig1*cg(ik)/((sig(ik)*
tpi)*
tpi)
431 hig2 = hig2 + efig1*dsii(ik)*
tpiinv
441 IF (refpars(6).GT.0)
THEN
445 IF(reflc(3)/=reflc(3))
THEN
448 slope=max(0.001,reflc(3))
450 michefac=0.0001*
grav**2*(slope**5) &
451 /(max(emeana,1e-4)*max(fmeana,0.001)**4)
452 ramp0=max(0.07*(alog10(michefac)+4.5)+1.5*michefac,0.005)
461 IF (reflc(1).GT.0)
THEN
462 fac1=1/(0.5*real(nth))
463 fac2=1.57/(0.5*real(nth))
465 fac3=2./sum(abs(ecos(1:nth))**nrs)
472 IF (refpars(6).GT.0)
THEN
473 ramp=(max((0.75*
tpi*fmeana/sig(ik)),1.)**refpars(10))*ramp0
474 ramp1=min(refpars(9),reflc(1)*ramp)
475 ramp2=min(refpars(9),reflc(2)*ramp)
483 IF (gtype.EQ.ungtype.AND.refpars(3).LT.0.5)
THEN
486 iobpdip = iobpd_loc(:,jsea)
489 iobpdip = iobpd(:,ix)
492 ispeci=ith+(ik-1)*nth
493 a(ispeci)=a(ispeci)*iobpdip(ith)
497 r1=ecos(1+mod(abs(ith-refld(1)),nth))
499 ispeci=ith+(ik-1)*nth
501 IF (r1.GT.0.AND.r2.GT.0)
THEN
505 ith3=1+mod(nth/2+nth+2*refld(1)-ith-1,nth)
510 ispec=ith2+(ik-1)*nth
511 r3=ecos(1+mod(abs(ith2-refld(1)),nth))
513 r4=ecos(1+mod(abs(ith2-ith3),nth))*(1-iobpdip(ith2))
518 SELECT CASE (refld(2))
521 s(ispec)=s(ispec)+r2*fac1/dt
532 s(ispec)=s(ispec)+r2*abs(r4)*fac2/dt
536 s(ispec)=s(ispec)+r2*(r4**nrs) *fac3/dt
551 r1=ecos(1+mod(abs(ith-refld(1)),nth))
552 r2=ramp1*a(ith+(ik-1)*nth)
553 IF (r1.GT.0.AND.r2.GT.0)
THEN
558 ispec=ith2+(ik-1)*nth
559 ith2x=1+mod(nth+ith2-refld(5)-1,nth)
560 ith2y=1+mod(nth+ith2-refld(6)-1,nth)
561 r3=ecos(1+mod(abs(ith2-refld(1)),nth))
566 ith3=1+mod(nth/2+nth+2*refld(1)-ith-1,nth)
567 r4=ecos(1+mod(abs(ith2-ith3),nth))
572 SELECT CASE (refld(2))
576 REAL(REFLD(3))*R2*CG(IK)*ABS(ECOS(ITH2X)/DELX)*FAC1 &
577 +
REAL(REFLD(4))*R2*CG(IK)*ABS(ESIN(ITH2Y)/DELY)*FAC1
582 REAL(REFLD(3))*R2*CG(IK)*ABS(ECOS(ITH2X)/DELX)*ABS(R4)*FAC2 &
583 +
REAL(REFLD(4))*R2*CG(IK)*ABS(ESIN(ITH2Y)/DELY)*ABS(R4)*FAC2
590 s(ispec)=s(ispec)+real(refld(3))*r2*cg(ik)*abs(ecos(ith2x)/delx) &
592 +real(refld(4))*r2*cg(ik)*abs(esin(ith2y)/dely) &
608 IF ( ((refpars(2).GT.0.).AND.((trnx+trny).LT.2)) &
609 .OR.((refpars(4).GT.0.).AND.(berg.GT.0) ) )
THEN
613 IF (refpars(6).GT.0)
THEN
614 ramp=(max((0.75*
tpi*fmeana/sig(ik)),1.)**refpars(10))*ramp0
615 ramp2=min(refpars(9),reflc(2)*ramp)
619 slope=max(0.001,reflc(4))
620 michefac=0.0001*
grav**2*(slope**5) &
621 /(max(emeana,1e-4)*max(fmeana,0.001)**4)
622 ramp0=max(0.007*(alog10(michefac)+4.5)+1.5*michefac,0.005)
623 ramp=(max((0.75*
tpi*fmeana/sig(ik)),1.)**refpars(10))*ramp0
624 ramp4=min(refpars(9),ramp)
631 r2x= ramp2*refpars(2)*max(0.,min(1.,(1-trnx))) &
632 + ramp4*refpars(4)*max(0.,min(1.,(1-exp(-berg*delx*0.0001))))
633 r2y= ramp2*refpars(2)*max(0.,min(1.,(1-trny))) &
634 + ramp4*refpars(4)*max(0.,min(1.,(1-exp(-berg*dely*0.0001))))
635 fac1=1/(0.5*real(nth))
642 ispec=ith2+(ik-1)*nth
643 r3=ecos(1+mod(nth+ith2-ith,nth))
646 cg(ik)*r2x*r2*abs(ecos(ith2)/delx)*fac1 &
647 + cg(ik)*r2y*r2*abs(esin(ith2)/dely)*fac1
657 stmp1(nspecigstart+1:nspec) = s(nspecigstart+1:nspec)
661 s(ispec) = max(stmp2(ispec),stmp1(ispec))
665 a(1:nspecig)=atmp2(1:nspecig)