86 DOUBLE PRECISION,
PARAMETER ::
twpi=3.1415926535898*2.
87 DOUBLE PRECISION,
PARAMETER ::
fac=
twpi/360.
99 INTEGER,
ALLOCATABLE,
PRIVATE :: ii(:),jj(:),kk(:),ll(:),mm(:),nn(:),nj(:)
145 RES, SSQ, RMSR0, SDEV0,SDEV,RMSR, RESMAX, IMAX, RMSRP)
149 CHARACTER*256,
INTENT(IN) :: filename
150 INTEGER,
INTENT(IN) :: LP, NDEF, IMAX(NDEF)
151 INTEGER(KIND=4),
INTENT(IN) :: KD1,KD2
152 CHARACTER*4 ,
INTENT(IN) :: ITZ
153 REAL(KIND=8), intent(in) :: rmsr0(ndef), &
154 sdev0(ndef), sdev(ndef), rmsr(ndef), resmax(ndef), rmsrp(ndef)
155 REAL ,
INTENT(IN) :: RES(NDEF), SSQ(NDEF), XLAT,XLON
157 INTEGER :: IDEF, I, K, K2, L, I1, INFTOT
158 INTEGER :: ID1,IM1,IY1,ID2,IM2,IY2
160 open(unit=lp,
file=filename,status=
'unknown',form=
'formatted')
165 WRITE(lp,15) id1,im1,iy1,id2,im2,iy2,itz
166 15
FORMAT(/
'THE ANALYSIS PERIOD IS FROM',i3,
'/',i2,
'/',i4, &
167 ' TO ',i2,
'/',i2,
'/',i4,
' IN THE TIME ZONE ',a4)
168 WRITE(lp,*)
'USING SVD TO SOLVE THE OVERDETERMINED SYSTEM'
170 150
format(2i3,2i2,5x,2i3,2i2)
173 255
FORMAT(
'NUMBER OF POINTS IN THE ANALYSIS =',i6)
178 WRITE(lp,52) res(idef),ssq(idef)
179 52
FORMAT(
'LARGEST RESIDUAL MAGNITUDE & RESIDUAL SUM OF SQUARES:' &
181 WRITE(lp,66) sdev0(idef),rmsr0(idef)
183 'ST. DEV. OF RIGHT HAND SIDES OF ORIGINAL OVERDETERMINED SYSTEM:' &
185 ' AND THE ROOT MEAN SQUARE RESIDUAL ERROR:' &
189 write(lp,*)
' rms residual: brute force =',rmsr(idef)
190 write(lp,*)
' max residual: ',resmax(idef),imax(idef)
193 41
FORMAT(
'HARMONIC ANALYSIS RESULTS: AMPLITUDES, PHASE LAGS, C, S, &
194 & amp SD estimates, t-test value')
202 43
FORMAT(5x,a5,4x,f12.9,2x,f10.5,2x,f10.3,5x,4f8.3)
208 write(lp,*)
' INFERENCE RESULTS'
219 79
format(5x,a5,4x,f12.9,15x,f10.4,5x,f10.4)
227 70
format(
'N,m,LAT,LON,SDEV0,SDEV: ',2i10,a4,f9.4,f10.4,2f10.2)
230 WRITE(lp,71) rmsrp(idef)
231 71
FORMAT(
'ROOT MEAN SQUARE RESIDUAL ERROR AFTER INFERENCE IS', &
234 WRITE(lp,72) rmsrp(idef)
235 72
FORMAT(
'RECALCULATED ROOT MEAN SQUARE RESIDUAL ERROR IS ', &
302 CHARACTER(LEN=100),
INTENT(IN) :: LIST(70)
303 INTEGER,
INTENT(OUT) :: INDS(70), TIDE_PRMF
307 INTEGER,
SAVE :: IENT = 0
311 CALL strace (ient,
'TIDE_FIND_INDICES_PREDICTION')
315 IF (trim(list(1)).EQ.
'VFAST' .OR. trim(list(1)).EQ.
'FAST')
THEN
323 DO WHILE (len_trim(list(tide_prmf+1)).NE.0)
324 tide_prmf=tide_prmf+1
327 IF (trim(
tidecon_name(j)).EQ.trim(list(tide_prmf)))
THEN
330 IF (iaproc.EQ.napout)
WRITE(
ndso,
'(A,A,E12.2)')
'Tidal constituent to be used in pre:', &
334 IF (found.EQ.0 .AND. iaproc.EQ.napout)
WRITE(
ndso,
'(3A)')
'Tidal constituent ',trim(list(tide_prmf)), &
401 CHARACTER(LEN=100),
INTENT(IN) :: LIST(70)
404 CHARACTER(LEN=5) :: TIDECON_NAME_ALL(65)
405 REAL :: TIDE_FREQC_ALL(65)
406 INTEGER :: INDS(65), J, FOUND, NTIDES
408 INTEGER,
SAVE :: IENT = 0
412 CALL strace (ient,
'TIDE_FIND_INDICES_PREDICTION')
415 tidecon_name_all(:)=(/ &
416 'Z0 ',
'SSA ',
'MSM ',
'MM ',
'MSF ',
'MF ',
'ALP1 ',
'2Q1 ',
'SIG1 ',
'Q1 ', &
417 'RHO1 ',
'O1 ',
'TAU1 ',
'BET1 ',
'NO1 ',
'CHI1 ',
'P1 ',
'K1 ',
'PHI1 ',
'THE1 ', &
418 'J1 ',
'SO1 ',
'OO1 ',
'UPS1 ',
'OQ2 ',
'EPS2 ',
'2N2 ',
'MU2 ',
'N2 ',
'NU2 ', &
419 'M2 ',
'MKS2 ',
'LDA2 ',
'L2 ',
'S2 ',
'K2 ',
'MSN2 ',
'ETA2 ',
'MO3 ',
'M3 ', &
420 'SO3 ',
'MK3 ',
'SK3 ',
'MN4 ',
'M4 ',
'SN4 ',
'MS4 ',
'MK4 ',
'S4 ',
'SK4 ', &
421 '2MK5 ',
'2SK5 ',
'2MN6 ',
'M6 ',
'2MS6 ',
'2MK6 ',
'2SM6 ',
'MSK6 ',
'3MK7 ',
'M8 ', &
422 'N4 ',
'R2 ',
'S1 ',
'SA ',
'T2 ' /)
424 tide_freqc_all(:)=(/0.0000000000, 0.0002281591, 0.0013097807, 0.0015121520, 0.0028219327, 0.0030500918, &
425 0.0343965698, 0.0357063505, 0.0359087218, 0.0372185025, 0.0374208738, &
426 0.0387306544, 0.0389588136, 0.0400404351, 0.0402685943, 0.0404709655, &
427 0.0415525871, 0.0417807462, 0.0420089053, 0.0430905269, 0.0432928982, &
428 0.0446026789, 0.0448308380, 0.0463429900, 0.0759749448, 0.0761773160, &
429 0.0774870967, 0.0776894680, 0.0789992487, 0.0792016200, 0.0805114007, &
430 0.0807395598, 0.0818211814, 0.0820235526, 0.0833333333, 0.0835614924, &
431 0.0848454853, 0.0850736444, 0.1192420551, 0.1207671010, 0.1220639878, &
432 0.1222921469, 0.1251140796, 0.1595106494, 0.1610228013, 0.1623325820, &
433 0.1638447340, 0.1640728931, 0.1666666667, 0.1668948258, 0.2028035476, &
434 0.2084474129, 0.2400220500, 0.2415342020, 0.2443561347, 0.2445842938, &
435 0.2471780673, 0.2474062264, 0.2833149482, 0.3220456027, &
436 0.157998497 , 0.083447407 , 0.041666667 , 0.000114080 , 0.083219259 /)
440 IF (trim(list(1)).EQ.
'FAST')
THEN
442 inds(1:44)= (/ 1, 2, 3, 4, 5, 6, 12, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, &
443 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,&
444 55, 56, 57, 58, 59, 60 /)
446 ELSE IF (trim(list(1)).EQ.
'VFAST')
THEN
448 inds(1:20)= (/ 1, 2, 3, 5, 6, 27, 28, 29, 30, 31, 35, 36, 37, 44, 45, 47, 49, 54, 55, 60 /)
454 DO WHILE (len_trim(list(
tide_mf+1)).NE.0)
459 IF (trim(tidecon_name_all(j)).EQ.trim(list(
tide_mf)))
THEN
463 IF (iaproc.EQ.napout)
WRITE(
ndso,
'(A,I4,2A,E12.2)') &
464 'Tidal constituent in analysis:', j,
' ', &
465 trim(tidecon_name_all(j)),tide_freqc_all(j)
468 IF (found.EQ.0 .AND. iaproc.EQ.napout)
WRITE(
ndso,
'(A,I4,A,A)') &
469 'Tidal constituent ',
tide_mf,trim(list(
tide_mf)),
' not available.'
498 INTEGER J, K, K1, L, J1, JL, L2, KM1, JBASE
531 SUBROUTINE setvuf_fast(h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau,XLAT,F,U,V)
534 REAL,
INTENT(IN) :: XLAT
535 REAL(KIND=8), intent(in) :: h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau
536 INTEGER,
PARAMETER :: NTIL=44
537 REAL ,
INTENT(OUT) :: F(NTIL),U(NTIL),V(NTIL)
538 REAL :: FA(170),UA(170),VA(170)
542 INTEGER :: K, L, L2, JBASE, J1, J, JL, K1
543 REAL(KIND=4), parameter ::
pi=3.1415926536
544 REAL(KIND=4), parameter :: twopi=2.*3.1415926536
546 REAL :: SLAT, VDBL, RR, SUMC, SUMS, UUDBL, UU, CXLAT
558 cxlat = max(abs(xlat), 5.)
559 slat=sin(
pi*cxlat/180.)
609 vdbl=ii(k)*tau+jj(k)*s+kk(k)*h+ll(k)*p+mm(k)*enp+nn(k)*pp+
semi(k)
622 rr=
ee(j)*0.36309*(1.-5.*slat*slat)/slat
623 ELSE IF (l2.EQ.3)
THEN
624 rr=
ee(j)*2.59808*slat
629 sumc=sumc+rr*cos(uu*twopi)
630 sums=sums+rr*sin(uu*twopi)
633 fa(k)=sqrt(sumc*sumc+sums*sums)
635 ua(k)=atan2(sums,sumc)/twopi
653 fa(k)=fa(k)*fa(l2)**abs(
coef_con(j))
673 CHARACTER*256,
INTENT(IN) :: filename
674 CHARACTER*256,
INTENT(OUT) :: fnam6,fnam7,fnam8,fnam9,fnam11
699 OPEN(unit=kin,
file=filename,status=
'OLD')
702 read(kin,
'(a)') fnam6
703 read(kin,
'(a)') fnam7
704 read(kin,
'(a)') fnam8
705 read(kin,
'(a)') fnam9
706 read(kin,
'(a)') fnam11
716 SUBROUTINE tide_read_anapar(KR1,LP,filename,KD1,KD2,XLON,XLAT,NDEF,ITREND,ITZ)
720 INTEGER,
INTENT(IN) :: KR1, LP
721 CHARACTER*256,
INTENT(IN) :: filename
722 INTEGER(KIND=4),
INTENT(OUT) :: KD1, KD2
723 INTEGER ,
INTENT(OUT) :: NDEF,ITREND
724 REAL,
INTENT(OUT) :: XLON, XLAT
725 CHARACTER*4 ,
INTENT(OUT) :: ITZ
728 INTEGER ID1,IM1,IY1,ID2,IM2,IY2,IC1,IC2
729 INTEGER JSTN, LATD,LATM,LOND,LONM, K, K2
732 open(unit=kr1,
file=filename,status=
'old',form=
'formatted')
779 READ(kr1,*)
tide_mf,ndef,itrend
784 WRITE(6,*)
' number of constituents & degrees of freedom=',
tide_mf,ndef
786 IF (itrend.eq.1)
then
788 WRITE(6,*)
' a linear trend is included in the analysis'
792 WRITE(6,*)
' no linear trend is included'
806 11
FORMAT(4x,a5,f16.10)
807 READ(kr1,7) id1,im1,iy1,id2,im2,iy2,ic1,ic2
809 WRITE(6,*) id1,im1,iy1,id2,im2,iy2,ic1,ic2
814 READ(kr1,9) jstn,nstn(1:5),itz,latd,latm,lond,lonm
815 9
FORMAT(i5,5a4,1x,a4,4i5)
830 read(kr1,
'(4X,A5,E17.10,2F10.3)')
tide_konin(k,k2),
tide_sigin(k,k2),
tide_r(k,k2),
tide_zeta(k,k2)
847 INTEGER,
INTENT(IN) :: KR2, NDEF
848 CHARACTER*256,
INTENT(IN) :: filename
849 INTEGER(KIND=4),
INTENT(IN) :: KD1,KD2
850 INTEGER(KIND=4),
INTENT(OUT) :: TIDE_NTI
852 INTEGER :: I, idd,imm,icc,iyy,ihh,imin,isec,iy
853 REAL,
ALLOCATABLE :: TIDE_DATATMP(:,:)
854 INTEGER(KIND=4),
ALLOCATABLE :: TIDE_DAYSTMP(:), TIDE_SECSTMP(:)
855 INTEGER(KIND=4) :: KDD
861 ALLOCATE( tide_datatmp(
nr,ndef), tide_daystmp(
nr), tide_secstmp(
nr) )
865 OPEN(unit=kr2,
file=filename,status=
'old',form=
'formatted')
870 DO WHILE(icode.EQ.0.AND.kdd.LE.kd2)
874 READ(kr2,145,iostat=icode) idd,imm,icc,iyy,ihh,imin,htt(1:ndef)
875 145
format(6i2,4f10.4)
882 WRITE(*,*) icc,iyy,imm,idd,ihh,imin
883 WRITE(*,*)
'kd, kd1, kd2 =',kdd,kd1,kd2
884 write(*,*)
' observation before analysis period'
889 IF (icode.EQ.0.AND.kdd.LE.kd2)
THEN
891 tide_datatmp(i,:)=htt(:)
893 tide_secstmp(i)=ihh*3600+imin*60+isec
901 tide_data(1:tide_nti,1:ndef)=tide_datatmp(1:tide_nti,1:ndef)
902 tide_days(1:tide_nti)=tide_daystmp(1:tide_nti)
903 tide_secs(1:tide_nti)=tide_secstmp(1:tide_nti)
910 SUBROUTINE astr(d1,h,pp,s,p,np,dh,dpp,ds,dp,dnp)
927 REAL(KIND=8), intent(in ):: d1
928 REAL(KIND=8), intent(out):: h,pp,s,p,np,dh,dpp,ds,dp,dnp
932 REAL(KIND=8) :: d2,f,f2
937 h=279.696678d0+.9856473354d0*d1+.00002267d0*d2*d2
938 pp=281.220833d0+.0000470684d0*d1+.0000339d0*d2*d2+&
940 s=270.434164d0+13.1763965268d0*d1-.000085d0*d2*d2+&
942 p=334.329556d0+.1114040803d0*d1-.0007739d0*d2*d2-&
944 np=-259.183275d0+.0529539222d0*d1-.0001557d0*d2*d2-&
956 dh=.9856473354d0+2.d-8*.00002267d0*d1
957 dpp=.0000470684d0+2.d-8*.0000339d0*d1&
958 +3.d-12*.00000007d0*d1**2
959 ds=13.1763965268d0-2.d-8*.000085d0*d1+&
960 3.d-12*.000000039d0*d1**2
961 dp=.1114040803d0-2.d-8*.0007739d0*d1-&
962 3.d-12*.00000026d0*d1**2
963 dnp=+.0529539222d0-2.d-8*.0001557d0*d1-&
964 3.d-12*.00000005d0*d1**2
978 DOUBLE PRECISION absa,absb
981 IF (absa.gt.absb)
then
982 dpythag=absa*sqrt(1.0d0+(absb/absa)**2)
984 IF (absb.eq.0.0d0)
then
987 dpythag=absb*sqrt(1.0d0+(absa/absb)**2)
995 SUBROUTINE dsvbksb(u,w,v,m,n,mp,np,b,x)
996 INTEGER m,mp,n,np,NMAX
997 DOUBLE PRECISION b(mp),u(mp,np),v(np,np),w(np),x(np)
1000 DOUBLE PRECISION s,tmp(NMAX)
1003 IF (w(j).ne.0.0d0)
then
1023 SUBROUTINE dsvdcmp(a,m,n,mp,np,w,v)
1024 INTEGER m,mp,n,np,NMAX
1025 DOUBLE PRECISION a(mp,np),v(np,np),w(np)
1028 INTEGER i,its,j,jj,k,l,nm
1029 DOUBLE PRECISION anorm,c,f,g,h,s,scale,x,y,z,rv1(NMAX)
1042 scale=scale+abs(a(k,i))
1044 IF (scale.ne.0.0d0)
THEN
1060 a(k,j)=a(k,j)+f*a(k,i)
1075 IF ((i.le.m).and.(i.ne.n))
then
1077 scale=scale+abs(a(i,k))
1079 IF (scale.ne.0.0d0)
then
1097 a(j,k)=a(j,k)+s*rv1(k)
1105 anorm=max(anorm,(abs(w(i))+abs(rv1(i))))
1111 v(j,i)=(a(i,j)/a(i,l))/g
1119 v(k,j)=v(k,j)+s*v(k,i)
1147 a(k,j)=a(k,j)+f*a(k,i)
1164 IF ((abs(rv1(l))+anorm).eq.anorm)
goto 2
1165 IF ((abs(w(nm))+anorm).eq.anorm)
goto 1
1172 IF ((abs(f)+anorm).eq.anorm)
goto 2
1197 WRITE(6,*)
'no convergence in svdcmp'
1205 f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0d0*h*y)
1207 f=((x-z)*(x+z)+h*((y/(f+sign(g,f)))-h))/x
1227 v(jj,j)= (x*c)+(z*s)
1228 v(jj,i)=-(x*s)+(z*c)
1242 a(jj,j)= (y*c)+(z*s)
1243 a(jj,i)=-(y*s)+(z*c)
1264 igreg=15+31*(10+12*1582)
1266 IF (jy.EQ.0)
WRITE(6,*)
'There is no zero year !!'
1267 IF (jy.LT.0) jy=jy+1
1274 juldayt=int(365.25*jy)+int(30.6001*jm)+id+1720995
1275 IF (id+31*(mm+12*iyyy).GE.igreg)
THEN
1283 SUBROUTINE caldatt(julian,id,mm,iyyy)
1288 INTEGER(KIND=4),
INTENT(in) :: julian
1289 INTEGER(KIND=4),
INTENT(out) :: id,mm,iyyy
1290 INTEGER(KIND=4),
PARAMETER :: IGREG=2299161
1291 INTEGER(KIND=4) ja,jalpha,jb,jc,jd,je
1292 if (julian.GE.igreg)
THEN
1293 jalpha=int(((julian-1867216)-0.25)/36524.25)
1294 ja=julian+1+jalpha-int(0.25*jalpha)
1299 jc=int(6680.+((jb-2439870)-122.1)/365.25)
1300 jd=365*jc+int(0.25*jc)
1301 je=int((jb-jd)/30.6001)
1302 id=jb-jd-int(30.6001*je)
1304 IF (mm.GT.12) mm=mm-12
1306 IF (mm.GT.2) iyyy=iyyy-1
1307 IF (iyyy.LE.0) iyyy=iyyy-1
1312 subroutine svd(q,u,v,cov,w,p,b,sig,ic,m,n,mm,N2,toler,jc &
1358 integer,
parameter :: nwt=302
1361 integer,
intent(IN) :: ic, m, n, N2, mm
1362 real,
intent(IN) :: toler
1363 real,
intent(INOUT) :: q(mm,N2), ssq, res
1364 integer,
intent(INOUT) :: jc
1365 double precision,
intent(INOUT) :: sig(mm)
1366 double precision,
intent(OUT) :: u(mm,N2),v(N2,N2),cov(N2,N2), &
1370 double precision :: wti(nwt)
1372 real :: wmax, thresh
1373 double precision :: eps, sum, resi
1380 IF (ic.eq.2)
go to 10
1394 IF (w(j).gt.wmax) wmax=w(j)
1398 IF (w(j).lt.thresh)
then
1407 IF (w(j).gt.eps)
then
1409 wti(j)=1.d0/(w(j)*w(j))
1413 call dsvbksb(u,w,v,m,n,mm,n2,b,p)
1434 sum=sum+v(i,k)*v(j,k)*wti(k)
1474 'Z0 ',
'SA ',
'SSA ',
'MSM ',
'MM ',
'MSF ',
'MF ',
'ALP1 ',
'2Q1 ',
'SIG1 ', &
1475 'Q1 ',
'RHO1 ',
'O1 ',
'TAU1 ',
'BET1 ',
'NO1 ',
'CHI1 ',
'PI1 ',
'P1 ',
'S1 ', &
1476 'K1 ',
'PSI1 ',
'PHI1 ',
'THE1 ',
'J1 ',
'OO1 ',
'UPS1 ',
'OQ2 ',
'EPS2 ',
'2N2 ', &
1477 'MU2 ',
'N2 ',
'NU2 ',
'GAM2 ',
'H1 ',
'M2 ',
'H2 ',
'LDA2 ',
'L2 ',
'T2 ', &
1478 'S2 ',
'R2 ',
'K2 ',
'ETA2 ',
'M3 ',
'2PO1 ',
'SO1 ',
'ST36 ',
'2NS2 ',
'ST37 ', &
1479 'ST1 ',
'ST2 ',
'ST3 ',
'O2 ',
'ST4 ',
'SNK2 ',
'OP2 ',
'MKS2 ',
'ST5 ',
'ST6 ', &
1480 '2SK2 ',
'MSN2 ',
'ST7 ',
'2SM2 ',
'ST38 ',
'SKM2 ',
'2SN2 ',
'NO3 ',
'MO3 ',
'NK3 ', &
1481 'SO3 ',
'MK3 ',
'SP3 ',
'SK3 ',
'ST8 ',
'N4 ',
'3MS4 ',
'ST39 ',
'MN4 ',
'ST40 ', &
1482 'ST9 ',
'M4 ',
'ST10 ',
'SN4 ',
'KN4 ',
'MS4 ',
'MK4 ',
'SL4 ',
'S4 ',
'SK4 ', &
1483 'MNO5 ',
'2MO5 ',
'3MP5 ',
'MNK5 ',
'2MP5 ',
'2MK5 ',
'MSK5 ',
'3KM5 ',
'2SK5 ',
'ST11 ', &
1484 '2NM6 ',
'ST12 ',
'ST41 ',
'2MN6 ',
'ST13 ',
'M6 ',
'MSN6 ',
'MKN6 ',
'2MS6 ',
'2MK6 ', &
1485 'NSK6 ',
'2SM6 ',
'MSK6 ',
'ST42 ',
'S6 ',
'ST14 ',
'ST15 ',
'M7 ',
'ST16 ',
'3MK7 ', &
1486 'ST17 ',
'ST18 ',
'3MN8 ',
'ST19 ',
'M8 ',
'ST20 ',
'ST21 ',
'3MS8 ',
'3MK8 ',
'ST22 ', &
1487 'ST23 ',
'ST24 ',
'ST25 ',
'ST26 ',
'4MK9 ',
'ST27 ',
'ST28 ',
'M10 ',
'ST29 ',
'ST30 ', &
1488 'ST31 ',
'ST32 ',
'ST33 ',
'M12 ',
'ST34 ',
'ST35 '/)
1490 ii(:)=(/ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, &
1491 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, &
1492 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, &
1493 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, &
1495 jj(:)=(/ 0, 0, 0, 1, 1, 2, 2, -4, -3, -3, &
1496 -2, -2, -1, -1, 0, 0, 0, 1, 1, 1, &
1497 1, 1, 1, 2, 2, 3, 4, -3, -3, -2, &
1498 -2, -1, -1, 0, 0, 0, 0, 1, 1, 2, &
1500 kk(:)=(/ 0, 1, 2, -2, 0, -2, 0, 2, 0, 2, &
1501 0, 2, 0, 2, -2, 0, 2, -3, -2, -1, &
1502 0, 1, 2, -2, 0, 0, 0, 0, 2, 0, &
1503 2, 0, 2, -2, -1, 0, 1, -2, 0, -3, &
1505 ll(:)=(/ 0, 0, 0, 1, -1, 0, 0, 1, 2, 0, &
1506 1, -1, 0, 0, 1, 1, -1, 0, 0, 0, &
1507 0, 0, 0, 1, -1, 0, -1, 3, 1, 2, &
1508 0, 1, -1, 2, 0, 0, 0, 1, -1, 0, &
1510 mm(:)=(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1511 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1512 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1515 nn(:)=(/ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, &
1516 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, &
1517 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, &
1518 0, 0, 0, 0, 1, 0, -1, 0, 0, 1, &
1520 semi(:)=(/ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,-0.25,-0.25,-0.25, &
1521 -0.25,-0.25,-0.25,-0.75,-0.75,-0.75,-0.75,-0.25,-0.25,-0.75, &
1522 -0.75,-0.75,-0.75,-0.75,-0.75,-0.75,-0.75, 0.00, 0.00, 0.00, &
1523 0.00, 0.00, 0.00,-0.50,-0.50, 0.00, 0.00,-0.50,-0.50, 0.00, &
1524 0.00,-0.50, 0.00, 0.00,-0.50 /)
1525 nj(:)=(/ 1, 1, 1, 1, 1, 1, 1, 2, 5, 4, &
1526 10, 5, 8, 5, 1, 9, 2, 1, 6, 2, &
1527 10, 1, 5, 4, 10, 8, 5, 2, 3, 4, &
1528 3, 4, 4, 3, 2, 9, 1, 1, 5, 1, &
1529 3, 2, 5, 7, 1, 2, 2, 3, 2, 2, &
1530 3, 4, 3, 1, 3, 3, 2, 3, 3, 4, &
1531 2, 3, 4, 2, 3, 3, 2, 2, 2, 2, &
1532 2, 2, 2, 2, 3, 1, 2, 4, 2, 3, &
1533 4, 1, 3, 2, 2, 2, 2, 2, 1, 2, &
1534 3, 2, 2, 3, 2, 2, 3, 3, 2, 3, &
1535 2, 4, 3, 2, 4, 1, 3, 3, 2, 2, &
1536 3, 2, 3, 3, 1, 3, 3, 1, 3, 2, &
1537 4, 2, 2, 4, 1, 3, 3, 2, 2, 4, &
1538 2, 3, 3, 3, 2, 3, 2, 1, 3, 2, &
1541 ldel(1:jlm)=(/ 0, 0, 0, 0, 0, 0, 0, -1, 0, -2, &
1542 -1, -1, 0, 0, -1, 0, 0, 2, -2, -2, &
1543 -1, -1, -1, 0, -1, 0, 1, 2, 0, 0, &
1544 1, 2, 2, -1, 0, 0, 1, 1, 1, 2, &
1545 2, -2, -1, 0, 0, 0, 0, -2, -2, -2, &
1546 -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, &
1547 0, 0, 1, 2, 2, 0, 0, -2, -1, -1, &
1548 -1, 0, 0, 0, 0, 1, 1, 0, -2, -2, &
1549 0, 0, 0, -2, -1, 0, 0, 0, 0, 0, &
1550 1, 1, 1, 1, 2, 2, 2, -2, -2, -2, &
1551 -1, -1, 0, 0, 0, -2, 0, 0, 1, 1, &
1552 -1, 0, -1, -1, 0, -2, -1, -1, 0, -1, &
1553 -1, 0, -2, -1, 0, 0, 0, 1, 2, 2, &
1554 -2, -1, 0, 0, 1, -1, -1, 0, 0, 1, &
1555 1, 1, 2, 2, 0, 0, 0, 2, 2, 2, &
1556 2, 0, 0, 1, 2, 0, 0, -1, -1, 0, &
1557 0, 0, 0, 0, 0, 1, 1, 1, 2, 0/)
1558 mdel(1:jlm)=(/ 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, &
1559 -1, 0, -2, -1, 0, -2, -1, 0, -3, -2, &
1560 -2, -1, 0, -2, 0, -1, 0, 0, -2, -1, &
1561 0, 0, 1, 0, -2, -1, -1, 0, 1, 0, &
1562 1, 0, 0, -1, 1, 2, -1, -2, -1, 0, &
1563 -1, 0, 1, -1, 1, 2, -1, 1, -1, -2, &
1564 -1, 0, 0, 0, 1, 0, 1, -1, -1, 0, &
1565 1, -2, -1, 1, 2, 0, 1, 1, 0, 1, &
1566 0, 1, 2, -1, 0, -1, 1, -1, 1, 2, &
1567 -1, 0, 1, 2, 0, 1, 2, -1, 0, 1, &
1568 0, 1, 1, 2, 3, 0, 1, 2, 0, 1, &
1569 0, -1, -1, 0, -1, -2, -1, 0, -1, -1, &
1570 0, -1, -2, 0, -2, -1, -1, 0, 0, 1, &
1571 -2, 0, -1, -1, 0, -1, 0, -2, -1, -1, &
1572 0, 1, 0, 1, -1, -1, -1, -1, 0, 1, &
1573 2, 0, -1, 0, 0, 0, 1, 0, 1, -1, &
1574 1, 2, -1, 1, 2, 0, 1, 2, 0, -1 /)
1575 ndel(1:jlm)=(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1576 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1577 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, &
1578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1579 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1581 0, 2, 0, 0, 0, -2, 0, 0, 0, 0, &
1582 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1583 -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1584 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1585 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1586 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1587 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, &
1588 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, &
1589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
1590 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, &
1591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /)
1592 ph(1:jlm)=(/ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.75, 0.00, 0.50, &
1593 0.75, 0.75, 0.50, 0.00, 0.75, 0.50, 0.00, 0.50, 0.50, 0.50, &
1594 0.75, 0.75, 0.75, 0.50, 0.00, 0.00, 0.75, 0.50, 0.50, 0.00, &
1595 0.75, 0.50, 0.00, 0.25, 0.50, 0.00, 0.25, 0.75, 0.25, 0.50, &
1596 0.50, 0.00, 0.25, 0.50, 0.50, 0.50, 0.00, 0.50, 0.00, 0.00, &
1597 0.75, 0.25, 0.75, 0.50, 0.00, 0.50, 0.50, 0.00, 0.50, 0.00, &
1598 0.50, 0.50, 0.75, 0.50, 0.50, 0.00, 0.50, 0.00, 0.75, 0.25, &
1599 0.75, 0.00, 0.50, 0.00, 0.50, 0.25, 0.25, 0.00, 0.00, 0.00, &
1600 0.00, 0.50, 0.50, 0.00, 0.25, 0.50, 0.00, 0.50, 0.00, 0.50, &
1601 0.75, 0.25, 0.25, 0.25, 0.50, 0.50, 0.50, 0.50, 0.00, 0.00, &
1602 0.25, 0.25, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.25, 0.25, &
1603 0.25, 0.50, 0.25, 0.25, 0.50, 0.50, 0.25, 0.25, 0.50, 0.25, &
1604 0.25, 0.50, 0.50, 0.00, 0.00, 0.50, 0.50, 0.75, 0.00, 0.50, &
1605 0.00, 0.25, 0.50, 0.50, 0.50, 0.75, 0.75, 0.00, 0.50, 0.25, &
1606 0.75, 0.75, 0.00, 0.00, 0.50, 0.50, 0.50, 0.00, 0.50, 0.50, &
1607 0.50, 0.00, 0.00, 0.75, 0.00, 0.50, 0.00, 0.75, 0.75, 0.50, &
1608 0.00, 0.00, 0.50, 0.00, 0.00, 0.75, 0.75, 0.75, 0.50, 0.50 /)
1610 ee(1:jlm)=(/ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0360, 0.1906, 0.0063, &
1611 0.0241, 0.0607, 0.0063, 0.1885, 0.0095, 0.0061, 0.1884, 0.0087, 0.0007, 0.0039, &
1612 0.0010, 0.0115, 0.0292, 0.0057, 0.0008, 0.1884, 0.0018, 0.0028, 0.0058, 0.1882, &
1613 0.0131, 0.0576, 0.0175, 0.0003, 0.0058, 0.1885, 0.0004, 0.0029, 0.0004, 0.0064, &
1614 0.0010, 0.0446, 0.0426, 0.0284, 0.2170, 0.0142, 0.2266, 0.0057, 0.0665, 0.3596, &
1615 0.0331, 0.2227, 0.0290, 0.0290, 0.2004, 0.0054, 0.0282, 0.2187, 0.0078, 0.0008, &
1616 0.0112, 0.0004, 0.0004, 0.0015, 0.0003, 0.3534, 0.0264, 0.0002, 0.0001, 0.0007, &
1617 0.0001, 0.0001, 0.0198, 0.1356, 0.0029, 0.0002, 0.0001, 0.0190, 0.0344, 0.0106, &
1618 0.0132, 0.0384, 0.0185, 0.0300, 0.0141, 0.0317, 0.1993, 0.0294, 0.1980, 0.0047, &
1619 0.0027, 0.0816, 0.0331, 0.0027, 0.0152, 0.0098, 0.0057, 0.0037, 0.1496, 0.0296, &
1620 0.0240, 0.0099, 0.6398, 0.1342, 0.0086, 0.0611, 0.6399, 0.1318, 0.0289, 0.0257, &
1621 0.1042, 0.0386, 0.0075, 0.0402, 0.0373, 0.0061, 0.0117, 0.0678, 0.0374, 0.0018, &
1622 0.0104, 0.0375, 0.0039, 0.0008, 0.0005, 0.0373, 0.0373, 0.0042, 0.0042, 0.0036, &
1623 0.1429, 0.0293, 0.0330, 0.0224, 0.0447, 0.0001, 0.0004, 0.0005, 0.0373, 0.0001, &
1624 0.0009, 0.0002, 0.0006, 0.0002, 0.0217, 0.0448, 0.0366, 0.0047, 0.2505, 0.1102, &
1625 0.0156, 0.0000, 0.0022, 0.0001, 0.0001, 0.2535, 0.0141, 0.0024, 0.0004, 0.0128, &
1626 0.2980, 0.0324, 0.0187, 0.4355, 0.0467, 0.0747, 0.0482, 0.0093, 0.0078, 0.0564 /)
1628 ir(1:jlm)=(/ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, &
1629 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, &
1630 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, &
1631 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, &
1632 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, &
1633 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, &
1634 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, &
1635 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, &
1636 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, &
1637 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, &
1638 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, &
1639 2, 0, 2, 2, 0, 0, 2, 2, 0, 2, &
1640 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, &
1641 0, 2, 0, 0, 0, 2, 2, 0, 0, 2, &
1642 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, &
1643 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, &
1644 0, 0, 0, 0, 0, 2, 2, 2, 0, 0 /)
1646 coef_con(:)=(/ 2.00,-1.00, 1.00,-1.00, 2.00, 1.00,-2.00, 2.00,-1.00, 3.00, &
1647 -2.00, 2.00, 1.00,-2.00, 1.00, 1.00, 1.00,-2.00, 2.00, 1.00, &
1648 -2.00, 2.00, 2.00, 1.00,-2.00, 1.00, 1.00,-1.00, 1.00, 1.00, &
1649 1.00, 1.00,-1.00, 1.00, 2.00,-2.00, 2.00, 1.00,-1.00,-1.00, &
1650 2.00,-1.00, 1.00, 1.00,-1.00, 2.00, 1.00,-1.00,-1.00, 2.00, &
1651 -1.00, 2.00, 1.00,-2.00, 1.00, 1.00,-1.00, 2.00,-1.00, 1.00, &
1652 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, &
1653 1.00, 1.00, 1.00, 2.00, 1.00,-1.00, 2.00, 3.00,-1.00, 1.00, &
1654 1.00, 1.00,-1.00, 1.00, 1.00, 2.00, 1.00,-1.00, 1.00, 1.00, &
1655 1.00,-1.00, 2.00, 2.00, 1.00,-1.00, 1.00, 1.00, 1.00, 1.00, &
1656 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 1.00, 1.00, 1.00, &
1657 1.00, 1.00, 2.00, 1.00, 3.00,-1.00, 1.00, 1.00, 1.00, 2.00, &
1658 1.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, &
1659 1.00, 3.00, 1.00,-1.00, 2.00, 1.00, 2.00, 1.00, 1.00,-1.00, &
1660 3.00, 1.00,-1.00, 2.00, 1.00, 2.00, 1.00, 1.00,-1.00, 3.00, &
1661 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 1.00, 2.00, 1.00, &
1662 1.00, 1.00, 1.00, 2.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, &
1663 -1.00, 3.00, 2.00, 1.00, 1.00, 2.00, 1.00, 1.00, 3.50, 2.00, &
1664 1.00, 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, &
1665 3.00, 1.00, 3.00, 1.00, 1.00,-1.00, 4.00, 2.00, 1.00, 1.00, &
1666 2.00, 1.00, 1.00, 3.00, 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, &
1667 1.00, 2.00, 2.00, 2.00, 1.00, 1.00, 2.00, 2.00, 1.00, 3.00, &
1668 1.00, 1.00, 4.00, 1.00, 3.00, 1.00, 1.00, 4.00, 1.00, 5.00, &
1669 3.00, 1.00, 1.00, 4.00, 1.00, 2.00, 1.00, 1.00, 1.00, 3.00, &
1670 2.00, 4.00, 1.00, 1.00, 6.00, 5.00, 1.00, 3.00, 1.00, 1.00, &
1673 'P1 ',
'O1 ',
'S2 ',
'O1 ',
'M2 ',
'N2 ',
'S2 ',
'N2 ',
'S2 ',
'M2 ', &
1674 'S2 ',
'N2 ',
'K2 ',
'S2 ',
'M2 ',
'N2 ',
'K2 ',
'S2 ',
'M2 ',
'S2 ', &
1675 'K2 ',
'O1 ',
'K2 ',
'N2 ',
'S2 ',
'S2 ',
'N2 ',
'K2 ',
'O1 ',
'P1 ', &
1676 'M2 ',
'K2 ',
'S2 ',
'M2 ',
'K2 ',
'S2 ',
'S2 ',
'N2 ',
'M2 ',
'K2 ', &
1677 'S2 ',
'K2 ',
'M2 ',
'S2 ',
'N2 ',
'K2 ',
'M2 ',
'S2 ',
'N2 ',
'S2 ', &
1678 'M2 ',
'M2 ',
'S2 ',
'N2 ',
'S2 ',
'K2 ',
'M2 ',
'S2 ',
'N2 ',
'N2 ', &
1679 'O1 ',
'M2 ',
'O1 ',
'N2 ',
'K1 ',
'S2 ',
'O1 ',
'M2 ',
'K1 ',
'S2 ', &
1680 'P1 ',
'S2 ',
'K1 ',
'M2 ',
'N2 ',
'S2 ',
'N2 ',
'M2 ',
'S2 ',
'M2 ', &
1681 'S2 ',
'N2 ',
'K2 ',
'M2 ',
'N2 ',
'M2 ',
'S2 ',
'K2 ',
'M2 ',
'N2 ', &
1682 'K2 ',
'S2 ',
'M2 ',
'M2 ',
'K2 ',
'S2 ',
'S2 ',
'N2 ',
'K2 ',
'N2 ', &
1683 'M2 ',
'S2 ',
'M2 ',
'K2 ',
'S2 ',
'L2 ',
'S2 ',
'S2 ',
'K2 ',
'M2 ', &
1684 'N2 ',
'O1 ',
'M2 ',
'O1 ',
'M2 ',
'P1 ',
'M2 ',
'N2 ',
'K1 ',
'M2 ', &
1685 'P1 ',
'M2 ',
'K1 ',
'M2 ',
'S2 ',
'K1 ',
'K2 ',
'K1 ',
'M2 ',
'S2 ', &
1686 'K1 ',
'N2 ',
'K2 ',
'S2 ',
'N2 ',
'M2 ',
'N2 ',
'M2 ',
'K2 ',
'S2 ', &
1687 'M2 ',
'S2 ',
'K2 ',
'M2 ',
'N2 ',
'M2 ',
'N2 ',
'K2 ',
'S2 ',
'M2 ', &
1688 'M2 ',
'S2 ',
'N2 ',
'M2 ',
'K2 ',
'N2 ',
'M2 ',
'S2 ',
'M2 ',
'K2 ', &
1689 'N2 ',
'S2 ',
'K2 ',
'S2 ',
'M2 ',
'M2 ',
'S2 ',
'K2 ',
'M2 ',
'S2 ', &
1690 'K2 ',
'S2 ',
'M2 ',
'N2 ',
'O1 ',
'N2 ',
'M2 ',
'K1 ',
'M2 ',
'M2 ', &
1691 'S2 ',
'O1 ',
'M2 ',
'K1 ',
'M2 ',
'S2 ',
'K2 ',
'O1 ',
'M2 ',
'N2 ', &
1692 'M2 ',
'N2 ',
'M2 ',
'N2 ',
'K2 ',
'S2 ',
'M2 ',
'M2 ',
'S2 ',
'N2 ', &
1693 'M2 ',
'N2 ',
'K2 ',
'M2 ',
'S2 ',
'M2 ',
'K2 ',
'M2 ',
'S2 ',
'N2 ', &
1694 'K2 ',
'M2 ',
'S2 ',
'M2 ',
'S2 ',
'K2 ',
'M2 ',
'N2 ',
'K1 ',
'M2 ', &
1695 'N2 ',
'K1 ',
'M2 ',
'K1 ',
'M2 ',
'S2 ',
'K1 ',
'M2 ',
'N2 ',
'M2 ', &
1696 'M2 ',
'N2 ',
'S2 ',
'M2 ',
'S2 ',
'M2 ',
'N2 ',
'S2 ',
'K2 ',
'M2 ', &
1697 'S2 ',
'M2 ',
'S2 ',
'K1 ',
'M2 ',
'M2 ',
'S2 ',
'M2 ',
'N2 ',
'K2 ', &
1704 SUBROUTINE vuf (KONX,Vx,ux,FX,ITIME)
1713 character*5,
INTENT(IN) :: KONX
1714 REAL(KIND=8), intent(out) :: vx,ux,fx
1715 INTEGER,
INTENT(IN) :: ITIME
1722 WRITE(
ndset,30) konx
1723 30
FORMAT(
'ERROR IN VUF: STOP.',a5)
1725 40 vx=
v_arg(k,itime)
1746 SUBROUTINE opnvuf(filename)
1750 CHARACTER*256,
INTENT(IN) :: filename
1752 INTEGER :: J, J1, JBASE, J4, K, K1, JL, JLM, KR
1754 DOUBLE PRECISION,
PARAMETER :: TWOPI=3.1415926535898*2.
1755 DOUBLE PRECISION,
PARAMETER :: FAC=
twpi/360.
1774 open(unit=kr,
file=filename,status=
'old',form=
'formatted')
1780 60
FORMAT(6x,a5,1x,6i3,f5.2,i4)
1785 IF (nj(k).LT.1)
THEN
1815 80
FORMAT((11x,3(3i3,f4.2,f7.4,1x,i1,1x)))
1839 130
FORMAT(6x,a5,i1,2x,4(f5.2,a5,5x))
1890 SUBROUTINE setvuf(hr,XLAT,ITIME)
1895 REAL(KIND=8), intent(in) :: hr
1896 REAL,
INTENT(IN) :: XLAT
1897 INTEGER,
INTENT(IN) :: ITIME
1902 INTEGER :: KD0, INT24, INTDYS, &
1903 JBASE, J, K, L, J1, K1, JL, LK, iflag
1906 REAL(KIND=4), parameter ::
pi=3.1415926536
1907 REAL(KIND=4), parameter :: twopi=2.*3.1415926536
1909 REAL :: SLAT, VDBL, VV, SUMC, SUMS, RR, &
1911 REAL(KIND=8) :: d1,h,pp,s,p,enp,dh,dpp,ds,dp,dnp,hh,tau
1913 INTEGER :: indx(170)
1915 cxlat = max(abs(xlat), 5.)
1916 slat=sin(
pi*cxlat/180.)
1933 call astr(d1,h,pp,s,p,enp,dh,dpp,ds,dp,dnp)
1935 intdys=int((hr+0.00001)/int24)
1936 hh=hr-dfloat(intdys*int24)
1950 vdbl=ii(k)*tau+jj(k)*s+kk(k)*h+ll(k)*p+mm(k)*enp+nn(k)*pp+
semi(k)
1966 rr=
ee(j)*0.36309*(1.-5.*slat*slat)/slat
1967 ELSE IF (l.EQ.3)
THEN
1968 rr=
ee(j)*2.59808*slat
1973 sumc=sumc+rr*cos(uu*twopi)
1974 sums=sums+rr*sin(uu*twopi)
1976 f_arg(k,itime)=sqrt(sumc*sumc+sums*sums)
1978 u_arg(k,itime)=atan2(sums,sumc)/twopi
2011 IF (itime.EQ.-1)
THEN
2012 WRITE(992,
'(A,F20.2,13F8.3)')
'TEST ISEA 0:', &
2013 d1,h,s,tau,pp,s,p,enp,dh,dpp,ds,dp,dnp,xlat
2018 WRITE(992,
'(A,4I9,F12.0,3F8.3,I4,X,A)')
'TEST ISEA 1:',1,l,20071201,0,hr, &
2031 subroutine flex_tidana_webpage(IX,IY,XLON,XLAT,KD1,KD2,ndef, itrend, RES, SSQ, RMSR0, SDEV0, &
2032 RMSR, RESMAX, IMAX, ITEST)
2122 INTEGER,
INTENT(IN) :: NDEF, ITREND, ITEST
2123 INTEGER(KIND=4),
INTENT(IN) :: KD1, KD2, IX, IY
2124 REAL ,
INTENT(IN) :: XLON, XLAT
2125 REAL(KIND=8) , intent(out):: sdev0(ndef), rmsr0(ndef), rmsr(ndef), resmax(ndef)
2126 REAL ,
INTENT(OUT):: SSQ(NDEF), RES(NDEF)
2127 INTEGER ,
INTENT(OUT):: IMAX(NDEF)
2129 INTEGER :: I, I1, I2, I21, II1, IDEF, ICODE, INFLAG, &
2130 J, INFTOT, IREP, J2, JCODE, JJ1, K, K2, KH1, &
2131 KH2, KHM, KINF, L, M, MEQ, N, NCOL, NEW, NMAX
2132 REAL(KIND=8) :: aamp, arg, arg1, arg2, arg3, c, c2, c3, &
2133 fx, fxi, s, s2, s3, ux, vx, uxi, vxi, &
2136 REAL(KIND=8) :: av, sdev, sum2, hrm
2137 DOUBLE PRECISION :: X(NR),Y(NR), TIME(NR)
2138 REAL :: Q(NMAXPM,NMAXP1),FREQ(MC),AMP(MC),PH(MC)
2139 DOUBLE PRECISION :: P(NMAXP1),CENHR,CUMHR
2140 DOUBLE PRECISION :: yy
2143 DOUBLE PRECISION :: U(NMAXPM,NMAXP1),V(NMAXP1,NMAXP1), &
2144 COV(NMAXP1,NMAXP1),B(NMAXPM),W(NMAXP1),SIG(NMAXPM)
2153 cenhr=dfloat((kh2-kh1)/2)
2155 IF (itrend.eq.1)
then
2175 time(i)=cumhr+dfloat(
tide_secs(i))/3600.d0
2176 x(k)=time(i)-time(1)
2192 q(1:nmaxpm,1:nmaxp1)=0.0
2202 IF (itrend.eq.1)
then
2204 q(i,2)=x(i)/(24.*365.)
2226 IF (inflag.eq.0)
then
2228 IF (itrend.eq.1)
then
2235 q(i,jj1)=sin(arg)*fx
2237 IF (itrend.eq.1)
then
2244 q(i,j2)=cos(arg1)*fx
2245 q(i,jj1)=sin(arg1)*fx
2255 q(i,j2)=q(i,j2)+fxi*
tide_r(kinf,k2)*(c2*c3-s2*s3)
2256 q(i,jj1)=q(i,jj1)+fxi*
tide_r(kinf,k2)*(c2*s3+s2*c3)
2263 WRITE(6,*)
'assembled overdetermined matrix and/or rhs'
2283 sdev=sdev+(q(i,nmaxp1)-av)**2
2300 write(
ndset,*)
' underdetermined system: no svd solution',ix,iy,meq,m
2304 WRITE(6,*)
' applying svd'
2306 CALL svd(q,u,v,cov,w,p,b,sig,icode,meq,nmax,nmaxpm,nmaxp1,toler &
2307 ,jcode,ssq(idef),res(idef))
2314 IF (w(i).gt.wmax) wmax=w(i)
2315 IF (w(i).lt.wmin) wmin=w(i)
2322 IF (ssq(idef).gt.1.e-10)
then
2323 rmsr0(idef)=sqrt(ssq(idef)/(meq-m))
2333 rmsr(idef)=rmsr(idef)+yy*yy
2334 IF (abs(yy).gt.resmax(idef))
then
2335 resmax(idef)=abs(yy)
2339 160
format(
' ',7i2,f15.5,f10.5,i6)
2340 IF (rmsr(idef).gt.1.e-10)
then
2341 rmsr(idef)=dsqrt(rmsr(idef)/(n-m))
2354 IF (itrend.eq.1)
then
2361 IF (itrend.eq.1)
then
2370 IF (aamp.LT.1.e-5)
THEN
2373 ph(i)=atan2(s,c)/
fac
2374 IF (ph(i).LT.0.) ph(i)=ph(i)+360.
2393 IF (itest.GE.1)
THEN
2397 IF (cov(1,1).gt.1.e-8)
then
2398 tide_sig1(i,idef)=sqrt(cov(1,1))*rmsr0(idef)
2402 IF (itrend.eq.1.and.cov(2,2).gt.1.e-8)
then
2403 tide_sig2(i,idef)=sqrt(cov(2,2))*rmsr0(idef)
2413 IF (itrend.eq.1)
then
2423 IF (cov(i2,i2).gt.1.e-8)
then
2424 tide_sig1(i,idef)=sqrt(cov(i2,i2))*rmsr0(idef)
2428 IF (cov(ii1,ii1).gt.1.e-8)
then
2429 tide_sig2(i,idef)=sqrt(cov(ii1,ii1))*rmsr0(idef)
2511 SUBROUTINE tide_predict(itrend,ndef,N,HOURS, DATAIN, PREDICTED, RESID, XLAT,SDEV,RMSR)
2515 INTEGER,
INTENT(IN) :: itrend, NDEF, N
2516 REAL(KIND=8) , intent(in) :: hours(n)
2517 REAL,
INTENT(IN) :: XLAT, DATAIN(N,NDEF)
2518 REAL(KIND=8), intent(out) :: sdev(ndef),rmsr(ndef)
2519 REAL,
INTENT(OUT) :: PREDICTED(N,NDEF), RESID(N,NDEF)
2521 INTEGER :: IDEF, I, K, K2
2523 REAL :: ARG, ADD, SUM1, SSQ
2524 REAL(KIND=8) :: vx, ux, fx
2531 IF (itrend.eq.1)
THEN
2555 predicted(i,idef)=sum1
2557 resid(i,idef)=datain(i,idef)-sum1
2558 sdev(idef)=sdev(idef)+resid(i,idef)**2
2562 rmsr(idef)=sqrt(ssq/(n-m))
2563 sdev(idef)=sqrt(ssq/n)
2573 INTEGER,
INTENT(IN) :: itrend, NDEF, N
2575 REAL,
INTENT(IN) :: XLAT
2576 REAL,
INTENT(OUT) :: PREDICTED(N,NDEF)
2578 INTEGER :: IDEF, I, K, K2
2580 REAL :: ARG, ADD, SUM1
2581 REAL(KIND=8) :: vx, ux, fx
2585 IF (itrend.eq.1)
THEN
2609 predicted(i,idef)=sum1