148 implicit double precision(a-h,o-z)
149 parameter(maxedits = 10000)
165 character*10 dummy1,dummy2,dummy3
166 character*10 EditRegion(maxedits)
167 character*10 EditOldDtm(maxedits)
168 character*10 EditNewDtm(maxedits)
169 character*6 EditPID(maxedits)
170 character*1 EditRejLat(maxedits)
171 character*1 EditRejLon(maxedits)
172 character*1 EditRejEht(maxedits)
186 character*13 clath,clatf
187 character*14 clonh,clonf
188 character*9 cehth,cehtf
190 character*10 olddtm,newdtm,region
192 character*1 rejlat,rejlon,rejeht
194 character*200 suffix1
196 logical badlat,badlon,badeht
201 logical EditTracker(maxedits)
207 1001
format(
'BEGIN program makework.f')
227 suffix1=trim(olddtm)//
'.'//trim(newdtm)//
'.'//trim(region)
232 cfname=
'Control/control.'//trim(suffix1)
233 open(1,file=cfname,status=
'old',form=
'formatted')
234 write(6,1004)trim(cfname)
235 1004
format(6x,
'makework.f: Accessing control file ',a)
240 efname=
'Work/workedits' 241 open(20,file=efname,status=
'old',form=
'formatted')
242 write(6,1006)trim(efname)
243 1006
format(6x,
'makework.f: Accessing workedits file ',a)
249 wfname =
'Work/work.'//trim(suffix1)
250 open(2,file=wfname,status=
'new',form=
'formatted')
252 write(6,1002)trim(wfname)
253 1002
format(6x,
'makework.f: Creating work file ',a)
258 pi = 2.d0*dasin(1.d0)
286 if(card(1:6).ne.cline)
then 287 write(6,6000)cline,trim(cfname)
290 cheader = trim(card(8:200))
296 if(card(1:6).ne.cline)
then 297 write(6,6000)cline,trim(cfname)
300 cregion = trim(card(8:200))
305 if(card(1:6).ne.cline)
then 306 write(6,6000)cline,trim(cfname)
309 cdatum1 = trim(card(8:200))
314 if(card(1:6).ne.cline)
then 315 write(6,6000)cline,trim(cfname)
318 cdatum2 = trim(card(8:200))
330 if(card(1:6).ne.cline)
then 331 write(6,6000)cline,trim(cfname)
334 read(trim(card(8:200)),*)rejmet
341 if(card(1:6).ne.cline)
then 342 write(6,6000)cline,trim(cfname)
345 read(card(9:10),*)nfiles
347 6000
format(6x,
'makework.f: Expecting ',a6,
' line in ',
348 *a,
' but not found. Stopping')
364 neditsrelevantlat = 0
365 neditsrelevantlon = 0
366 neditsrelevanteht = 0
368 neditsrelevantused = 0
369 neditsrelevantusedlat = 0
370 neditsrelevantusedlon = 0
371 neditsrelevantusedeht = 0
373 701
read(20,702,end=703)card
376 if(card(1:1).eq.
'#' .or. card(1:1).eq.
' ')
goto 701
377 neditstotal = neditstotal + 1
378 if(trim(card( 1: 10)) .eq. trim(olddtm) .and.
379 * trim(card( 12: 21)) .eq. trim(newdtm) .and.
380 * trim(card( 23: 32)) .eq. trim(region) )
then 381 neditsrelevant = neditsrelevant + 1
383 edittracker(neditsrelevant) = .false.
385 if(card(41:41).eq.
'1')
then 386 neditsrelevantlat = neditsrelevantlat + 1
388 if(card(42:42).eq.
'1')
then 389 neditsrelevantlon = neditsrelevantlon + 1
391 if(card(43:43).eq.
'1')
then 392 neditsrelevanteht = neditsrelevanteht + 1
395 editolddtm(neditsrelevant) = card( 1: 10)
396 editnewdtm(neditsrelevant) = card( 12: 21)
397 editregion(neditsrelevant) = card( 23: 32)
398 editpid(neditsrelevant) = card( 34: 39)
399 editrejlat(neditsrelevant) = card( 41: 41)
400 editrejlon(neditsrelevant) = card( 42: 42)
401 editrejeht(neditsrelevant) = card( 43: 43)
403 if(editrejlat(neditsrelevant).eq.
'0')
then 404 editrejlat(neditsrelevant) =
' ' 406 if(editrejlon(neditsrelevant).eq.
'0')
then 407 editrejlon(neditsrelevant) =
' ' 409 if(editrejeht(neditsrelevant).eq.
'0')
then 410 editrejeht(neditsrelevant) =
' ' 419 703
write(6,704)neditstotal,neditsrelevant,
420 *neditsrelevantlat,neditsrelevantlon,neditsrelevanteht
421 704
format(6x,
'makework.f: Total Manual Edits Found: ',i6,/,
422 * 6x,
' Initial Relevant Manual Edits Found: ',i6,/,
423 * 6x,
' ...of these, # in LAT : ',i6,/,
424 * 6x,
' # in LON : ',i6,/,
425 * 6x,
' # in EHT : ',i6)
431 fname=
'InFiles/'//trim(fname0)
432 write(6,999)trim(fname)
433 999
format(6x,
'makework.f: Processing file: ',a)
434 open(10,file=fname,status=
'old',form=
'formatted')
436 read(10,100)nameh,namef
438 2
read(10,101,end=98)pid,state,clath,clonh,cehth,clatf,clonf,cehtf
442 if(clath(11:13).eq.
'N/A' .or.
443 * clatf(11:13).eq.
'N/A')badlat=.true.
444 if(clonh(12:14).eq.
'N/A' .or.
445 * clonf(12:14).eq.
'N/A')badlon=.true.
446 if(cehth( 7: 9).eq.
'N/A' .or.
447 * cehtf( 7: 9).eq.
'N/A')badeht=.true.
450 if ( badlat .and. badlon .and. badeht)
then 454 elseif( badlat .and. badlon .and. .not.badeht)
then 458 elseif( badlat .and. .not.badlon .and. badeht)
then 462 elseif( badlat .and. .not.badlon .and. .not.badeht)
then 466 elseif(.not.badlat .and. badlon .and. badeht)
then 470 elseif(.not.badlat .and. badlon .and. .not.badeht)
then 474 elseif(.not.badlat .and. .not.badlon .and. badeht)
then 478 elseif(.not.badlat .and. .not.badlon .and. .not.badeht)
then 488 read(clath(2: 3),
'(i2.2)')ilatdh
489 read(clath(4: 5),
'(i2.2)')ilatmh
490 read(clath(6:13),
'(f8.5)')xlatsh
491 read(clatf(2: 3),
'(i2.2)')ilatdf
492 read(clatf(4: 5),
'(i2.2)')ilatmf
493 read(clatf(6:13),
'(f8.5)')xlatsf
494 xlath = dble(ilatdh) + dble(ilatmh)/60.d0 + xlatsh/3600.d0
495 if(clath(1:1).eq.
'S')xlath = -xlath
496 xlatf = dble(ilatdf) + dble(ilatmf)/60.d0 + xlatsf/3600.d0
497 if(clatf(1:1).eq.
'S')xlatf = -xlatf
500 dlatsec = dlat * 3600.d0
506 read(clonh(2: 4),
'(i3.3)')ilondh
507 read(clonh(5: 6),
'(i2.2)')ilonmh
508 read(clonh(7:14),
'(f8.5)')xlonsh
509 read(clonf(2: 4),
'(i3.3)')ilondf
510 read(clonf(5: 6),
'(i2.2)')ilonmf
511 read(clonf(7:14),
'(f8.5)')xlonsf
512 xlonh = dble(ilondh) + dble(ilonmh)/60.d0 + xlonsh/3600.d0
513 if(clonh(1:1).eq.
'W')xlonh = 360.d0 - xlonh
514 xlonf = dble(ilondf) + dble(ilonmf)/60.d0 + xlonsf/3600.d0
515 if(clonf(1:1).eq.
'W')xlonf = 360.d0 - xlonf
520 if(clath(11:13).ne.
'N/A')
then 521 coslat = dcos(xlath*d2r)
523 if(clatf(11:13).ne.
'N/A')
then 524 coslat = dcos(xlatf*d2r)
532 dlonsec = dlon * 3600.d0
533 dlonm = coslat*dlon*d2r*re
537 read(cehth(1: 9),
'(f9.3)')xehth
538 read(cehtf(1: 9),
'(f9.3)')xehtf
539 dehtm = xehtf - xehth
542 if(.not.badlat .and. .not.badlon)
then 543 dhorsec = dsqrt(dlatsec**2 + dlonsec**2)
544 dhorm = dsqrt(dlatm**2 + dlonm**2)
545 azhor = datan2(dlonm,dlatm)/d2r
546 if(azhor.lt.0)azhor = azhor + 360.d0
550 if(dabs(dlatm).gt.rejmet .or.
551 * dabs(dlonm).gt.rejmet .or.
552 * dabs(dhorm ).gt.rejmet )
then 590 if(xlath.lt.xs.or.xlath.gt.xn .or.
591 * xlonh.lt.xw.or.xlonh.gt.xe)
then 592 noutside = noutside + 1
599 write(6,2003)pid,xlath,xlonh
602 * 6x,
'program makework.f: InFile point found',
603 *
' and flagged with 444 which is outside ',
604 *
' the grid boundaries:',a6,1x,f14.10,1x,f14.10)
609 if(.not.badlat .and. .not.badlon)
then 610 if(xlath.lt.xlatmin)xlatmin=xlath
611 if(xlath.gt.xlatmax)xlatmax=xlath
612 if(xlonh.lt.xlonmin)xlonmin=xlonh
613 if(xlonh.gt.xlonmax)xlonmax=xlonh
620 do 720 irel = 1,neditsrelevant
622 751
format(
'Checking irel=',i4,
' PID=',a6,
623 *
' against true pid=',a6)
624 if(trim(editpid(irel)).ne.pid)
goto 720
629 edittracker(irel) = .true.
641 if(rejlat.eq.
'0' .or. rejlat.eq.
' ')
642 * rejlat = editrejlat(irel)
643 if(rejlon.eq.
'0' .or. rejlon.eq.
' ')
644 * rejlon = editrejlon(irel)
645 if(rejeht.eq.
'0' .or. rejeht.eq.
' ')
646 * rejeht = editrejeht(irel)
659 write(2,104)pid,state,rejlat,rejlon,rejeht,xlath,xlonh,xehth,
660 * dlatsec,dlonsec,dehtm,dhorsec,azhor,dlatm,dlonm,dhorm,
665 if(rejlat.eq.
' ')nptslat = nptslat + 1
666 if(rejlon.eq.
' ')nptslon = nptslon + 1
667 if(rejeht.eq.
' ')nptseht = nptseht + 1
669 104
format(a6,1x,a2,a1,a1,a1,1x,f14.10,1x,f14.10,1x,f8.3,1x,
670 * f9.5,1x,f9.5,1x,f9.3,1x,f9.5,1x,f9.5,1x,f9.3,1x,f9.3,1x,f9.3,
731 do 740 irel = 1,neditsrelevant
732 if(edittracker(irel))
goto 740
733 inotrel = inotrel + 1
734 if(editrejlat(irel).eq.
'1')
then 735 inotrellat = inotrellat + 1
737 if(editrejlon(irel).eq.
'1')
then 738 inotrellon = inotrellon + 1
740 if(editrejeht(irel).eq.
'1')
then 741 inotreleht = inotreleht + 1
743 write(6,731)editpid(irel)
745 * 6x,
'program makework.f: So-called Relevant Edit not used',
746 *
' since PID is not in the incoming data:',a6)
749 neditsrelevantused = neditsrelevant - inotrel
750 neditsrelevantusedlat = neditsrelevantlat - inotrellat
751 neditsrelevantusedlon = neditsrelevantlon - inotrellon
752 neditsrelevantusedeht = neditsrelevanteht - inotreleht
754 write(6,732)neditsrelevantused,neditsrelevantusedlat,
755 * neditsrelevantusedlon,neditsrelevantusedeht
756 732
format(6x,
'makework.f: ',/,
757 * 6x,
' Final Relevant Manual Edits Found: ',i6,/,
758 * 6x,
' ...of these, # in LAT : ',i6,/,
759 * 6x,
' # in LON : ',i6,/,
760 * 6x,
' # in EHT : ',i6)
764 write(6,1005)xlatmin,xlatmax,xlonmin,xlonmax
766 *6x,
'program makework.f: Minimum latitude: ',f14.10,/,
767 *6x,
'program makework.f: Maximum latitude: ',f14.10,/,
768 *6x,
'program makework.f: Minimum longitude: ',f14.10,/,
769 *6x,
'program makework.f: Maximum longitude: ',f14.10)
773 write(6,1010)npts,nptslat,nptslon,nptseht
775 *6x,
'program makework.f: Total records in work file: ',i9,/,
776 *6x,
'program makework.f: With a usable LAT diff : ',i9,/,
777 *6x,
'program makework.f: With a usable LON diff : ',i9,/,
778 *6x,
'program makework.f: With a usable EHT diff : ',i9)
783 1003
format(
'END program makework.f')
788 100
format(27x,a15,26x,a15)
789 101
format(a6,1x,a2,5x,a13,1x,a14,1x,a9,3x,a13,1x,a14,1x,a9)
790 102
format(f15.9,1x,f14.9,1x,f5.1)
791 103
format(6x,
'makework.f: Done with file : ',a)
795 include
'Subs/getgridbounds.f' program makework
Program to create a work file which will serve as the primary information needed to analyze and creat...
subroutine getgridbounds(region, xn, xs, xw, xe)
Subroutine to collect up the GRID boundaries for use in creating NADCON 5.