69 REAL,
PARAMETER,
PRIVATE:: OFFSET = 1.
190 SUBROUTINE w3srce ( srce_call, IT, ISEA, JSEA, IX, IY, IMOD, &
191 SPECOLD, SPEC, VSIO, VDIO, SHAVEIO, &
192 ALPHA, WN1, CG1, CLATSL, &
193 D_INP, U10ABS, U10DIR, &
198 CX, CY, ICE, ICEH, ICEF, ICEDMAX, &
199 REFLEC, REFLED, DELX, DELY, DELA, TRNX, &
200 TRNY, BERG, FPI, DTDYN, FCUT, DTG, TAUWX, &
201 TAUWY, TAUOX, TAUOY, TAUWIX, TAUWIY, TAUWNX,&
202 TAUWNY, PHIAW, CHARN, TWS, PHIOC, WHITECAP, &
203 D50, PSIC, BEDFORM , PHIBBL, TAUBBL, TAUICE,&
204 PHICE, TAUOCX, TAUOCY, WNMEAN, DAIR, COEF)
657 INTEGER,
INTENT(IN) :: srce_call, IT, ISEA, JSEA, IX, IY, IMOD
658 REAL,
intent(in) :: SPECOLD(NSPEC), CLATSL
659 REAL,
INTENT(OUT) :: VSIO(NSPEC), VDIO(NSPEC)
660 LOGICAL,
INTENT(OUT) :: SHAVEIO
661 REAL,
INTENT(IN) :: D_INP, U10ABS, &
662 U10DIR, AS, CX, CY, DTG, D50,PSIC, &
665 REAL,
INTENT(IN) :: TAUA, TAUADIR
667 INTEGER,
INTENT(IN) :: REFLED(6)
668 REAL,
INTENT(IN) :: REFLEC(4), DELX, DELY, DELA, &
669 TRNX, TRNY, BERG, ICEDMAX, DAIR
670 REAL,
INTENT(INOUT) :: WN1(NK), CG1(NK), &
671 SPEC(NSPEC), ALPHA(NK), USTAR, &
672 USTDIR, FPI, TAUOX, TAUOY, &
673 TAUWX, TAUWY, PHIAW, PHIOC, PHICE, &
674 CHARN, TWS, BEDFORM(3), PHIBBL, &
675 TAUBBL(2), TAUICE(2), WHITECAP(4), &
676 TAUWIX, TAUWIY, TAUWNX, TAUWNY, &
677 ICEF, TAUOCX, TAUOCY, WNMEAN
678 REAL,
INTENT(OUT) :: DTDYN, FCUT
679 REAL,
INTENT(IN) :: COEF
684 INTEGER :: IK, ITH, IS, IS0, NSTEPS, NKH, NKH1, &
685 IKS1, IS1, NSPECH, IDT, IERR, ISP
686 REAL :: DTTOT, FHIGH, DT, AFILT, DAMAX, AFAC, &
687 HDT, ZWND, FP, DEPTH, TAUSCX, TAUSCY, FHIGI
689 REAL :: ICESCALELN, ICESCALEIN, ICESCALENL, ICESCALEDS
690 REAL :: EMEAN, FMEAN, AMAX, CD, Z0, SCAT, &
692 REAL :: WN_R(NK), CG_ICE(NK), ALPHA_LIU(NK), ICECOEF2, R(NK)
693 DOUBLE PRECISION :: ATT, ISO
694 REAL :: EBAND, DIFF, EFINISH, HSTOT, PHINL, &
696 FACTOR, FACTOR2, DRAT, TAUWAX, TAUWAY, &
697 MWXFINISH, MWYFINISH, A1BAND, B1BAND, &
699 REAL :: SPECINIT(NSPEC), SPEC2(NSPEC), FRLOCAL, JAC2
700 REAL :: DAM (NSPEC), DAM2(NSPEC), WN2(NSPEC), &
702 VSIN(NSPEC), VDIN(NSPEC), &
703 VSNL(NSPEC), VDNL(NSPEC), &
704 VSDS(NSPEC), VDDS(NSPEC), &
705 VSBT(NSPEC), VDBT(NSPEC)
706 REAL :: VS(NSPEC), VD(NSPEC), EB(NK)
710 LOGICAL,
SAVE :: FIRST = .true.
711 LOGICAL :: PrintDeltaSmDA
712 REAL :: eInc1, eInc2, eVS, eVD, JAC
713 REAL :: DeltaSRC(NSPEC)
715 REAL :: FOUT(NK,NTH), SOUT(NK,NTH), DOUT(NK,NTH)
716 REAL,
SAVE :: TAUNUX, TAUNUY
717 LOGICAL,
SAVE :: FLTEST = .false., flagnn = .true.
730 INTEGER,
SAVE :: IENT = 0
734 INTEGER,
SAVE :: NDSD = 89, ndsd2 = 88, j
739 INTEGER :: QI5TSTART(2)
741 INTEGER,
PARAMETER :: NL5_SELECT = 1
742 REAL,
PARAMETER :: NL5_OFFSET = 0.
761 #if defined(W3_IC1) || defined(W3_IC2) || defined(W3_IC3) || defined(W3_IC4) || defined(W3_IC5)
762 REAL :: VSIC(NSPEC), VDIC(NSPEC)
766 REAL :: VSDB(NSPEC), VDDB(NSPEC)
770 REAL :: VSTR(NSPEC), VDTR(NSPEC)
774 REAL :: VSBS(NSPEC), VDBS(NSPEC)
781 #if defined(W3_IS1) || defined(W3_IS2)
782 REAL :: VSIR(NSPEC), VDIR(NSPEC)
787 DOUBLE PRECISION :: SCATSPEC(NTH)
791 REAL :: VSUO(NSPEC), VDUO(NSPEC)
799 REAL :: FHTRAN, DFH, FACDIA, FACPAR
803 REAL :: FMEANS, FH1, FH2
807 REAL :: FMEANS, FH1, FH2, FAGE, DLWMEAN
808 REAL :: BRLAMBDA(NSPEC)
811 #if defined(W3_ST3) || defined(W3_ST4)
812 LOGICAL :: LLWS(NSPEC)
816 REAL :: VSWL(NSPEC), VDWL(NSPEC)
820 REAL :: PreVS, DVS, SIDT, FAKS, MAXDAC
824 CHARACTER(LEN=17),
SAVE :: FNAME =
'test_data_nnn.ww3'
830 CALL strace (ient,
'W3SRCE')
840 IF (nint(igpars(12)).EQ.0) iks1 = nint(igpars(5))
852 #if defined(W3_LN0) || defined(W3_LN1) || defined(W3_SEED)
856 #if defined(W3_ST0) || defined(W3_ST3) || defined(W3_ST4)
861 #if defined(W3_NL0) || defined(W3_NL1)
871 #if defined(W3_ST0) || defined(W3_ST4)
881 #if defined(W3_IC1) || defined(W3_IC2) || defined(W3_IC3) || defined(W3_IC4) || defined(W3_IC5)
891 #if defined(W3_IS1) || defined(W3_IS2)
905 #if defined(W3_ST0) || defined(W3_ST1) || defined(W3_ST6)
919 depth = max( dmin , d_inp )
921 icescaleln = max(0.,min(1.,1.-ice*icescales(1)))
922 icescalein = max(0.,min(1.,1.-ice*icescales(2)))
923 icescalenl = max(0.,min(1.,1.-ice*icescales(3)))
924 icescaleds = max(0.,min(1.,1.-ice*icescales(4)))
928 WRITE (ndst,9001) depth, u10abs, u10dir*
rade
937 dam(1+(ik-1)*nth) = facp / ( sig(ik) * wn1(ik)**3 )
938 wn2(1+(ik-1)*nth) = wn1(ik)
944 dam(ith+is0) = dam(1+is0)
945 wn2(ith+is0) = wn2(1+is0)
979 CALL tick21 (qi5tstart, -1.0 * dtg)
983 IF (ix .eq. debug_node)
THEN
984 WRITE(740+
iaproc,*)
'W3SRCE start sum(SPEC)=', sum(spec)
985 WRITE(740+
iaproc,*)
'W3SRCE start sum(SPECOLD)=', sum(specold)
986 WRITE(740+
iaproc,*)
'W3SRCE start sum(SPECINIT)=', sum(specinit)
987 WRITE(740+
iaproc,*)
'W3SRCE start sum(VSIO)=', sum(vsio)
988 WRITE(740+
iaproc,*)
'W3SRCE start sum(VDIO)=', sum(vdio)
989 WRITE(740+
iaproc,*)
'W3SRCE start USTAR=', ustar
1002 CALL w3spr0 (spec, cg1, wn1, emean, fmean, wnmean, amax)
1006 CALL w3spr1 (spec, cg1, wn1, emean, fmean, wnmean, amax)
1010 CALL w3spr2 (spec, cg1, wn1, depth, fpi, u10abs, ustar, &
1011 emean, fmean, wnmean, amax, alpha, fp )
1016 IF ( it .eq. 0 )
THEN
1020 CALL w3spr3 (spec, cg1, wn1, emean, fmean, fmeans, wnmean, &
1021 amax, u10abs, u10dir, ustar, ustdir, &
1022 tauwx, tauwy, cd, z0, charn, llws, fmeanws)
1024 CALL w3spr3 (spec, cg1, wn1, emean, fmean, fmeans, wnmean, &
1025 amax, u10abs, u10dir, ustar, ustdir, &
1026 tauwx, tauwy, cd, z0, charn, llws, fmeanws)
1027 CALL w3sin3 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1028 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1029 ice, vsin, vdin, llws, ix, iy )
1031 CALL w3spr3 (spec, cg1, wn1, emean, fmean, fmeans, wnmean, &
1032 amax, u10abs, u10dir, ustar, ustdir, &
1033 tauwx, tauwy, cd, z0, charn, llws, fmeanws)
1037 IF (sintailpar(4).GT.0.5)
THEN
1041 IF ( it .EQ. 0 )
THEN
1048 CALL w3spr4 (spec, cg1, wn1, emean, fmean, fmean1, wnmean, &
1049 amax, u10abs, u10dir, &
1051 taua, tauadir, dair, &
1054 tauwx, tauwy, cd, z0, charn, llws, fmeanws, dlwmean)
1057 #if defined(W3_DEBUGSRC) && defined(W3_ST4)
1058 IF (ix == debug_node)
THEN
1059 WRITE(740+
iaproc,*)
'1: out value USTAR=', ustar,
' USTDIR=', ustdir
1060 WRITE(740+
iaproc,*)
'1: out value EMEAN=', emean,
' FMEAN=', fmean
1061 WRITE(740+
iaproc,*)
'1: out value FMEAN1=', fmean1,
' WNMEAN=', wnmean
1062 WRITE(740+
iaproc,*)
'1: out value CD=', cd,
' Z0=', z0
1063 WRITE(740+
iaproc,*)
'1: out value ALPHA=', charn,
' FMEANWS=', fmeanws
1068 IF (sintailpar(4).GT.0.5)
CALL w3sin4 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1069 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1070 vsin, vdin, llws, ix, iy, brlambda )
1073 #if defined(W3_DEBUGSRC) && defined(W3_ST4)
1074 IF (ix == debug_node)
THEN
1075 WRITE(740+
iaproc,*)
'1: U10DIR=', u10dir,
' Z0=', z0,
' CHARN=', charn
1076 WRITE(740+
iaproc,*)
'1: USTAR=', ustar,
' U10ABS=', u10abs,
' AS=', as
1077 WRITE(740+
iaproc,*)
'1: DRAT=', drat
1078 WRITE(740+
iaproc,*)
'1: TAUWX=', tauwx,
' TAUWY=', tauwy
1079 WRITE(740+
iaproc,*)
'1: TAUWAX=', tauwax,
' TAUWAY=', tauway
1080 WRITE(740+
iaproc,*)
'1: min(CG1)=', minval(cg1),
' max(CG1)=', maxval(cg1)
1081 WRITE(740+
iaproc,*)
'1: W3SIN4(min/max/sum)VSIN=', minval(vsin), maxval(vsin), sum(vsin)
1082 WRITE(740+
iaproc,*)
'1: W3SIN4(min/max/sum)VDIN=', minval(vdin), maxval(vdin), sum(vdin)
1087 CALL w3spr4 (spec, cg1, wn1, emean, fmean, fmean1, wnmean, &
1088 amax, u10abs, u10dir, &
1090 taua, tauadir, dair, &
1093 tauwx, tauwy, cd, z0, charn, llws, fmeanws, dlwmean)
1097 CALL w3spr6 (spec, cg1, wn1, emean, fmean, wnmean, amax, fp)
1107 CALL w3flx1 ( zwnd, u10abs, u10dir, ustar, ustdir, z0, cd )
1110 CALL w3flx2 ( zwnd, depth, fp, u10abs, u10dir, &
1111 ustar, ustdir, z0, cd )
1114 CALL w3flx3 ( zwnd, depth, fp, u10abs, u10dir, &
1115 ustar, ustdir, z0, cd )
1118 CALL w3flx4 ( zwnd, u10abs, u10dir, ustar, ustdir, z0, cd )
1121 CALL w3flx5 ( zwnd, u10abs, u10dir, taua, tauadir, dair, &
1122 ustar, ustdir, z0, cd, charn )
1133 fhigh = max( fh1 , fh2 )
1134 IF (fltest)
WRITE (ndst,9004) fh1*tpiinv, fh2*tpiinv, fhigh*tpiinv
1140 fhigh = max(ffxfm * max(fmean,fmeanws),ffxpm / ustar)
1146 fhigh = max( (ffxfm + fage ) * max(fmean1,fmeanws), ffxpm / ustar)
1147 fhigi = ffxfa * fmean1
1150 IF (fxfm .LE. 0)
THEN
1153 fhigh = max(fxfm * fmean, fxpm / ustar)
1160 IF ( it .EQ. 0 )
THEN
1162 WRITE (fname(11:13),
'(I3.3)')
iaproc
1163 OPEN (ndsd,
file=
fnmpre(:j)//fname,form=
'UNFORMATTED', convert=file_endian, &
1164 err=800,iostat=ierr)
1165 WRITE (ndsd,err=801,iostat=ierr) nk, nth
1166 WRITE (ndsd,err=801,iostat=ierr) sig(1:nk) * tpiinv
1168 form=
'FORMATTED',err=800,iostat=ierr)
1179 WRITE (ndst,9020) nsteps, dttot
1187 CALL w3sln1 ( wn1, fhigh, ustar, u10dir , vsln )
1191 CALL w3sin1 ( spec, wn2, ustar, u10dir , vsin, vdin )
1194 CALL w3sin2 ( spec, cg1, wn2, u10abs, u10dir, cd, z0, &
1198 CALL w3sin3 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1199 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1200 ice, vsin, vdin, llws, ix, iy )
1203 CALL w3sin4 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1204 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1205 vsin, vdin, llws, ix, iy, brlambda )
1208 #if defined(W3_DEBUGSRC) && defined(W3_ST4)
1209 IF (ix == debug_node)
THEN
1210 WRITE(740+
iaproc,*)
'2 : W3SIN4(min/max/sum)VSIN=', minval(vsin), maxval(vsin), sum(vsin)
1211 WRITE(740+
iaproc,*)
'2 : W3SIN4(min/max/sum)VDIN=', minval(vdin), maxval(vdin), sum(vdin)
1216 CALL w3sin6 ( spec, cg1, wn2, u10abs, ustar, ustdir, cd, dair, &
1217 tauwx, tauwy, tauwax, tauway, vsin, vdin )
1223 IF (iqtpe.GT.0)
THEN
1224 CALL w3snl1 ( spec, cg1, wnmean*depth, vsnl, vdnl )
1226 CALL w3snlgqm ( spec, cg1, wn1, depth, vsnl, vdnl )
1230 CALL w3snl2 ( spec, cg1, depth, vsnl, vdnl )
1233 CALL w3snl3 ( spec, cg1, wn1, depth, vsnl, vdnl )
1236 CALL w3snl4 ( spec, cg1, wn1, depth, vsnl, vdnl )
1239 CALL w3snl5 ( spec, cg1, wn1, fmean, qi5tstart, &
1240 u10abs, u10dir, jsea, vsnl, vdnl, qr5kurt)
1244 IF (.NOT. fssource .or.
lsloc)
THEN
1247 CALL w3str1 ( spec, specold, cg1, wn1, depth, ix, vstr, vdtr )
1257 CALL w3sds1 ( spec, wn2, emean, fmean, wnmean, vsds, vdds )
1260 CALL w3sds2 ( spec, cg1, wn1, fpi, ustar, alpha,vsds, vdds )
1263 CALL w3sds3 ( spec, wn1, cg1, emean, fmeans, wnmean, &
1264 ustar, ustdir, depth, vsds, vdds, ix, iy )
1267 CALL w3sds4 ( spec, wn1, cg1, ustar, ustdir, depth, dair, vsds, &
1268 vdds, ix, iy, brlambda, whitecap, dlwmean )
1270 #if defined(W3_DEBUGSRC) && defined(W3_ST4)
1271 IF (ix == debug_node)
THEN
1272 WRITE(740+
iaproc,*)
'2 : W3SDS4(min/max/sum)VSDS=', minval(vsds), maxval(vsds), sum(vsds)
1273 WRITE(740+
iaproc,*)
'2 : W3SDS4(min/max/sum)VDDS=', minval(vdds), maxval(vdds), sum(vdds)
1278 CALL w3sds6 ( spec, cg1, wn1, vsds, vdds )
1282 IF (.NOT. fssource .or.
lsloc)
THEN
1285 CALL w3sdb1 ( ix, spec, depth, emean, fmean, wnmean, cg1, &
1286 lbreak, vsdb, vddb )
1296 CALL w3swl6 ( spec, cg1, wn1, vswl, vdwl )
1303 CALL w3sbt1 ( spec, cg1, wn1, depth, vsbt, vdbt )
1306 CALL w3sbt4 ( spec, cg1, wn1, depth, d50, psic, taubbl, &
1307 bedform, vsbt, vdbt, ix, iy )
1310 CALL w3sbt8 ( spec, depth, vsbt, vdbt, ix, iy )
1313 CALL w3sbt9 ( spec, depth, vsbt, vdbt, ix, iy )
1317 CALL w3sbs1 ( spec, cg1, wn1, depth, cx, cy, &
1318 tauscx, tauscy, vsbs, vdbs )
1326 u10abs, u10dir, vsuo, vduo)
1332 WRITE (
screen,8888) time, dttot, flagnn, qcerr
1333 WRITE (ndsd2,8888) time, dttot, flagnn, qcerr
1334 8888
FORMAT (1x,i8.8,1x,i6.6,f8.1,l2,f8.2)
1335 WRITE (ndsd,err=801,iostat=ierr) ix, iy, time, nsteps, &
1336 dttot, flagnn, depth, u10abs, u10dir
1340 facnn = tpi * sig(ik) / cg1(ik)
1342 is = ith + (ik-1)*nth
1343 fout(ik,ith) = spec(is) * facnn
1344 sout(ik,ith) = vsnl(is) * facnn
1345 dout(ik,ith) = vdnl(is)
1348 WRITE (ndsd,err=801,iostat=ierr) fout
1349 WRITE (ndsd,err=801,iostat=ierr) sout
1350 WRITE (ndsd,err=801,iostat=ierr) dout
1358 IF ( fltest )
WRITE (ndst,9005) fhigh*tpiinv
1360 nkh = min( nk , int(facti2+facti1*log(max(1.e-7,fhigh))) )
1361 nkh1 = min( nk , nkh+1 )
1364 WRITE (ndst,9021) nkh, nkh1, nspech
1369 dt = min( dtg-dttot , dtmax )
1370 afilt = max( dam(nspec) , xflt*amax )
1380 vsnl(1:nspech) = icescalenl * vsnl(1:nspech)
1381 vdnl(1:nspech) = icescalenl * vdnl(1:nspech)
1382 vsln(1:nspech) = icescaleln * vsln(1:nspech)
1383 vsin(1:nspech) = icescalein * vsin(1:nspech)
1384 vdin(1:nspech) = icescalein * vdin(1:nspech)
1385 vsds(1:nspech) = icescaleds * vsds(1:nspech)
1386 vdds(1:nspech) = icescaleds * vdds(1:nspech)
1392 jac = cg1(ik)/clatsl
1393 jac2 = 1./tpi/sig(ik)
1394 frlocal = sig(ik)*tpiinv
1396 dam2(1+(ik-1)*nth) = 5e-7 * grav/frlocal**4 * ustar * fmean * dtmin * jac * jac2
1398 dam2(1+(ik-1)*nth) = 5e-7 * grav/frlocal**4 * ustar * max(fmeanws,fmean) * dtmin * jac * jac2
1405 dam2(ith+is0) = dam2(1+is0)
1412 vs(is) = vsln(is) + vsin(is) + vsnl(is) &
1413 + vsds(is) + vsbt(is)
1415 vs(is) = vs(is) + vswl(is)
1417 #if defined(W3_TR1) && !defined(W3_PDLIB)
1418 vs(is) = vs(is) + vstr(is)
1421 vs(is) = vs(is) + vsbs(is)
1424 vs(is) = vs(is) + vsuo(is)
1426 vd(is) = vdin(is) + vdnl(is) &
1427 + vdds(is) + vdbt(is)
1429 vd(is) = vd(is) + vdwl(is)
1431 #if defined(W3_TR1) && !defined(W3_PDLIB)
1432 vd(is) = vd(is) + vdtr(is)
1435 vd(is) = vd(is) + vdbs(is)
1438 vd(is) = vd(is) + vduo(is)
1440 damax = min( dam(is) , max( xrel*specinit(is) , afilt ) )
1441 afac = 1. / max( 1.e-10 , abs(vs(is)/damax) )
1443 IF (nl5_select .EQ. 1)
THEN
1444 dt = min( dt , afac / ( max( 1.e-10, &
1445 1. + nl5_offset*afac*min(0.,vd(is)) ) ) )
1448 dt = min( dt , afac / ( max( 1.e-10, &
1449 1. + offset*afac*min(0.,vd(is)) ) ) )
1462 idt = 1 + int( 0.99*(dtg-dttot)/dt )
1463 dt = (dtg-dttot)/real(idt)
1464 shave = dt.LT.dtmin .AND. dt.LT.dtg-dttot
1466 dt = max( dt , min(dtmin,dtg-dttot) )
1471 IF (srce_call .eq. srce_imp_post) dt = dtg
1473 IF (nl5_select .EQ. 1)
THEN
1474 hdt = nl5_offset * dt
1484 IF (ix == debug_node)
WRITE(*,
'(A20,2I10,5F20.10,L20)')
'TIMINGS 2', idt, nsteps, dt, dtmin, dtdyn, hdt, dttot, shave
1485 IF (ix == debug_node)
THEN
1486 WRITE(740+
iaproc,*)
'1: min/max/sum(VS)=', minval(vs), maxval(vs), sum(vs)
1487 WRITE(740+
iaproc,*)
'1: min/max/sum(VD)=', minval(vd), maxval(vd), sum(vd)
1488 WRITE(740+
iaproc,*)
'min/max/sum(VSIN)=', minval(vsin), maxval(vsin), sum(vsin)
1489 WRITE(740+
iaproc,*)
'min/max/sum(VDIN)=', minval(vdin), maxval(vdin), sum(vdin)
1490 WRITE(740+
iaproc,*)
'min/max/sum(VSLN)=', minval(vsln), maxval(vsln), sum(vsln)
1491 WRITE(740+
iaproc,*)
'min/max/sum(VSNL)=', minval(vsnl), maxval(vsnl), sum(vsnl)
1492 WRITE(740+
iaproc,*)
'min/max/sum(VDNL)=', minval(vdnl), maxval(vdnl), sum(vdnl)
1493 WRITE(740+
iaproc,*)
'min/max/sum(VSDS)=', minval(vsds), maxval(vsds), sum(vsds)
1494 WRITE(740+
iaproc,*)
'min/max/sum(VDDS)=', minval(vdds), maxval(vdds), sum(vdds)
1496 WRITE(740+
iaproc,*)
'min/max/sum(VSWL)=', minval(vswl), maxval(vswl), sum(vswl)
1497 WRITE(740+
iaproc,*)
'min/max/sum(VDWL)=', minval(vdwl), maxval(vdwl), sum(vdwl)
1500 WRITE(740+
iaproc,*)
'min/max/sum(VSDB)=', minval(vsdb), maxval(vsdb), sum(vsdb)
1501 WRITE(740+
iaproc,*)
'min/max/sum(VDDB)=', minval(vddb), maxval(vddb), sum(vddb)
1504 WRITE(740+
iaproc,*)
'min/max/sum(VSTR)=', minval(vstr), maxval(vstr), sum(vstr)
1505 WRITE(740+
iaproc,*)
'min/max/sum(VDTR)=', minval(vdtr), maxval(vdtr), sum(vdtr)
1508 WRITE(740+
iaproc,*)
'min/max/sum(VSBS)=', minval(vsbs), maxval(vsbs), sum(vsbs)
1509 WRITE(740+
iaproc,*)
'min/max/sum(VDBS)=', minval(vdbs), maxval(vdbs), sum(vdbs)
1511 WRITE(740+
iaproc,*)
'min/max/sum(VSBT)=', minval(vsbt), maxval(vsbt), sum(vsbt)
1512 WRITE(740+
iaproc,*)
'min/max/sum(VDBT)=', minval(vdbt), maxval(vdbt), sum(vdbt)
1517 IF (srce_call .eq. srce_imp_pre)
THEN
1522 jac = clatsl/cg1(ik)
1524 isp = ith + (ik-1)*nth
1525 vd(isp) = min(0., vd(isp))
1527 maxdac = max(dam(isp),dam2(isp))
1531 faks = dtg / max( 1. , (1.-dtg*vd(isp)))
1532 dvs = vs(isp) * faks
1533 IF (.NOT. b_jgs_limiter)
THEN
1534 dvs = sign(min(maxdac,abs(dvs)),dvs)
1537 evs = prevs / cg1(ik) * clatsl
1538 evd = min(0.,vd(isp))
1539 b_jac(isp,jsea) =
b_jac(isp,jsea) + sidt * (evs - evd*spec(isp)*jac)
1542 evs = vsdb(isp) * jac
1543 evd = min(0.,vddb(isp))
1544 IF (evs .gt. 0.)
THEN
1552 b_jac(isp,jsea) =
b_jac(isp,jsea) + sidt * evs
1556 evs = vstr(isp) * jac
1558 IF (evs .gt. 0.)
THEN
1566 b_jac(isp,jsea) =
b_jac(isp,jsea) + sidt * evs
1571 ELSEIF (
imem == 2)
THEN
1575 jac = clatsl/cg1(ik)
1577 isp=ith + (ik-1)*nth
1578 vd(isp) = min(0., vd(isp))
1580 maxdac = max(dam(isp),dam2(isp))
1584 faks = dtg / max( 1. , (1.-dtg*vd(isp)))
1585 dvs = vs(isp) * faks
1586 IF (.NOT. b_jgs_limiter)
THEN
1587 dvs = sign(min(maxdac,abs(dvs)),dvs)
1590 evs = prevs / cg1(ik) * clatsl
1593 evs = evs + dble(vsdb(isp)) * jac
1594 evd = evd + min(0.,dble(vddb(isp)))
1595 b_jac(isp,jsea) =
b_jac(isp,jsea) + sidt * (evs - evd*
va(isp,jsea))
1603 printdeltasmda=.false.
1604 IF (printdeltasmda .eqv. .true.)
THEN
1606 deltasrc(is) = vsin(is) - spec(is)*vdin(is)
1608 WRITE(740+
iaproc,*)
'min/max/sum(VSIN)=', minval(vsin), maxval(vsin), sum(vsin)
1609 WRITE(740+
iaproc,*)
'min/max/sum(DeltaIN)=', minval(deltasrc), maxval(deltasrc), sum(deltasrc)
1612 deltasrc(is) = vsnl(is) - spec(is)*vdnl(is)
1614 WRITE(740+
iaproc,*)
'min/max/sum(VSNL)=', minval(vsnl), maxval(vsnl), sum(vsnl)
1615 WRITE(740+
iaproc,*)
'min/max/sum(DeltaNL)=', minval(deltasrc), maxval(deltasrc), sum(deltasrc)
1618 deltasrc(is) = vsds(is) - spec(is)*vdds(is)
1620 WRITE(740+
iaproc,*)
'min/max/sum(VSDS)=', minval(vsds), maxval(vsds), sum(vsds)
1621 WRITE(740+
iaproc,*)
'min/max/sum(DeltaDS)=', minval(deltasrc), maxval(deltasrc), sum(deltasrc)
1626 WRITE(740+
iaproc,*)
'min/max/sum(DeltaDS)=', minval(deltasrc), maxval(deltasrc), sum(deltasrc)
1629 IF (.not.
lsloc)
THEN
1630 IF (optioncall .eq. 1)
THEN
1632 ELSE IF (optioncall .eq. 2)
THEN
1634 ELSE IF (optioncall .eq. 3)
THEN
1642 IF (ix == debug_node)
THEN
1643 WRITE(740+
iaproc,*)
' srce_imp_pre : SHAVE = ', shave
1644 WRITE(740+
iaproc,*)
' srce_imp_pre : DT=', dt,
' HDT=', hdt,
'DTG=', dtg
1645 WRITE(740+
iaproc,*)
' srce_imp_pre : sum(SPEC)=', sum(spec)
1646 WRITE(740+
iaproc,*)
' srce_imp_pre : sum(VSTOT)=', sum(vs)
1647 WRITE(740+
iaproc,*)
' srce_imp_pre : sum(VDTOT)=', sum(min(0. , vd))
1650 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsin)
1651 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdin)
1652 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsds)
1653 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdds)
1654 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsnl)
1655 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdnl)
1656 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsln)
1657 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsbt)
1658 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vs)
1659 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vd)
1668 WRITE (ndst,9040) dtraw, dt, shave
1673 IF (srce_call .eq. srce_direct)
THEN
1676 einc1 = vs(is) * dt / max( 1. , (1.-hdt*vd(is)))
1677 einc2 = sign( min(dam(is),abs(einc1)) , einc1 )
1678 spec(is) = max( 0. , spec(is)+einc2 )
1683 einc1 = vs(is) * dt / max( 1. , (1.-hdt*vd(is)))
1684 spec(is) = max( 0. , spec(is)+einc1 )
1690 einc1 = vsdb(is) * dt / max( 1. , (1.-hdt*vddb(is)))
1691 spec(is) = max( 0. , spec(is)+einc1 )
1696 einc1 = vdtr(is) * dt / max( 1. , (1.-hdt*vdtr(is)))
1697 spec(is) = max( 0. , spec(is)+einc1 )
1702 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsin)
1703 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdin)
1704 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsds)
1705 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdds)
1706 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsnl)
1707 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vdnl)
1708 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsln)
1709 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vsbt)
1710 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vs)
1711 IF (ix == debug_node)
WRITE(44,
'(1EN15.4)') sum(vd)
1712 IF (ix == debug_node)
THEN
1713 WRITE(740+
iaproc,*)
' srce_direct : SHAVE = ', shave
1714 WRITE(740+
iaproc,*)
' srce_direct : DT=', dt,
' HDT=', hdt,
'DTG=', dtg
1715 WRITE(740+
iaproc,*)
' srce_direct : sum(SPEC)=', sum(spec)
1716 WRITE(740+
iaproc,*)
' srce_direct : sum(VSTOT)=', sum(vs)
1717 WRITE(740+
iaproc,*)
' srce_direct : sum(VDTOT)=', sum(min(0. , vd))
1730 factor = dden(ik)/cg1(ik)
1731 factor2= factor*grav*wn1(ik)/sig(ik)
1736 is = (ik-1)*nth + ith
1739 phiaw = phiaw + (vsin(is))* dt * factor &
1740 / max( 1. , (1.-hdt*vdin(is)))
1742 phibbl= phibbl- (vsbt(is))* dt * factor &
1743 / max( 1. , (1.-hdt*vdbt(is)))
1744 phinl = phinl + vsnl(is)* dt * factor &
1745 / max( 1. , (1.-hdt*vdnl(is)))
1746 IF (vsin(is).GT.0.) whitecap(3) = whitecap(3) + spec(is) * factor
1747 hstot = hstot + spec(is) * factor
1750 whitecap(3) = 4. * sqrt(whitecap(3))
1751 hstot =4.*sqrt(hstot)
1752 tauwix = tauwix + tauwx * drat * dt
1753 tauwiy = tauwiy + tauwy * drat * dt
1754 tauwnx = tauwnx + tauwax * drat * dt
1755 tauwny = tauwny + tauway * drat * dt
1759 CALL w3snls ( spec, cg1, wn1, depth, u10abs, dt, aa=spec )
1767 CALL w3spr0 (spec, cg1, wn1, emean, fmean, wnmean, amax)
1770 CALL w3spr1 (spec, cg1, wn1, emean, fmean, wnmean, amax)
1773 CALL w3spr2 (spec, cg1, wn1, depth, fpi, u10abs, ustar, &
1774 emean, fmean, wnmean, amax, alpha, fp )
1777 CALL w3spr3 (spec, cg1, wn1, emean, fmean, fmeans, &
1778 wnmean, amax, u10abs, u10dir, ustar, ustdir, &
1779 tauwx, tauwy, cd, z0, charn, llws, fmeanws)
1782 CALL w3spr4 (spec, cg1, wn1, emean, fmean, fmean1, wnmean,&
1783 amax, u10abs, u10dir, &
1785 taua, tauadir, dair, &
1788 tauwx, tauwy, cd, z0, charn, llws, fmeanws, dlwmean)
1791 CALL w3spr6 (spec, cg1, wn1, emean, fmean, wnmean, amax, fp)
1795 CALL w3flx2 ( zwnd, depth, fp, u10abs, u10dir, &
1796 ustar, ustdir, z0, cd )
1799 CALL w3flx3 ( zwnd, depth, fp, u10abs, u10dir, &
1800 ustar, ustdir, z0, cd )
1805 fhigh = min( sig(nk) , max( fh1 , fh2 ) )
1806 nkh = max( 2 , min( nkh1 , &
1807 int( facti2 + facti1*log(max(1.e-7,fhigh)) ) ) )
1809 IF ( fltest )
WRITE (ndst,9060) &
1810 fh1*tpiinv, fh2*tpiinv, fhigh*tpiinv, nkh
1816 dfh = fhigh - fhtran
1818 int( facti2 + facti1*log(max(1.e-7,fhtran)) ) )
1820 IF ( fltest )
WRITE (ndst,9061) fhtran, fhigh, nkh
1826 fhigh = min( sig(nk) , max( fh1 , fh2 ) )
1827 nkh = max( 2 , min( nkh1 , &
1828 int( facti2 + facti1*log(max(1.e-7,fhigh)) ) ) )
1830 IF ( fltest )
WRITE (ndst,9062) &
1831 fh1*tpiinv, fh2*tpiinv, fhigh*tpiinv, nkh
1836 fage = ffxfa*tanh(0.3*u10abs*fmeanws*tpi/grav)
1837 fh1 = (ffxfm+fage) * fmean1
1839 fhigh = min( sig(nk) , max( fh1 , fh2 ) )
1840 nkh = max( 2 , min( nkh1 , &
1841 int( facti2 + facti1*log(max(1.e-7,fhigh)) ) ) )
1845 IF (fxfm .LE. 0)
THEN
1848 fhigh = min( sig(nk), max(fxfm * fmean, fxpm / ustar) )
1850 nkh = max( 2 , min( nkh1 , &
1851 int( facti2 + facti1*log(max(1.e-7,fhigh)) ) ) )
1853 IF ( fltest )
WRITE (ndst,9063) fhigh*tpiinv, nkh
1861 IF ( dttot .GE. 0.9999*dtg )
THEN
1862 hm = fhmax *tanh(wnmean*max(0.,d_inp)) / max(1.e-4,wnmean )
1864 IF ( emean.GT.em .AND. emean.GT.1.e-30 )
THEN
1865 spec = spec / emean * em
1875 DO ik=min(nk,nkh), nk
1876 uc = facsd * grav / sig(ik)
1877 slev = min( 1. , max( 0. , u10abs/uc-1. ) ) * &
1878 6.25e-4 / wn1(ik)**3 / sig(ik)
1881 spec(ith+(ik-1)*nth) = max( spec(ith+(ik-1)*nth) , &
1882 slev * max( 0. , cos(u10dir-th(ith)) )**2 )
1891 facdia = max( 0. , min( 1., (sig(ik)-fhtran)/dfh) )
1892 facpar = max( 0. , 1.-facdia )
1895 spec(ith+(ik-1)*nth) = spec(ith+(ik-2)*nth) * fachfa &
1897 * facdia + facpar * spec(ith+(ik-1)*nth) &
1906 CALL w3sin3 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1907 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1908 ice, vsin, vdin, llws, ix, iy )
1911 CALL w3sin4 ( spec, cg1, wn2, u10abs, ustar, drat, as, &
1912 u10dir, z0, cd, tauwx, tauwy, tauwax, tauway, &
1913 vsin, vdin, llws, ix, iy, brlambda )
1914 IF (sintailpar(4).LT.0.5)
CALL w3spr4 (spec, cg1, wn1, emean, fmean, fmean1, wnmean,&
1915 amax, u10abs, u10dir, &
1917 taua, tauadir, dair, &
1920 tauwx, tauwy, cd, z0, charn, llws, fmeanws, dlwmean)
1928 CALL tick21(qi5tstart, dt)
1931 IF (srce_call .eq. srce_imp_post)
THEN
1935 IF ( dttot .GE. 0.9999*dtg )
THEN
1943 IF (ix .eq. debug_node)
THEN
1944 WRITE(740+
iaproc,*)
'NSTEPS=', nsteps
1945 WRITE(740+
iaproc,*)
'1 : sum(SPEC)=', sum(spec)
1947 WRITE(740+
iaproc,*)
'DT=', dt,
'DTG=', dtg
1954 dtdyn = dtdyn / real(max(1,nsteps))
1955 fcut = fhigh * tpiinv
1963 WRITE (ndse,8000) fname, ierr
1967 WRITE (ndse,8001) ierr
1979 IF (ix .eq. debug_node)
THEN
1980 WRITE(740+
iaproc,*)
'2 : sum(SPEC)=', sum(spec)
1991 diff = specinit(ith+(ik-1)*nth)-spec(ith+(ik-1)*nth)
1992 eband = eband + diff
1993 a1band = a1band + diff*ecos(ith)
1994 b1band = b1band + diff*esin(ith)
1996 efinish = efinish + eband * dden(ik) / cg1(ik)
1997 mwxfinish = mwxfinish + a1band * dden(ik) / cg1(ik) &
1999 mwyfinish = mwyfinish + b1band * dden(ik) / cg1(ik) &
2005 tauox=(grav*mwxfinish+tauwix-taubbl(1))/dtg
2006 tauoy=(grav*mwyfinish+tauwiy-taubbl(2))/dtg
2011 taubbl(:)=taubbl(:)/dtg
2012 tauocx=dair*coef*coef*ustar*ustar*cos(ustdir) + dwat*(tauox-tauwix)
2013 tauocy=dair*coef*coef*ustar*ustar*sin(ustdir) + dwat*(tauoy-tauwiy)
2017 phioc =dwat*grav*(efinish+phiaw-phibbl)/dtg
2018 phiaw =dwat*grav*phiaw /dtg
2019 phinl =dwat*grav*phinl /dtg
2020 phibbl=dwat*grav*phibbl/dtg
2027 IF (ix .eq. debug_node)
THEN
2028 WRITE(740+
iaproc,*)
'3 : sum(SPEC)=', sum(spec)
2032 IF (
inflags2(4).AND.ice.GT.0 )
THEN
2037 sig,wn_r,cg_ice,alpha_liu)
2039 IF (iicesmooth)
THEN
2043 IF (is2pars(14)*(tpi/wn_r(ik)).LT.icef)
THEN
2044 smooth_icedisp=tanh((icef-is2pars(14)*(tpi/wn_r(ik)))/(icef*is2pars(13)))
2046 wn_r(ik)=wn1(ik)*(1-smooth_icedisp)+wn_r(ik)*(smooth_icedisp)
2058 CALL w3sic1 ( spec,depth, cg1, ix, iy, vsic, vdic )
2061 CALL w3sis2 ( spec, depth, ice, iceh, icef, icedmax, ix, iy, &
2062 vsir, vdir, vdir2, wn1, cg1, wn_r, cg_ice, r )
2065 CALL w3sic2 ( spec, depth, iceh, icef, cg1, wn1,&
2066 ix, iy, vsic, vdic, wn_r, cg_ice, alpha_liu, r)
2069 CALL w3sic3 ( spec,depth, cg1, wn1, ix, iy, vsic, vdic )
2072 CALL w3sic4 ( spec,depth, cg1, ix, iy, vsic, vdic )
2075 CALL w3sic5 ( spec,depth, cg1, wn1, ix, iy, vsic, vdic )
2079 CALL w3sis1 ( spec, ice, vsir )
2092 att=exp(ice*vdic(is)*dtg)
2095 att=exp(ice*vdic(is)*dtg)
2098 att=exp(ice*vdic(is)*dtg)
2101 att=exp(ice*vdic(is)*dtg)
2104 att=exp(ice*vdic(is)*dtg)
2107 att=att*exp(ice*vdir(is)*dtg)
2110 att=att*exp(ice*vdir2(is)*dtg)
2111 IF (is2pars(2).EQ.0)
THEN
2115 att=att*exp((ice*vdir(is))*dtg)
2118 spec(1+(ik-1)*nth:nth+(ik-1)*nth) = att*spec2(1+(ik-1)*nth:nth+(ik-1)*nth)
2123 IF (is2pars(2).GE.0)
THEN
2124 IF (is2pars(20).GT.0.5)
THEN
2130 scat = exp(vdir(is)*is2pars(2)*dtg)
2131 iso = sum(spec(1+(ik-1)*nth:nth+(ik-1)*nth))/nth
2132 spec(1+(ik-1)*nth:nth+(ik-1)*nth) = iso &
2133 +(spec(1+(ik-1)*nth:nth+(ik-1)*nth)-iso)*scat
2138 scatspec(1:nth)=dble(spec(1+(ik-1)*nth:nth+(ik-1)*nth))
2139 spec(1+(ik-1)*nth:nth+(ik-1)*nth) = &
2140 REAL(MATMUL(IS2EIGVEC(:,:), EXP(IS2EIGVAL(:)*VDIR(IS)*DTG*IS2PARS(2)) &
2141 *MATMUL(TRANSPOSE(IS2EIGVEC(:,:)),SCATSPEC)))
2148 factor = dden(ik)/cg1(ik)
2149 factor2= factor*grav*wn1(ik)/sig(ik)
2152 phice = phice + (spec(is)-spec2(is)) * factor
2155 tauice(:) = tauice(:) - (spec(is)-spec2(is))*factor2*cosi(:)
2158 phice =-1.*dwat*grav*phice /dtg
2159 tauice(:)=tauice(:)/dtg
2162 IF (is2pars(10).LT.0.5)
THEN
2177 IF (ix .eq. debug_node)
THEN
2178 WRITE(740+
iaproc,*)
'4 : sum(SPEC)=', sum(spec)
2184 CALL calc_fpi(spec, cg1, fpi, vsin )
2187 CALL calc_fpi(spec, cg1, fpi, vsin )
2191 IF (u10abs.GT.10. .and. hstot.gt.0.5)
then
2192 CALL w3fld1 ( spec,min(fpi/tpi,2.0),coef*u10abs*cos(u10dir), &
2193 coef*u10abs*sin(u10dir), zwnd, depth, 0.0, &
2194 dair, ustar, ustdir, z0,taunux,taunuy,charn)
2200 IF (u10abs.GT.10. .and. hstot.gt.0.5)
then
2201 CALL w3fld2 ( spec,min(fpi/tpi,2.0),coef*u10abs*cos(u10dir), &
2202 coef*u10abs*sin(u10dir), zwnd, depth, 0.0, &
2203 dair, ustar, ustdir, z0,taunux,taunuy,charn)
2212 IF (ix .eq. debug_node)
THEN
2213 WRITE(740+
iaproc,*)
'5 : sum(SPEC)=', sum(spec)
2218 IF (reflec(1).GT.0.OR.reflec(2).GT.0.OR.(reflec(4).GT.0.AND.berg.GT.0))
THEN
2219 CALL w3sref ( spec, cg1, wn1, emean, fmean, depth, cx, cy, &
2220 reflec, refled, trnx, trny, &
2221 berg, dtg, ix, iy, jsea, vref )
2222 IF (gtype.EQ.ungtype.AND.refpars(3).LT.0.5)
THEN
2226 IF (iobp(ix).EQ.0)
THEN
2230 isp = ith+(ik-1)*nth
2232 IF (
iobpd_loc(ith,jsea).EQ.0) spec(isp) = dtg*vref(isp)
2234 IF (iobpd(ith,ix).EQ.0) spec(isp) = dtg*vref(isp)
2239 spec(:) = spec(:) + dtg * vref(:)
2242 spec(:) = spec(:) + dtg * vref(:)
2249 IF (ix .eq. debug_node)
THEN
2250 WRITE(740+
iaproc,*)
'6 : sum(SPEC)=', sum(spec)
2256 IF (it.EQ.0) spec = specinit
2258 spec = max(0., spec)
2265 8000
FORMAT (/
' *** ERROR W3SRCE : ERROR IN OPENING FILE ',a,
' ***'/ &
2267 8001
FORMAT (/
' *** ERROR W3SRCE : ERROR IN WRITING TO FILE ***'/ &
2272 9000
FORMAT (
' TEST W3SRCE : COUNTERS : NO LONGER AVAILABLE')
2273 9001
FORMAT (
' TEST W3SRCE : DEPTH :',f8.1/ &
2274 ' WIND SPEED :',f8.1/ &
2278 9004
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2279 ' ------------- NEW DYNAMIC INTEGRATION LOOP', &
2283 9005
FORMAT (
' TEST W3SRCE : FHIGH : ',f8.4/ &
2284 ' ------------- NEW DYNAMIC INTEGRATION LOOP', &
2288 9006
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2289 ' ------------- NEW DYNAMIC INTEGRATION LOOP', &
2293 9006
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2294 ' ------------- NEW DYNAMIC INTEGRATION LOOP', &
2299 9020
FORMAT (
' TEST W3SRCE : NSTEP : ',i4,
' DTTOT :',f6.1)
2300 9021
FORMAT (
' TEST W3SRCE : NKH (3X) : ',2i3,i6)
2301 9040
FORMAT (
' TEST W3SRCE : DTRAW, DT, SHAVE :',2f6.1,2x,l1)
2305 9060
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2309 9061
FORMAT (
' TEST W3SRCE : FHIGH (2X) : ',2f8.4/ &
2313 9062
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2317 9062
FORMAT (
' TEST W3SRCE : FHIGH (3X) : ',3f8.4/ &
2321 9063
FORMAT (
' TEST W3SRCE : FHIGH : ',f8.4/ &
2343 SUBROUTINE calc_fpi( A, CG, FPI, S )
2415 REAL,
INTENT(IN) :: A(NSPEC), CG(NK), S(NSPEC)
2416 REAL,
INTENT(OUT) :: FPI
2423 INTEGER,
SAVE :: IENT = 0
2425 REAL :: M0, M1, SIN1A(NK)
2430 CALL strace (ient,
'CALC_FPI')
2438 DO is=(ik-1)*
nth+1, ik*
nth
2439 sin1a(ik) = sin1a(ik) + max( 0. , s(is) )
2446 sin1a(ik) = sin1a(ik) *
dden(ik) / ( cg(ik) *
sig(ik)**3 )
2448 m1 = m1 + sin1a(ik)/
sig(ik)
2451 sin1a(nk) = sin1a(nk) /
dden(nk)
2452 m0 = m0 + sin1a(nk) *
fte
2453 m1 = m1 + sin1a(nk) *
fttr
2454 IF ( m1 .LT. 1e-20 )
THEN
2533 INTEGER,
SAVE :: IENT = 0
2539 INTEGER :: ISP, ITH, IK, IS
2540 REAL,
INTENT(IN) :: SPEC(NSPEC)
2541 REAL,
INTENT(INOUT) :: VS(NSPEC), VD(NSPEC)
2543 CALL strace (ient,
'SIGN_VSD_SEMI_IMPLICIT_WW3')
2546 vd(is) = min(0., vd(is))
2622 INTEGER,
SAVE :: IENT = 0
2627 INTEGER :: ISP, ITH, IK, IS
2628 REAL,
INTENT(IN) :: SPEC(NSPEC)
2629 REAL,
INTENT(INOUT) :: VS(NSPEC), VD(NSPEC)
2631 CALL strace (ient,
'SIGN_VSD_PATANKAR_WW3')
2634 vd(is) = min(0., vd(is))
2635 vs(is) = max(0., vs(is))