C     IRIFO7-A, OCTOBER  1979                                                   C     INTERNATIONAL REFERENCE IONOSPHERE (IRI).                                 C     THIS PROGRAM PRODUCES HEIGHT PROFILES OF TEMPERATURE                      C     AND DENSITY OF THE ELECTRONS AND IONS IN THE IONOSPHERE FOR               C     SPECIFIED LOCATION,TIME AND SOLAR ACTIVITY.                               C     ADDRESS@ PROF.K.RAWER, HERRENSTR.43                                       C     D 7801  MARCH , F.R.G.                                                    C     INPUT@                                                                    C     1.)  LATITUDE(F6.1),LONGITUDE(F6.1),SOLAR-ACTIVITY(R)(F6.1),              C     MONTH(F4.1),HOUR(F4.1,1X),XHI(F6.1),BEGIN,END,STEPWIDTH(OF THE            C     REQUIRED HEIGHT RANGE)(3(F6.1,1X)),KOBE(I1,1X),JNE,JNEMAX,                C     JTN,JTE,JTI,JTETI,JO,JHHE,JO2,JNO,JMAG(11I1)                              C     2.) HMF2/KM AND NMF2/M-3 OR FOF2/MHZ (F5.1,E9.3)                          C     IF HMF2 LESS 10.0 THEN THE CCIR VALUES FOR FOF2 AND HMF2                  C     ARE TAKEN BY USE OF THE CCIR-TAPE FOR FOF2 AND M3000.                     C     THE USER SHOULD ADAPT PROCEDURE CCIRCA TO HIS OWN                         C     CCIR-TAPE.                                                                C     KOBE=0 SHOULD BE USED FOR PRINTER OUTPUT AND KOBE=1 FOR                   C     PUNCHER OR TAPE OUTPUT.THE TEN INPUT VARIABLES                            C     (JNE...JNO) ARE SWITCHED (1=YES,0=NO) TO CHOOSE YOUR                      C     PARAMETERS.JMAG=0 MEANS GEOGRAFIC JMAG=1 GEOMAGNETIC                      C     LATITUDE AND LONGITUDE.                                                   C                                                                               C-WDC-A   THIS PROGRAM HAS BEEN MODIFIED AT WDC-A TO BE MORE MACHINE            C-WDC-A   INDEPENDENT.                                                          C-WDC-A   NOTE 1) INIALIZATION OF VARIBLES IS NOT NECESSARY.                    C-WDC-A   NOTE 2) THIS VERSION OF THE PROGRAM DOES NOT ALLOW YOU                C-WDC-A           TO CHOSE WHICH PRAMETERS ARE OUTPUT. A FIXED OUTPUT           C-WDC-A           WAS USED TO ASSURE EXECUTION ON ANY MACHINE.                  C-WDC-A   NOTE 3) YOU WILL HAVE TO OPEN YOUR CHANNEL NUMBERS, ON A              C-WDC-A           CONTROL DATA MACHINE THIS WOULD BE A PROGRAM CARD,ON          C-WDC-A           A DATA GENERAL THIS WOULD BE AN OPEN CARD, ETC. THE           C-WDC-A           CHANNEL VARIBLES SPECIFIED BY THE VARIBLES EGNR,AGNR          C-WDC-A           AND KONSOL CAN BE CHANGED TO ANY VALUE YOU LIKE,              C-WDC-A           SO LONG AS YOU REPLACE THOSE CHANGES IN YOUR CHANNEL          C-WDC-A           OPENING STATEMENT.                                            C-WDC-A           IN THIS VERSION:                                              C-WDC-A           EGNR = 1 --INPUT DATA                                         C-WDC-A           AGNR = 4 --OUTPUT- PRINTOUT OR DISK FILE                      C-WDC-A           KONSOL = 2 --INTERACTIVE DISPLAY OF INFORMATIVE STATEMENTS    C-WDC-A                        OR OUTPUT TO LINE PRINTER                        C-WDC-A           TAPE5 = 5 --CCIR COEFFICENTS                                  C-WDC-A   NOTE 4) THIS VERSION OF IRIFO7 IS INTENDED TO USE THE CCIR            C-WDC-A           COEFFICENTS PROVIDED WITH THIS PROGRAM TAPE.  THE READ        C-WDC-A           STATEMENTS IN CCIRCA MUST BE CHANGED IF YOU ARE USING         C-WDC-A           A DIFFERENT SET OF COEFFICENTS.                               C                                                                                     PROGRAM IRI(INPUT,OUTPUT,TAPE1=INPUT,TAPE2=OUTPUT,TAPE4,                       XTAPE5)                                                                          INTEGER EGNR,AGNR,SMONTH,SHOUR,DAYNR,DDO(4)                                    1,IIF(4),DO2(2)                                                                  REAL LATI,LONGI,MO2(3),MO(5),LOGE,MONTH,MODIP,NMF2,                            2NDEL0,NMF1,NME,NMD,K,MAGBR,                                                    1NHABR,NDEL,NDX,NEI,MM,MLAT,MLONG,NOBO2                                          DIMENSION F(3),B0F(2,2,8),OUTF(50,12),JF(10),RIF(4),                           1PF1O(12),PF3O(12),HO(4),                                                       2PF2O(4),HO2(2),CTNN(3),PG1O(80),PG2O(32),PG3O(80)                               LOGICAL WINTER,SUMMER,SCHALT,EXT,NIGHT,F1REG,VALLEY,                           1IRDUPP,CCIREI,ANF,TEMP,TEVAL,TIMP                                               COMMON/BLOCK1/HMF2,NMF2,HMF1/BLOCK2/B0,B1,C1,HZ,T,G(144),HST,STR               4/BLOCK3/HDX,HME,                                                               1NME,HMD,NMD,HEF,D1,K,FP30,FP3U,FP1,FP2/BLOCK4/HB,HC,P9,P10,                    2P11,P12,IRDL,OW,AGNR,IRDUPP,P(8)/BLOCK5/ZX,TNX,ATN,CTN(3)/                     3BLOCK8/HS,TNHS,XSM(2),MM(3)/BLO10/BETA,ETA,DELTA,ZETA/                         XBLO11/MONTH,LATI/BLOCK6/NIGHT,E(4)                                              EXTERNAL SSRSU,XE1,XE2,XE3,XE4,XE5,XE6,TEDER                              C                                                                               C-WDC-A  THIS DATA STATEMENT IS NECESSARY IF ALL PARAMETERS ARE TO BE           C-WDC-A  OUTPUT. THE OPTION OF VARIBLE TYPES OF OUTPUT IS NOT                   C-WDC-A  ACTIVE IN THIS VERSION, THUS ALL OUTPUT TYPES ARE SUPPLIES             C-WDC-A  BY MAKING ALL ELEMENTS OF THE ARRAY JF EQUAL 1.                        C                                                                                     DATA JF /10*1/                                                                  LOGE=1/ALOG(10.0)                                                               UMR=0.01745329                                                                  PHI=3.1415927                                                                   CCIREI=.FALSE.                                                            C     "COMMENT" FIRST SPECIFY YOUR COMPUTERS CHANNEL NUMBERS, E.G.                    EGNR=1                                                                          AGNR=4                                                                          KONSOL=2                                                                  C                                                                               C-WDC-1  IF YOU WISH TO READ MORE THAN ONE HOUR AT A TIME ADD AN                C-WDC-1  END OF FILE TEST BELOW. IF EOF TRUE THEN GO TO STATEMENT 999           C                                                                               2000  READ(EGNR,2) LATI,LONGI,R,MONTH,HOUR,XHI,AH,EH,SH,KOBE,                        1JMAG,HMF2,FOF2                                                            2     FORMAT(3F6.1,2F4.1,F6.1,1X,3(F6.1,1X),I1,1X,I1,F5.1,E9.3)                       IOND=JF(8)+JF(9)+JF(10)+JF(7)                                             C                                                                               C     INPUT OF TRANSFORMATION COEFFICIENTS (PROCEDURE FIELDG) ..................C                                                                                     CALL KOEFFI(B0F)                                                                CALL KOEFFB(G)                                                            C                                                                               C     CALCULATION OF XHI,SUNSET,SUNRISE,COV,XHIM ...............................C                                                                                     IF(JMAG.LE.0) GOTO 888                                                          MLAT=LATI                                                                       MLONG=LONGI                                                               888   CALL GGM(JMAG,LONGI,LATI,MLONG,MLAT)                                            DAYNR=IFIX(MONTH)*30-15                                                         SUNDEC=-0.40915*COS(2.0*PHI/365.25*FLOAT(DAYNR+8))                              Z1=SIN(SUNDEC)*SIN(LATI*UMR)                                                    Z2=COS(SUNDEC)*COS(LATI*UMR)                                                    IF(ABS(Z2).GT.0.0) GOTO 120                                                     SAX=24.0                                                                        IF(Z1.GE.0.0) SAX=0.0                                                           GOTO 140                                                                  120   IF(ABS(Z1/Z2).LE.1.0) GOTO 510                                                  SAX=24.0                                                                        IF((Z1+Z2).GE.0.0) SAX=0.0                                                      GOTO 140                                                                  510   SAX=12.0-ACOS(-Z1/Z2)/(UMR*15.0)                                          140   SUX=24.0-SAX                                                                    XLSTA=15.0*(HOUR-12.0)                                                          COV=63.75+R*(0.728+R*0.00089)                                                   IF(XHI.GT.(-10.0)) GOTO 520                                                     COSXHI=SIN(LATI*UMR)*SIN(SUNDEC)+COS(LATI*UMR)*COS(SUNDEC)                     1*COS(XLSTA*UMR)                                                                 XHI=ACOS(COSXHI)/UMR                                                            GOTO 503                                                                  520   COSXHI=COS(XHI*UMR)                                                       503   XHI0=0.87+0.0061*ABS(LATI)                                                      XHI100=0.68+0.0089*ABS(LATI)                                                    XHIM=(XHI0+(XHI100-XHI0)*R/100.0)/UMR                                           CALL FIELDG(LATI,LONGI,300.0,XMA,YMA,ZMA,BET,DIP,MODIP)                         MAGBR=ATAN(0.5*TAN(DIP*UMR))/UMR                                                SUNDEC=SUNDEC/UMR                                                         C                                                                               C     CLASSIFICATION OF DIFFERENT TIMES AND REGIONS ............................C                                                                                     F1REG=.TRUE.                                                                    VALLEY=.FALSE.                                                                  SUMMER=.FALSE.                                                                  WINTER=.FALSE.                                                                  NIGHT=.FALSE.                                                                   TEMP=.TRUE.                                                                     TIMP=.TRUE.                                                                     TEVAL=.FALSE.                                                                   IF((MONTH.GT.10.0).OR.(MONTH.LT.3.0)) WINTER=.TRUE.                             IF((MONTH.GT.4.0).AND.(MONTH.LT.9.0)) SUMMER=.TRUE.                             EXT=SUMMER                                                                      IF(LATI.GT.0.0)  GOTO 1111                                                      EXT=WINTER                                                                      WINTER=SUMMER                                                              1111 SUMMER=EXT                                                                      IF((HOUR.GT.SUX).OR.(HOUR.LT.SAX)) NIGHT=.TRUE.                                 IF(XHI.GT.XHIM) F1REG=.FALSE.                                                   IF(NIGHT) F1REG=.FALSE.                                                         IF(WINTER) F1REG=.FALSE.                                                  C                                                                               C     INPUT OF THE ION DENSITY PARAMETER ARRAYS PF1O,PF2O AND PF3O......        C                                                                                     IF(IOND.LT.1) GOTO 141                                                          IIF(1)=2                                                                        IF(ABS(LATI).LT.30.0) IIF(1)=1                                                  IIF(2)=2                                                                        IF(COV.LT.100.0) IIF(2)=1                                                       IIF(3)=3                                                                        IF(WINTER) IIF(3)=4                                                             IF(SUMMER) IIF(3)=2                                                             IIF(4)=1                                                                        IF(NIGHT) IIF(4)=2                                                              CALL KOEFP1(PG1O)                                                               CALL KOEFP2 (PG2O)                                                              CALL KOEFP3 (PG3O)                                                              DO 6000 I=1, 4                                                                  RIF(I)=FLOAT(IIF(I))                                                      6000  CONTINUE                                                                        CALL SUFE (PG1O,RIF,12,PF1O)                                                    CALL SUFE(PG2O,RIF,4,PF2O)                                                      CALL SUFE(PG3O,RIF,12,PF3O)                                               C                                                                               C     CALCULATION OF ELECTRON DENSITY PARAMETERS............................... C                                                                               141   DELL=4.32                                                                       IF(ABS(MODIP).GE.18.0) DELL=1.0+EXP(-(ABS(MODIP)-30.0)/10.0)                    IF(.NOT.F1REG) GOTO 150                                                         C1=0.1244-(4.44E-4)*R+0.09/DELL                                                 FOF1=FOF1ED(MAGBR,R,COSXHI)                                                     NMF1=1.24E10*FOF1*FOF1                                                    150   XHINON=XHIS(MONTH,12.0,LATI)                                                    FOE=FOEEDI(R,XHI,XHINON,LATI,HOUR,SUX,SAX)                                      IF(HMF2.GE.10.0) GOTO 501                                                       CALL F2OUT(MODIP,LATI,LONGI,MAGBR,R,MONTH,HOUR,FOE,HMF2,FOF2)                   GOTO 502                                                                  501   IF(FOF2.GT.100.0) FOF2=SQRT(FOF2/1.24E+10)                                502   NMF2=1.24E10*FOF2*FOF2                                                          NME=1.24E10*FOE*FOE                                                             NMD=XMDED(XHI,R,4.0E8)                                                    7000  HME=HPOL(HOUR,110.0,105.0,SAX,SUX)                                              HMD=HPOL(HOUR,81.0,88.0,SAX,SUX)                                                SMONTH=IFIX(MONTH/3.0)                                                          IF(SMONTH.LT.1) SMONTH=4                                                        B0=XPOL(B0F,HOUR,SAX,SUX,DELL,SMONTH,R)                                         COS2=COS(MLAT*UMR)                                                              COS2=COS2*COS2                                                                  FLU=(COV-40.0)/30.0                                                             ETA=0.058798-0.0070305*COS2+FLU*(-0.014065+0.0069724*COS2)+                    1(0.0024287+0.0042810*COS2-0.00015280*FOF2)*FOF2                                 ZETA=0.078922-0.0046702*COS2+FLU*(-0.019132+0.0076545*COS2)+                   1(0.0032513+0.0060290*COS2-0.00020872*FOF2)*FOF2                                 BETA=-128.03+20.253*COS2+FLU*(-8.0755-0.65896*COS2)+(0.44041                   1+0.71458*COS2-0.042966*FOF2)*FOF2                                               XXX=EP1ST(-94.45,BETA)                                                          XXXX=DEP1ST(-94.45,BETA)                                                        DELTA=(ETA*XXX-ZETA/2.0)/(ETA*XXXX+ZETA/400.0)                                  B1=3.0                                                                          F(1)=HPOL(HOUR,0.02+0.03/DELL,0.05,SAX,SUX)                                     F(2)=HPOL(HOUR,4.6,4.5,SAX,SUX)                                                 F(3)=HPOL(HOUR,-11.5,-4.0,SAX,SUX)                                              NDEL0=5.0                                                                       IF(WINTER) NDEL0=10.0                                                           DNDH0=0.016                                                                     IF(SUMMER) DNDH0=0.01                                                           NHABR=HPOL(HOUR,10.5/DELL,28.0,SAX,SUX)                                         XXX=EPSTEP(45.0,67.0,-10.0,20.0,ABS(LATI))                                      HBR=HPOL(HOUR,17.8/DELL,XXX,SAX,SUX)                                            NDEL=HPOL(HOUR,NDEL0/DELL,81.0,SAX,SUX)                                         DNDHBR=HPOL(HOUR,DNDH0/DELL,0.06,SAX,SUX)                                       IF(NDEL.GT.1.0) VALLEY=.TRUE.                                                   IF(.NOT.VALLEY) GOTO 600                                                        CALL TAL(HME,NME,NHABR,NDEL,HBR,1.0,DNDHBR,EXT,E)                               IF(.NOT.EXT) GOTO 600                                                           WRITE(KONSOL,650)                                                         650   FORMAT(1X,"NO ELECTRON DENSITY E-VALLEY,AS THE                                 1 MODEL FUNCTION HAS A SECOND EXTREMUM IN THE VALLEY-REGION")                    VALLEY=.FALSE.                                                            600   FP1=F(1)                                                                        FP2=-FP1*FP1/2.0                                                                FP30=(-F(2)*FP2-FP1+1.0/F(2))/(F(2)*F(2))                                       FP3U=(-F(3)*FP2-FP1-1.0/F(3))/(F(3)*F(3))                                       HDX=HMD+F(2)                                                                    X=HDX-HMD                                                                       NDX=NMD*EXP(X*(FP1+X*(FP2+X*FP30)))                                             DNDX=NDX*(FP1+X*(2.0*FP2+X*3.0*FP30))                                           X=HME-HDX                                                                       K=-DNDX*X/(NDX*ALOG(NDX/NME))                                                   D1=DNDX/(NDX*K*X**(K-1.0))                                                      IF(.NOT.VALLEY) HBR=0.0                                                         IF(F1REG) GOTO 700                                                              HMF1=0.0                                                                        NMF1=0.0                                                                        C1=0.0                                                                    700   HEF=HME+HBR                                                               C                                                                               C     SEARCH FOR HMF1,HST,HEF,AND HA.......................................     C                                                                               7107  IF(.NOT.F1REG) NMF1=(NME+NMF2)/2.0                                              H=0.0                                                                     133   H=H+10.0                                                                        IF(H.GT.(HMF2-HME)) GOTO 135                                                    CALL REGFA1(HMF2-10.0-H,HMF2,1.0,NMF1,XE2,SCHALT,HMF1)                          IF(SCHALT) GOTO 133                                                             GOTO 137                                                                  135   WRITE(KONSOL,11)                                                          11    FORMAT(1H ,1X," HMF1 IS                                                        1 NOT EVALUATED BY THE FUNCTION XE2")                                            HMF1=HMF2                                                                       C1=0.0                                                                    137   IF(HMF1.GT.(HEF+10.0)) GOTO 380                                                 C1=0.0                                                                          HMF1=HMF2                                                                       WRITE(KONSOL,9)                                                           9     FORMAT(1H ,1X," HEF GREATER AS HMF1")                                     380   H=0.0                                                                     125   H=H+3.0                                                                         IF(H.GT.(HMF1-HME)) GOTO 900                                                    CALL REGFA1(HMF1,HME+H,1.0,NME,XE3,SCHALT,HST)                                  STR=HST                                                                         IF(SCHALT) GOTO 125                                                             GOTO 360                                                                  900   B1=B1+0.5                                                                       IF(B1.GE.10.0) GOTO 901                                                         H=0.0                                                                           GOTO 133                                                                  901   WRITE(KONSOL,100)                                                         100   FORMAT(1H ,1X," HST IS NOT                                                     1EVALUATED BY THE FUNCTION XE3")                                                 HST=(HMF1+HME-HBR)/2.0                                                    360   HZ=(HST+HMF1)/2.0                                                               WRITE (KONSOL,902) B1                                                     902   FORMAT (1X,  "WE  PUT  B1=  ",  F3.1,  "TO GET HST")                            IF(HZ.GT.(HEF+10.0)) GOTO 950                                                   HST=(HMF1+HEF)/2.0                                                              HZ=(HST+HMF1)/2.0                                                         950   D=HZ-HST                                                                        HEF=HME+HBR                                                                     T=D*D/(HZ-HEF-D)                                                          C                                                                               C     CALCULATION OF NEUTRAL TEMPERATURE PARAMETER...........................   C                                                                                     HTA=90.0                                                                        TNA=183.0                                                                       ZX=125.0                                                                        ANF=.TRUE.                                                                      Z1=-180.0                                                                 882   TUN=TUNCAL(COV,LATI,SUNDEC,Z1)                                                  TNX=371.6678+0.0518806*TUN-294.3505*EXP(-0.00216222*TUN)                        ATN=0.63662*(TUN-TNX)                                                           HDEL=ZX-HTA                                                                     TDEL=TNX-TNA                                                                    HD2=HDEL*HDEL                                                                   CTN(1)=1.9*TDEL/HDEL                                                            CTN(3)=3.0*TDEL/(HD2*HD2)                                                       CTN(2)=CTN(3)*1.333333*HDEL-CTN(1)/HD2                                          IF(.NOT.ANF) GOTO 881                                                           ANF=.FALSE.                                                                     TX=TN(130.0,TNX,ATN,CTN)                                                        TNXN=TNX                                                                        ATNN=ATN                                                                        CTNN(1)=CTN(1)                                                                  CTNN(2)=CTN(2)                                                                  CTNN(3)=CTN(3)                                                                  Z1=XLSTA                                                                        GOTO 882                                                                  C                                                                               C     CALCULATION OF ELECTRON TEMPERATURE PARAMETER......................       C                                                                               881   HTA=120.0                                                                       H0T=200.0                                                                       H0N=400.0                                                                       IF(ABS(MLAT).GT.40.0) H0T=350.0                                                 H0=H0T                                                                          IF(NIGHT) H0=H0N                                                                HMAX=70.0*EXP((-1.4E-3)*MLAT*MLAT)+200.0                                        CALL TELAT(MLAT,1600.0,700.0,0.5,0.47,0.024,0.0,F1N,F2N)                        TX=TN(H0N,TNXN,ATNN,CTNN)                                                       TEN=TE(H0N,F1N,F2N,HMAX,0.0,H0N,0.0,0.0,0.0)                                    DTEN=(TEN-TX)/(H0N-HTA)                                                         CALL TELAT(MLAT,2325.0,725.0,1.0,3.4,-0.014,2.56E4,F1T,F2T)                     TX=TN(H0,TNXN,ATNN,CTNN)                                                        XXX=TE(H0,F1T,F2T,HMAX,2.0,H0T,0.0,0.0,0.0)                                     XXXX=TE(H0,F1N,F2N,0.0,0.0,H0N,TX,HTA,DTEN)                                     TE0=HPOL(HOUR,XXX,XXXX,SAX,SUX)                                                 TX=TN(H0,TNX,ATN,CTN)                                                           QUO=(TE0-TX)/(H0-HTA)                                                     C                                                                               C     CALCULATION OF ION TEMPERATURE PARAMETERS                                 C                                                                               887   XSM(1)=430.0                                                                    MM(2)=HPOL(HOUR,3.0,0.0,SAX,SUX)                                                Z1=EXP(-0.09*MLAT)                                                              YSM2=1240.0-1400.0*Z1/((1.0+Z1)*(1.0+Z1))                                       X2=ABS(MLAT)                                                                    X1=X2*(0.47+X2*0.024)*UMR                                                       X3=COS(X1)                                                                      X4=YSM2                                                                         TIN=1200.0-300.0*SIGN(1.0,X3)*SQRT(ABS(X3))                                     YSM2=TIN                                                                        IF(X4.GE.TIN) YSM2=HPOL(HOUR,X4,TIN,SAX,SUX)                                    TX=TN(XSM(1),TNXN,ATNN,CTNN)                                                    XXX=TE(XSM(1),F1T,F2T,HMAX,2.0,H0T,0.0,0.0,0.0)                                 XXXX=TE(XSM(1),F1N,F2N,0.0,0.0,H0N,TX,HTA,DTEN)                                 Z1=HPOL(HOUR,XXX,XXXX,SAX,SUX)                                                  Z2=TN(XSM(1),TNX,ATN,CTN)                                                       IF(YSM2.LE.Z2) YSM2=(Z1+Z2)/2.0                                                 CALL REGFA1(130.0,500.0,0.1,YSM2,TEDER,SCHALT,HS)                               IF(.NOT.SCHALT) GOTO 250                                                        HS=200.0                                                                  250   TNHS=TN(HS,TNX,ATN,CTN)                                                         MM(1)=DTNDH(HS,ATN,CTN)                                                         MM(3)=MM(2)                                                                     XSM(2)=XSM(1)                                                             C                                                                               C     SMOOTHING OF THE ION TEMPERATURE TO KEEP IT LESS THAN                     C     THE ELECTRON TEMPERATURE AT HSM                                           C                                                                                     HSM=1000.0                                                                      XXX=TE(HSM,F1T,F2T,HMAX,2.0,H0T,0.0,0.0,0.0)                                    XXXX=TE(HSM,F1N,F2N,HMAX,0.0,H0N,0.0,0.0,0.0)                                   TESM=HPOL(HOUR,XXX,XXXX,SAX,SUX)                                                IF(TESM.GE.TI(HSM)) GOTO 240                                                    XXX=DTEDH(HSM,F2T,HMAX,2.0,H0T,0.0,0.0)                                         XXXX=DTEDH(HSM,F2N,HMAX,0.0,H0N,0.0,0.0)                                        MM(3)=HPOL(HOUR,XXX,XXXX,SAX,SUX)                                               XSM(2)=(TESM-10.0-YSM2+MM(2)*XSM(1)-MM(3)*HSM)/(MM(2)-MM(3))              C                                                                               C     CALCULATION OF ION DENSITY PARAMETER...............................       C                                                                               240   IF(IOND.LT.1) GOTO 189                                                          Z1=0.0                                                                          IF(XHI.LE.90.0) Z1=COSXHI                                                       HFIXO=300.0                                                                     IF((IIF(2).EQ.2).AND.(IIF(3).EQ.2)) HFIXO=249.0                                 MO(1)=EPSTEP(PF1O(1),PF1O(2),PF1O(3),PF1O(4),Z1)                                MO(2)=EPSTEP(PF1O(5),PF1O(6),PF1O(7),PF1O(8),Z1)                                MO(3)=0.0                                                                       HO(1)=EPSTEP(PF1O(9),PF1O(10),PF1O(11),PF1O(12),Z1)                             HO(4)=PF2O(1)                                                                   MO(4)=PF2O(2)                                                                   MO(5)=PF2O(3)                                                                   DDO(1)=9                                                                        DDO(2)=5                                                                        DDO(3)=5                                                                        DDO(4)=50                                                                 7100  HO(2)=290.0                                                                     IF((IIF(2).EQ.2).AND.(IIF(3).EQ.2)) HO(2)=237.0                                 HO(3)=(4.60517-MO(5)*(HO(4)-PF2O(4)))/MO(4)+HO(4)                               IF(HO(2).LT.HO(3)) GOTO 7101                                                    MO(4)=MO(4)-0.001                                                               GOTO 7100                                                                 7101  Z2=5.0                                                                          X=HO(2)                                                                         Z1=0.0                                                                    7102  X=X+Z2                                                                          Y=RPID(X,HFIXO,98.0,4,MO,DDO,HO)                                                IF(Y.LE.Z1) GOTO 7103                                                           Z1=Y                                                                            GOTO 7102                                                                 7103  IF(Z2.LE.1.0) GOTO 7104                                                         X=X-Z2                                                                          Z2=1.0                                                                          GOTO 7102                                                                 7104  H0O=X-0.5                                                                       IF(XHI.GE.90.0) COSXHI=0.0                                                      DO 7105 I=2,4,2                                                                 L=I/2                                                                           HO2(L)=PF3O(1+I)+PF3O(2+I)*COSXHI                                         7105  MO2(L+1)=PF3O(7+I)+PF3O(8+I)*COSXHI                                             DO2(1)=5                                                                        DO2(2)=5                                                                        MO2(1)=PF3O(7)+PF3O(8)*COSXHI                                             7106  Y=RPID(H0O,PF3O(1),PF3O(2),2,MO2,DO2,HO2)                                       IF(Y.LE.0.1) GOTO 189                                                           MO2(3)=MO2(3)-0.02                                                              GOTO 7106                                                                 C                                                                               C     CALCULATION FOR THE REQUIRED HEIGHT RANGE.......................          C                                                                               189   HA=65.0                                                                         IF(NIGHT) HA=80.0                                                               IF(AH.LT.HA) AH=HA                                                              IF(EH.GT.1000.0) EH=1000.0                                                      KOMB=JF(4)+JF(5)+JF(6)                                                          IF(((EH-AH)/SH+1.0).LT.50.0) GOTO 230                                           EH=AH+49.0*SH                                                                   WRITE(AGNR,190) EH                                                        190   FORMAT(1H ,1X," TOO MANY HEIGHT STEPS,EH IS REDUCED                            1 TO ",F4.0)                                                               230   I=0                                                                             X=EH                                                                      300   I=I+1                                                                           IN=1                                                                            OUTF(I,IN)=X                                                                    IF((JF(1)+JF(2)).LE.0) GOTO 330                                                 NEI=XE(X)                                                                       IF(JF(1).LE.0) GOTO 340                                                         IN=IN+1                                                                         OUTF(I,IN)=NEI                                                            340   IF(JF(2).LE.0) GOTO 330                                                         IN=IN+1                                                                         OUTF(I,IN)=NEI/NMF2                                                       330   IF(KOMB.LE.0) GOTO 7108                                                         X1=TN(X,TNX,ATN,CTN)                                                            IF(X.GE.HTA) GOTO 7109                                                          Z2=-1.0                                                                         TEH=-1.0                                                                        GOTO 7110                                                                 7109  TX=TN(X,TNXN,ATNN,CTNN)                                                         Z1=TE(X,F1N,F2N,HMAX,0.0,H0N,TX,HTA,DTEN)                                       Z2=X1                                                                           IF(X.GE.HS) Z2=TI(X)                                                            IF(X.LT.H0) GOTO 7119                                                           XXX=TE(X,F1T,F2T,HMAX,2.0,H0T,0.0,0.0,0.0)                                      TEH=HPOL(HOUR,XXX,Z1,SAX,SUX)                                                   GOTO 7110                                                                 7119  TEH=TE(X,0.0,0.0,0.0,0.0,H0,X1,HTA,QUO)                                   7110  IF(JF(3).LE.0) GOTO 7112                                                        IN=IN+1                                                                         OUTF(I,IN)=X1                                                             7112  IF(JF(4).LE.0) GOTO 7113                                                        IN=IN+1                                                                         OUTF(I,IN)=TEH                                                            7113  IF(JF(5).LE.0) GOTO 7120                                                        IN=IN+1                                                                         OUTF(I,IN)=Z2                                                             7120  IF(JF(6).LE.0) GOTO 7108                                                        IN=IN+1                                                                         OUTF(I,IN)=SIGN(1.0,TEH)*TEH/Z2                                           7108  IF(IOND.LE.0) GOTO 7118                                                         Z1=RPID(X,HFIXO,98.0,4,MO,DDO,HO)                                               Z2=RPID(X,PF3O(1),PF3O(2),2,MO2,DO2,HO2)                                  C     FIRST COMPUTE NOBO2, RATIO OF NO+TOO2+                                    C     AT HEIGHT HB. THEN THE SAME RATIO AT X                                          Z1B= RPID (H0O,HFIXO,98.0,4,MO,DDO,HO)                                          Z2B= RPID (H0O,PF3O(1),PF3O(2),2,MO2,DO2,HO2)                                   NOBO2= (100.0-Z1B-Z2B)/Z2B                                                      IF(JF(7).LE.0) GOTO 7114                                                        IN=IN+1                                                                         OUTF(I,IN)=Z1                                                             7114  IF(JF(8).LE.0) GOTO 7116                                                        IN=IN+1                                                                         CALL RDHHE(X,H0O,Z1,Z2,NOBO2,10.0,OUTF(I,IN),OUTF(I,IN+1))                7116  IF(JF(9).LE.0) GOTO 7117                                                        IN=IN+2                                                                         OUTF(I,IN)=Z2                                                             7117  IF(JF(10).LE.0) GOTO 7118                                                       IN=IN+1                                                                         OUTF(I,IN)=RDNO(X,H0O,Z2,Z1,NOBO2)                                        7118  X=X-SH                                                                          IF(X.GE.AH) GOTO 300                                                            IEI=I                                                                     C                                                                               C     OUTPUT ON THE SPECIFIED DEVICE.................................           C                                                                                     IF(KOBE.NE.1) GOTO 7020                                                         WRITE(AGNR,7030) (JF(I),I=1,10),IEI,LATI,LONGI,R,MONTH,HOUR               7030  FORMAT(1X,10I1,2X,I3,2(2X,F6.1),2X,F5.1,2X,F4.1,2X,F5.2)                  7020  IF(KOBE.NE.0) GOTO 7041                                                         WRITE (AGNR,7051)                                                         7051  FORMAT (1X,"INPUT@")                                                            IF (JMAG.LT.1) GOTO 7053                                                        WRITE (AGNR,7052) MLAT,MLONG                                              7052  FORMAT (1X,"MLAT=",F6.1,2X,"MLONG=",F6.1)                                       GOTO 7055                                                                 7053  WRITE (AGNR,7054) LATI,LONGI                                              7054  FORMAT (1X,"LATI=",F6.1,2X,"LONGI=",F6.1)                                 7055  WRITE(AGNR,7050) R,MONTH,HOUR                                             7050  FORMAT(1X,"R=",F5.0,"  MONTH=",F4.1,"  HOUR=",F5.2)                             WRITE (AGNR,7061)                                                         7061  FORMAT (1X,"CALCULATED VALUES@")                                                IF (JMAG.LT.1) GOTO 7063                                                        WRITE (AGNR,7062) LATI,LONGI                                              7062  FORMAT (1X,"LATI=",F6.1,2X,"LONGI=",F6.1)                                       GOTO 7065                                                                 7063  WRITE (AGNR,7064)MLAT,MLONG                                               7064  FORMAT (1X,"MLAT=",F6.1,2X,"MLONG=",F6.1)                                 7065  WRITE(AGNR,7060) DIP,MODIP,MAGBR,XHI                                      7060  FORMAT(1X,"DIP=",F6.1,"  MODIP=",F6.1,"  MAGLA=",F6.1,"  XHI=",                XF6.1)                                                                           WRITE(AGNR,7066) SAX,SUX,SUNDEC                                           7066  FORMAT(1X,"SUNRISE",F4.1,"L.T.   SUNSET@",F4.1,"L.T.",5X,                      X"SUNDEC.=",F6.1)                                                                Z1=0.0                                                                          IF(F1REG) Z1=HMF1                                                               Z2=0.0                                                                          IF(F1REG) Z2=NMF1                                                               WRITE(AGNR,7070) NMF2,Z2,NME,NMD                                          7070  FORMAT(1X,"NMF2=",E7.2,"  NMF1=",E7.2,"  NME=",E7.2,"  NMD=",E7.2)              WRITE(AGNR,7080) HMF2,Z1,HME,HMD                                          7080  FORMAT(1X,"HMF2=",F5.1,"  HMF1=",F5.1,"  HME=",F5.1,"  HMD=",F5.1)              WRITE(AGNR,7998)                                                          7998  FORMAT(1H0,3X,1HH,9X,2HNE,7X,6HN/NMAX,5X,2HTN,7X,2HTE,7X,2HTI,                 16X,5HTE/TI,5X,4HRDO+,4X,4HRDH+,3X,5HRDHE+,3X,5HRDO2+,3X,5HRDNO+)          7041  DO 7040 I=1,IEI                                                           7040  WRITE(AGNR,7999) (OUTF(I,L),L=1,IN)                                       7999  FORMAT(1X,F6.1,3X,E10.4,3X,F6.4,3X,3(F6.1,3X),F7.4,5(3X,F5.1))                  IF(KOBE.EQ.1) WRITE(AGNR,35)                                              35    FORMAT(1X,"111111")                                                       C                                                                               C-WDC-A  ADD A "GO TO 2000" IF YOU WISH TO READ THE DATA FOR MORE THAN          C-WDC-A  ONE HOUR TO A RUN.                                                     C                                                                               999   STOP                                                                            END                                                                       C     D.BILITZA,IPW FREIBURG,15.1.77 *******************************************C     "COMMENT" D. BILITZA,H.THIEMANN,K.RAWER IPW FREIBURG,                     C     AUG.79 **********************                                             C     IRI-PROCEDURES ***************************************                    C      FREF.@ K. RAWER, S. RAMAKRISHNAN, D. BILITZA,                            C     \INTERNATIONAL REFERENCE IONOSPHERE 1978, U.R.S.I. BRUSSELS''             C     FOR CALCULATING ELECTRON DENSITY AND TEMPERATURE AND ION TEMPERATURE      C     AND RELATIVE  DENSITY IN THE HEIGHT RANGE 70 - 1000 KM.?                  C     IRI-PROCEDURES                                                            C     \REF.@ K. RAWER, S. RAMAKRISHNAN, D. BILITZA'                             C     TO CALCULATR ELECTRON DENSITY AND TEMPERATURE AND ION TEMPERATURE         C     AND RELATIVE DENSITY IN THE HEIGHT RANGE 70 - 1000 KM.                    C     I. ELECTRON DENSITY ------------------------------------------------------      FUNCTION EP1ST(X,BET)                                                           EP1ST=1.0/(1.0+EXP(-X/BET))                                                     RETURN                                                                          END                                                                             FUNCTION DEP1ST(X,BET)                                                          U=EXP(-X/BET)                                                                   DEP1ST=U/(BET*(1.0+U)*(1.0+U))                                                  RETURN                                                                          END                                                                             FUNCTION XE1(H)                                                           C     REPRESENTS THE ELECTRON DENSITY FOR HEIGHTS NOT GREATER 1000 KM           C     AND NOT LESS HMF2,BY USING A HARMONIZED BENT-MODEL.                       C     GLOBAL PARAMETERS@  ETA,ZETA,BETA,DELTA,NMF2,HMF2                         C     "COMMENT"  K.RAWER, S. RAMAKRISHNAN 1978. REPRESENTING ELECTRON DENSITY   C     PROFILE                                                                   C     FOR HEIGHTS  NOT GREATER 1000 KM AND NOT LESS HMF2                        C     BY  HARMONIZED BENT-MODEL ADMITTING VARIABILITY OF                        C     GLOBAL PARAMETERS@  ETA, ZETA, BETA, DELTA WITH GEOMAGNETIC LATITUDE      C     MLAT, SOLAR FLUXFLU AND CRITICAL FREQUENCY FOF2.                          C     ALO GLOBAL ARE PEAK-PARAMETERS NMF2,HMF2?                                       REAL NMF2                                                                       COMMON/BLOCK1/HMF2,NMF2,HMF1/BLO10/BETA,ETA,DELTA,ZETA                          X=(H-HMF2)/(1000.0-HMF2)*700.0+300.0-DELTA                                      Y=(1000.0-HMF2)/700.0*(BETA*ETA*ALOG((1.0+EXP((X-394.50)/BETA))/               1(1.0+EXP((-94.5-DELTA)/BETA)))+ZETA*(100.0*ALOG((1.0+EXP                       2((X-300.0)/100.0))/(1.0+EXP(-DELTA/100.0)))-X+300.0-DELTA))                     XE1=NMF2*EXP(-Y)                                                                RETURN                                                                          END                                                                             REAL FUNCTION XE2(H)                                                      C     ELECTRON DENSITY FOR HEIGHTS LESS HMF2 AND NOT LESS HMF1                        REAL NMF2                                                                       COMMON/BLOCK1/HMF2,NMF2,HMF1/BLOCK2/B0,B1,C1,HZ,T,G(144),HST,STR                X=(HMF2-H)/B0                                                                   IF(ABS(X).LT.1.0E-10) GOTO 100                                                  XE2=NMF2*EXP(-X**B1)/COSH(X)                                                    GOTO 200                                                                  100   XE2=NMF2                                                                  200   RETURN                                                                          END                                                                             REAL FUNCTION XE3(H)                                                      C     ELECTRON DENSITY FOR HEIGHTS LESS HMF1 AND NOT LESS HZ                          REAL NMF2                                                                       COMMON/BLOCK1/HMF2,NMF2,HMF1/BLOCK2/B0,B1,C1,HZ,T,G(144),HST,STR                XE3=XE2(H)+NMF2*C1*SQRT(ABS(HMF1-H)/B0)                                         RETURN                                                                          END                                                                             REAL FUNCTION XE4(H)                                                      C     ELECTRON DENSITY FOR HEIGHTS LESS HZ AND NOT LESS HEF                           COMMON/BLOCK2/B0,B1,C1,HZ,T,G(144),HST,STR/BLOCK3/                             1HDX,HME,NME,HMD,NMD,HEF,D1,K,FP30,FP3U,FP1,FP2                                  A=((STR/HST-1)*(H-HZ))/(HEF-HZ)+1                                               XE4=XE3 (A*(HZ+T/2.0-SIGN(1.0,T)*SQRT(T*(HZ-H+T/4.0))))                         RETURN                                                                          END                                                                             REAL FUNCTION XE5(H)                                                      C     ELECTRON DENSITY FOR HEIGHTS LESS HEF AND NOT LESS HME(VALLEY-REGION)           REAL NME,NMD,K                                                                  LOGICAL NIGHT                                                                   COMMON/BLOCK3/HDX,HME,NME,HMD,NMD,HEF,D1,K,FP30,FP3U,FP1,                      1FP2/BLOCK6/NIGHT,E(4)                                                           T3=H-HME                                                                        T1=T3*T3*(E(1)+T3*(E(2)+T3*(E(3)+T3*E(4))))                                     IF(NIGHT) GOTO 100                                                              XE5=NME*(T1+1.0)                                                                GOTO 200                                                                  100   XE5=NME*EXP(T1)                                                           200   RETURN                                                                          END                                                                             REAL FUNCTION XE6(H)                                                      C     ELECTRON DENSITY FOR HEIGHTS LESS HME AND NOT LESS HA                           REAL NME,NMD,K                                                                  COMMON/BLOCK3/HDX,HME,NME,HMD,NMD,HEF,D1,K,FP30,FP3U,FP1,FP2                    IF(H.GT.HDX) GOTO 100                                                           Z=H-HMD                                                                         FP3=FP3U                                                                        IF(Z.GT.0.0) FP3=FP30                                                           XE6=NMD*EXP(Z*(FP1+Z*(FP2+Z*FP3)))                                              GOTO 200                                                                  100   Z=HME-H                                                                         XE6=NME*EXP(-D1*Z**K)                                                     200   RETURN                                                                          END                                                                             REAL FUNCTION XE(H)                                                       C     ELECTRON DENSITY BEETWEEN HA(KM) AND 1000 KM.FUNCTIONS NE1...6 ARE USED.  C     "COMMENT" ELECTRON DENSITY BEETWEEN HA(KM) AND 1000 KM                    C     SUMMARIZING PROCEDURES  NE1....6?                                               REAL NMF2,NME,NMD,K                                                             COMMON/BLOCK1/HMF2,NMF2,HMF1/BLOCK2/B0,B1,C1,                                  1HZ,T,G(144),HST,STR/BLOCK3/HDX,H                                               1ME,NME,HMD,NMD,HEF,D1,K,FP30,FP3U,FP1,FP2                                       IF(H.LT.HMF2) GOTO 100                                                          XE=XE1(H)                                                                       GOTO 200                                                                  100   IF(H.LT.HMF1) GOTO 300                                                          XE=XE2(H)                                                                       GOTO 200                                                                  300   IF(H.LT.HZ) GOTO 400                                                            XE=XE3(H)                                                                       GOTO 200                                                                  400   IF(H.LT.HEF) GOTO 500                                                           XE=XE4(H)                                                                       GOTO 200                                                                  500   IF(H.LT.HME) GOTO 600                                                           XE=XE5(H)                                                                       GOTO 200                                                                  600   XE=XE6(H)                                                                 200   RETURN                                                                          END                                                                       C     II. ELECTRON TEMPERATURE -------------------------------------------------      FUNCTION DTEDH(H,F2,HMAX,D,H0,DTNDH,A)                                    C     D.BILITZA,1.7.78,CALCULATES THE HEIGHT DERIVATE OF THE                    C     ELECTRON TEMPERATURE MODEL PROCEDURE TE                                   C     "COMMENT" D.BILITZA 1978, CALCULATES THE HEIGHT DERIVAT IVE               C     ELECTRON TEMPERATURE PROFILE AFTER PROCEDURE TE?                                IF(H.LT.H0) GOTO 100                                                            Y=EXP(-0.03*(H-HMAX))                                                           F=1.0+Y                                                                         DTEDH=D-F2*0.03*Y*(1.0-Y)/(F*F*F)                                               RETURN                                                                    100   DTEDH=DTNDH+A                                                                   RETURN                                                                          END                                                                             SUBROUTINE TELAT(PHI,A,B,XN,P1,P2,C,F1,F2)                                C     D.BILITZA,1.7.78,CALCULATES THE TEMPERATURE MODEL PARTS F1 AND F2         C     DEPENDING ON GEOMAGNETIC LATITUDE PHI                                     C     "COMMENT" D. BILITZA 1978, CALCULATES THE PARAMETERS F1 AND F2            C     NEEDED IN THE ELECTRON TEMPERATURE MODEL PROCEDURE TE,                    C     BOTH DEPENDING ON GEOMAGNETIC LATITUDE (MLAT,INTERNAL,PHI)?                     XPHI=ABS(PHI)                                                                   F=(P1+P2*XPHI)*XPHI                                                             F=F*0.01745329                                                                  Y=COS(F)                                                                        F1=A-B*SIGN(1.0,Y)*ABS(Y)**XN                                                   Y=EXP(-0.1*XPHI)                                                                F=1.0+Y                                                                         F2=C*Y/(F*F)                                                                    RETURN                                                                          END                                                                             FUNCTION TE(H,F1,F2,HMAX,D,HH0,TNH,HTA,A)                                 C     D.BILITZA,1.7.78,MODEL FOR THE ELECTRON TEMPERATURE IN THE HEIGHT RANGE   C     120-1000 KM.F1,F2 ARE THE LATITUDE DEPENDENT PARAMETERS CALCULATED BY     C     TELAT.HMAX IS THE HEIGHT OF THE RELATIVE MAXIMUM,D THE TEMPERATURE        C     HEIGHT GRADIENT,HH0 THE INTERSECTION HEIGHT FOR THE EXTRAPOLATION TO THE  C     CIRA 72 VALUES TNA AT HTA AND A,TNA ARE THE COEFFICIENTS FOR THE          C     EXTRAPOLATION FUNCTION                                                    C     "COMMENT" D. BILITZA 1978. ELECTRON TEMPERATURE PROFILE                   C     IN THE  HEIGHT RANGE 120-1000 KM. SIMPLIFIED MODEL EQUATIONS              C     FITTED WITH PLUGGE AND SPENNERS AEROS MODEL POTENTIAL OF 197              C     \SPACE RES.  ,197'. F1, F2 ARE LATITUDE DEPENDENT                         C     PARAMETERS GIVEN BY TELAT. HMAX IS THE HEIGHT OF A                        C     MAXIMUM, D THE TEMPERATURE HEIGHT GRADIENT, H0 THE INTERSECTION HEIGHT    C     BELOW WHICH THE PROFILE IS BUILT TO APPROACH THE CIRA 72                  C     TEMPERATURE TNA AT HTA . A TNH ARE COEFFICIENTS OF THE FITTING FUNCTION?        IF(H.LT.HH0) GOTO 10                                                            Y=EXP(-0.03*(H-HMAX))                                                           F=1.0+Y                                                                         TE=F1+F2*Y/(F*F)+D*(H-700.0)                                                    RETURN                                                                    10    TE=TNH+A*(H-HTA)                                                                RETURN                                                                          END                                                                       C     III.  ION TEMPERATURE ----------------------------------------------------      FUNCTION TUNCAL(COV,XLATI,SD,SLSTA)                                       C     CALCULATES THE EXOSPHERIC TEMPERATURE FOR COVINGTON-INDEX                 C     COV,LATITUDE XLATI,SOLARDEKLINATION SD AND LOCAL SOLAR TIME               C     ANGLE SLSTA USING CIRA72-MODEL                                                  UMR=0.01745329                                                                  TC=379.0+3.24*COV                                                               ETA=ABS(XLATI-SD)/2.0                                                           THETA=ABS(XLATI+SD)/2.0                                                         H1=COS(ETA*UMR)**2.2                                                            H2=SIN(THETA*UMR)**2.2                                                          TD=1.0+0.3*H1                                                                   TN=1.0+0.3*H2                                                                   A=(TD-TN)/TN                                                                    TAU=SLSTA-37.0+6.0*SIN((SLSTA+43.0)*UMR)                                        X=COS(TAU/2.0*UMR)                                                              TUNCAL=TC*TN*(1.0+A*SIGN(1.0,X)*ABS(X)**3.0)                                    RETURN                                                                          END                                                                             REAL FUNCTION TN(X,TTNX,ATN,CCTN)                                         C     NEUTRAL TEMPERATURE                                                       C     "COMMENT" D. BILITZA, 1978, NEUTRAL TEMPERATURE PROFILE                   C     APPROXIMATING ROUGHLY CIRA72-MODEL?                                             DIMENSION CCTN(3)                                                               Z=X-125.0                                                                       IF(Z.LE.0.0) GOTO 100                                                           Y=Z**2.5                                                                        Y=(1.0+(4.5E-6)*Y)*Z                                                            YY=CCTN(1)/ATN                                                                  Y=YY*Y                                                                          Y=ATAN(Y)*ATN                                                                   TN=TTNX+Y                                                                       GOTO 200                                                                  100   TN=TTNX+Z*(CCTN(1)+Z*Z*(CCTN(2)+Z*CCTN(3)))                               200   RETURN                                                                          END                                                                             FUNCTION DTNDH(H,ATN,CCTN)                                                C     DERIVATIVE OF NEUTRAL TEMPERATURE                                         C     "COMMENT" D.BILITZA, 1978. APPROXIMATE HEIGHT DERIVATIVE OF NEUTRAL       C     CIRA-72 MODEL TEMPERATURE PROFILE?                                              DIMENSION CCTN(3)                                                               Z=H-125.0                                                                       IF(Z.GT.0.0) GOTO 100                                                           DTNDH=CCTN(1)+Z*Z*(3.0*CCTN(2)+Z*4.0*CCTN(3))                                   RETURN                                                                    100   H1=CCTN(1)/ATN                                                                  H2=Z**2.5                                                                       H3=H1*Z*(1.0+(4.5E-6)*H2)                                                       DTNDH=ATN/(1.0+H3*H3)*H1*(1.0+(15.75E-6)*H2)                                    RETURN                                                                          END                                                                             REAL FUNCTION TI(H)                                                       C     ION TEMPERATURE FOR HEIGHTS NOT GREATER 1000 KM AND NOT LESS HS                 REAL MM,G(2)                                                                    COMMON/BLOCK8/HS,TNHS,XSM(2),MM(3)                                              G(1)=20.0                                                                       G(2)=50.0                                                                       SUM=MM(1)*(H-HS)+TNHS                                                           DO 100 I=1,2                                                                    A=H-XSM(I)                                                                      IF((H-XSM(I)).LT.(100.0*G(I))) A=G(I)*ALOG(1.0+EXP((H-XSM(I))                  1/G(I)))                                                                         B=HS-XSM(I)                                                                     IF((HS-XSM(I)).LT.(100.0*G(I))) B=G(I)*ALOG(1.0+EXP((HS-XSM(I))                1/G(I)))                                                                   100   SUM=SUM+(MM(I+1)-MM(I))*(A-B)                                                   TI=SUM                                                                          RETURN                                                                          END                                                                             REAL FUNCTION TEDER(H)                                                    C     THIS FUNCTION TOGETHER WITH THE SUBROUTINE REGFA1 IS USED TO FIND THE     C     HEIGHT WHERE DIFFERENCE BETWEEN TN AND TI BEGINS                          C     "COMMENT" THIS FUNCTION ALONG WITH PROCEDURE REGFA1                       C     ALLOWS TO FIND THE  HEIGHT ABOVE WHICH TN BEGINS TO BE DIFERENT FROM TI?        REAL MM                                                                         COMMON/BLOCK5/ZX,TNX,ATN,CTN(3)/BLOCK8/HS,TNHS,XSM(2),MM(3)                     TNH=TN(H,TNX,ATN,CTN)                                                           DTDX=DTNDH(H,ATN,CTN)                                                           TEDER=DTDX*(XSM(1)-H)+TNH                                                       RETURN                                                                          END                                                                       C     IV.  ION RELATIVE PRECENTAGE DENSITY                                                                                                                            REAL FUNCTION RPID (H, H0, N0, M, ST, ID, XS)                             C     THIS ANALYTIC FUNCTION IS USED TO REPRESENT THE RELATIVE                  C     PRECENTAGE DENSITY OF ATOMAR AND MOLECULAR OXYGEN IONS                    C     "COMMENT" H. THIEMANN, 1979. ANALYTIC FUNCTION DESCRIBING RELATIVE        C       PERCENTAGE DENSITY OF ATOMIC AND MOLECULAR OXYGEN IONS.                 C     COEFFICIENTS CHOSEN SO AS TO APPROACH BELOW 200 KM                        C     DANILOV-SEMENOV"S DATA AND DUMBS-SPENNER"S ABOVE?                               REAL N0                                                                         DIMENSION ID(4), ST(5), XS(4)                                                   SUM=(H-H0)*ST(1)                                                                DO 100  I=1,M                                                                   A=H-XS(I)                                                                       IF (A.LT.FLOAT(100*ID(I))) A=FLOAT(ID(I))*ALOG(1.0+EXP((H-XS(I))/              1FLOAT(ID(I))))                                                                  B=H0-XS(I)                                                                      IF (B.LT.FLOAT(100*ID(I))) B=FLOAT(ID(I))*ALOG(1.0+EXP((H0-XS(I))/             1FLOAT(ID(I))))                                                            100   SUM=SUM+(ST(I+1)-ST(I))*(A-B)                                                   SUM=N0*EXP(SUM)                                                                 IF (SUM.LT.1.0E-10) SUM=0.0                                                     RPID=SUM                                                                        RETURN                                                                          END                                                                             SUBROUTINE RDHHE (H,HB,RDOH,RDO2H,RNO,PEHE,RDH,RDHE)                      C     RAWER, OCT.79,H+ AND HE+ RELATIVE PERECENTAGE                             C     DENSITY FOR HEIGHTS NOT GREATER THAN 1000 KM.                             C     RNO IS THE RATIO OF NO+TO O2+DENSITY AT H=HB.                                   IF (H-HB)100,100,200                                                      100   RDH=0.0                                                                         GOTO 300                                                                  200   RDH=(100.0-RDOH-(1.0+RNO)*RDO2H)*(1.0-PEHE/100.0)                         300   RDHE=RDH*PEHE/(100.0-PEHE)                                                      RETURN                                                                          END                                                                             REAL FUNCTION RDNO(H,HB,RDO2H,RDOH,RNO)                                   C     D.BILTIZA, 1978. NO+RELATIVE PERCENTAGE                                   C     DENSITY FOR HEIGHTS NOT LESS THAN 100 KM.                                       IF (H-HB) 100,100,200                                                     100   Y=100.0-RDO2H-RDOH                                                              GOTO 300                                                                  200   Y=RNO*RDO2H                                                               300   IF(Y.LT.0.0005) Y=0.0                                                           RDNO=Y                                                                          RETURN                                                                          END                                                                       C     END IRI-FUNCTIONS******************************************************         REAL FUNCTION XMDED (XHI,R,XW)                                            C     BILITZA, 24.3.78, CALCULATES THE ELECTRON DENSITY OF                      C     THE D REGION RELATIVE MAXIMUM. XHI IS THE SUN ZENITH ANGLE,               C     R THE ZUERICH SUNSPOT NUMBER AND XW THE DESIRED NIGHT VALUE               C     "COMMENT" D. BILITZA, 1978, CALCULATES ELECTRON DENSITY OF                C     D RELATIVE MAXIMUM. XHI IS SOLAR ZENITH ANGLE, R  ZURICH                  C     SUNSPOT NUMBER AND NW THE ESTIMATED NIGHT VALUE.                          C     \SOURCE@MECHTLY-BILITZA,1974'.?                                                 Y=6.05+0.088*R                                                                  YW=XW/1.0E8                                                                     Z=(-0.1/(ALOG(YW/Y)))**0.3704                                                   SUXHI=ACOS(Z)                                                                   IF (SUXHI.LT.1.0472) SUXHI=1.0472                                               XXHI=XHI/57.2957795                                                             IF (XXHI.GT.SUXHI) GOTO 100                                                     X=COS(XXHI)                                                                     XMDED=Y*1.0E8*EXP(-0.1/X**2.7)                                                  RETURN                                                                    100   XMDED=YW*1.0E8                                                                  RETURN                                                                          END                                                                             REAL FUNCTION FOEEDI(R,XHI,XHIM,SLATI,ST,SU,SA)                           C     BILITZA,17.5.1977,CALCULATES FOE BY THE ENDINBURGH-METHODE.               C     INPUT@ COVINGTON-INDEX (COV),SUN-ZENITH-ANGLE ACTUAL (XHI) AND FOR        C     MIDDAY (XHIM),LATITUDE (SLATI),SUNSET,AND SUNRISE (SU,SA,HOUR)            C     "COMMENT" D.BILITZA, 1977, CALCULATES FOE BY THE EDINBURGH-METHOD.        C     INPUT@ZUERICH SUNSPOT NUMBER(R),SOLAR ZENITH+ANGLE@ ACTUAL AT HOUR T @XHI C     AT NOON@ XHIM , LATITUDE (LATI),SUNSET AND SUNRISE                        C     (SU, SA/HOUR). \REF.@ KOURIS-MUGGELETON, CCIR DOC. 6/3/07 SEPT.73'?             XLATI=ABS(SLATI)                                                                COV=63.75+R*(0.728+0.00089*R)                                                   A=1.0+0.0094*(COV-66.0)                                                         SL=COS(XLATI*0.0174533)                                                         IF(XLATI.LT.32.0) GOTO 100                                                      SM=0.11-0.49*SL                                                                 C=92.0+35.0*SL                                                                  GOTO 400                                                                  100   SM=-1.93+1.92*SL                                                                C=23.0+116.0*SL                                                           400   IF(XHIM.GT.89.0) XHIM=89.0                                                      B=COS(XHIM*0.0174533)**SM                                                       SP=1.31                                                                         IF(XLATI.GT.12.0) SP=1.2                                                        DX=0.0                                                                          IF(XHI.GT.73.0.AND.XHI.LE.90.0) DX=(6.27E-13)*(XHI-50.0)**8.0                   IF(ST.GT.SU) GOTO 300                                                           IF(ST.GT.SA) GOTO 600                                                           D=0.077**SP*EXP(-1.68*(SA-ST))                                                  GOTO 200                                                                  600   D=COS((XHI-DX)*0.0174533)**SP                                                   GOTO 200                                                                  300   D=0.077**SP*EXP(-1.01*(ST-SU))                                            200   FOE=A*B*C*D                                                                     SP=1.0+0.0098*R                                                                 SMIN=0.017*SP*SP                                                                IF(FOE.LT.SMIN) FOE=SMIN                                                        FOEEDI=(FOE)**0.25                                                              RETURN                                                                          END                                                                             REAL FUNCTION FOF1ED(YLATI,R,COSXHI)                                      C     D. BILITZA,CALCULATES FOF1 FOR THE LATITUDE LATI THE ZUERICH              C     SUNSPOT NUMBER R AND THE COSINUS OF THE SUN ZENITH ANGLE                  C     COSXHI.                                                                   C     \REF. E. D. DURCHARME E. A.,RADIO SCIENCE,8,10,837-839'                   C     "COMMENT" R. EYFRIG, 1979. CALCULATES FOF1 FOR DIP- LATITUDE LATI ,       C     ZURICH SUNSPOT NUMBER R AND  COSINUS OF SOLAR ZENITH                      C     ANGLE COSXHI. \REF. E.D.DUCHARME E. A. , RADIO SCIENCE,                   C     8, 10, 837-839, HOWEVER WITH MAGNETIC INSTEAD OF GEOMAGNETIC LATITUDE?          XLATI=ABS(YLATI)                                                                F0=4.35+XLATI*(0.0058-(1.2E-4)*XLATI)                                           F100=5.348+XLATI*(0.011-(2.3E-4)*XLATI)                                         FS=F0+(F100-F0)*R/100.0                                                         XMUE=0.093+XLATI*(0.0046-(5.4E-5)*XLATI)+(3.0E-4)*R                             FOF1ED=FS*COSXHI**XMUE                                                          RETURN                                                                          END                                                                             REAL FUNCTION HMF2ED(XMAGBR,R,X,XM3)                                      C     D. BILITZA,CALCULATES HMF2 FOR THE MAGNETIC LATITUDE XMAGBR               C     AND THE ZUERICH SUNSPOT NUMBER R BY USING XM3 AND THE RATIO               C     FOF2/FOE.                                                                 C     \REF. D. BILITZA ET. AL. TO BE PUBLISHED IN@ TELECOMM.J.'                       F1=(2.32E-3)*R+0.222                                                            F2=1.2-(1.16E-2)*EXP((2.39E-2)*R)                                               F3=0.096*(R-25.0)/150.0                                                         DELM=F1*(1.0-R/150.0*EXP(-XMAGBR*XMAGBR/1600.0))/(X-F2)+F3                      HMF2ED=1490.0/(XM3+DELM)-176.0                                                  RETURN                                                                          END                                                                             SUBROUTINE REGFA1(X11,X22,EPS,FW,F,SCHALT,X)                              C     REGULA-FALSI-PROCEDURE TO FIND X WITH F(X)-FW=0.X1,X2 ARE THE STARTING    C     VALUES.IF THE X-INTERVALL IS LESS EPS,THE PROCEDURE ENDS.                 C     IF SIGN(1.0,F(X1)-FW)=SIGN(1.0,F(X2)-FW) SCHALT=TRUE.                     C     "COMMENT" REGULA-FALSI-PROCEDURE TO FIND X WITH F(X)-FW=0.                C     X1, X2 ARE THE STARTING VALUES. THE COMOUTATION ENDS WHEN THE X-INTERVAL  C     HAS BECOME LESS THAN EPS . IF SIGN(F(X1)-FW)= SIGN(F(X2)-FW)              C     THE PROCEDURE JUMPS TO LABEL IRRTUM?                                            LOGICAL L1,LINKS,K,SCHALT                                                       SCHALT=.FALSE.                                                                  X1=X11                                                                          X2=X22                                                                          F1=F(X1)-FW                                                                     F2=F(X2)-FW                                                                     IF(ABS(SIGN(1.0,F1)-SIGN(1.0,F2))-10E-10) 100,110,110                     110    K=.FALSE.                                                                      NG=2                                                                      200   X=(X1*F2-X2*F1)/(F2-F1)                                                         GOTO 400                                                                  300   L1=LINKS                                                                        IF(LINKS) GOTO 500                                                              X=X1+FLOAT(NG-1)*(X2-X1)/FLOAT(NG)                                              GOTO 400                                                                  500   X=X1+(X2-X1)/FLOAT(NG)                                                    400   FX=F(X)-FW                                                                      LINKS=SIGN(1.0,F1)*SIGN(1.0,FX).GT.0                                            K=.NOT.K                                                                        IF(LINKS) GOTO 600                                                              X2=X                                                                            F2=FX                                                                           GOTO 700                                                                  600   X1=X                                                                            F1=FX                                                                     700   IF(ABS(X2-X1).LE.EPS) GOTO 800                                                  IF(K) GOTO 300                                                                  IF((LINKS.AND.(.NOT.L1)).OR.(.NOT.LINKS.AND.L1)) NG=2*NG                        GOTO 200                                                                  100   X=0.0                                                                           SCHALT=.TRUE.                                                             800   RETURN                                                                          END                                                                             SUBROUTINE TAL(SHMAX,STMAX,SHABR,SDELTA,SHBR,STE0,SDTDH0,AUS6,SPT)        C     D. BILITZA,15.1.77,CALCULATION OF THE COEF. SPT(4) FOR A POLYNOM OF       C     5TH DEGREE (K1=1,K2=SPT(1),...,K5=SPT(4),WHICH FITS TO THE                C     VALLEY WITH THE PARAMETERS@ SHABR=HMIN-SHMAX,SDELTA IS THE                C     PERCENTAGE DEPTH,SHBR THE WIDTH,STE0 THE UPPER FIXPOINT                   C     NORMALISED TO STMAX AND SDTDH0 IS THE LOGARITHMIC DEVIATION AT            C     THIS FIXPOINT.IF THERE IS A MINIMUM OR A SECOND MAXIMUM IN THE            C     VALLEY REGION AUS6=.TRUE.                                                       DIMENSION SPT(4)                                                                LOGICAL AUS6                                                                    X=SHABR                                                                         Y=SHBR                                                                          IF(SDELTA.LE.60.0) GOTO 100                                                     Z1=ALOG(1.0-SDELTA/100.0)/(X*X)                                                 Z2=ALOG(STE0)/(Y*Y)                                                             Z3=SDTDH0/(2.0*Y)                                                               GOTO 200                                                                  100   Z1=-SDELTA/(X*X*100.0)                                                          Z2=(STE0-1.0)/(Y*Y)                                                             Z3=SDTDH0*STE0/(2.0*Y)                                                    200   Z4=X-Y                                                                          SPT(4)=2.0*(Z1*(Y-2.0*X)*Y-Z2*(X-2.0*Y)*X+Z3*Z4*X)/(X*Y*Z4*Z4*Z4)               SPT(3)=(Z1*(2.0*Y-3.0*X)+Z2*X)/(X*Z4*Z4)-(2.0*X+Y)*SPT(4)                       SPT(2)=-2.0*Z1/X-2.0*X*SPT(3)-3.0*X*X*SPT(4)                                    SPT(1)=Z1-X*(SPT(2)+X*(SPT(3)+X*SPT(4)))                                        AUS6=.FALSE.                                                                    Z1=(4.0*SPT(3)+5.0*SPT(4)*X)/(10.0*SPT(4))                                      Z2=Z1*Z1+2.0*SPT(1)/(5.0*SPT(4)*X)                                              IF(Z2.LT.0.0) GOTO 300                                                          Z3=SQRT(Z2)                                                                     Z2=-1.0*Z1+Z3                                                                   IF(Z2.GT.0.0.AND.Z2.LT.Y) AUS6=.TRUE.                                           Z2=-1.0*Z1-Z3                                                                   IF(Z2.GT.0.0.AND.Z2.LT.Y) AUS6=.TRUE.                                     300   RETURN                                                                          END                                                                             REAL FUNCTION XHIS(XMONTH,XHOUR,XLATI)                                    C     CALCULATES THE SOLAR-ZENITH-ANGLE                                               DAYNR=XMONTH*30.0-15.0                                                          SUNDEC=-0.40915*COS(1.7202E-2*(DAYNR+8.0))                                      UMR=1.7453E-2                                                                   COSXHI=SIN(XLATI*UMR)*SIN(SUNDEC) +COS(XLATI*UMR)*COS(SUNDEC)*                 1COS(2.6180E-1*(XHOUR-12.0))                                                     XHIS=ACOS(COSXHI)/UMR                                                           RETURN                                                                          END                                                                             SUBROUTINE GGM(ART,XLG,BG,XLM,BM)                                         C     CALCULATES GEOMAGNETIC COORDINATES (XLM,BM) FROM GEOGRAFIC COORDINATES    C     (XLG,BG) FOR ART=0 AND REVERSE FOR ART=1                                        INTEGER ART                                                                     ZPI=6.2831853                                                                   FAKTOR=0.0174533                                                                CBG=11.4*FAKTOR                                                                 CI=COS(CBG)                                                                     SI=SIN(CBG)                                                                     IF(ART.EQ.0) GOTO 10                                                            CBM=COS(BM*FAKTOR)                                                              SBM=SIN(BM*FAKTOR)                                                              CLM=COS(XLM*FAKTOR)                                                             SLM=SIN(XLM*FAKTOR)                                                             SBG=SBM*CI-CBM*CLM*SI                                                           BG=ASIN(SBG)                                                                    CBG=COS(BG)                                                                     SLG=(CBM*SLM)/CBG                                                               CLG=(SBM*SI+CBM*CLM*CI)/CBG                                                     XLG=ACOS(CLG)                                                                   IF(SLG.LT.0.0) XLG=ZPI-ACOS(CLG)                                                BG=BG/FAKTOR                                                                    XLG=XLG/FAKTOR                                                                  XLG=XLG-69.8                                                                    IF(XLG.LT.0.0) XLG=XLG+360.0                                                    GOTO 20                                                                   10    YLG=XLG+69.8                                                                    CBG=COS(BG*FAKTOR)                                                              SBG=SIN(BG*FAKTOR)                                                              CLG=COS(YLG*FAKTOR)                                                             SLG=SIN(YLG*FAKTOR)                                                             SBM=SBG*CI+CBG*CLG*SI                                                           BM=ASIN(SBM)                                                                    CBM=COS(BM)                                                                     SLM=(CBG*SLG)/CBM                                                               CLM=(-SBG*SI+CBG*CLG*CI)/CBM                                                    XLM=ACOS(CLM)                                                                   IF(SLM.LT.0.0) XLM=ZPI-ACOS(CLM)                                                BM=BM/FAKTOR                                                                    XLM=XLM/FAKTOR                                                            20    RETURN                                                                          END                                                                             REAL FUNCTION SSRSU(HO)                                                         REAL LATI,MONTH                                                                 COMMON/BLO11/MONTH,LATI                                                         SSRSU=XHIS(MONTH,HO,LATI)                                                       RETURN                                                                          END                                                                             SUBROUTINE KOEFFB(FIELD)                                                  C     TRANSFORMATION COEFFICIENTS G(1@144) VALID FOR 1973 FOR CALCULATING       C     THE MAGNETIC FIELD ACCORDING TO POGO 68/10                                      DIMENSION FIELD (144)                                                           REAL FELD (144)                                                                 DATA (FELD(KK),KK=1,80)/0.0, 0.1506723,0.0101742, -0.0286519, 0.009            12606, -0.0130846, 0.0089594, -0.0136808,-0.0001508, -0.0093977,                2 0.0130650, 0.0020520, -0.0121956, -0.0023451, -0.0208555,                     3 0.0068416,-0.0142659, -0.0093322, -0.0021364, -0.0078910,                     4 0.0045586,  0.0128904, -0.0002951, -0.0237245,0.0289493,                      5 0.0074605, -0.0105741, -0.0005116, -0.0105732, -0.0058542,                    60.0033268, 0.0078164,0.0211234, 0.0099309, 0.0362792, -0.0201070,              7 -0.0046350, -0.0058722, 0.0011147, -0.0013949,                                8 -0.0108838,  0.0322263, -0.0147390,  0.0031247, 0.0111986,                    9 -0.0109394,0.0058112,  0.2739046, -0.0155682, -0.0253272,                     1  0.0163782, 0.0205730,  0.0022081, 0.0112749,-0.0098427,                      2 0.0072705, 0.0195189, -0.0081132, -0.0071889, -0.0579970,                     3 -0.0856642, 0.1884260,-0.7391512, 0.1210288, -0.0241888,                      4 -0.0052464, -0.0096312, -0.0044834, 0.0201764,  0.0258343,                    50.0083033,  0.0077187,0.0586055,0.0102236, -0.0396107,                         6 -0.0167860, -0.2019911, -0.5810815,0.0379916,  3.7508268/                      DATA (FELD(KZ),KZ=81,144)/1.8133030,                                           7  -0.0564250, -0.0557352, 0.1335347, -0.0142641,                               8 -0.1024618,0.0970994, -0.0751830,-0.1274948, 0.0402073,                       9  0.0386290, 0.1883088,  0.1838960, -0.7848989,0.7591817,                      1 -0.9302389,-0.8560960, 0.6633250, -4.6363869, -13.2599277,                    2 0.1002136,  0.0855714,-0.0991981, -0.0765378,-0.0455264,                      3  0.1169326, -0.2604067, 0.1800076, -0.2223685, -0.6347679,                    40.5334222, -0.3459502,-0.1573697,  0.8589464, 1.7815990,                       5-6.3347645, -3.1513653, -9.9927750,13.3327637, -35.4897308,                    637.3466339, -0.5257398,  0.0571474, -0.5421217,  0.2404770,                    7 -0.1747774,-0.3433644, 0.4829708,0.3935944, 0.4885033,                        8  0.8488121, -0.7640999, -1.8884945, 3.2930784,-7.3497229,                     9 0.1672821,-0.2306652, 10.5782146, 12.6031065, 8.6579742,                      1 215.5209961, -27.1419220,22.3405762,1108.6394043/                              K=0                                                                             DO 10 I=1,144                                                                   K=K+1                                                                     10    FIELD(K)=FELD(I)                                                                RETURN                                                                          END                                                                             SUBROUTINE FIELDG(DLAT,DLONG,ALT,X,Y,Z,F,DIP,SMODIP)                      C     IPW,28.12.77,THIS IS A SPECIAL VERSION OF THE POGO 68/10 MODEL            C     TO ECONOMIZE COMPUTER TIME AND MEMORY.X,Y,Z,F,DIP ARE THE COORDINATES     C     MAGNETUDE (GAUSS) AND ANGLE (VERSUS THE HORICONTAL AXIS) OF THE           C     EARTH MAGNETIC FIELD IN THE HEIGHT ALT/KM AT THE LATITUDE                 C     DLAT AND THE LONGITUDE DLONG                                              C     "COMMENT" THIS IS A SPECIAL VERSION OF THE POGO68/107                     C     MAGNETIC FIELD LEGENDRE MODEL (IN GAUSS UNITS).                           C     F IS TOTAL FIELD, Z THE (DOWNWARD) VERTICAL COMPONENT WHILE               C     X AND Y ARE COMPONENTS IN THE EQUATORIAL PLANE X TO ZERO LONGITUDE).      C     DIP=INCLINATION ANGLE/DEGREE. MODIP=RAWER"S MODFIED DIP.                  C     REFERENCE@ METEOROLOGICAL   AND ASTRONOMICAL INFLUENCES ON                C     RADIO WAVE PROPAGATION. PERGAMON PRESS, 1963                              C      INPUT@ DLAT, DLONG=GEOGRAPHIC COORDINATES/DEGREE, ALT=ALTITUDE/KM.       C     THE SET OF COEFFICIENTS IS GIVEN IN THE FOLLOWING PROCEDURE?                    DIMENSION H(144),XI(3)                                                          COMMON/BLOCK2/B0,B1,C1,HZ,T,G(144),HST,STR                                      RLAT=DLAT*0.0174533                                                             CT=SIN(RLAT)                                                                    ST=COS(RLAT)                                                                    NMAX=11                                                                         D=SQRT(40680925.0-272336.0*CT*CT)                                               RLONG=DLONG*0.0174533                                                           CP=COS(RLONG)                                                                   SP=SIN(RLONG)                                                                   ZZZ=(ALT+40408589.0/D)*CT/6371.2                                                RHO=(ALT+40680925.0/D)*ST/6371.2                                                XXX=RHO*CP                                                                      YYY=RHO*SP                                                                      RQ=1.0/(XXX*XXX+YYY*YYY+ZZZ*ZZZ)                                                XI(1)=XXX*RQ                                                                    XI(2)=YYY*RQ                                                                    XI(3)=ZZZ*RQ                                                                    IHMAX=NMAX*NMAX+1                                                               LAST=IHMAX+NMAX+NMAX                                                            IMAX=NMAX+NMAX-1                                                                DO 100 I=IHMAX,LAST                                                       100   H(I)=G(I)                                                                       DO 200 K=1,3,2                                                                  I=IMAX                                                                          IH=IHMAX                                                                  300   IL=IH-I                                                                         F1=2.0/FLOAT(I-K+2)                                                             X1=XI(1)*F1                                                                     Y1=XI(2)*F1                                                                     Z1=XI(3)*(F1+F1)                                                                I=I-2                                                                           IF((I-1).LT.0) GOTO 400                                                         IF((I-1).EQ.0) GOTO 500                                                         DO 600 M=3,I,2                                                                  H(IL+M+1)=G(IL+M+1)+Z1*H(IH+M+1)+X1*(H(IH+M+3)-H(IH+M-1))-Y1*                  1(H(IH+M+2)+H(IH+M-2))                                                           H(IL+M)=G(IL+M)+Z1*H(IH+M)+X1*(H(IH+M+2)-H(IH+M-2))+Y1*(H(IH+                  1M+3)+H(IH+M-1))                                                           600   CONTINUE                                                                  500   H(IL+2)=G(IL+2)+Z1*H(IH+2)+X1*H(IH+4)-Y1*(H(IH+3)+H(IH))                        H(IL+1)=G(IL+1)+Z1*H(IH+1)+Y1*H(IH+4)+X1*(H(IH+3)-H(IH))                  400   H(IL)=G(IL)+Z1*H(IH)+2.0*(X1*H(IH+1)+Y1*H(IH+2))                          700   IH=IL                                                                           IF(I.GE.K) GOTO 300                                                       200   CONTINUE                                                                        S=0.5*H(1)+2.0*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2))                               XT=(RQ+RQ)*SQRT(RQ)                                                             X=XT*(H(3)-S*XXX)                                                               Y=XT*(H(4)-S*YYY)                                                               Z=XT*(H(2)-S*ZZZ)                                                               F=SQRT(X*X+Y*Y+Z*Z)                                                             Z=-Z*CT-(Y*SP+X*CP)*ST                                                          DIP=ASIN(Z/F)                                                                   SMODIP=ASIN(DIP/SQRT(DIP*DIP+ST))                                               DIP=DIP*57.2957795                                                        9     SMODIP=SMODIP*57.2957795                                                        RETURN                                                                          END                                                                             SUBROUTINE F2OUT(XMODIP,XLATI,XLONGI,XMAGBR,R,XMONTH,HOUR,FOE,                 1XHMF2,FOF2)                                                               C     D.BILITZA,20.8.78,CALCULATES XHMF2 AND NMF2 BY USING THE                  C     CCIR-MAPS FOR FOF2 AND M3000.YOU HAVE TO ADJUST THE TAPE                  C     READING PROCEDURE CCIRCA TO YOUR COMPUTER SYSTEM AND CCIR-TAPE                  INTEGER QF(9),QM(7)                                                             DIMENSION FF0(988)                                                              REAL MM0(441)                                                                   REWIND 5                                                                        LMONTH=IFIX(XMONTH)                                                             CALL CCIRCA(R,LMONTH,FF0,MM0)                                                   QF(1)=11                                                                        QF(2)=11                                                                        QF(3)=8                                                                         QF(4)=4                                                                         QF(5)=1                                                                         QF(6)=0                                                                         QF(7)=0                                                                         QF(8)=0                                                                         QF(9)=0                                                                         QM(1)=6                                                                         QM(2)=7                                                                         QM(3)=5                                                                         QM(4)=2                                                                         QM(5)=1                                                                         QM(6)=0                                                                         QM(7)=0                                                                         FOF2=GAMMA1(XMODIP,XLATI,XLONGI,.FALSE.,HOUR,6,QF,9,76,13,988,                 1FF0)                                                                            XM3000=GAMMA1(XMODIP,XLATI,XLONGI,.FALSE.,HOUR,4,QM,7,49,9,441,                1MM0)                                                                            XHMF2=HMF2ED(XMAGBR,R,FOF2/FOE,XM3000)                                          RETURN                                                                          END                                                                             REAL FUNCTION GAMMA1(SMODIP,SLAT,SLONG,UT,XHOUR,IHARM,NQ,K1,M,                 1MM,M3,SFE)                                                                C     SHEIKH,4.3.77,CALCULATES A QUANTITY (FOF2/M3000) USING CCIR               C     NUMERICAL MAP COEFFICIENTS SFE(M,2*IHARM+1).                              C     NQ(K1) IS AN INTEGER ARRAY GIVING NQ1,NQ2,NQ3,...AS HIGHEST               C     DEGREE OF LATITUDE FOR EACH LONGITUDE HARMONIC (IHARM).                   C     M=1+NQ1+2(NQ2+1)+2(NQ3+1)+... .IF UT IS TRUE,THEN HOUR IS                 C     TAKEN AS UNIVERSAL TIME,OTHERWISE IT IS ASSUMED AS LOCAL                  C     TIME.                                                                           DIMENSION NQ(K1),XSINX(13),COEF(100),C(12),S(12),SFE(M3)                        LOGICAL UT                                                                      RD=57.2957795                                                                   IF(UT) GOTO 100                                                                 TIME=(15.0*XHOUR-180.0-SLONG)/RD                                                GOTO 150                                                                  100   TIME=(15.0*XHOUR-180.0)/RD                                                150   S(1)=SIN(TIME)                                                                  C(1)=COS(TIME)                                                                  DO 250 I=2,IHARM                                                                C(I)=C(1)*C(I-1)-S(1)*S(I-1)                                                    S(I)=C(1)*S(I-1)+S(1)*C(I-1)                                              250   CONTINUE                                                                        DO 300 I=1,M                                                                    COEF(I)=SFE((I-1)*MM+1)                                                         DO 300 J=1,IHARM                                                                COEF(I)=COEF(I)+SFE((I-1)*MM+2*J)*S(J)+SFE((I-1)*MM+2*J+1)*C(J)           300   CONTINUE                                                                        SUM=COEF(1)                                                                     SS=SIN(SMODIP/RD)                                                               S3=SS                                                                           XSINX(1)=1.0                                                                    INDEX=NQ(1)                                                                     DO 350 J=1,INDEX                                                                SUM=SUM+COEF(1+J)*SS                                                            XSINX(J+1)=SS                                                                   SS=SS*S3                                                                  350   CONTINUE                                                                        XSINX(NQ(1)+2)=SS*S3                                                            NP=NQ(1)+1                                                                      SS=COS(SLAT/RD)                                                                 S3=SS                                                                           DO 400 J=2,K1                                                                   S0=SLONG*FLOAT(J-1)/RD                                                          S1=COS(S0)                                                                      S2=SIN(S0)                                                                      INDEX=NQ(J)+1                                                                   DO 450 L=1,INDEX                                                                NP=NP+1                                                                         SUM=SUM+COEF(NP)*XSINX(L)*SS*S1                                                 NP=NP+1                                                                         SUM=SUM+COEF(NP)*XSINX(L)*SS*S2                                           450   CONTINUE                                                                        SS=SS*S3                                                                  400   CONTINUE                                                                        GAMMA1=SUM                                                                      RETURN                                                                          END                                                                             SUBROUTINE CCIRCA(R,IMONTH,FOF2,SM3000)                                   C     THIS SUBROUTINE CALCULATES THE COEFFICIENTS ARRAYS FOF2(76,13) AND        C     SM3000(49,9) FOR SOLARACTIVITY (R) AND MONTH USING OUR SPECIAL CCIRFO-TAPE      DIMENSION FOF2(988),SM3000(441),F2(13,76,2),FM3(9,49,2)                         DO 10 I=1,IMONTH                                                                READ(5,1)                                                                 1     FORMAT( )                                                                       READ(5,2) ((F2(L,M,1),M=1,76),L=1,13)                                           READ(5,1)                                                                       READ(5,2) ((F2(L,M,2),M=1,76),L=1,13)                                           READ(5,1)                                                                       READ(5,2) ((FM3(L,M,1),M=1,49),L=1,9)                                           READ(5,1)                                                                       READ(5,2) ((FM3(L,M,2),M=1,49),L=1,9)                                     2     FORMAT(4(5X,E13.7))                                                       10    CONTINUE                                                                        DO 20 I=1,76                                                                    DO 20 J=1,13                                                                    K=J+13*(I-1)                                                              20    FOF2(K)=(F2(J,I,1)*(100.0-R)+F2(J,I,2)*R)/100.0                                 DO 30 I=1,49                                                                    DO 30 J=1,9                                                                     K=J+9*(I-1)                                                               30    SM3000(K)=(FM3(J,I,1)*(100.0-R)+FM3(J,I,2)*R)/100.0                             RETURN                                                                          END                                                                             SUBROUTINE KOEFFI(BOF)                                                    C     COEFFICIENTS FOR BOTTOMSIDE F2 REGION ELECTRON DENSITY                          DIMENSION BOF(2,2,8)                                                            REAL FELD(32)                                                                   DATA FELD/114.0,64.0,134.0,77.0,128.0,66.0,75.0,73.0,113.0,115.0,              1150.0,116.0,138.0,123.0,94.0,132.0,72.0,84.0,83.0,89.0,75.0,85.0,              257.0,76.0,102.0,100.0,120.0,110.0,107.0,103.0,76.0,86.0/                        L=0                                                                             K=0                                                                             DO 10 I=1,2                                                                     DO 10 J=1,2                                                                     DO 10 K=1,8                                                                     L=L+1                                                                     10    BOF(I,J,K)=FELD(L)                                                              RETURN                                                                          END                                                                             SUBROUTINE  KOEFP1(PG1O)                                                  C     COEFFICIENTS PG1O FOR CALCULATING  O+ PROFILES                                  DIMENSION PG1O(80)                                                              REAL FELD (80)                                                                  DATA FELD/-11.0,-11.0,4.0,-11.0,0.08018,                                       60.13027,0.04216,0.25  ,-0.00686,0.00999,                                       15.113,0.1 ,170.0,180.0,0.1175,0.15,-11.0,                                      71.0 ,2.0,-11.0,0.069,0.161,0.254,0.18,0.0161,                                  20.0216,0.03014,0.1,152.0,167.0,0.04916,                                        80.17,-11.0,2.0,2.0,-11.0,0.072,0.092,0.014,0.21,                               30.01389,0.03863,0.05762,0.12,165.0,168.0,0.008,                                90.258,-11.0,1.0,3.0,-11.0,0.091,0.088,                                         40.008,0.34,0.0067,0.0195,0.04,0.1,158.0,172.0,                                 10.01,0.24,-11.0,2.0,3.0, -11.0,0.083,0.102,                                    50.045,0.03,0.00127,0.01,0.05,0.09,167.0,185.0,                                 20.015,0.18/                                                                     K=0                                                                             DO 10 I=1,80                                                                    K=K+1                                                                     10    PG1O(K)=FELD(I)                                                                 RETURN                                                                          END                                                                             SUBROUTINE KOEFP2(PG2O)                                                   C     COEFFICIENTS FOR CALCULATING O+ PROFILES                                        DIMENSION PG2O(32)                                                              REAL FELD(32)                                                                   DATA FELD/1.0,-11.0,-11.0,1.0,695.0,-.000781,                                  3-.00264,2177.0,1.0,-11.0,-11.0,2.0,570.0,                                      1-.002,-.0052,1040.0,2.0,-11.0,-11.0,1.0,695.0,                                 4-.000786,-.00165,3367.0,2.0,-11.0,-11.0,2.0,                                   2575.0,-.00126,-.00524,1380.0/                                                   K=0                                                                             DO 10 I=1,32                                                                    K=K+1                                                                     10    PG2O(K)=FELD(I)                                                                 RETURN                                                                          END                                                                             SUBROUTINE  KOEFP3(PG3O)                                                  C     COEFFICIENTS FOR CALCULATING O2+ PROFILES                                       DIMENSION PG3O(80)                                                              REAL FELD(80)                                                                   DATA FELD/-11.0,1.0,2.0,-11.0,160.0,31.0,130.0,                                9-10.0,198.0,0.0,0.05922,-0.07983,                                              1-0.00397,0.00085,-0.00313,0.0,-11.0,2.0,2.0,-11.0,                             8140.0,30.0,130.0,-10.0,                                                        2190.0,0.0,0.05107,-0.07964,0.00097,-0.01118,-0.02614,                          7-0.09537,                                                                      3-11.0,1.0,3.0,-11.0,140.0,37.0,125.0,0.0,182.0,                                60.0,0.0307,-0.04968,-0.00248,                                                  4-0.02451,-0.00313,0.0,-11.0,2.0,3.0,-11.0,                                     5140.0,37.0,125.0,0.0,170.0,0.0,                                                50.02806,-0.04716,0.00066,-0.02763,-0.02247,-0.01919,                           6-11.0,-11.0,4.0,-11.0,140.0,45.0,136.0,-9.0,                                   7181.0,-26.0,0.02994,-0.04879,                                                  7-0.01396,0.00089,-0.09929,0.05589/                                              K=0                                                                             DO 10 I=1,80                                                                    K=K+1                                                                     10    PG3O(K)=FELD(I)                                                                 RETURN                                                                          END                                                                             SUBROUTINE SUFE (FIELD,RFE,M,FE)                                          C     SPECIAL SUBROUTINE FOR CHOOSING THE DESIRED                               C     ION DENSITY PARAMETER ARRAYS                                                    DIMENSION RFE(4),FE(12),FIELD(80),EFE(4)                                        K=0                                                                         100 DO 101 I=1,4                                                                    K=K+1                                                                       101 EFE(I)=FIELD(K)                                                                 DO 111 I=1,M                                                                    K=K+1                                                                       111 FE(I)=FIELD(K)                                                                  DO 120 I=1,4                                                                    IF((EFE(I).GT.-10.0).AND.(RFE(I).NE.EFE(I))) GOTO 100                       120 CONTINUE                                                                        RETURN                                                                          END                                                                             FUNCTION HPOL(XHOUR,TW,XNW,SA,SU)                                         C     SPECIAL FUNCTION FOR TIME-INTERPOLATION.TW,XNW ARE THE DAY                C     AND NIGHT VALUE OF THE PARAMETER.SA,SU ARE TIME (HOURS) OF                C     SUNRISE AND SUNSET.                                                       C     "COMMENT" D.BILITZA,1978 SPECIAL PROCEDURE FOR TIME-INTERPOLATION         C     USING EPSTEIN STEP FUNKTION OF ONE HOUR WIDTH (DAY/NIGHT FUNCTION).       C     TW,NW ARE THE DAY AND NIGHT VALUE OF THE PARAMETER.                       C     SA, SU ARE TIME (HOURS) OF SUNRISE AND SUNSET/HOUR?                             IF(ABS(SU-SA).GE.24.0) GOTO 100                                                 HPOL=XNW+(TW-XNW)/(1.0+EXP(-(XHOUR-SA)/1.0))+(XNW-TW)                          1/(1.0+EXP(-(XHOUR-SU)/1.0))                                                     GOTO 200                                                                  100   HPOL=XNW                                                                        IF(SA.LT.1.0) HPOL=TW                                                     200   RETURN                                                                          END                                                                             REAL FUNCTION XPOL(AA,XHOUR,SA,SU,DELL,IMONTH,R)                          C     SPECIAL FUNCTION TO INTERPOLATE ARRAY AA(LATI,R,MONTH,HOUR)=              C     A(2,2,4,2) IN LATITUDE (LATI), SOLAR ACTIVITY (R) AND TIME (HOUR)               DIMENSION AA(2,2,8),SIPH(2),SIPL(2)                                             JMONTH=IMONTH*2                                                                 DO 10 ISR=1,2                                                                   DO 15 ISLAT=1,2                                                           15    SIPH(ISLAT)=HPOL(XHOUR,AA(ISLAT,ISR,JMONTH-1),AA(ISLAT,ISR,                    1JMONTH),SA,SU)                                                                  SIPL(ISR)=SIPH(1)+(SIPH(2)-SIPH(1))/DELL                                  10    CONTINUE                                                                        XPOL=SIPL(1)+(SIPL(2)-SIPL(1))/90.0*(R-10.0)                                    RETURN                                                                          END                                                                             FUNCTION EPSTEP(BE,AB,TH,FIX,COSI)                                        C     EPSTEIN STEP FUNCTION = TRANSITION WITH THICKNESS TH BETWEEN              C     BE AND AB CENTERED WHERE VARIABLE COSI EQUALS FIX                               EPSTEP=AB+(BE-AB)/(1.0+EXP(-(COSI-FIX)/TH))                                     RETURN                                                                          END