www.pudn.com > Noise.rar > NOIS2.FOR


      PROGRAM NOIS2 
C.....A FORTRAN V ROUTINE FOR PC USING USER INPUT OF SEASON, LOCATION, 
C.....MANMADE NOISE, FREQUENCY AND TIME AND FOUR EXTERNAL FILES OF 
C.....COEFFICIENTS TO GIVE OUTPUT OF ATMOSPHERIC, GALACTIC,AND MANMADE 
C.....NOISE, AN OVERALL MEDIAN NOISE VALUE FAM (DBW/HZ) AND DL, DU, 
C.....SL, SM AND SU, THE STATISTICAL VARIATIONS OF A NOISE VALUE. 
C.....THE MODIFICATION OF NOSCMPC (NOW NOIS1) TO NOIS2 CHANGES THE 
C.....OUTPUT FORMAT SO THAT WHEN COMPUTATIONS ARE DONE BY TIME BLOCKS, 
C.....A SET OF SEASONS IS OUTPUT FOR A GIVEN FREQUENCY INSTEAD OF THE 
C.....REVERSE. 
      COMMON /ANOIS/ ATNU,ATNY,CC,TM,RCNSE,DU,DL,SIGM,SIGU,SIGL,KJ,JK 
      COMMON /TON/ ATMO, GNOS, ZCNSE, XADJN, XNOISE, ZNOISE 
      COMMON /TWO/ DUD(5,12,5),FAM(14,12),FAKP(29,16,6),FAKABP(2,6) 
      COMMON /NSTAT/ DLA,DUA,SLA,SMA,SUA,DLM,DUM,SLM,SMM,SUM 
      DIMENSION FREQA(60),TBHR(6),FREQL(11) 
      DIMENSION AARR(4,60,6),GARR(4,60,6),XARR(4,60,6), 
     A RARR(4,60,6),DLARR(4,60,6),DUARR(4,60,6),SLARR(4,60,6), 
     B SMARR(4,60,6),SUARR(4,60,6) 
      CHARACTER*1 PGEJT 
      CHARACTER*6 SEASON(4),SEAFIN(4) 
      CHARACTER*9 TIMEBLK(6) 
      CHARACTER*17 NOSNAME(4) 
      CHARACTER*40 LOCNAME 
      DATA PGEJT /''/ 
      DATA SEASON /'WINTER','SPRING','SUMMER','AUTUMN'/ 
      DATA SEAFIN /'ISCOF1','ISCOF2','ISCOF3','ISCOF4'/ 
      DATA TIMEBLK /'0000-0400','0400-0800','0800-1200','1200-1600', 
     A '1600-2000','2000-2400'/ 
      DATA NOSNAME /'BUSINESS NOISE','RESIDENTIAL NOISE', 
     A 'RURAL NOISE','QUIET RURAL NOISE'/ 
      DATA TBHR /2.0,6.0,10.0,14.0,18.0,22.0/ 
      DATA FREQL /.01,.02,.05,.1,.2,.5,1.,2.,5.,10.,20./ 
C..... 
C.....BEGIN INPUT WITH SEASON 
C..... 
 100  WRITE (*,1050) 
 1050 FORMAT (/1X,' INPUT SEASON, 1=WINTER, 2=SPRING, 3=SUMMER'/ 
     A '  4=AUTUMN,   5=ALL SEASONS,  ANYTHING ELSE=END OF RUN') 
      READ (*,*) ISEASON 
      ISEAIN=ISEASON 
      IF (ISEASON .LT. 1 .OR. ISEASON .GT. 5) GO TO 500 
      ISE1=ISEASON 
      ISE2=ISEASON 
      IF (ISEASON .EQ. 5) ISE1=1 
      IF (ISEASON .EQ. 5) ISE2=4 
      DO 275 ISE = ISE1,ISE2 
      ISEASON = ISE 
      IF (ISEAIN .GT. 4 .AND. ISE .GT. 1) GO TO 105 
C..... 
C.....INPUT LOCATION 
C..... 
      WRITE (*,1051) 
 1051 FORMAT (/1X,' INPUT LOCATION LATITUDE (- IF S), LONGITUDE (- IF' 
     A ' WEST)'/'  AND LOCATION NAME IN SINGLE QUOTES') 
      READ (*,*) RLATD,ALONGD,LOCNAME 
      RLONGD=ALONGD 
      IF (ALONGD .LT. 0.0) RLONGD=360.+ALONGD 
 105  CONTINUE 
      KODESEA=ISEASON 
      IF (RLATD .GE. 0.0) GO TO 110 
      IF (ISEASON .EQ. 1) KODESEA = 3 
      IF (ISEASON .EQ. 2) KODESEA = 4 
      IF (ISEASON .EQ. 3) KODESEA = 1 
      IF (ISEASON .EQ. 4) KODESEA = 2 
 110  CONTINUE 
      OPEN (3,FILE=SEAFIN(KODESEA),STATUS='UNKNOWN',ACCESS= 
     A 'SEQUENTIAL', FORM='BINARY',MODE='READ') 
      READ (3,END=300,ERR=400) DUD,FAM,FAKP,FAKABP 
      CLOSE (3) 
      LUFO=4 
      OPEN (4,FILE='NOISE.LST',STATUS='UNKNOWN',ACCESS='SEQUENTIAL', 
     A FORM='FORMATTED') 
      IF (ISE1 .NE. ISE2 .AND. ISE .NE. 1) GO TO 135 
C..... 
C.....INPUT NOISE 
C..... 
      WRITE (*,1052) 
 1052 FORMAT (/1X,' INPUT MANMADE NOISE AT 3 MHZ (DBW) OR'/ 
     A '  -1 FOR BUSINESS, -2 FOR RESIDENTIAL, -3 FOR RURAL, OR'/ 
     B '  -4 FOR QUIET RURAL NOISE'/'  AND OUTPUT CODE 1 FOR DBW' 
     C ' OR 2 FOR FA') 
      READ (*,*) NNOISE,IODBWDB 
      NOISE = NNOISE 
      IF (NNOISE .LT. -4.) NOISE = ABS(NNOISE) 
C..... 
C.....INPUT FMHZ 
C..... 
      WRITE (*,1053) 
 1053 FORMAT (/1X,' INPUT SPECIFIC FMHZ DESIRED (.01-30.)'/ 
     A '  OR 0.0 FOR COMPUTER ARRAY LOOP OF FMHZ'/ 
     B '  OR -1.0 FOR USER ARRAY LOOP OF FMHZ'/ 
     C '  OR -2.0 FOR LOGARITHMIC ARRAY LOOP OF FMHZ.'/ 
     D '  DO NOT ASK FOR MORE THAN 60 VALUES OF FMHZ.') 
      READ (*,*) FREQ 
      NF=1 
      FREQA(NF)=FREQ 
      IF (FREQ-0.0) 125,122,130 
 122  WRITE (*,1054) 
 1054 FORMAT (/1X,' INPUT BEGINNING, ENDING, AND INCREMENT FOR FREQ') 
      READ (*,*) FBEG,FEND,FINC 
      FREQA(NF)=FBEG 
      IF (FBEG .LT. .01 .OR. FEND .GT. 30.) GO TO 295 
      DO 124 KF=2,60 
      NF=NF+1 
      FREQA(NF)=FREQA(NF-1)+FINC 
      IF ((FREQA(NF)+.005)-FEND) 124,129,129 
 124  CONTINUE 
      GO TO 295 
 125  IF (FREQ .NE. -1.0) GO TO 127 
      DO 126 KF=1,61 
      WRITE (*,1057) 
 1057 FORMAT (/1X,' INPUT FREQUENCY (0.0 TO END)') 
      READ (*,*) FREQA(NF) 
      IF (FREQA(NF) .EQ. 0.0) GO TO 129 
      NF=NF+1 
 126  CONTINUE 
      GO TO 295 
 127  IF (FREQ .NE. -2.0) GO TO 295 
      NF=11 
      DO 128 KF=1,11 
      FREQA(KF)=FREQL(KF) 
 128  CONTINUE 
      GO TO 130 
 129  IF ((FREQ .EQ. -1.) .OR. (FREQ .EQ. 0. .AND. FREQA(NF) .GT. 
     A FEND)) NF=NF-1 
C..... 
C.....INPUT TIME 
C..... 
 130  WRITE (*,1055) 
 1055 FORMAT (/1X,' INPUT SPECIFIC LOCAL MEAN TIME (0-23)'/ 
     A '  OR 25 FOR TIME BLOCKS') 
      READ (*,*) RLMT 
      IF (RLMT .LT. 0. .OR. RLMT .EQ. 24. .OR. RLMT .GT. 25.) 
     A GO TO 295 
      WRITE (*,1056) 
 1056 FORMAT (/1X,' INPUT SWITCH TO DESIGNATE NOISE VALUE '/ 
     A '  STATISTICAL PARAMETERS OUTPUT FOR; 1=OVERALL MEDIAN, '/ 
     B '  2 = ATMOSPHERIC, 3=MANMADE'/2X,'ALL MEDIAN NOISE VALUES ' 
     C 'WILL APPEAR BUT'/2X,'THE STATISTICAL VARIATIONS ARE ONLY ' 
     D 'FOR'/2X,'FOR THE PARTICULAR NOISE TYPE SELECTED.') 
      READ (*,*) IPS 
 135  CONTINUE 
      IF (RLMT-25.) 140,200,295 
C..... 
C.....USE THIS BRANCH TO DO SPECIFIC TIME 
C..... 
 140  CALL ANOIS1(RLMT,RLATD,RLONGD) 
      WRITE (LUFO,1002) RLATD,ALONGD,LOCNAME 
      IF (NNOISE .LT. -4) WRITE (LUFO,1016) 
     A SEASON(ISEASON),RLMT,NNOISE 
      IF (NNOISE .GE. -4) WRITE (LUFO,1014) 
     A SEASON(ISEASON),RLMT,NOSNAME(ABS(NNOISE)) 
 1002 FORMAT(////2X,'LAT = ',F6.2,',  LONG = ',F7.2,',  ',A40) 
 1016 FORMAT (2X,A6,',  LMT = ',F4.1,',  3 mhz MANMADE NOISE = ',I4, 
     A ' DBW'/) 
 1014 FORMAT (2X,A6,',  LMT = ',F4.1,',  ',A17/) 
      IF (IODBWDB .EQ. 1) WRITE (LUFO,1005) 
      IF (IODBWDB .EQ. 2) WRITE (LUFO,1013) 
 1005 FORMAT (13X,'---MEDIAN NOISE VALUES IN DBW--  STATISTICAL ', 
     A 'VALUES IN DB') 
 1013 FORMAT (13X,'--MEDIAN NOISE VALUES, FA(DB)--  STATISTICAL ', 
     A 'VALUES IN DB') 
      IF (IPS .EQ. 1) WRITE (LUFO,1010) 
      IF (IPS .EQ. 2) WRITE (LUFO,1011) 
      IF (IPS .EQ. 3) WRITE (LUFO,1012) 
 1010 FORMAT (50X,'OVERALL NOISE') 
 1011 FORMAT (48X,'ATMOSPHERIC NOISE') 
 1012 FORMAT (50X,'MANMADE NOISE') 
      WRITE (LUFO,1008) 
 1008 FORMAT (7X,'FMHZ',4X,'ATMO',5X,'GAL',1X,'MANMADE',1X,'OVERALL', 
     C 3X,'DL',3X,'DU',3X,'SL',3X,'SM',3X,'SU'/) 
      DO 150 IFREQ=1,NF 
      FREQ=FREQA(IFREQ) 
      CALL GENOIS(FREQ,NOISE,RLATD) 
      IF (IODBWDB .EQ. 1) GO TO 148 
      ATMO=ATMO+204. 
      GNOS=GNOS+204. 
      XNOISE=XNOISE+204. 
      RCNSE=RCNSE+204. 
 148  CONTINUE 
      IF (IPS .EQ. 1) WRITE (LUFO,1003) FREQ,ATMO,GNOS,XNOISE,RCNSE, 
     A DL,DU,SIGL,SIGM,SIGU 
      IF (IPS .EQ. 2) WRITE (LUFO,1003) FREQ,ATMO,GNOS,XNOISE,RCNSE, 
     A DLA,DUA,SLA,SMA,SUA 
      IF (IPS .EQ. 3) WRITE (LUFO,1003) FREQ,ATMO,GNOS,XNOISE,RCNSE, 
     A DLM,DUM,SLM,SMM,SUM 
 1003 FORMAT(4X,F7.3,4F8.1,5F5.1) 
 150  CONTINUE 
      WRITE (LUFO,1017) PGEJT 
 1017 FORMAT (1A1) 
      GO TO 275 
C..... 
C.....USE THIS BRANCH TO DO TIME BLOCKS 
C..... 
 200  CONTINUE 
      DO 270 IFREQ=1,NF 
      FREQ=FREQA(IFREQ) 
      DO 265 ITB=1,6 
      TIME=TBHR(ITB) 
      CALL ANOIS1(TIME,RLATD,RLONGD) 
      CALL GENOIS(FREQ,NOISE,RLATD) 
      IF (IODBWDB .EQ. 1) GO TO 258 
      ATMO=ATMO+204. 
      GNOS=GNOS+204. 
      XNOISE=XNOISE+204. 
      RCNSE=RCNSE+204. 
 258  CONTINUE 
      AARR(ISE,IFREQ,ITB)=ATMO 
      GARR(ISE,IFREQ,ITB)=GNOS 
      XARR(ISE,IFREQ,ITB)=XNOISE 
      RARR(ISE,IFREQ,ITB)=RCNSE 
      IF (IPS .GT. 1) GO TO 260 
      DLARR(ISE,IFREQ,ITB)=DL 
      DUARR(ISE,IFREQ,ITB)=DU 
      SLARR(ISE,IFREQ,ITB)=SIGL 
      SMARR(ISE,IFREQ,ITB)=SIGM 
      SUARR(ISE,IFREQ,ITB)=SIGU 
      GO TO 265 
 260  CONTINUE 
      IF (IPS .GT. 2) GO TO 262 
      DLARR(ISE,IFREQ,ITB)=DLA 
      DUARR(ISE,IFREQ,ITB)=DUA 
      SLARR(ISE,IFREQ,ITB)=SLA 
      SMARR(ISE,IFREQ,ITB)=SMA 
      SUARR(ISE,IFREQ,ITB)=SUA 
      GO TO 265 
 262  CONTINUE 
      IF (IPS .NE. 3) GO TO 295 
      DLARR(ISE,IFREQ,ITB)=DLM 
      DUARR(ISE,IFREQ,ITB)=DUM 
      SLARR(ISE,IFREQ,ITB)=SLM 
      SMARR(ISE,IFREQ,ITB)=SMM 
      SUARR(ISE,IFREQ,ITB)=SUM 
 265  CONTINUE 
 270  CONTINUE 
 275  CONTINUE 
C..... 
C.....OUTPUT FOR TIME BLOCK COMPUTATIONS; ELSE GO FOR NEW INPUT 
C..... 
      IF (RLMT-25.) 100,280,295 
 280  CONTINUE 
      DO 286 IFREQ=1,NF 
      DO 284 ISE=ISE1,ISE2 
      WRITE (LUFO,1002) RLATD,ALONGD,LOCNAME 
      IF (NNOISE .LT. -4) WRITE (LUFO,1004) 
     A SEASON(ISE),FREQA(IFREQ),NNOISE 
      IF (NNOISE .GE. -4) WRITE (LUFO,1015) 
     A SEASON(ISE),FREQA(IFREQ),NOSNAME(ABS(NNOISE)) 
 1004 FORMAT (2X,A6,',  FMHZ = ',F6.3,',  3 MHZ MANMADE NOISE = ', I4, 
     A ' DBW'/) 
 1015 FORMAT (2X,A6,',  FMHZ = ',F6.3,',  ',A17/) 
      IF (IODBWDB .EQ. 1) WRITE (LUFO,1005) 
      IF (IODBWDB .EQ. 2) WRITE (LUFO,1013) 
      IF (IPS .EQ. 1) WRITE (LUFO,1010) 
      IF (IPS .EQ. 2) WRITE (LUFO,1011) 
      IF (IPS .EQ. 3) WRITE (LUFO,1012) 
      WRITE (LUFO,1006) 
 1006 FORMAT (1X,'TIME BLOCK',4X,'ATMO',5X,'GAL',1X,'MANMADE',1X, 
     C 'OVERALL',3X,'DL',3X,'DU',3X,'SL',3X,'SM',3X,'SU'/) 
      DO 282 ITB = 1,6 
      WRITE (LUFO,1007) TIMEBLK(ITB),AARR(ISE,IFREQ,ITB), 
     A GARR(ISE,IFREQ,ITB),XARR(ISE,IFREQ,ITB),RARR(ISE,IFREQ,ITB), 
     B DLARR(ISE,IFREQ,ITB),DUARR(ISE,IFREQ,ITB),SLARR(ISE,IFREQ,ITB), 
     C SMARR(ISE,IFREQ,ITB),SUARR(ISE,IFREQ,ITB) 
 1007 FORMAT (2X,A9,4F8.1,5F5.1) 
 282  CONTINUE 
 284  CONTINUE 
      WRITE (LUFO,1017) PGEJT 
 286  CONTINUE 
      GO TO 100 
 295  WRITE (*,2010) 
      GO TO 100 
 300  WRITE (*,2020) 
      CLOSE (4) 
      STOP 
 400  WRITE (*,2030) 
      CLOSE (4) 
      STOP 
 500  CONTINUE 
      CLOSE (4) 
      WRITE (*,2000) 
      STOP 
 2000 FORMAT (//' NORMAL PROGRAM TERMINATION') 
 2010 FORMAT (//' ERROR ON INPUT, TRY AGAIN') 
 2020 FORMAT (//' END OF FILE ON DATA BASE') 
 2030 FORMAT (//' ERROR ON DATA BASE READ') 
      END  
      SUBROUTINE ANOIS1(RLMT,RLATD,RLONGD) 
CR....A ROUTINE THAT USES RLMT TO DETERMINE THE TIMEBLOCK (KJ) 
CR....AND ADJACENT TIME BLOCK (JK) (THIS IS THE PRIOR TIMEBLOCK 
CR....FOR THE FIRST 2 HOURS OF KJ, THE SAME, IE JK=KJ, FOR THE 3RD 
CR....HOUR OF KJ AND THE NEXT TIME BLOCK FOR THE LAST HOUR OF KJ) 
CR....AND THEN CALLS NOISY TO FIGURE THE ATMOSPHERIC NOISE (ATNU 
CR....OR ATNY) FOR EACH OF THESE TIME BLOCKS. 
C..... 
C.....THIS ROUTINE DETERMINES THE 1 MHZ ATMOSPHERIC NOISE 
C..... 
C.....FOURIER SERIES IN LATITUDE AND LONGITUDE FOR TWO DISCRETE 
C.....LOCAL TIME BLOCKS 
C..... 
      COMMON /ANOIS/ ATNU,ATNY,CC,TM,RCNSE,DU,DL,SIGM,SIGU,SIGL,KJ,JK 
C.....LMT AT RCVR SITE 
 100  CC = RLMT 
      KJ= 6  
      IF(CC-22.) 105,110,110 
 105  KJ = CC/4. +1. 
 110  TM = 4*KJ-2 
      IF(CC-TM) 115,120,125  
 115  JK = KJ -1 
      GO TO 130  
 120  JK = KJ 
      GO TO 130  
 125  JK = KJ+1 
 130  IF(JK) 135,135,140 
 135  JK =6 
      GO TO 150  
 140  IF(JK-6) 150,150,145 
 145  JK = 1 
C.....EAST LONGITUDE (IN DEGREES) 
 150  CEG= RLONGD 
 165  XLA =RLATD 
C.....LATITUDE (IN DEGREES) "+" IS NORTH 
      CALL NOISY(KJ,XLA,CEG,ATNU)  
      CALL NOISY(JK,XLA,CEG,ATNY)  
      RETURN 
      END  
      SUBROUTINE NOISY (KJ, XLA, CEG, ANOS)  
CR....A ROUTINE TO USE THE TIMEBLOCK (KJ), THE LAT (XLA), THE LONG 
CR....(CEG), AND THE IONOSPHERIC COEFFICIENTS (FAKP AND FAKAB) TO 
CR....DETERMINE THE ATMOSPHERIC NOISE (ANOS). 
C.....NOISY IS A GENERAL PURPOSE ROUTINE USED TO EVALUATE A FOURIER 
C.....SERIES IN TWO VARIABLES. 
C.....KJ --- NUMBER OF FOURIER COEFFICIENT ARRAY TO BE USED 
C.....XLA --- GEOGRAPHIC LATITUDE, DEGREES, 
C.....CEG --- GEOGRAPHIC EAST LONGITUDE, DEGREES 
C.....ANOS --- NOISE VALUE, MEDIAN POWER DB ABOVE KTB 
C.....FAKABP --- NORMALIZING FACTORS FOR FOURIER SERIES 
C.....KJ = 1 TO 6 IS ATMOSPHERIC NOISE 
C..... 
C.....* NOTE - XLA, CEG, ANOS, FAKABP ARE NOT ALWAYS AS PREVIOUSLY 
C.....         DEFINED 
C.....FOURIER VARIABLES AND ATMOSPHERIC RADIO NOISE 
C..... 
      COMMON /TWO/ DUD(5,12,5),FAM(14,12),FAKP(29,16,6),FAKABP(2,6) 
      DIMENSION SX (15), SY(29), ZZ (29) 
      IF (KJ - 6) 105,105,100 
 100  KJ=6 
C.....LIMITS OF FOURIER SERIES 
 105  LM = 29  
      LN = 15  
C.....HALF ANGLE (IN RADIANS)  
 110  Q = .0087266466 * CEG  
C.....LONGITUDE SINES  
      DO 115 K = 1, 15 
 115  SX(K)=SIN(Q*K) 
 118  CONTINUE 
C.....LONGITUDE SERIES 
      DO 125 J = 1, LM 
      R = 0. 
      DO 120 K = 1, LN 
 120  R = R + SX (K) * FAKP (J, K, KJ) 
 125  ZZ (J) = R + FAKP (J, 16, KJ) 
C.....ANGLE PLUS 90 DEGREES (IN RADIANS) 
      Q = .01745329252 * (XLA + 90.) 
C.....LATITUDE SERIES  
      DO 140 J=1,29 
 140  SY(J)=SIN(Q*J) 
      R = 0. 
      DO 130 K = 1, LM 
 130  R = R + SY (K) * ZZ (K) 
C.....FINAL FOURIER SERIES EVALUATION (NOTE LINEAR NORMALIZATION)  
 135  ANOS = R + FAKABP(1,KJ)+FAKABP(2,KJ)* Q 
      RETURN 
      END  
      SUBROUTINE GENOIS(FREQ,NOISE,RLAT) 
C..... 
C.....THIS ROUTINE COMPUTES THE COMBINED NOISE DISTRIBUTION 
C..... 
      COMMON /ANOIS/ ATNU,ATNY,CC,TM,RCNSE,DU,DL,SIGM,SIGU,SIGL,KJ,JK 
      COMMON /TON/ ATMO, GNOS, ZCNSE, XADJN, XNOISE, ZNOISE 
      COMMON /NSTAT/ DLA,DUA,SLA,SMA,SUA,DLM,DUM,SLM,SMM,SUM 
      DIMENSION XNINT(4) 
C.....MAN-MADE NOISE LEVELS AS GIVEN BY CCIR REPORT 258. 
      DATA XNINT /76.8, 72.5, 67.2, 53.6/ 
      DATA AFAC,BFAC,CFAC/7.87384,30.99872,5.56765/ 
C..... 
C.....(DUA/7.87384)**2=(DUA/1.282)**2/(2*4.34294**2) 
C.....                =(DUA/SQRT(2*1.282**2*4.34294**2))**2 
C..... 
C.....DLA*DLA/30.99872=(DLA/1.282)**2/(4.34294)**2 
C..... 
C.....5.56765=4.34294*1.282 
C..... 
C.....DATA IS FA VALUES AT 1 MHZ 
C.....CALCULATION OF NOISE LEVEL IS ITSA-1 
C.....ATNU, ATNY ARE DB .GT. KTB FOR 1 MHZ 
C.....ATNZ, ATNX ARE DB .GT. KTB FOR DESIRED FREQ,DUM 
C.....ATNOS, GNOS, XNOIS ARE DB .GT. KTB FOR ALL CALCULATIONS 
C.....AND ARE CONVERTED TO DBW(1 HZ BWDTH) AT END OF ROUTINE 
C.....UPPER LIMIT IS 55 MHZ FOR NOISE  
      DUME = AMIN1(FREQ,55.) 
      MAN=NOISE  
C.....FREQUENCY DEPENDENCE ATMOSPHERIC NOISE 
C.....FREQUENCY DEPENDENCE 
      CALL GENFAM(RLAT,KJ,DUME,ATNU,ATNZ,DU,DL,SIGM,SIGU,SIGL) 
      CALL GENFAM(RLAT,JK,DUME,ATNY,ATNX,DX,DQ,SIGZ,SIGX,SIGSQ) 
C.....BEGIN OF INTERPOLATION ON LOCAL TIME 
      SLOP = ABS(CC-TM)/4. 
      ATNOS = ATNZ + (ATNX - ATNZ) * SLOP 
      DUA= DU +(DX-DU)*SLOP  
      DLA= DL +(DQ-DL)*SLOP  
        SMA= SIGM+ (SIGZ-SIGM)*SLOP  
        SUA= SIGU +(SIGX-SIGU)*SLOP  
        SLA= SIGL+(SIGSQ-SIGL)* SLOP 
C..... 
 95   AU=EXP((DUA/AFAC)**2 + (ATNOS/4.34294)) 
      VU=AU*AU*(EXP(DUA*DUA/BFAC)-1.) 
      AL=EXP((DLA/AFAC)**2 + (ATNOS/4.34294)) 
      VL=AL*AL*(EXP(DLA*DLA/BFAC)-1.) 
C.....GALACTIC NOISE 
 105  GNOS = 52. - 23. * ALOG10(FREQ) 
 110  DUG=2. 
      AT=EXP((DUG/AFAC)**2 + (GNOS/4.34294)) 
      AU=AU+AT 
      VU=VU+AT*AT*(EXP(DUG*DUG/BFAC)-1.) 
      DLG=2. 
      AT=EXP((DLG/AFAC)**2 + (GNOS/4.34294)) 
      AL=AL+AT 
      VL=VL+AT*AT*(EXP(DLG*DLG/BFAC)-1.) 
      SMG = .5 
      SUG = .2 
      SLG = .2 
C.....MAN MADE  NOISE 
      MAN=NOISE 
      XNOIS = MAN  
      MA = IABS(MAN) 
      ZNOISE=XNOIS 
      IF(MAN) 120, 114, 115  
C.....INDICATES -164 ON USER INPUT 
 114  MA = 4 
      GO TO 120  
C.....CONVERT 3 MHZ DB .LT. 1 WATT INPUT VALUE TO FA AT 1 MHZ 
 115  XNOIS=204.0-XNOIS+13.22 
C.....OBTAIN FA AT DESIRED FREQUENCY 
      XNOIS = XNOIS - 27.7 * ALOG10(FREQ) 
      GO TO 125  
C....NEGATIVE ON USER INPUT INDICATES INDEX 
 120  MA = MIN0(4,MA) 
      CONN=27.7 
      IF(MA .EQ. 4) CONN=28.6 
      XNOIS = XNINT(MA) - CONN * ALOG10(FREQ) 
      ZNOISE = 204.0 - XNINT(MA) + 13.22 
 125  DUM=9.7 
      AT=EXP((DUM/AFAC)**2+(XNOIS/4.34294)) 
      AU=AU+AT 
      VU=VU+AT*AT*(EXP(DUM*DUM/BFAC)-1.) 
      DLM=6. 
      AT=EXP((DLM/AFAC)**2+(XNOIS/4.34294)) 
      AL=AL+AT 
      VL=VL+At*AT*(EXP(DLM*DLM/BFAC)-1.) 
      SUM=1.5  
      SMM=5.4 
      SLM=1.5  
C.....NOW DETERMINATION OF NOISE LEVEL IS ITS-78(HFMUFES4) 
C.....SWITCH TO DB .GT. WATT 
      ATNOS=ATNOS-204. 
      GNOS=GNOS-204. 
      XNOIS=XNOIS-204. 
      SIGTSQ=ALOG(1.+VU/(AU*AU)) 
      XRNSE= 4.34294*(ALOG(AU)-SIGTSQ/2.) -204. 
C.....UPPER DECILE 
      DU= CFAC*SQRT(SIGTSQ) 
      SIGTSQ=ALOG(1.+VL/(AL*AL)) 
C.....LOWER DECILE 
      DL= CFAC*SQRT(SIGTSQ) 
 205  QPA = 10. ** ((ATNOS - XRNSE) * .1) 
      QPG = 10.**((GNOS -XRNSE)*.1)  
C.....PREDICTION ERRORS  
C.....SIGM IS MEDIAN, SIGU IS UPPER AND SIGL IS LOWER  
      QPM = 10.**((XNOIS-XRNSE)*.1)  
      SIGM= SQRT((QPA*SMA)**2 +(QPG*SMG)**2 +(QPM*SMM)**2) 
      PV=QPA*EXP((DUA-DU)*.23026) 
      SIGU= (PV*SUA)**2+((PV-QPA)*SMA)**2 
      PV=QPG*EXP((DUG-DU)*.23026) 
      SIGU=SIGU+(PV*SUG)**2+((PV-QPG)*SMG)**2 
      PV=QPM*EXP((DUM-DU)*.23026) 
      SIGU=SQRT(SIGU+(PV*SUM)**2+((PV-QPM)*SMM)**2) 
      PV=QPA*EXP((DLA-DL)*.23026) 
      SIGL= (PV*SLA)**2+((PV-QPA)*SMA)**2 
      PV=QPG*EXP((DLG-DL)*.23026) 
      SIGL=SIGL+(PV*SLG)**2+((PV-QPG)*SMG)**2 
      PV=QPM*EXP((DLM-DL)*.23026) 
      SIGL=SQRT(SIGL+(PV*SLM)**2+((PV-QPM)*SMM)**2) 
C.....RCVR SITE NOISE = TOTAL NOISE + ANTENNA EFFICENCY (ADDED TO SIGNAL 
C.....WITH GAIN) 
 210  RCNSE = XRNSE 
      ZCNSE=RCNSE  
      ATMNO=ATNOS  
      XADJN=1. 
      XNOISE=XNOIS 
      ATMO=ATNOS 
      RETURN 
      END  
      SUBROUTINE GENFAM(Y2,IBLK,FREQ,Z,FA,DUA,DLA,DMS,DUS,DLS) 
c********************************************************************** 
c          Re-written 3.June.93 by Greg Hand because previous version was 
c          really incorrect. It made an attempt to limit Sigma Fam (DMS) 
c          to a 10 MHz frequency, but the indicies I and J became 
c          confused, and the result was not correct. This current 
c          version should limit DMS to 10 MHz and the others to 20 MHz 
c          because the curves end at 20 MHz. Unfortunately, this error 
c          has probably existed since time began, and it may take a 
c          while for this corrected version to propagate into all version 
c          that exist. The magnitude of the error that would have been 
c          caused is not known, but it is believed to be small. 
c********************************************************************** 
C.....VERSION 03.NOV.92  input latitude Y2 now in radians 
C.....GENFAM CALCULATES THE FREQUENCY DEPENDENCE OF THE ATMOSPHERIC 
C.....NOISE AND GETS DECILES AND PREDICTION ERRORS FROM TABLES 
C..... 
      COMMON /TWO/ DUD(5,12,5),FAM(14,12),FAKP(29,16,6),FAKABP(2,6) 
      DIMENSION V(5) 
      IBK=IBLK 
C.....CHECK IF LATITUDE IS NORTH OR SOUTH 
      IF(Y2.lt.0.) IBK=IBK+6 
      U1 = - .75 
      X =  ALOG10(FREQ) 
      U = (8. * 2. * * X - 11.) / 4. 
      KOP = 1 
 110  PZ = U1 * FAM (1, IBK) + FAM (2, IBK) 
      PX = U1 * FAM (8, IBK) + FAM (9, IBK) 
      DO 115 I = 3, 7 
      PZ = U1 * PZ + FAM (I, IBK) 
 115  PX = U1 * PX + FAM (I + 7, IBK) 
      IF(KOP.eq.2) go to 125 
      CZ = Z * PZ + PX 
      CZ = Z + Z - CZ 
      U1 = U 
      KOP = 2 
      GO TO 110 
 125  FA = CZ * PZ + PX 
c          Limit frequency to 20 MHz for DUA, DLA, DUS, DLS 
c            because curves in REP 322 only go to 20 MHz 
      if(FREQ.gt.20.) X=ALOG10(20.) 
      DO 145 I = 1, 5 
c          Limit frequency to 10 MHz for DMS (Sigma Fam) 
c            because curves in REP 322 only go to 10 MHz 
      if(I.eq.5 .and. FREQ.gt.10.) X=1. 
      Y = DUD(1,IBK,I) 
      DO 140 J = 2,5 
 140  Y = Y*X + DUD(J,IBK,I) 
 145  V(I) = Y 
      DUA = V(1) 
      DLA = V(2) 
      DUS = V(3) 
      DLS = V(4) 
      DMS = V(5) 
      RETURN 
      END