303 SUBROUTINE w3miscan(INDTA,INLSF,INGBI,INGBD,LSAT,LPROD,LBRIT,
304 $ NNALG,GBALG,KDATE,LDATE,IGNRTM,IBUFTN,IBDATE,IER)
306 LOGICAL LPROD,LBRIT,NNALG,GBALG,LSAT(240:249)
311 CHARACTER*20 RHDER,PROD2,BRITE
312 CHARACTER*46 SHDER,PROD1
314 REAL SHDR(9),RHDR(4,64),PROD(13,64),BRIT(2,448),RINC(5),
317 REAL(8) SHDR_8(9),RHDR_8(4,64),PROD_8(13,64),BRIT_8(2,448),
320 INTEGER IBUFTN(1737),KDATA(7),KDATE(5),LDATE(5),LBTER(7),
321 $ kspsat(239:249),kntsat(239:249),iflag(64),kdat(8),ldat(8),
322 $ mdat(8),icdate(5),iddate(5)
324 common/misccc/sstdat(360,180)
325 common/miscee/lflag,licec
329 DATA shder /
'SAID YEAR MNTH DAYS HOUR MINU SECO SCNN ORBN '/
330 DATA rhder /
'CLAT CLON POSN SFTG '/
331 DATA prod1 /
'VILWC REQV WSPD SMOI ICON ICAG ICED TPWT TMSK '/
332 DATA prod2 /
'TOSD RFLG SFTP SST1 '/
333 DATA brite /
'CHNM TMBR '/
334 DATA atxt /
'NN',
'GB'/
335 DATA imsg /99999/,kntscn/0/,knttim/0/,laerr/0/,
336 $ loerr/0/,lbter/7*0/,itimes/0/,nlr/0/,nir/0/,dmax/-99999./,
337 $ dmin/99999./,kspsat/11*0/,kntsat/11*0/,ilflg/0/,bmiss/10.0e10/
347 65
FORMAT(//
' ---> W3MISCAN: Y2K/F90 VERSION 08/04/2011: ',
348 $
'PROCESSING SSM/I DATA FROM BUFR DATA SET READ FROM UNIT ',
351 66
FORMAT(//
' ===> WILL READ FROM BUFR PRODUCTS DATA DUMP ',
352 $
'FILE (EITHER FNOC OR NCEP) AND PROCESS ONE OR MORE SSM/I ',
356 167
FORMAT(//
' ===> WILL READ FROM BUFR BRIGHTNESS ',
357 $
'TEMPERATURE DATA DUMP FILE AND PROCESS BRIGHTNESS ',
360 169
FORMAT(
' ===> IN ADDITION, WILL PERFORM IN-LINE ',
361 $
'CALCULATION OF NEURAL NETWORK 3 WIND SPEED AND TOTAL ',
362 $
'PRECIPITABLE WATER AND PROCESS THESE'/)
364 170
FORMAT(
' ===> IN ADDITION, WILL PERFORM IN-LINE ',
365 $
'CALCULATION OF GOODBERLET WIND SPEED AND PROCESS THESE'/)
367 IF(ignrtm.EQ.1) print 704
368 704
FORMAT(
' W3MISCAN: INPUT ARGUMENT "IGNRTM" IS SET TO 1 -- NO ',
369 $
'TIME CHECKS WILL BE PERFORMED ON SCANS - ALL SCANS READ IN ',
372 print 104, kdate,ldate
373 104
FORMAT(
' W3MISCAN: REQUESTED EARLIEST DATE:',i7,4i5/
374 $
' REQUESTED LATEST DATE:',i7,4i5)
377 kdat(1:3) = kdate(1:3)
378 kdat(5:6) = kdate(4:5)
380 ldat(1:3) = ldate(1:3)
381 ldat(5:6) = ldate(4:5)
386 IF(rinc(3).LT.0)
THEN
389 103
FORMAT(
' ##W3MISCAN: REQUESTED EARLIEST AND LATEST DATES ',
390 $
'ARE BACKWARDS!! - IER = 3'/)
399 CALL w3fi04(iendn,ichtp,lw)
400 print 2213, lw, ichtp, iendn
401 2213
FORMAT(/
' ---> W3MISCAN: CALL TO W3FI04 RETURNS: LW = ',i3,
402 $
', ICHTP = ',i3,
', IENDN = ',i3/)
406 CALL dumpbf(indta,icdate,iddate)
408 print *,
'CENTER DATE (ICDATE) = ',icdate
409 print *,
'DUMP DATE (IDDATE) = ',iddate
415 IF(icdate(1).LE.0)
GO TO 998
420 IF(iddate(1).LE.0)
GO TO 998
421 IF(icdate(1).LT.100)
THEN
430 print *,
'##W3MISCAN - THE FOLLOWING SHOULD NEVER ',
432 print *,
'##W3MISCAN - 2-DIGIT YEAR IN ICDATE(1) RETURNED ',
433 $
'FROM DUMPBF (ICDATE IS: ',icdate,
') - USE WINDOWING ',
434 $
'TECHNIQUE TO OBTAIN 4-DIGIT YEAR'
435 IF(icdate(1).GT.20)
THEN
436 icdate(1) = 1900 + icdate(1)
438 icdate(1) = 2000 + icdate(1)
440 print *,
'##W3MISCAN - CORRECTED ICDATE(1) WITH 4-DIGIT ',
441 $
'YEAR, ICDATE NOW IS: ',icdate
444 IF(iddate(1).LT.100)
THEN
453 print *,
'##W3MISCAN - THE FOLLOWING SHOULD NEVER ',
455 print *,
'##W3MISCAN - 2-DIGIT YEAR IN IDDATE(1) RETURNED ',
456 $
'FROM DUMPBF (IDDATE IS: ',iddate,
') - USE WINDOWING ',
457 $
'TECHNIQUE TO OBTAIN 4-DIGIT YEAR'
458 IF(iddate(1).GT.20)
THEN
459 iddate(1) = 1900 + iddate(1)
461 iddate(1) = 2000 + iddate(1)
463 print *,
'##W3MISCAN - CORRECTED IDDATE(1) WITH 4-DIGIT ',
464 $
'YEAR, IDDATE NOW IS: ',iddate
469 CALL openbf(indta,
'IN',indta)
472 print *,
'OPEN NCEP BUFR SSM/I DUMP FILE'
480 CALL status(indta,lun,idummy1,idummy2)
481 CALL nemtab(lun,
'PH2O',idummy1,cdummy,iret_ph2o)
482 CALL nemtab(lun,
'SNDP',idummy1,cdummy,iret_sndp)
483 CALL nemtab(lun,
'WSOS',idummy1,cdummy,iret_wsos)
484 CALL nemtab(lun,
'CH2O',idummy1,cdummy,iret_ch2o)
486 IF(lbrit.AND.(nnalg.OR.gbalg))
THEN
496 CALL misc06(ingbi,ingbd,kdate,ldate,*993,*994,*995,*996)
498 67
FORMAT(//4x,
'** W3MISCAN: OPEN R. ACCESS NESDIS LAND/SEA ',
499 $
'FILE IN UNIT ',i2/)
500 OPEN(unit=inlsf,err=997,access=
'DIRECT',iostat=ierr,recl=10980)
505 CALL readmg(indta,subset,ibdate,iret)
507 print *,
'READ FIRST BUFR MESSAGE: SUBSET = ',subset,
508 $
'; IBDATE = ',ibdate,
'; IRET = ',iret
510 IF(iret.NE.0)
GO TO 998
521 CALL readsb(indta,iret)
526 CALL readmg(indta,subset,ibdate,iret)
528 print *,
'READ NEXT BUFR MESSAGE: SUBSET = ',subset,
529 $
'; IBDATE = ',ibdate,
'; IRET = ',iret
539 124
FORMAT(/
' W3MISCAN: +++++ ALL VALID SCANS UNPACKED AND ',
540 $
'RETURNED FROM THIS NCEP BUFR SSM/I DUMP FILE'//34x,
541 $
'** W3MISCAN: SUMMARY **'//35x,
'TOTAL NUMBER OF SCANS ',
542 $
'PROCESSED AND RETURNED',11x,i7)
544 IF(kntsat(jj).GT.0)
THEN
545 print 294, jj,kntsat(jj)
546 294
FORMAT(35x,
'......NO. OF SCANS PROCESSED AND ',
547 $
'RETURNED FROM SAT',i4,
':',i7)
551 IF(kspsat(jj).GT.0)
THEN
554 print 224, ii,kspsat(jj)
555 224
FORMAT(35x,
'NO. OF SCANS SKIPPED DUE TO BEING FROM ',
556 $
'NON-REQ SAT',i4,
':',i7)
560 194
FORMAT(35x,
'NUMBER OF SCANS SKIPPED DUE TO BEING OUTSIDE ',
562 print 324, laerr,loerr
564 $/35x,
'NUMBER OF RETRIEVALS WITH LATITUDE OUT OF RANGE: ',i7/
565 $ 35x,
'NUMBER OF RETRIEVALS WITH LONGITUDE OUT OF RANGE: ',i7)
567 IF(nnalg.OR.gbalg) print 780, lbter,nlr,nir
569 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 19 GHZ V BRIGHT. TEMP:',i7/
570 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 19 GHZ H BRIGHT. TEMP:',i7/
571 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 22 GHZ V BRIGHT. TEMP:',i7/
572 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 37 GHZ V BRIGHT. TEMP:',i7/
573 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 37 GHZ H BRIGHT. TEMP:',i7/
574 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 85 GHZ V BRIGHT. TEMP:',i7/
575 $ 35x,
'NUMBER OF RETRIEVALS W/ ERROR IN 85 GHZ H BRIGHT. TEMP:',i7/
576 $ 35x,
'NUMBER OF RETRIEVALS REJECTED DUE TO BEING OVER LAND: ',i7/
577 $ 35x,
'NUMBER OF RETRIEVALS REJECTED DUE TO BEING OVER ICE: ',i7)
578 IF(nnalg) print 781, lflag,licec
580 $ 35x,
'NUMBER OF NN3 RETR. REJECTED DUE TO FAILING RAIN FLAG: ',i7/
581 $ 35x,
'NUMBER OF NN3 RETR. REJECTED DUE TO ICE CONTAMINATION: ',i7)
582 IF(nnalg.OR.gbalg) print 782, dmax,dmin
583 782
FORMAT(/
' ** FOR SEA-SFC TEMP AT ALL RETRIEVAL LOCATIONS: FIELD',
584 $
' MAX =',f8.3,
' DEG K, FIELD MIN =',f8.3,
' DEG K'/)
598 CALL ufbint(indta,shdr_8,09,1,nlev,shder) ; shdr = shdr_8
600 IF(nlev.NE.1)
GO TO 999
607 ibuftn(1:9) = min(imsg,nint(shdr(1:9)))
611 IF(ibuftn(1).LT.240.OR.ibuftn(1).GT.249)
THEN
612 print 523, (ibuftn(ii),ii=1,9)
613 kspsat(239) = kspsat(239) + 1
616 IF(.NOT.lsat(ibuftn(1)))
THEN
618 523
FORMAT(
' ##W3MISCAN: SCAN NOT FROM REQ. SAT. ID -SAT. ID',i4,
619 $
', SCAN TIME:',6i4,
', SCAN',i6,
', ORBIT',i8,
'-GO TO NEXT SCAN')
620 kspsat(ibuftn(1)) = kspsat(ibuftn(1)) + 1
629 mdat(1:3) = ibuftn(2:4)
630 mdat(5:7) = ibuftn(5:7)
635 IF(ksec.GT.0.OR.lsec.LT.0)
THEN
640 123
FORMAT(
' ##W3MISCAN: SCAN NOT IN REQUESTED TIME WINDOW-',
641 $
'SCAN TIME:',6i5,
' SCAN',i6,
', ORBIT',i8,
' - GO TO NEXT SCAN')
647 CALL ufbint(indta,rhdr_8,04,64,nlev,rhder) ; rhdr = rhdr_8
649 IF(nlev.NE.64)
GO TO 999
656 IF(rhdr(2,irt).LT.0.0) rhdr(2,irt) = rhdr(2,irt) + 360.
661 IF(nint(rhdr(1,irt)*100.).GE.-9000.AND.nint(rhdr(1,irt)*100.)
663 ibuftn((27*irt)-17) = nint(rhdr(1,irt)*100.)
671 print 777, irt,ibuftn(8),ibuftn(9),nint(rhdr(1,irt)*100.)
672 777
FORMAT(
' ##W3MISCAN: BAD LAT: RETR.',i3,
', SCAN',i6,
673 $
', ORBIT',i8,
'; INPUT LAT=',i7,
' - ALL DATA IN THIS ',
674 $
'RETRIEVAL SET TO MISSING')
682 IF(nint(rhdr(2,irt)*100.).GE.0.AND.nint(rhdr(2,irt)*100.).LE.
685 $ ibuftn((27*irt)-16) = nint(rhdr(2,irt)*100.)
693 print 778, irt,ibuftn(8),ibuftn(9),nint(rhdr(2,irt)*100.)
694 778
FORMAT(
' ##W3MISCAN: BAD LON: RETR.',i3,
', SCAN',i6,
695 $
', ORBIT',i8,
'; INPUT LON=',i7,
' - ALL DATA IN THIS ',
696 $
'RETRIEVAL SET TO MISSING')
701 IF(iflag(irt).NE.0)
GO TO 110
705 ibuftn((27*irt)-15) = min(imsg,nint(rhdr(3,irt)))
709 ibuftn((27*irt)-14) = min(imsg,nint(rhdr(4,irt)))
720 CALL ufbint(indta,prod_8,13,64,nlev,prod1//prod2)
722 IF(iret_ph2o.GT.0)
THEN
723 CALL ufbint(indta,ufbint_8,1,64,nlev,
'PH2O')
724 prod_8(8,:) = ufbint_8(:)
727 IF(iret_sndp.GT.0)
THEN
728 CALL ufbint(indta,ufbint_8,1,64,nlev,
'SNDP')
729 prod_8(10,:) = ufbint_8(:)
732 IF(iret_wsos.GT.0)
THEN
733 CALL ufbint(indta,ufbint_8,1,64,nlev,
'WSOS')
734 prod_8(3,:) = ufbint_8(:)
737 IF(iret_ch2o.GT.0)
THEN
738 CALL ufbint(indta,ufbint_8,1,64,nlev,
'CH2O')
739 prod_8(1,:) = ufbint_8(:)
741 CALL ufbint(indta,ufbint_8,1,64,nlev,
'METFET')
744 IF(nint(metfet(irt)).NE.12) prod_8(1,irt) = bmiss
751 print 797, ibuftn(8),ibuftn(9)
752 797
FORMAT(
' ##W3MISCAN: PRODUCTS REQ. BUT SCAN',i6,
', ORBIT',
753 $ i8,
' DOES NOT CONTAIN PRODUCT DATA - CONTINUE PROCESSING ',
754 $
'SCAN (B.TEMPS REQ.?)')
756 ELSE IF(nlev.NE.64)
THEN
763 IF(iflag(irt).NE.0)
GO TO 111
767 IF(nint(prod(01,irt)).LT.imsg)
768 $ ibuftn((27*irt)-13) = nint(prod(01,irt)*100.)
773 IF(nint(prod(02,irt)).LT.imsg)
774 $ ibuftn((27*irt)-12) = nint(prod(02,irt)*1000000.)
778 ibuftn((27*irt)-11) = min(imsg,nint(prod(03,irt)*10.))
782 IF(nint(prod(04,irt)).LT.imsg)
783 $ ibuftn((27*irt)-10) = nint(prod(04,irt)*1000.)
787 ibuftn((27*irt)-09) = min(imsg,nint(prod(05,irt)))
791 ibuftn((27*irt)-08) = min(imsg,nint(prod(06,irt)))
795 ibuftn((27*irt)-07) = min(imsg,nint(prod(07,irt)))
800 ibuftn((27*irt)-06) = min(imsg,nint(prod(08,irt)*10.))
802 IF(ibuftn((27*irt)-14).NE.5)
THEN
807 ibuftn((27*irt)-05) = min(imsg,nint(prod(09,irt)*100.))
814 ibuftn((27*irt)-05) = min(imsg,nint(prod(13,irt)*100.))
820 IF(nint(prod(10,irt)).LT.imsg)
821 $ ibuftn((27*irt)-04) = nint(prod(10,irt)*1000.)
825 ibuftn((27*irt)-03) = min(imsg,nint(prod(11,irt)))
829 ibuftn((27*irt)-02) = min(imsg,nint(prod(12,irt)))
845 CALL ufbrep(indta,brit_8,2,448,nlev,brite) ; brit = brit_8
848 print 798, ibuftn(8),ibuftn(9)
849 798
FORMAT(
' ##W3MISCAN: B. TEMPS REQ. BUT SCAN',i6,
', ORBIT',
850 $ i8,
' DOES NOT CONTAIN B. TEMP DATA - DONE PROCESSING THIS',
853 ELSE IF(nlev.NE.448)
THEN
860 IF(iflag(irt).NE.0)
GO TO 112
867 mindx = (irt * 7) - 6
868 DO lch = mindx,mindx+6
869 ichnn = nint(brit(1,lch))
870 IF(ichnn.GT.7)
GO TO 79
871 IF(nint(brit(2,lch)).LT.imsg)
THEN
872 ibuftn((27*irt)-02+ichnn) = nint(brit(2,lch)*100.)
878 IF(nnalg.OR.gbalg)
THEN
888 balon=real(mod(ibuftn((27*irt)-16)+18000,36000)-18000)/100.
889 ialon = mod(36000-ibuftn((27*irt)-16),36000)
890 ix = 361. - real(ialon)/100.
891 jy = 91 - nint(real(ibuftn((27*irt)-17))/100. + 0.50)
892 dmin = min(dmin,sstdat(ix,jy))
893 dmax = max(dmax,sstdat(ix,jy))
894 CALL misc04(inlsf,real(ibuftn((27*irt)-17))/100.,balon,lstag)
905 IF(sstdat(ix,jy).LE.272.96)
THEN
910 kdata = ibuftn((27*irt)-01:(27*irt)+05)
912 IF((it.NE.2.AND.kdata(it).LT.10000).OR.
913 $ (it.EQ.2.AND.kdata(it).LT. 8000))
THEN
914 lbter(it) = lbter(it) + 1
915 print 779,it,ibuftn(8),ibuftn(9),kdata
916 779
FORMAT(
' ##W3MISCAN: BT, CHN',i2,
' BAD: SCAN',i6,
', ORBIT',i8,
917 $
'; BT:',7i6,
'-CANNOT CALC. PRODS VIA ALG.')
924 CALL misc01(nnalg,gbalg,kdata,swnn,tpwnn,swgb,nrfgb)
930 6021
FORMAT(
' W3MISCAN: ',a2,
' SPD',f6.1,
' TPW',f6.1,
' TB19V',f6.1,
931 $
' TB22V',f6.1,
' TB37V',f6.1,
' TB37H',f6.1,
' TD37',f5.1)
935 ibuftn((27*irt)+6) = min(imsg,nint(swnn*10.))
939 ibuftn((27*irt)+7) = min(imsg,nint(tpwnn*10.))
946 602
FORMAT(
' W3MISCAN: ',a2,
' RF, SPD',i2,f6.1,
' TB19V',f6.1,
947 $
' TB22V',f6.1,
' TB37V',f6.1,
' TB37H',f6.1,
' TD37',f5.1)
951 ibuftn((27*irt)+8) = min(imsg,nint(swgb*10.))
955 ibuftn((27*irt)+9) = min(imsg,nrfgb)
965 print 879, ibuftn(8),ibuftn(9),kdata
966 879
FORMAT(
' ##W3MISCAN: ALL B.TMPS MSSNG: SCAN',i6,
', ',
967 $
'ORBIT',i8,
'; BT:',7i6,
'-CANNOT CALC PRODS VIA ALG.')
983 kntsat(ibuftn(1)) = kntsat(ibuftn(1)) + 1
994 2008
FORMAT(/
' ##W3MISCAN: SEA-SURFACE TEMPERATURE NOT FOUND IN GRIB ',
995 $
'INDEX FILE IN UNIT ',i2,
' - IER = 6'/)
1008 2009
FORMAT(
' SST GRIB MSG HAS DATE WHICH IS EITHER 7-DAYS',
1009 $
' PRIOR TO EARLIEST REQ. DATE'/14x,
'OR 7-DAYS LATER THAN LATEST',
1010 $
' REQ. DATE - IER = 7'/)
1022 2010
FORMAT(
' BYTE-ADDRESSABLE READ ERROR FOR GRIB FILE ',
1023 $
'CONTAINING SEA-SURFACE TEMPERATURE FIELD - IER = 8'/)
1034 2011
FORMAT(
' - IER = 9'/)
1044 print 2012, ierr,inlsf
1045 2012
FORMAT(/
' ##W3MISCAN: ERROR OPENING R. ACCESS LAND/SEA FILE IN ',
1046 $
'UNIT ',i2,
' -- IOSTAT =',i5,
' -- NO SCANS PROCESSED - IER = 4'/)
1057 14
FORMAT(/
' ##W3MISCAN: SSM-I DATA SET IN UNIT',i3,
' IS EITHER ',
1058 $
'EMPTY (NULL), NOT BUFR, OR CONTAINS NO DATA MESSAGES - IER = 2'/)
1068 print 217, nlev,ilflg
1069 217
FORMAT(/
' ##W3MISCAN: THE NUMBER OF DECODED "LEVELS" (=',i5,
') ',
1070 $
'IS NOT WHAT IS EXPECTED (ILFLG=',i1,
') - IER = 5'/)
1131 SUBROUTINE misc01(NNALG,GBALG,KDATA,SWNN,TPWNN,SWGB,NRFGB)
1136 common/miscee/lflag,licec
1145 tb19v = real(kdata(1))/100.
1146 tb19h = real(kdata(2))/100.
1147 tb22v = real(kdata(3))/100.
1148 tb37v = real(kdata(4))/100.
1149 tb37h = real(kdata(5))/100.
1150 tb85v = real(kdata(6))/100.
1151 tb85h = real(kdata(7))/100.
1152 td37 = tb37v - tb37h
1175 swnn = risc02(btaa,tpwnn,lqwnn,sstnn,jerr)
1176 IF(jerr.EQ.1) lflag = lflag + 1
1177 IF(jerr.EQ.2) licec = licec + 1
1183 IF(td37.LE.50.0.OR.tb19h.GE.165.0)
THEN
1184 IF(td37.LE.50.0.OR.tb19h.GE.165.0) nrfgb = 1
1185 IF(td37.LE.37.0) nrfgb = 2
1186 IF(td37.LE.30.0) nrfgb = 3
1277 FUNCTION risc02(XT,V,L,SST,JERR)
1279 LOGICAL LQ1,LQ2,LQ3,LQ4
1280 REAL XT(7),Y(IOUT),V,L,SST
1281 equivalence(y(1),spn)
1289 lq1 = (xt(2).LE.185.)
1293 lq2 = (xt(5).LE.210.)
1297 lq3 = (xt(1).LT.xt(4))
1301 lq4 = ((xt(4) - xt(5)).LE.50.)
1302 lq1 = (lq1.AND.lq2.AND.lq3)
1303 IF(.NOT.lq1.AND.lq4)
THEN
1323 IF(spn.LT.0.0) spn = 0.0
1324 IF(sst.LT.0.0) sst = 0.0
1325 IF(v .LT.0.0) v = 0.0
1330 si85 = -174.4 + (0.715 * xt(1)) + (2.439 * xt(3)) - (0.00504 *
1331 $ xt(3) * xt(3)) - xt(6)
1332 tt = 44. + (0.85 * xt(1))
1333 IF(si85.GE.10.)
THEN
1334 IF(xt(3).LE.tt) ice = 1
1335 IF((xt(3).GT.264.).AND.((xt(3)-xt(1)).LT.2.)) ice = 1
1384 SUBROUTINE misc10(X,Y)
1390 parameter(in =5, hid =12, out =4)
1391 dimension x(in),y(out),w1(in,hid),w2(hid,out),b1(hid),b2(out),
1392 $ o1(in),x2(hid),o2(hid),x3(out),o3(out),a(out),b(out)
1396 DATA ((w1(i,j),j = 1,hid),i = 1,in)/
1397 $-0.0435901, 0.0614709,-0.0453639,-0.0161106,-0.0271382, 0.0229015,
1398 $-0.0650678, 0.0704302, 0.0383939, 0.0773921, 0.0661954,-0.0643473,
1399 $-0.0108528,-0.0283174,-0.0308437,-0.0199316,-0.0131226, 0.0107767,
1400 $ 0.0234265,-0.0291637, 0.0140943, .00567931,-.00931768,
1401 $-.00860661, 0.0159747,-0.0749903,-0.0503523, 0.0524172, 0.0195771,
1402 $ 0.0302056, 0.0331725, 0.0326714,-0.0291429, 0.0180438, 0.0281923,
1403 $-0.0269554, 0.102836, 0.0591511, 0.134313, -0.0109854,-0.0786303,
1404 $ 0.0117111, 0.0231543,-0.0205603,-0.0382944,-0.0342049,
1405 $ 0.00052407,0.110301, -0.0404777, 0.0428816, 0.0878070, 0.0168326,
1406 $ 0.0196183, 0.0293995, 0.00954805,-.00716287,0.0269475,
1407 $-0.0418217,-0.0165812, 0.0291809/
1411 DATA ((w2(i,j),j = 1,out),i = 1,hid)/
1412 $-0.827004, -0.169961,-0.230296, -0.311201, -0.243296, 0.00454425,
1413 $ 0.950679, 1.09296, 0.0842604, 0.0140775, 1.80508, -0.198263,
1414 $-0.0678487, 0.428192, 0.827626, 0.253772, 0.112026, 0.00563793,
1415 $-1.28161, -0.169509, 0.0019085,-0.137136, -0.334738, 0.224899,
1416 $-0.189678, 0.626459,-0.204658, -0.885417, -0.148720, 0.122903,
1417 $ 0.650024, 0.715758, 0.735026, -0.123308, -0.387411,-0.140137,
1418 $ 0.229058, 0.244314,-1.08613, -0.294565, -0.192568, 0.608760,
1419 $-0.753586, 0.897605, 0.0322991,-0.178470, 0.0807701,
1424 DATA (b1(i), i=1,hid)/
1425 $ -9.92116,-10.3103,-17.2536, -5.26287, 17.7729,-20.4812,
1426 $ -4.80869,-11.5222, 0.592880,-4.89773,-17.3294, -7.74136/
1430 DATA (b2(i), i=1,out)/-0.882873,-0.0120802,-3.19400,1.00314/
1434 DATA (a(i), i=1,out)/18.1286,31.8210,0.198863,37.1250/
1435 DATA (b(i), i=1,out)/13.7100,32.0980,0.198863,-5.82500/
1448 x2(i) = x2(i) + (o1(j) * w1(j,i))
1450 x2(i) = x2(i) + b1(i)
1459 x3(k) = x3(k) + (w2(j,k) * o2(j))
1462 x3(k) = x3(k) + b2(k)
1467 y(k) = (a(k) * o3(k)) + b(k)
1506 FUNCTION risc02xx(X)
1509 parameter(in =5, hid =2)
1510 dimension x(in),w1(in,hid),w2(hid),b1(hid),o1(in),x2(hid),o2(hid)
1515 DATA ((w1(i,j),j=1,hid),i=1,in)/
1516 $ 4.402388e-02, 2.648334e-02, 6.361322e-04,-1.766535e-02,
1517 $ 7.876555e-03,-7.387260e-02,-2.656543e-03, 2.957161e-02,
1518 $-1.181134e-02, 4.520317e-03/
1520 DATA (w2(i),i=1,hid)/8.705661e-01,1.430968/
1522 DATA (b1(i),i=1,hid)/-6.436114,8.799655/
1525 DATA b2/-0.736255/,ay/16.7833/,by/11.08/
1533 x2(i) = x2(i) + (o1(j) * w1(j,i))
1535 x2(i) = x2(i) + b1(i)
1537 x3 = x3 + (o2(i)* w2(i))
1541 risc02xx = (ay * o3) + by
1542 risc02xx = max(risc02xx,0.0)
1544 bias = 0.5 + 0.004*((risc02xx-10.)**3)*(1.-exp(-0.5*risc02xx))
1545 risc02xx = risc02xx + bias
1580 risc03 = 147.90 + (1.0969 * x(1)) - (0.4555 * x(2)) -
1581 $ (1.76 * x(3)) + (0.7860 * x(4))
1620 SUBROUTINE misc04(INLSF,BLAT,BLNG,LSTAG)
1624 common/miscdd/lput(21960)
1629 DATA rgs/-85.,-30.,25./,numrgl/0/,iflag/0/
1634 alat = int((blat+sign(.25,blat))/.5) * .5
1636 alng = int((blng+sign(.25,blng))/.5) * .5
1637 IF(nint(alng*10.).EQ.1800) alng = -180.
1640 IF(iabs(nint(alat*10)).GT.850)
THEN
1642 ELSE IF(nint(alat*10).GT.275)
THEN
1644 ELSE IF(nint(alat*10.).GE.-275)
THEN
1647 IF(numrgn.NE.numrgl.OR.iflag.EQ.1)
THEN
1649 CALL misc05(inlsf,numrgn,*99)
1652 trm1 = ((alat - rgs(numrgn)) * 1440.) + 360.
1653 lstpt = trm1 + (2. * alng)
1655 nbyte = (180 * 8) + (lstpt/4 * 8)
1656 nshft = (2 * (mod(lstpt,4) + 1)) - 2
1658 CALL gbyte(lput,lstag,nbyte+nshft,2)
1703 SUBROUTINE misc05(INLSF,NUMRGN,*)
1710 common/miscdd/lput(21960)
1714 nrec = (2 * numrgn) - 1
1715 READ(inlsf,rec=nrec,err=10) (lput(ii),ii=1,10980)
1717 READ(inlsf,rec=nrec,err=10) (lput(ii),ii=10981,21960)
1723 print 1000, nrec,inlsf
1724 1000
FORMAT(
' ##W3MISCAN/MISC05: ERROR READING IN LAND-SEA DATA ',
1725 $
'RECORD',i7,
' IN UNIT ',i2,
' -- SET TAG TO LAND'/)
1764 SUBROUTINE misc06(INGBI,INGBD,IDAT1,IDAT2,*,*,*,*)
1765 parameter(maxpts=360*180)
1766 LOGICAL*1 LBMS(360,180)
1767 INTEGER KPDS(200),KGDS(200),LPDS(200),LGDS(200),IDAT1(5),
1768 $ idat2(5),jdat1(8),jdat2(8),kdat(8),ldat(8),mdate(8)
1771 CHARACTER*80 FILEB,FILEI
1772 common/misccc/sstdat(360,180)
1777 WRITE(envvar(9:10),fmt=
'(I2)') ingbd
1778 CALL getenv(envvar,fileb)
1780 WRITE(envvar(9:10),fmt=
'(I2)') ingbi
1781 CALL getenv(envvar,filei)
1782 CALL baopenr(ingbd,fileb,iret1)
1784 CALL baopenr(ingbi,filei,iret2)
1797 68
FORMAT(//4x,
'** W3MISCAN/MISC06: READ IN "CURRENT" SEA-SURFACE ',
1798 $
'TEMPERATURE DATA FROM GRIB MESSAGE IN UNIT',i3)
1799 CALL getgb(ingbd,ingbi,maxpts,0,kpds,kgds,kf,k,lpds,lgds,lbms,
1804 WRITE(6,*)
' ERROR READING SST USING GETGB. IRET = ',iret
1805 IF (iret.EQ.96)
RETURN 1
1806 IF (iret.EQ.97)
RETURN 3
1807 IF (iret.EQ.98)
RETURN 3
1808 IF (iret.EQ.99)
RETURN 3
1815 jdat1(1:3) = idat1(1:3)
1816 jdat1(5:6) = idat1(4:5)
1817 jdat2(1:3) = idat2(1:3)
1818 jdat2(5:6) = idat2(4:5)
1820 mdate(1) = ((lpds(21) - 1) * 100) + lpds(8)
1821 mdate(2:3) = lpds(9:10)
1822 mdate(5:6) = lpds(11:12)
1823 CALL w3movdat((/-7.,0.,0.,0.,0./),jdat1,kdat)
1824 CALL w3movdat((/ 7.,0.,0.,0.,0./),jdat2,ldat)
1826 print *,
'** W3MISCAN/MISCO6: SST GRIB FILE MUST HAVE DATE ',
1827 $
'BETWEEN ',(kdat(iii),iii=1,3),(kdat(iii),iii=5,6),
' AND ',
1828 $ (ldat(iii),iii=1,3),(ldat(iii),iii=5,6)
1829 print *,
' RETURNED FROM GRIB FILE IS YEAR ',
1830 $
'OF CENTURY = ',lpds(8),
' AND CENTURY = ',lpds(21)
1831 print *,
' CALULATED 4-DIGIT YEAR IS = ',
1838 IF(kmin.GT.0.OR.lmin.LT.0)
THEN
1844 print 27, (mdate(iii),iii=1,3),(mdate(iii),iii=5,6)
1845 27
FORMAT(/
' ##W3MISCAN/MISC06: SST GRIB MSG HAS DATE:',i5,4i3,
1846 $
' - AS A RESULT......')
1850 print 60, (mdate(iii),iii=1,3),(mdate(iii),iii=5,6)
1851 60
FORMAT(/4x,
'** W3MISCAN/MISC06: SEA-SFC TEMP SUCCESSFULLY READ ',
1852 $
'IN FROM GRIB FILE, DATE IS: ',i5,4i3/)
1855 CALL baclose(ingbi,iret)
1856 CALL baclose(ingbd,iret)