|
|
C =====================================================================
|
|
|
C Downloaded from ftp://nssdcftp.gsfc.nasa.gov/models/ionospheric/iri/
|
|
|
C iri2007/
|
|
|
C by B. Rideout on Aug 3, 2007. Dated 6/5/2007 on ftp site.
|
|
|
C A description of this code can be found
|
|
|
C at http://modelweb.gsfc.nasa.gov/ionos/iri.html
|
|
|
C
|
|
|
C Removed write statements
|
|
|
C Removed unused iri_web
|
|
|
C Modifed so all ap and f10.7 data comes from Madrigal, not files
|
|
|
C
|
|
|
C $Id: irisub.f 7344 2021-03-29 18:27:39Z brideout $
|
|
|
C
|
|
|
c-----------------------------------------------------------------------
|
|
|
C
|
|
|
C Includes subroutines IRI_SUB and IRI_WEB to compute IRI parameters
|
|
|
C for specified location, date, time, and altitude range and subroutine
|
|
|
C IRI_WEB to computes IRI parameters for specified location, date, time
|
|
|
C and variable range; variable can be altitude, latitude, longitude,
|
|
|
C year, month, day of month, day of year, or hour (UT or LT).
|
|
|
C IRI_WEB requires IRI_SUB. Both subroutines require linking with the
|
|
|
c following library files IRIFUN.FOR, IRITEC.FOR, IRIDREG.FOR,
|
|
|
c CIRA.FOR, IGRF.FOR
|
|
|
c
|
|
|
c !!!!! Subroutine INITIALIZE has to be called once before calling
|
|
|
c !!!!! iri_sub. This is already included in subroutine IRI_WEB which
|
|
|
c !!!!! calls iri_sub.
|
|
|
C
|
|
|
c i/o units: 6 messages (during execution) to monitor
|
|
|
c 10 CCIR and URSI coefficients
|
|
|
c 11 alternate unit for message file (if jf(12)=.false.)
|
|
|
c 12 solar/ionospheric indices: ig_rz.dat
|
|
|
c 13 magnetic indices: ap.dat
|
|
|
c 14 igrf coefficients
|
|
|
c
|
|
|
c-----------------------------------------------------------------------
|
|
|
c
|
|
|
C CHANGES FROM IRIS11.FOR TO IRIS12.FOR:
|
|
|
C - CIRA-1986 INSTEAD OF CIRA-1972 FOR NEUTRAL TEMPERATURE
|
|
|
C - 10/30/91 VNER FOR NIGHTTIME LAY-VERSION: ABS(..)
|
|
|
C - 10/30/91 XNE(..) IN CASE OF LAY-VERSION
|
|
|
C - 10/30/91 CHANGE SSIN=F/T TO IIQU=0,1,2
|
|
|
C - 10/30/91 Te > Ti > Tn ENFORCED IN FINAL PROFILE
|
|
|
C - 10/30/91 SUB ALL NAMES WITH 6 OR MORE CHARACTERS
|
|
|
C - 10/31/91 CORRECTED HF1 IN HST SEARCH: NE(HF1)>NME
|
|
|
C - 11/14/91 C1=0 IF NO F1-REGION
|
|
|
C - 11/14/91 CORRECTED HHMIN AND HZ FOR LIN. APP.
|
|
|
C - 1/28/92 RZ12=0 included
|
|
|
C - 1/29/92 NEQV instead of NE between URSIF2 and URSIFO
|
|
|
C - 5/ 1/92 CCIR and URSI input as in IRID12
|
|
|
C - 9/ 2/94 Decimal month (ZMONTH) for IONCOM
|
|
|
C - 9/ 2/94 Replace B0POL with B0_TAB; better annually
|
|
|
C - 1/ 4/95 DY for h>hmF2
|
|
|
C - 2/ 2/95 IG for foF2, topside; RZ for hmF2, B0_TAB, foF1, NmD
|
|
|
C - 2/ 2/95 winter no longer exclusive for F1 occurrrence
|
|
|
C - 2/ 2/95 RZ and IG incl as DATA statement; smooth annual var.
|
|
|
C CHANGES FROM IRIS12.FOR TO IRIS13.FOR:
|
|
|
C - 10/26/95 incl year as input and corrected MODA; nrm for zmonth
|
|
|
C - 10/26/95 use TCON and month-month interpolation in foF2, hmF2
|
|
|
C - 10/26/95 TCON only if date changes
|
|
|
C - 11/25/95 take out logicals TOPSI, BOTTO, and BELOWE
|
|
|
C - 12/ 1/95 UT_LT for (date-)correct UT<->LT conversion
|
|
|
C - 12/22/95 Change ZETA cov term to cov < 180; use cov inst covsat
|
|
|
C - 2/23/96 take covmax(R<150) for topside; lyear,.. for lt
|
|
|
C - 3/26/96 topside: 94.5/BETA inst 94.45/..; cov -> covsat(<=188)
|
|
|
C - 5/01/96 No longer DY for h>hmF2 (because of discontinuity)
|
|
|
C - 12/01/96 IRIV13: HOUR for IVAR=1 (height)
|
|
|
C - 4/25/97 D-region: XKK le 10 with D1 calc accordingly.
|
|
|
C - 1/12/97 DS model for lower ion compoistion DY model
|
|
|
C - 5/19/98 seamon=zmonth if lati>0; zmonth= ...(1.0*iday)/..
|
|
|
C - 5/19/98 DY ion composition model below 300 km now DS model
|
|
|
C - 5/19/98 DS model includes N+, Cl down to 75 km HNIA changed
|
|
|
C - 5/28/98 User input for Rz12, foF1/NmF1, hmF1, foE/NmE, hmE
|
|
|
C - 9/ 2/98 1 instead of 0 in MODA after UT_LT call
|
|
|
C - 4/30/99 constants moved from DATA statement into program
|
|
|
C - 4/30/99 changed konsol-unit to 13 (12 is for IG_RZ).
|
|
|
C - 5/29/99 the limit for IG comp. from Rz12-input is 174 not 274
|
|
|
C - 11/08/99 jf(18)=t simple UT to LT conversion, otherwise UT_LT
|
|
|
C - 11/09/99 added COMMON/const1/humr,dumr also for CIRA86
|
|
|
C CHANGES FROM IRIS13.FOR TO IRISUB.FOR:
|
|
|
c-----------------------------------------------------------------------
|
|
|
C-Version-MM/DD/YY-Description (person reporting correction)
|
|
|
C 2000.01 05/09/00 B0_98 replaces B0_TAB and B1: 1.9/day to 2.6/night
|
|
|
C 2000.02 06/11/00 including new F1 and indermediate region
|
|
|
C 2000.03 10/15/00 include Scherliess-Fejer drift model
|
|
|
C 2000.04 10/29/00 include special option for D region models
|
|
|
C 2000.05 12/07/00 change name IRIS13 to IRISUB
|
|
|
C 2000.06 12/14/00 jf(30),outf(20,100),oarr(50)
|
|
|
C 2000.07 03/17/01 include Truhlik-Triskova Te model and IGRF
|
|
|
C 2000.08 05/07/01 include Fuller-Rowell-Condrescu storm model
|
|
|
C 2000.09 07/09/01 LATI instead of LAT1 in F00 call (M. Torkar)
|
|
|
C 2000.10 07/09/01 sdte instead of dte in ELTEIK call (P. Wilkinson)
|
|
|
C 2000.11 09/18/01 correct computation of foF2 for Rz12 user input
|
|
|
C 2000.12 09/19/01 Call APF only if different date and time (P. Webb)
|
|
|
c 2000.13 10/28/02 replace TAB/6 blanks, enforce 72/line (D. Simpson)
|
|
|
C 2000.14 11/08/02 change unit for message file to 11 (13 is Kp)
|
|
|
C 2000.15 01/27/03 change F1_prob output; Te-IK for fix h and ELTE(h)
|
|
|
C 2000.16 02/04/03 along<0 -> along=along+360; F1 occ for hmf1&foF1
|
|
|
C 2000.17 02/05/03 zyear =12.97 (Dec 31); idayy=#days per year
|
|
|
C 2000.18 02/06/03 jf(27) for IG12 user input; all F1 prob in oar
|
|
|
C 2000.19 07/14/04 covsat<188 instead of covsat=<f(IG)<188
|
|
|
C 2000.19 02/09/05 declare INVDIP as real F. Morgan
|
|
|
C 2000.20 11/09/05 replace B0B1 with BCOEF T. Gulyaeva
|
|
|
C 2005.01 11/09/05 new topside ion composition; F107D from file
|
|
|
C 2005.02 11/14/05 jf(18) now IGRF/POGO; dip,mlat now IGRF10;
|
|
|
C 2005.03 11/15/05 sunrise/sunset/night for D,E,F1,F2; UT_LT removed
|
|
|
C 2005.04 05/06/06 FIRI D-region option not tied to peak
|
|
|
C 2005.04 05/06/06 Spread-F included, NeQuick included
|
|
|
C 2005.05 01/15/07 NeQuick uses CCIR-M3000F2 even if user-hmF2
|
|
|
C 2007.00 05/18/07 Release of IRI-2007
|
|
|
C
|
|
|
C*****************************************************************
|
|
|
C********* INTERNATIONAL REFERENCE IONOSPHERE (IRI). *************
|
|
|
C*****************************************************************
|
|
|
C**************** ALL-IN-ONE SUBROUTINE *************************
|
|
|
C*****************************************************************
|
|
|
C
|
|
|
C
|
|
|
SUBROUTINE IRI_SUB(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,DHOUR,
|
|
|
& HEIBEG,HEIEND,HEISTP,OUTF,OARR,IAP3,F107)
|
|
|
C-----------------------------------------------------------------
|
|
|
C
|
|
|
C INPUT: JF(1:30) true/false switches for several options
|
|
|
C JMAG =0 geographic = 1 geomagnetic coordinates
|
|
|
C ALATI,ALONG LATITUDE NORTH AND LONGITUDE EAST IN DEGREES
|
|
|
C IYYYY Year as YYYY, e.g. 1985
|
|
|
C MMDD (-DDD) DATE (OR DAY OF YEAR AS A NEGATIVE NUMBER)
|
|
|
C DHOUR LOCAL TIME (OR UNIVERSAL TIME + 25) IN DECIMAL
|
|
|
C HOURS
|
|
|
C HEIBEG, HEIGHT RANGE IN KM; maximal 100 heights, i.e.
|
|
|
C HEIEND,HEISTP int((heiend-heibeg)/heistp)+1.le.100
|
|
|
C IAP3 - Array of 13 Ap3 (values integers) of the 13 3-hour Ap3
|
|
|
C values leading up to the present time - added by
|
|
|
C Bill Rideout to remove dependence on file ap.dat
|
|
|
C F107 - f10.7 value in 10^22 * W/m2/Hz (float) - added by
|
|
|
C Bill Rideout to remove dependence on file ap.dat
|
|
|
C
|
|
|
C JF switches to turn off/on (.true./.false.) several options
|
|
|
C
|
|
|
C i .true. .flase. standard version
|
|
|
C -----------------------------------------------------------------
|
|
|
C 1 Ne computed Ne not computed t
|
|
|
C 2 Te, Ti computed Te, Ti not computed t
|
|
|
C 3 Ne & Ni computed Ni not computed t
|
|
|
C 4 B0 - Table option B0 - Gulyaeva (1987) t
|
|
|
C 5 foF2 - CCIR foF2 - URSI false
|
|
|
C 6 Ni - DS-78 & DY-85 Ni - DS-95 & TTS-03 false
|
|
|
C 7 Ne - Tops: f10.7<188 f10.7 unlimited t
|
|
|
C 8 foF2 from model foF2 or NmF2 - user input t
|
|
|
C 9 hmF2 from model hmF2 or M3000F2 - user input t
|
|
|
C 10 Te - Standard Te - Using Te/Ne correlation t
|
|
|
C 11 Ne - Standard Profile Ne - Lay-function formalism t
|
|
|
C 12 Messages to unit 6 no messages t
|
|
|
C 13 foF1 from model foF1 or NmF1 - user input t
|
|
|
C 14 hmF1 from model hmF1 - user input (only Lay version)t
|
|
|
C 15 foE from model foE or NmE - user input t
|
|
|
C 16 hmE from model hmE - user input t
|
|
|
C 17 Rz12 from file Rz12 - user input t
|
|
|
C 18 IGRF dip, magbr, modip old FIELDG using POGO68/10 for 1973 t
|
|
|
C 19 F1 probability model critical solar zenith angle (old) t
|
|
|
C 20 standard F1 standard F1 plus L condition t
|
|
|
C 21 ion drift computed ion drift not computed false
|
|
|
C 22 ion densities in % ion densities in m-3 t
|
|
|
C 23 Te_tops (Aeros,ISIS) Te_topside (Intercosmos) false
|
|
|
C 24 D-region: IRI-95 Special: 3 D-region models t
|
|
|
C 25 F107D from AP.DAT F107D user input (oarr(41)) t
|
|
|
C 26 foF2 storm model no storm updating t
|
|
|
C 27 IG12 from file IG12 - user input t
|
|
|
C 28 spread-F probability not computed false
|
|
|
C 29 IRI01-topside new options as def. by JF(30) false
|
|
|
C 30 IRI01-topside corr. NeQuick topside model false
|
|
|
C (29,30) = (t,t) IRIold, (f,t) IRIcor, (f,f) NeQuick, (t,f) TTS
|
|
|
C ------------------------------------------------------------------
|
|
|
C
|
|
|
C Depending on the jf() settings additional INPUT parameters may
|
|
|
c be required:
|
|
|
C
|
|
|
C Setting INPUT parameter
|
|
|
C -----------------------------------------------------------------
|
|
|
C jf(8) =.false. OARR(1)=user input for foF2/MHz or NmF2/m-3
|
|
|
C jf(9) =.false. OARR(2)=user input for hmF2/km or M(3000)F2
|
|
|
C jf(10 )=.false. OARR(15),OARR(16)=user input for Ne(300km),
|
|
|
C Ne(400km)/m-3. Use OARR()=-1 if one of these values is not
|
|
|
C available. If jf(23)=.false. then Ne(300km), Ne(550km)/m-3.
|
|
|
C jf(13) =.false. OARR(3)=user input for foF1/MHz or NmF1/m-3
|
|
|
C jf(14) =.false. OARR(4)=user input for hmF1/km
|
|
|
C jf(15) =.false. OARR(5)=user input for foE/MHz or NmE/m-3
|
|
|
C jf(16) =.false. OARR(6)=user input for hmE/km
|
|
|
C jf(17) =.flase. OARR(33)=user input for Rz12
|
|
|
C jf(21) =.true. OARR(41)=user input for daily F10.7 index
|
|
|
C jf(23) =.false. OARR(41)=user input for daily F10.7 index
|
|
|
C jf(24) =.false. OARR(41)=user input for daily F10.7 index
|
|
|
C optional for jf(21:24); default is F10.7D=COV
|
|
|
C jf(25) =.false. OARR(41)=user input for daily F10.7 index
|
|
|
C if oarr(41).le.0 then 12-month running mean is
|
|
|
C taken from internal file]
|
|
|
C jf(27) =.flase. OARR(39)=user input for IG12
|
|
|
C jf(21) =.true. OARR(41)=user input for daily F10.7 index
|
|
|
C
|
|
|
C
|
|
|
C OUTPUT: OUTF(1:20,1:100)
|
|
|
C OUTF(1,*) ELECTRON DENSITY/M-3
|
|
|
C OUTF(2,*) NEUTRAL TEMPERATURE/K
|
|
|
C OUTF(3,*) ION TEMPERATURE/K
|
|
|
C OUTF(4,*) ELECTRON TEMPERATURE/K
|
|
|
C OUTF(5,*) O+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C OUTF(6,*) H+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C OUTF(7,*) HE+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C OUTF(8,*) O2+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C OUTF(9,*) NO+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C AND, IF JF(6)=.FALSE.:
|
|
|
C OUTF(10,*) CLUSTER IONS DEN/% or /M-3 if jf(22)=f
|
|
|
C OUTF(11,*) N+ ION DENSITY/% or /M-3 if jf(22)=f
|
|
|
C OUTF(12,*)
|
|
|
C OUTF(13,*) D/E-region densities (Friedrich)
|
|
|
C OUTF(14,*) 1:7 Danilov for 60,65..90km; 8:14 for a
|
|
|
C major Stratospheric Warming (SW=1) event; 15:21
|
|
|
C for strong Winter Anomaly (WA=1) conditions
|
|
|
C OUTF(15-20,*) free
|
|
|
c
|
|
|
C OARR(1:50) ADDITIONAL OUTPUT PARAMETERS
|
|
|
C
|
|
|
C #OARR(1) = NMF2/M-3 #OARR(2) = HMF2/KM
|
|
|
C #OARR(3) = NMF1/M-3 #OARR(4) = HMF1/KM
|
|
|
C #OARR(5) = NME/M-3 #OARR(6) = HME/KM
|
|
|
C OARR(7) = NMD/M-3 OARR(8) = HMD/KM
|
|
|
C OARR(9) = HHALF/KM OARR(10) = B0/KM
|
|
|
C OARR(11) =VALLEY-BASE/M-3 OARR(12) = VALLEY-TOP/KM
|
|
|
C OARR(13) = TE-PEAK/K OARR(14) = TE-PEAK HEIGHT/KM
|
|
|
C #OARR(15) = TE-MOD(300KM) #OARR(16) = TE-MOD(400KM)/K
|
|
|
C OARR(17) = TE-MOD(600KM) OARR(18) = TE-MOD(1400KM)/K
|
|
|
C OARR(19) = TE-MOD(3000KM) OARR(20) = TE(120KM)=TN=TI/K
|
|
|
C OARR(21) = TI-MOD(430KM) OARR(22) = X/KM, WHERE TE=TI
|
|
|
C OARR(23) = SOL ZENITH ANG/DEG OARR(24) = SUN DECLINATION/DEG
|
|
|
C OARR(25) = DIP/deg OARR(26) = DIP LATITUDE/deg
|
|
|
C OARR(27) = MODIFIED DIP LAT. OARR(28) = DELA
|
|
|
C OARR(29) = sunrise/dec. hours OARR(30) = sunset/dec. hours
|
|
|
C OARR(31) = ISEASON (1=spring) OARR(32) = NSEASON (northern)
|
|
|
C #OARR(33) = Rz12 OARR(34) = Covington Index
|
|
|
C OARR(35) = B1 oarr(36) = M(3000)F2
|
|
|
C $oarr(37) = TEC/m-2 $oarr(38) = TEC_top/TEC*100.
|
|
|
C #OARR(39) = gind (IG12) oarr(40) = F1 probability (old)
|
|
|
C #OARR(41) = F10.7 daily oarr(42) = c1 (F1 shape)
|
|
|
C OARR(43) = daynr
|
|
|
C OARR(44) = equatorial vertical ion drift in m/s
|
|
|
C OARR(45) = foF2_storm/foF2_quiet
|
|
|
C OARR(46) = F1 probability without L condition
|
|
|
C OARR(47) = F1 probability with L condition incl.
|
|
|
C OARR(48) = spread-F occurrence probability (Brazilian model)
|
|
|
C # INPUT as well as OUTPUT parameter
|
|
|
C $ special for IRIWeb (only place-holders)
|
|
|
c-----------------------------------------------------------------------
|
|
|
C*****************************************************************
|
|
|
C*** THE ALTITUDE LIMITS ARE: LOWER (DAY/NIGHT) UPPER ***
|
|
|
C*** ELECTRON DENSITY 60/80 KM 1000 KM ***
|
|
|
C*** TEMPERATURES 120 KM 2500/3000 KM ***
|
|
|
C*** ION DENSITIES 100 KM 1000 KM ***
|
|
|
C*****************************************************************
|
|
|
C*****************************************************************
|
|
|
C********* INTERNALLY **************
|
|
|
C********* ALL ANGLES ARE IN DEGREE **************
|
|
|
C********* ALL DENSITIES ARE IN M-3 **************
|
|
|
C********* ALL ALTITUDES ARE IN KM **************
|
|
|
C********* ALL TEMPERATURES ARE IN KELVIN **************
|
|
|
C********* ALL TIMES ARE IN DECIMAL HOURS **************
|
|
|
C*****************************************************************
|
|
|
C*****************************************************************
|
|
|
C*****************************************************************
|
|
|
INTEGER DAYNR,DDO,DO2,SEASON,SEADAY
|
|
|
REAL LATI,LONGI,MO2,MO,MODIP,NMF2,MAGBR,INVDIP,
|
|
|
& NMF1,NME,NMD,MM,MLAT,MLONG,NOBO2
|
|
|
CHARACTER FILNAM*12
|
|
|
c-web-for webversion
|
|
|
c CHARACTER FILNAM*53
|
|
|
|
|
|
CHARACTER*128 FULL_FILENAME,MADDIR
|
|
|
INTEGER IND, IAP3(13)
|
|
|
|
|
|
DIMENSION ARIG(3),RZAR(3),F(3),RIF(4),E(4),XDELS(4),DNDS(4),
|
|
|
& FF0(988),XM0(441),F2(13,76,2),FM3(9,49,2),ddens(3,7),elg(7),
|
|
|
& FF0N(988),XM0N(441),F2N(13,76,2),FM3N(9,49,2),INDAP(13),
|
|
|
& AMP(4),HXL(4),SCL(4),XSM(4),MM(5),DTI(4),AHH(7),
|
|
|
& STTE(6),DTE(5),ATE(7),TEA(6),XNAR(2),param(2),OARR(50),
|
|
|
& OUTF(20,100),PG1O(80),PG2O(32),PG3O(80),PF1O(12),PF2O(4),
|
|
|
& PF3O(12),HO(4),MO(5),DDO(4),HO2(2),MO2(3),DO2(2),DION(7),
|
|
|
& osfbr(25)
|
|
|
|
|
|
LOGICAL EXT,SCHALT,TECON(2),sam_mon,sam_yea,sam_ut,
|
|
|
& sam_date,F1REG,FOF2IN,HMF2IN,URSIF2,LAYVER,DY,GULB0,DREG,
|
|
|
& rzino,FOF1IN,HMF1IN,FOEIN,HMEIN,RZIN,sam_doy,F1_OCPRO,
|
|
|
& F1_L_COND,NODEN,NOTEM,NOION,TENEOP,OLD79,JF(30),URSIFO,
|
|
|
& igin,igino,dnight,enight,fnight,TOPO,TOPC
|
|
|
|
|
|
COMMON /CONST/UMR /const1/humr,dumr /ARGEXP/ARGMAX
|
|
|
& /BLOCK1/HMF2,NMF2,HMF1,F1REG /BLOCK2/B0,B1,C1
|
|
|
& /BLOCK3/HZ,T,HST /BLOCK4/HME,NME,HEF
|
|
|
& /BLOCK5/ENIGHT,E /BLOCK6/HMD,NMD,HDX
|
|
|
& /BLOCK7/D1,XKK,FP30,FP3U,FP1,FP2
|
|
|
& /BLOCK8/HS,TNHS,XSM,MM,DTI,MXSM
|
|
|
& /BLOTN/XSM1,TEXOS,TLBDH,SIGMA /BLOTE/AHH,ATE1,STTE,DTE
|
|
|
& /BLO10/BETA,ETA,DELTA,ZETA
|
|
|
& /BLO11/B2TOP,TC3,itopn,alg10,hcor1
|
|
|
& /iounit/konsol,monito
|
|
|
|
|
|
EXTERNAL XE1,XE2,XE3_1,XE4_1,XE5,XE6,TEDER
|
|
|
|
|
|
save
|
|
|
|
|
|
MADDIR = 'MADROOT'
|
|
|
IND = index(MADDIR, ' ') - 1
|
|
|
|
|
|
DO KI=1,20
|
|
|
do kk=1,100
|
|
|
OUTF(KI,kk)=-1.
|
|
|
end do
|
|
|
end do
|
|
|
|
|
|
do 7398 KI=1,13
|
|
|
INDAP(KI) = IAP3(KI)
|
|
|
7398 continue
|
|
|
|
|
|
do 8398 kind=7,14,1
|
|
|
oarr(kind)=-1.
|
|
|
8398 continue
|
|
|
|
|
|
do 8378 kind=17,32,1
|
|
|
oarr(kind)=-1.
|
|
|
8378 continue
|
|
|
|
|
|
do 8478 kind=34,38,1
|
|
|
oarr(kind)=-1.
|
|
|
8478 continue
|
|
|
|
|
|
oarr(40)=-1.
|
|
|
do 8428 kind=42,50,1
|
|
|
oarr(kind)=-1.
|
|
|
8428 continue
|
|
|
|
|
|
C
|
|
|
C PROGRAM CONSTANTS
|
|
|
C
|
|
|
icalls=icalls+1
|
|
|
ARGMAX=88.0
|
|
|
pi=ATAN(1.0)*4.
|
|
|
UMR=pi/180.
|
|
|
humr=pi/12.
|
|
|
dumr=pi/182.5
|
|
|
ALOG2=ALOG(2.)
|
|
|
ALG10=ALOG(10.)
|
|
|
ALG100=ALOG(100.)
|
|
|
numhei=int(abs(heiend-heibeg)/abs(heistp))+1
|
|
|
if(numhei.gt.100) numhei=100
|
|
|
C
|
|
|
C Code inserted to aleviate block data problem for PC version.
|
|
|
C Thus avoiding DATA statement with parameters from COMMON block.
|
|
|
C
|
|
|
XDELS(1)=5.
|
|
|
XDELS(2)=5.
|
|
|
XDELS(3)=5.
|
|
|
XDELS(4)=10.
|
|
|
DNDS(1)=.016
|
|
|
DNDS(2)=.01
|
|
|
DNDS(3)=.016
|
|
|
DNDS(4)=.016
|
|
|
DDO(1)=9
|
|
|
DDO(2)=5
|
|
|
DDO(3)=5
|
|
|
DDO(4)=25
|
|
|
DO2(1)=5
|
|
|
DO2(2)=5
|
|
|
XNAR(1)=0.0
|
|
|
XNAR(2)=0.0
|
|
|
DTE(1)=5.
|
|
|
DTE(2)=5.
|
|
|
DTE(3)=10.
|
|
|
DTE(4)=20.
|
|
|
DTE(5)=20.
|
|
|
DTI(1)=10.
|
|
|
DTI(2)=10.
|
|
|
DTI(3)=20.
|
|
|
DTI(4)=20.
|
|
|
C
|
|
|
C FIRST SPECIFY YOUR COMPUTERS CHANNEL NUMBERS ....................
|
|
|
C AGNR=OUTPUT (OUTPUT IS DISPLAYED OR STORED IN FILE OUTPUT.IRI)...
|
|
|
C IUCCIR=UNIT NUMBER FOR CCIR COEFFICIENTS ........................
|
|
|
c set konsol=1 if you do not want the konsol information
|
|
|
c
|
|
|
MONITO=6
|
|
|
IUCCIR=10
|
|
|
c-web- special for web version
|
|
|
c-web- KONSOL=1
|
|
|
KONSOL=6
|
|
|
if(.not.jf(12)) konsol=1
|
|
|
c if(.not.jf(12)) then
|
|
|
c konsol=11
|
|
|
c open(11,file='messages.txt')
|
|
|
c endif
|
|
|
c
|
|
|
c selection of density, temperature and ion composition options ......
|
|
|
c
|
|
|
|
|
|
NODEN=(.not.jf(1))
|
|
|
NOTEM=(.not.jf(2))
|
|
|
NOION=(.not.jf(3))
|
|
|
if(.not.NOION) NODEN=.false.
|
|
|
DY=(.not.jf(6))
|
|
|
LAYVER=(.not.jf(11))
|
|
|
OLD79=(.not.jf(7))
|
|
|
GULB0=(.not.jf(4))
|
|
|
F1_OCPRO=(jf(19))
|
|
|
f1_l_cond=.false.
|
|
|
if(F1_OCPRO) F1_L_COND=(.not.jf(20))
|
|
|
DREG=jf(24)
|
|
|
TOPO=jf(29)
|
|
|
TOPC=jf(30)
|
|
|
c
|
|
|
c rz12, F10.7D input option ..........................................
|
|
|
c
|
|
|
RZIN=(.not.jf(17))
|
|
|
IF(RZIN) THEN
|
|
|
ARZIN=OARR(33)
|
|
|
else
|
|
|
oarr(33)=-1.
|
|
|
ENDIF
|
|
|
|
|
|
IGIN=(.not.jf(27))
|
|
|
IF(IGIN) THEN
|
|
|
AIGIN=OARR(39)
|
|
|
else
|
|
|
oarr(39)=-1.
|
|
|
ENDIF
|
|
|
|
|
|
IF(.not.jf(25)) THEN
|
|
|
f107d=OARR(41)
|
|
|
else
|
|
|
oarr(41)=-1.
|
|
|
ENDIF
|
|
|
c
|
|
|
c Topside density ....................................................
|
|
|
c
|
|
|
if(TOPO) then
|
|
|
if (TOPC) then
|
|
|
itopn=0
|
|
|
else
|
|
|
itopn=3
|
|
|
endif
|
|
|
else
|
|
|
if (TOPC) then
|
|
|
itopn=1
|
|
|
else
|
|
|
itopn=2
|
|
|
endif
|
|
|
endif
|
|
|
c
|
|
|
c F2 peak density ....................................................
|
|
|
c
|
|
|
FOF2IN=(.not.jf(8))
|
|
|
IF(FOF2IN) THEN
|
|
|
AFOF2=OARR(1)
|
|
|
IF(AFOF2.GT.100.) AFOF2=SQRT(AFOF2/1.24E10)
|
|
|
else
|
|
|
oarr(1)=-1.
|
|
|
ENDIF
|
|
|
URSIF2=(.not.jf(5))
|
|
|
c
|
|
|
c F2 peak altitude ..................................................
|
|
|
c
|
|
|
HMF2IN=(.not.jf(9))
|
|
|
IF(HMF2IN) then
|
|
|
AHMF2=OARR(2)
|
|
|
else
|
|
|
oarr(2)=-1.
|
|
|
endif
|
|
|
c
|
|
|
c F1 peak density ...................................................
|
|
|
c
|
|
|
FOF1IN=(.not.jf(13))
|
|
|
IF(FOF1IN) THEN
|
|
|
AFOF1=OARR(3)
|
|
|
IF(AFOF1.GT.100.) AFOF1=SQRT(AFOF1/1.24E10)
|
|
|
else
|
|
|
oarr(3)=-1.
|
|
|
ENDIF
|
|
|
c
|
|
|
c F1 peak altitude ..................................................
|
|
|
c
|
|
|
HMF1IN=(.not.jf(14))
|
|
|
IF(HMF1IN) then
|
|
|
AHMF1=OARR(4)
|
|
|
C if(.not.layver.and.(konsol.gt.1)) write(konsol,1939)
|
|
|
C1939 format(' *Ne* User input of hmF1 is only possible for the LAY-',
|
|
|
C & 'version')
|
|
|
else
|
|
|
oarr(4)=-1.
|
|
|
endif
|
|
|
c
|
|
|
c E peak density ....................................................
|
|
|
c
|
|
|
FOEIN=(.not.jf(15))
|
|
|
IF(FOEIN) THEN
|
|
|
AFOE=OARR(5)
|
|
|
IF(AFOE.GT.100.) AFOE=SQRT(AFOE/1.24E10)
|
|
|
else
|
|
|
oarr(5)=-1.
|
|
|
ENDIF
|
|
|
c
|
|
|
c E peak altitude ..................................................
|
|
|
c
|
|
|
HMEIN=(.not.jf(16))
|
|
|
IF(HMEIN) then
|
|
|
AHME=OARR(6)
|
|
|
else
|
|
|
oarr(6)=-1.
|
|
|
endif
|
|
|
c
|
|
|
C TE-NE MODEL OPTION ..............................................
|
|
|
C
|
|
|
TENEOP=(.not.jf(10))
|
|
|
IF(TENEOP) THEN
|
|
|
DO 8154 JXNAR=1,2
|
|
|
XNAR(JXNAR)=OARR(JXNAR+14)
|
|
|
TECON(JXNAR)=.FALSE.
|
|
|
8154 continue
|
|
|
IF(XNAR(JXNAR).GT.0.) TECON(JXNAR)=.TRUE.
|
|
|
else
|
|
|
oarr(15)=-1.
|
|
|
oarr(16)=-1.
|
|
|
ENDIF
|
|
|
c
|
|
|
c lists the selected options before starting the table
|
|
|
c
|
|
|
|
|
|
if(icalls.gt.1.or.konsol.eq.1) goto 8201
|
|
|
C write(konsol,2911)
|
|
|
if(NODEN) goto 2889
|
|
|
C if(LAYVER) write(konsol,9012)
|
|
|
C if(GULB0) write(konsol,9013)
|
|
|
C if(OLD79) write(konsol,9014)
|
|
|
C if(TOPO.and.(.not.TOPC)) write(konsol,9206)
|
|
|
C if(.not.TOPO) then
|
|
|
C if(TOPC) then
|
|
|
C write(konsol,9204)
|
|
|
C else
|
|
|
C write(konsol,9205)
|
|
|
C endif
|
|
|
C endif
|
|
|
if(FOF2IN) then
|
|
|
C write(konsol,9015)
|
|
|
goto 2889
|
|
|
endif
|
|
|
C if(URSIF2) then
|
|
|
C write(konsol,9016)
|
|
|
C else
|
|
|
C write(konsol,9017)
|
|
|
C endif
|
|
|
C if(HMF2IN) write(konsol,9018)
|
|
|
C if(fof1in) write(konsol,9019)
|
|
|
C if(HMF1IN.and.LAYVER) write(konsol,9021)
|
|
|
C if(foein) write(konsol,9022)
|
|
|
C if(HMEIN) write(konsol,9023)
|
|
|
C if(F1_OCPRO) write(konsol,9024)
|
|
|
C if(F1_L_COND) write(konsol,9025)
|
|
|
C if(DREG) then
|
|
|
C write(konsol,9026)
|
|
|
C else
|
|
|
C write(konsol,9027)
|
|
|
C endif
|
|
|
if(jf(26)) then
|
|
|
if(fof2in) then
|
|
|
C write(konsol,9028)
|
|
|
jf(26)=.false.
|
|
|
C else
|
|
|
C write(konsol,9029)
|
|
|
endif
|
|
|
endif
|
|
|
|
|
|
2889 continue
|
|
|
|
|
|
C if((.not.NOION).and.(DY)) write(konsol,9031)
|
|
|
C if((.not.NOION).and.(.not.DY)) write(konsol,9039)
|
|
|
|
|
|
if(NOTEM) goto 8201
|
|
|
C if(TENEOP) write(konsol,9032)
|
|
|
C if(jf(23)) then
|
|
|
C write(konsol,9033)
|
|
|
C else
|
|
|
C write(konsol,9034)
|
|
|
C endif
|
|
|
2911 format('*** IRI parameters are being calculated ***')
|
|
|
9012 format('Ne, E-F: The LAY-Version is prelimenary.',
|
|
|
& ' Erroneous profile features can occur.')
|
|
|
9013 format('Ne, B0: Bottomside thickness is ',
|
|
|
& 'obtained with Gulyaeva-1987 model.')
|
|
|
9014 format('Ne: No upper limit for F10.7 in',
|
|
|
& ' topside formula.')
|
|
|
9204 format('Ne: Corrected Topside Formula')
|
|
|
9205 format('Ne: NeQuick for Topside')
|
|
|
9206 format('Ne: TTS for Topside')
|
|
|
9015 format('Ne, foF2/NmF2: provided by user.')
|
|
|
9016 format('Ne, foF2: URSI model is used.')
|
|
|
9017 format('Ne, foF2: CCIR model is used.')
|
|
|
9018 format('Ne, hmF2/M3000F2: provided by user.')
|
|
|
9019 format('Ne, foF1/NmF1: provided by user.')
|
|
|
9021 format('Ne, hmF1: provided by user.')
|
|
|
9022 format('Ne, foE/NmE: provided by user.')
|
|
|
9023 format('Ne, hmE: provided by user.')
|
|
|
9024 format('Ne, foF1: probability function used.')
|
|
|
9025 format('Ne, foF1: L condition cases included.')
|
|
|
9026 format('Ne, D: IRI-90')
|
|
|
9027 format('Ne, D: IRI-90, DRS-95,and FIRI-01)')
|
|
|
9028 format('Ne, foF2: Storm model turned off if foF2 or',
|
|
|
& ' NmF2 user input')
|
|
|
9029 format('Ne, foF2: storm model included')
|
|
|
9039 format('Ion Com.: DS-78 & DY-85')
|
|
|
9031 format('Ion Com.: DS-95 & TTS-03')
|
|
|
9032 format('Te: Temperature-density correlation is used.')
|
|
|
9033 format('Te: Aeros/ISIS model')
|
|
|
9034 format('Te: Interkosmos model')
|
|
|
|
|
|
8201 continue
|
|
|
|
|
|
C
|
|
|
C CALCULATION OF DAY OF YEAR OR MONTH/DAY AND DECIMAL YEAR
|
|
|
c
|
|
|
c leap year rule: years evenly divisible by 4 are leap years, except
|
|
|
c years also evenly divisible by 100 are not leap years, except years
|
|
|
c also evenly divisible by 400 are leap years. The year 2000 is a 100
|
|
|
c and 400 year exception and therefore it is a normal leap year.
|
|
|
c The next 100 year exception will be in the year 2100!
|
|
|
c
|
|
|
|
|
|
iyear=iyyyy
|
|
|
if(iyear.lt.100) iyear=iyear+1900
|
|
|
idayy=365
|
|
|
if(iyear/4*4.eq.iyear) idayy=366 ! leap year
|
|
|
|
|
|
if(MMDD.lt.0) then
|
|
|
DAYNR=-MMDD
|
|
|
call MODA(1,iyear,MONTH,IDAY,DAYNR,nrdaym)
|
|
|
else
|
|
|
MONTH=MMDD/100
|
|
|
IDAY=MMDD-MONTH*100
|
|
|
call MODA(0,iyear,MONTH,IDAY,DAYNR,nrdaym)
|
|
|
endif
|
|
|
|
|
|
ryear = iyear + daynr/idayy
|
|
|
|
|
|
C
|
|
|
C CALCULATION OF GEODETIC/GEOMAGNETIC COORDINATES (LATI, LONGI AND
|
|
|
C MLAT, MLONG), MAGNETIC INCLINATION (DIP), DIP LATITUDE (MAGBR)
|
|
|
C AND MODIFIED DIP (MODIP), ALL IN DEGREES
|
|
|
C
|
|
|
|
|
|
if(along.lt.0.) along = along + 360. ! -180/180 to 0-360
|
|
|
|
|
|
IF(JMAG.GT.0) THEN
|
|
|
MLAT=ALATI
|
|
|
MLONG=ALONG
|
|
|
ELSE
|
|
|
LATI=ALATI
|
|
|
LONGI=ALONG
|
|
|
ENDIF
|
|
|
CALL GEODIP(IYEAR,LATI,LONGI,MLAT,MLONG,JMAG)
|
|
|
|
|
|
C CALL GGM(JMAG,XLONGI1,XLATI1,XMLONG1,XMLAT1)
|
|
|
|
|
|
call igrf_dip(lati,longi,ryear,300.0,dip,magbr,modip)
|
|
|
|
|
|
if(.not.jf(18)) then
|
|
|
CALL FIELDG(LATI,LONGI,300.0,XMA,YMA,ZMA,BET,DIP,DEC,MODIP)
|
|
|
MAGBR=ATAN(0.5*TAN(DIP*UMR))/UMR
|
|
|
endif
|
|
|
|
|
|
ABSLAT=ABS(LATI)
|
|
|
ABSMLT=ABS(MLAT)
|
|
|
ABSMDP=ABS(MODIP)
|
|
|
ABSMBR=ABS(MAGBR)
|
|
|
|
|
|
c
|
|
|
C CALCULATION OF UT/LT ...............
|
|
|
c
|
|
|
IF(DHOUR.le.24.0) then
|
|
|
HOUR=DHOUR ! dhour =< 24 is LT
|
|
|
ut=hour-longi/15.
|
|
|
if(ut.lt.0) ut=ut+24.
|
|
|
else
|
|
|
UT=DHOUR-25. ! dhour>24 is UT+25
|
|
|
hour=ut+longi/15. ! hour becomes LT
|
|
|
if(hour.gt.24.) hour=hour-24.
|
|
|
endif
|
|
|
|
|
|
c
|
|
|
c season assumes equal length seasons (92 days) with spring
|
|
|
c (season=1) starting at day-of-year=47; for lati<0 adjustment
|
|
|
c for southern hemisphere is made. some models require the
|
|
|
c seasonal month or the seasonal day-of year
|
|
|
c
|
|
|
c zmonth is decimal month (Jan 1 = 1.0 and Dec 31 = 12.97)
|
|
|
c zmonth = month + (iday*1.-1.)/nrdaym
|
|
|
c is not used currently
|
|
|
|
|
|
SEASON=INT((DAYNR+45.0)/92.0)
|
|
|
IF(SEASON.LT.1) SEASON=4
|
|
|
NSEASN=SEASON ! Northern hemisphere season
|
|
|
seaday=daynr
|
|
|
iseamon=month
|
|
|
IF(LATI.GE.0.0) GOTO 5592
|
|
|
SEASON=SEASON-2
|
|
|
IF(SEASON.LT.1) SEASON=SEASON+4
|
|
|
iseamon=month+6
|
|
|
if(iseamon.gt.12) iseamon=iseamon-12
|
|
|
seaday=daynr+idayy/2.
|
|
|
if(seaday.gt.idayy) seaday=seaday-idayy
|
|
|
|
|
|
C
|
|
|
C 12-month running mean sunspot number (rssn) and Ionospheric Global
|
|
|
C index (gind), daily F10.7 cm solar radio flux (f107d) and monthly
|
|
|
C F10.7 (cov) index
|
|
|
C
|
|
|
|
|
|
5592 continue
|
|
|
sam_mon=(month.eq.montho)
|
|
|
sam_yea=(iyear.eq.iyearo)
|
|
|
sam_doy=(daynr.eq.idaynro)
|
|
|
sam_date=(sam_yea.and.sam_doy)
|
|
|
sam_ut=(ut.eq.ut0)
|
|
|
if(sam_date.and..not.rzino.and..not.rzin.
|
|
|
& and..not.igin.and..not.igino) goto 2910
|
|
|
|
|
|
call tcon(iyear,month,iday,daynr,rzar,arig,ttt,nmonth)
|
|
|
if(nmonth.lt.0) goto 3330 ! jump to end of program
|
|
|
|
|
|
if(RZIN) then
|
|
|
rrr = arzin
|
|
|
rzar(1) = rrr
|
|
|
rzar(2) = rrr
|
|
|
rzar(3) = rrr
|
|
|
c zi=-12.349154+(1.4683266-2.67690893e-03*rrr)*rrr
|
|
|
c if(zi.gt.174.0) zi=174.0
|
|
|
c arig(1) = zi
|
|
|
c arig(2) = zi
|
|
|
c arig(3) = zi
|
|
|
endif
|
|
|
if(IGIN) then
|
|
|
zi = aigin
|
|
|
arig(1) = zi
|
|
|
arig(2) = zi
|
|
|
arig(3) = zi
|
|
|
endif
|
|
|
rssn=rzar(3)
|
|
|
gind=arig(3)
|
|
|
COV=63.75+RSSN*(0.728+RSSN*0.00089)
|
|
|
c rlimit=gind
|
|
|
c COVSAT=63.75+rlimit*(0.728+rlimit*0.00089)
|
|
|
COVSAT=cov
|
|
|
if(covsat.gt.188.) covsat=188
|
|
|
|
|
|
if(jf(25)) then
|
|
|
f107d=cov
|
|
|
C Modified by Bill Rideout to remove dependence on ap.dat file
|
|
|
C call APF_ONLY(iyear,month,iday,F107DX)
|
|
|
if (F107 > 0.0) then
|
|
|
F107DX = F107
|
|
|
else
|
|
|
F107DX = -3.0
|
|
|
endif
|
|
|
if(f107dx.gt.-2) f107d=f107dx
|
|
|
endif
|
|
|
|
|
|
C
|
|
|
C CALCULATION OF SOLAR ZENITH ANGLE (XHI/DEG), SUN DECLINATION ANGLE
|
|
|
C (SUNDEC),SOLAR ZENITH ANGLE AT NOON (XHINON) AND TIME OF LOCAL
|
|
|
C SUNRISE/SUNSET (SAX, SUX; dec. hours) AT 70 KM (D-REGION), 110 KM
|
|
|
C (E-REGION), 200 KM (F1-REGION), AND 500 KM (TE, TI).
|
|
|
C
|
|
|
|
|
|
2910 continue
|
|
|
CALL SOCO(daynr,HOUR,LATI,LONGI,70.,SUNDEC,XHI1,SAX70,SUX70)
|
|
|
CALL SOCO(daynr,HOUR,LATI,LONGI,110.,SUD1,XHI2,SAX110,SUX110)
|
|
|
CALL SOCO(daynr,HOUR,LATI,LONGI,200.,SUD1,XHI,SAX200,SUX200)
|
|
|
CALL SOCO(daynr,HOUR,LATI,LONGI,500.,SUD1,XHI3,SAX500,SUX500)
|
|
|
CALL SOCO(daynr,12.0,LATI,LONGI,110.,SUNDE1,XHINON,SAX1,SUX1)
|
|
|
DNIGHT=.FALSE.
|
|
|
if(abs(sax70).gt.25.0) then
|
|
|
if(sax70.lt.0.0) DNIGHT=.TRUE.
|
|
|
goto 9334
|
|
|
endif
|
|
|
if(SAX70.le.SUX70) goto 1386
|
|
|
if((hour.gt.sux70).and.(hour.lt.sax70)) dnight=.true.
|
|
|
goto 9334
|
|
|
1386 IF((HOUR.GT.SUX70).OR.(HOUR.LT.SAX70)) DNIGHT=.TRUE.
|
|
|
|
|
|
9334 ENIGHT=.FALSE.
|
|
|
if(abs(sax110).gt.25.0) then
|
|
|
if(sax110.lt.0.0) ENIGHT=.TRUE.
|
|
|
goto 8334
|
|
|
endif
|
|
|
if(SAX110.le.SUX110) goto 9386
|
|
|
if((hour.gt.sux110).and.(hour.lt.sax110)) enight=.true.
|
|
|
goto 8334
|
|
|
9386 IF((HOUR.GT.SUX110).OR.(HOUR.LT.SAX110)) ENIGHT=.TRUE.
|
|
|
|
|
|
8334 FNIGHT=.FALSE.
|
|
|
if(abs(sax200).gt.25.0) then
|
|
|
if(sax200.lt.0.0) FNIGHT=.TRUE.
|
|
|
goto 1334
|
|
|
endif
|
|
|
if(SAX200.le.SUX200) goto 7386
|
|
|
if((hour.gt.sux200).and.(hour.lt.sax200)) fnight=.true.
|
|
|
goto 1334
|
|
|
7386 IF((HOUR.GT.SUX200).OR.(HOUR.LT.SAX200)) FNIGHT=.TRUE.
|
|
|
|
|
|
C
|
|
|
C CALCULATION OF ELECTRON DENSITY PARAMETERS................
|
|
|
C lower height boundary (HNEA), upper boundary (HNEE)
|
|
|
C
|
|
|
|
|
|
1334 continue
|
|
|
HNEA=65.
|
|
|
IF(DNIGHT) HNEA=80.
|
|
|
HNEE=2000.
|
|
|
IF(NODEN) GOTO 4933
|
|
|
|
|
|
DELA=4.32
|
|
|
IF(ABSMDP.GE.18.) DELA=1.0+EXP(-(ABSMDP-30.0)/10.0)
|
|
|
DELL=1+EXP(-(ABSLAT-20.)/10.)
|
|
|
c
|
|
|
c E peak critical frequency (foF2), density (NmE), and height (hmE)
|
|
|
c
|
|
|
IF(FOEIN) THEN
|
|
|
FOE=AFOE
|
|
|
ELSE
|
|
|
FOE=FOEEDI(COV,XHI,XHINON,ABSLAT)
|
|
|
ENDIF
|
|
|
NME=1.24E10*FOE*FOE
|
|
|
|
|
|
IF(HMEIN) THEN
|
|
|
HME=AHME
|
|
|
ELSE
|
|
|
HME=110.0
|
|
|
ENDIF
|
|
|
c
|
|
|
c F2 peak critical frequency foF2, density NmF2, and height hmF2
|
|
|
c
|
|
|
C READ CCIR AND URSI COEFFICIENT SET FOR CHOSEN MONTH
|
|
|
C
|
|
|
IF((FOF2IN).AND.(HMF2IN).and.(itopn.ne.2)) GOTO 501
|
|
|
IF(URSIF2.NEQV.URSIFO) GOTO 7797
|
|
|
if(.not.rzin.and..not.rzino.and..not.igin.and..not.igino) then
|
|
|
IF(sam_mon.AND.(nmonth.EQ.nmono).and.sam_yea) GOTO 4292
|
|
|
IF(sam_mon) GOTO 4293
|
|
|
endif
|
|
|
c
|
|
|
c the program expects the coefficients files in ASCII format; if you
|
|
|
C want to use the binary version of the coefficients, please use the
|
|
|
C the statements that are commented-out below and comment-out the
|
|
|
C ASCII-related statements.
|
|
|
c
|
|
|
7797 URSIFO=URSIF2
|
|
|
WRITE(FILNAM,104) MONTH+10
|
|
|
104 FORMAT('ccir',I2,'.asc')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary-104 FORMAT('ccir',I2,'.bin')
|
|
|
c-web- special for web-version:
|
|
|
c104 FORMAT('/usr/local/etc/httpd/cgi-bin/models/IRI/ccir',I2,'.asc')
|
|
|
c-web- special for web-version:
|
|
|
c
|
|
|
FULL_FILENAME = MADDIR(1:IND) // '/bin/' // FILNAM
|
|
|
OPEN(IUCCIR,FILE=FULL_FILENAME,STATUS='OLD',ERR=8448,
|
|
|
& FORM='FORMATTED')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- & FORM='UNFORMATTED')
|
|
|
c
|
|
|
READ(IUCCIR,4689) F2,FM3
|
|
|
4689 FORMAT(1X,4E15.8)
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- READ(IUCCIR) F2,FM3
|
|
|
|
|
|
c
|
|
|
CLOSE(IUCCIR)
|
|
|
C
|
|
|
C then URSI if chosen ....................................
|
|
|
C
|
|
|
if(URSIF2) then
|
|
|
WRITE(FILNAM,1144) MONTH+10
|
|
|
1144 FORMAT('ursi',I2,'.asc')
|
|
|
c-web- special for web-version:
|
|
|
c1144 FORMAT('/usr/local/etc/httpd/cgi-bin/models/IRI/ursi',I2,'.asc')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary-1144 FORMAT('ursi',I2,'.bin')
|
|
|
|
|
|
FULL_FILENAME = MADDIR(1:IND) // '/bin/' // FILNAM
|
|
|
OPEN(IUCCIR,FILE=FULL_FILENAME,STATUS='OLD',ERR=8448,
|
|
|
& FORM='FORMATTED')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- & FORM='UNFORMATTED')
|
|
|
|
|
|
READ(IUCCIR,4689) F2
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- READ(IUCCIR) F2
|
|
|
|
|
|
CLOSE(IUCCIR)
|
|
|
endif
|
|
|
|
|
|
C
|
|
|
C READ CCIR AND URSI COEFFICIENT SET FOR NMONTH, i.e. previous
|
|
|
c month if day is less than 15 and following month otherwise
|
|
|
C
|
|
|
|
|
|
4293 continue
|
|
|
|
|
|
c
|
|
|
c first CCIR ..............................................
|
|
|
c
|
|
|
|
|
|
WRITE(FILNAM,104) NMONTH+10
|
|
|
FULL_FILENAME = MADDIR(1:IND) // '/bin/' // FILNAM
|
|
|
OPEN(IUCCIR,FILE=FULL_FILENAME,STATUS='OLD',ERR=8448,
|
|
|
& FORM='FORMATTED')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- & FORM='unFORMATTED')
|
|
|
|
|
|
READ(IUCCIR,4689) F2N,FM3N
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- READ(IUCCIR) F2N,FM3N
|
|
|
|
|
|
CLOSE(IUCCIR)
|
|
|
|
|
|
C
|
|
|
C then URSI if chosen .....................................
|
|
|
C
|
|
|
if(URSIF2) then
|
|
|
WRITE(FILNAM,1144) NMONTH+10
|
|
|
FULL_FILENAME = MADDIR(1:IND) // '/bin/' // FILNAM
|
|
|
OPEN(IUCCIR,FILE=FULL_FILENAME,STATUS='OLD',ERR=8448,
|
|
|
& FORM='FORMATTED')
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- & FORM='unFORMATTED')
|
|
|
|
|
|
READ(IUCCIR,4689) F2N
|
|
|
c-binary- if binary files than use:
|
|
|
c-binary- READ(IUCCIR) F2N
|
|
|
|
|
|
CLOSE(IUCCIR)
|
|
|
endif
|
|
|
|
|
|
GOTO 4291
|
|
|
|
|
|
8448 WRITE(konsol,8449) FULL_FILENAME
|
|
|
8449 FORMAT(1X////,
|
|
|
& ' The file ',A30,'is not in your directory.')
|
|
|
GOTO 3330
|
|
|
C
|
|
|
C LINEAR INTERPOLATION IN SOLAR ACTIVITY. IG12 used for foF2
|
|
|
C
|
|
|
|
|
|
4291 continue
|
|
|
RR2=ARIG(1)/100.
|
|
|
RR2N=ARIG(2)/100.
|
|
|
RR1=1.-RR2
|
|
|
RR1N=1.-RR2N
|
|
|
DO I=1,76
|
|
|
DO J=1,13
|
|
|
K=J+13*(I-1)
|
|
|
FF0N(K)=F2N(J,I,1)*RR1N+F2N(J,I,2)*RR2N
|
|
|
FF0(K)=F2(J,I,1)*RR1+F2(J,I,2)*RR2
|
|
|
END DO
|
|
|
END DO
|
|
|
|
|
|
RR2=RZAR(1)/100.
|
|
|
RR2N=RZAR(2)/100.
|
|
|
RR1=1.-RR2
|
|
|
RR1N=1.-RR2N
|
|
|
DO I=1,49
|
|
|
DO J=1,9
|
|
|
K=J+9*(I-1)
|
|
|
XM0N(K)=FM3N(J,I,1)*RR1N+FM3N(J,I,2)*RR2N
|
|
|
XM0(K)=FM3(J,I,1)*RR1+FM3(J,I,2)*RR2
|
|
|
END DO
|
|
|
END DO
|
|
|
|
|
|
4292 zfof2 = FOUT(MODIP,LATI,LONGI,UT,FF0)
|
|
|
fof2n = FOUT(MODIP,LATI,LONGI,UT,FF0N)
|
|
|
zm3000 = XMOUT(MODIP,LATI,LONGI,UT,XM0)
|
|
|
xm300n = XMOUT(MODIP,LATI,LONGI,UT,XM0N)
|
|
|
midm=15
|
|
|
if(month.eq.2) midm=14
|
|
|
if (iday.lt.midm) then
|
|
|
yfof2 = fof2n + ttt * (zfof2-fof2n)
|
|
|
xm3000= xm300n+ ttt * (zm3000-xm300n)
|
|
|
else
|
|
|
yfof2 = zfof2 + ttt * (fof2n-zfof2)
|
|
|
xm3000= zm3000+ ttt * (xm300n-zm3000)
|
|
|
endif
|
|
|
|
|
|
501 IF(FOF2IN) THEN
|
|
|
FOF2=AFOF2
|
|
|
ELSE
|
|
|
FOF2=YFOF2
|
|
|
ENDIF
|
|
|
NMF2=1.24E10*FOF2*FOF2
|
|
|
|
|
|
IF(HMF2IN) THEN
|
|
|
IF(AHMF2.LT.50.0) THEN
|
|
|
XM3000=AHMF2
|
|
|
HMF2=HMF2ED(MAGBR,RSSN,FOF2/FOE,XM3000)
|
|
|
ELSE
|
|
|
HMF2=AHMF2
|
|
|
c XM3000=XM3000HM(MAGBR,RSSN,FOF2/FOE,HMF2)
|
|
|
ENDIF
|
|
|
ELSE
|
|
|
HMF2=HMF2ED(MAGBR,RSSN,FOF2/FOE,XM3000)
|
|
|
ENDIF
|
|
|
|
|
|
c
|
|
|
c stormtime updating
|
|
|
c
|
|
|
|
|
|
stormcorr=-1.
|
|
|
if(jf(26)) then
|
|
|
C removed by B. Rideout
|
|
|
C if(.not.sam_date.or..not.sam_ut)
|
|
|
C & call apf(iyear,month,iday,ut,indap)
|
|
|
if(indap(1).gt.-2) then
|
|
|
icoord=1
|
|
|
kut=int(ut)
|
|
|
call STORM(indap,lati,longi,icoord,cglat,kut,
|
|
|
& daynr,stormcorr)
|
|
|
fof2=fof2*stormcorr
|
|
|
NMF2=1.24E10*FOF2*FOF2
|
|
|
endif
|
|
|
endif
|
|
|
nmono=nmonth
|
|
|
MONTHO=MONTH
|
|
|
iyearo=iyear
|
|
|
idaynro=daynr
|
|
|
rzino=rzin
|
|
|
igino=igin
|
|
|
ut0=ut
|
|
|
|
|
|
c
|
|
|
c topside profile parameters .............................
|
|
|
c
|
|
|
COS2=COS(MLAT*UMR)
|
|
|
COS2=COS2*COS2
|
|
|
FLU=(COVSAT-40.0)/30.0
|
|
|
c option to use unlimiited F10.7M for the topside
|
|
|
IF(OLD79) FLU=(COV-40.0)/30.0
|
|
|
c previously: IF(OLD79) ETA1=-0.0070305*COS2
|
|
|
EX=EXP(-MLAT/15.)
|
|
|
EX1=EX+1
|
|
|
EPIN=4.*EX/(EX1*EX1)
|
|
|
ETA1=-0.02*EPIN
|
|
|
ETA = 0.058798 + ETA1 -
|
|
|
& FLU * (0.014065 - 0.0069724 * COS2) +
|
|
|
& FOF2* (0.0024287 + 0.0042810 * COS2 - 0.0001528 * FOF2)
|
|
|
&
|
|
|
|
|
|
c fluu=flu
|
|
|
corr if(fluu.gt.flumax) fluu=flumax
|
|
|
|
|
|
ZETA = 0.078922 - 0.0046702 * COS2 -
|
|
|
& FLU * (0.019132 - 0.0076545 * COS2) +
|
|
|
& FOF2* (0.0032513 + 0.0060290 * COS2 - 0.00020872 * FOF2)
|
|
|
|
|
|
BETA=-128.03 + 20.253 * COS2 -
|
|
|
& FLU * (8.0755 + 0.65896 * COS2) +
|
|
|
& FOF2* (0.44041 + 0.71458 * COS2 - 0.042966 * FOF2)
|
|
|
|
|
|
Z=EXP(94.5/BETA)
|
|
|
corr Z=EXP(94.45/BETA)
|
|
|
Z1=Z+1
|
|
|
Z2=Z/(BETA*Z1*Z1)
|
|
|
DELTA=(ETA/Z1-ZETA/2.0)/(ETA*Z2+ZETA/400.0)
|
|
|
c
|
|
|
c Correction term for topside
|
|
|
c
|
|
|
if(itopn.eq.1) then
|
|
|
zmp1 = exp(modip / 10.)
|
|
|
zmp11 = 1. + zmp1
|
|
|
zmp111 = zmp1 / (zmp11 * zmp11)
|
|
|
zmp2 = exp(modip / 19.)
|
|
|
zmp22 = 1. + zmp2
|
|
|
zmp222 = zmp2 / (zmp22 * zmp22)
|
|
|
r2n = -0.84 - 1.6 * zmp111
|
|
|
r2d = -0.84 - 0.64 * zmp111
|
|
|
x1n = 230. - 700. * zmp222
|
|
|
x1d = 550. - 1900. * zmp222
|
|
|
r2 = HPOL(HOUR,r2d,r2n,SAX500,SUX500,1.,1.)
|
|
|
x1 = HPOL(HOUR,x1d,x1n,SAX500,SUX500,1.,1.)
|
|
|
hcor1 = hmF2 + x1
|
|
|
x12 = 1500. - x1
|
|
|
tc3 = r2 / x12
|
|
|
endif
|
|
|
c
|
|
|
c NeQuick topside parameters (use CCIR-M3000F2 even if user-hmF2)
|
|
|
c
|
|
|
if (itopn.eq.2) then
|
|
|
dNdHmx=-3.467+1.714*log(foF2)+2.02*log(xM3000)
|
|
|
dNdHmx=exp(dNdHmx)*0.01
|
|
|
B2bot=0.04774*FOF2*FOF2/dNdHmx
|
|
|
b2k = 3.22-0.0538*foF2-0.00664*hmF2+0.113*hmF2/B2bot
|
|
|
& +0.00257*rssn
|
|
|
ee=exp(2.0*(b2k-1.0))
|
|
|
b2k=(b2k*ee+1.0)/(ee+1.0)
|
|
|
B2TOP=b2k*B2bot
|
|
|
endif
|
|
|
c
|
|
|
c F layer - bottomside thickness parameter B0 and shape parameters B1
|
|
|
c
|
|
|
|
|
|
B1=HPOL(HOUR,1.9,2.6,SAX200,SUX200,1.,1.)
|
|
|
if(GULB0) then
|
|
|
call ROGUL(SEADAY,XHI,SEAX,GRAT)
|
|
|
if(FNIGHT) GRAT=0.91-HMF2/4000.
|
|
|
BCOEF=B1*(B1*(0.0046*B1-0.0548)+0.2546)+0.3606
|
|
|
B0CNEW=HMF2*(1.-GRAT)
|
|
|
B0=B0CNEW/BCOEF
|
|
|
else
|
|
|
B0 = B0_98(HOUR,SAX200,SUX200,NSEASN,RSSN,LONGI,MODIP)
|
|
|
endif
|
|
|
c
|
|
|
c F1 layer height hmF1, critical frequency foF1, peak density NmF1
|
|
|
c
|
|
|
IF(FOF1IN) THEN
|
|
|
FOF1=AFOF1
|
|
|
ELSE
|
|
|
FOF1=FOF1ED(ABSMBR,RSSN,XHI)
|
|
|
ENDIF
|
|
|
c F1 layer thickness parameter c1
|
|
|
c1 = f1_c1(modip,hour,sux200,sax200)
|
|
|
c F1 occurrence probability with Scotto et al. 1997
|
|
|
call f1_prob(xhi,mlat,rssn,f1pbw,f1pbl)
|
|
|
c F1 occurrence probability Ducharme et al.
|
|
|
f1pbo = 0.0
|
|
|
if(fof1in.or.((.not.fnight).and.(fof1.gt.0.0))) f1pbo=1.
|
|
|
|
|
|
if(f1_ocpro) then
|
|
|
f1pb = f1pbw
|
|
|
if(f1_l_cond) f1pb = f1pbl
|
|
|
f1reg=.false.
|
|
|
if((fof1in).or.(f1pb.ge.0.5)) f1reg=.true.
|
|
|
else
|
|
|
f1pb = f1pbo
|
|
|
f1reg=.false.
|
|
|
if(f1pb.gt.0.0) f1reg=.true.
|
|
|
endif
|
|
|
|
|
|
NMF1=1.24E10*FOF1*FOF1
|
|
|
|
|
|
c
|
|
|
c E-valley: depth, width, height of deepest point (HDEEP),
|
|
|
c height of valley top (HEF)
|
|
|
c
|
|
|
XDEL=XDELS(SEASON)/DELA
|
|
|
DNDHBR=DNDS(SEASON)/DELA
|
|
|
HDEEP=HPOL(HOUR,10.5/DELA,28.,SAX110,SUX110,1.,1.)
|
|
|
WIDTH=HPOL(HOUR,17.8/DELA,45.+22./DELA,SAX110,SUX110,1.,1.)
|
|
|
DEPTH=HPOL(HOUR,XDEL,81.,SAX110,SUX110,1.,1.)
|
|
|
DLNDH=HPOL(HOUR,DNDHBR,.06,SAX110,SUX110,1.,1.)
|
|
|
IF(DEPTH.LT.1.0) GOTO 600
|
|
|
IF(ENIGHT) DEPTH=-DEPTH
|
|
|
CALL TAL(HDEEP,DEPTH,WIDTH,DLNDH,EXT,E)
|
|
|
IF(.NOT.EXT) GOTO 667
|
|
|
C if(konsol.gt.1) WRITE(KONSOL,650)
|
|
|
C650 FORMAT(1X,'*NE* E-REGION VALLEY CAN NOT BE MODELLED')
|
|
|
600 WIDTH=.0
|
|
|
667 HEF=HME+WIDTH
|
|
|
hefold=hef
|
|
|
VNER = (1. - ABS(DEPTH) / 100.) * NME
|
|
|
|
|
|
c
|
|
|
c Parameters below E .............................
|
|
|
c
|
|
|
|
|
|
2727 continue
|
|
|
hmex=hme-9.
|
|
|
NMD=XMDED(XHI,RSSN,4.0E8)
|
|
|
HMD=HPOL(HOUR,81.0,88.0,SAX70,SUX70,1.,1.)
|
|
|
F(1)=HPOL(HOUR,0.02+0.03/DELA,0.05,SAX70,SUX70,1.,1.)
|
|
|
F(2)=HPOL(HOUR,4.6,4.5,SAX70,SUX70,1.,1.)
|
|
|
F(3)=HPOL(HOUR,-11.5,-4.0,SAX70,SUX70,1.,1.)
|
|
|
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)
|
|
|
c
|
|
|
c indermediate region between D and E region; parameters xkk
|
|
|
c and d1 are found such that the function reaches hdx/xdx/dxdh
|
|
|
c
|
|
|
X=HDX-HMD
|
|
|
XDX=NMD*EXP(X*(FP1+X*(FP2+X*FP30)))
|
|
|
DXDX=XDX*(FP1+X*(2.0*FP2+X*3.0*FP30))
|
|
|
X=HME-HDX
|
|
|
XKK=-DXDX*X/(XDX*ALOG(XDX/NME))
|
|
|
c
|
|
|
c if exponent xkk is larger than xkkmax, then xkk will be set to
|
|
|
c xkkmax and d1 will be determined such that the point hdx/xdx is
|
|
|
c reached; derivative is no longer continuous.
|
|
|
c
|
|
|
xkkmax=5.
|
|
|
if(xkk.gt.xkkmax) then
|
|
|
xkk=xkkmax
|
|
|
d1=-alog(xdx/nme)/(x**xkk)
|
|
|
else
|
|
|
D1=DXDX/(XDX*XKK*X**(XKK-1.0))
|
|
|
endif
|
|
|
c
|
|
|
c compute Danilov et al. (1995) D-region model values
|
|
|
c
|
|
|
if(.not.dreg) then
|
|
|
vKp=1.
|
|
|
f5sw=0
|
|
|
f6wa=0
|
|
|
call DRegion(xhi,month,f107d,vKp,f5SW,f6WA,elg)
|
|
|
do ii=1,7
|
|
|
ddens(1,ii)=10**(elg(ii)+6)
|
|
|
enddo
|
|
|
f5sw=1
|
|
|
f6wa=0
|
|
|
call DRegion(xhi,month,f107d,vKp,f5SW,f6WA,elg)
|
|
|
do ii=1,7
|
|
|
ddens(2,ii)=10**(elg(ii)+6)
|
|
|
enddo
|
|
|
f5sw=0
|
|
|
f6wa=1
|
|
|
call DRegion(xhi,month,f107d,vKp,f5SW,f6WA,elg)
|
|
|
do ii=1,7
|
|
|
ddens(3,ii)=10**(elg(ii)+6)
|
|
|
enddo
|
|
|
endif
|
|
|
C
|
|
|
C SEARCH FOR HMF1 ..................................................
|
|
|
C
|
|
|
|
|
|
if(LAYVER) goto 6153
|
|
|
hmf1=0
|
|
|
IF(.not.F1REG) GOTO 380
|
|
|
|
|
|
c omit F1 feature if nmf1*0.9 is smaller than nme
|
|
|
bnmf1=0.9*nmf1
|
|
|
if(nme.ge.bnmf1) goto 9427
|
|
|
|
|
|
9245 XE2H=XE2(HEF)
|
|
|
if(xe2h.gt.bnmf1) then
|
|
|
hef=hef-1
|
|
|
if(hef.le.hme) goto 9427
|
|
|
goto 9245
|
|
|
endif
|
|
|
CALL REGFA1(HEF,HMF2,XE2H,NMF2,0.001,NMF1,XE2,SCHALT,HMF1)
|
|
|
IF(.not.SCHALT) GOTO 3801
|
|
|
|
|
|
c
|
|
|
c omit F1 feature ....................................................
|
|
|
c
|
|
|
|
|
|
C9427 if(konsol.gt.1) WRITE(KONSOL,11)
|
|
|
C11 FORMAT(1X,'*NE* HMF1 IS NOT EVALUATED BY THE FUNCTION XE2'/
|
|
|
C & 1X,'CORR.: NO F1 REGION, B1=3, C1=0.0')
|
|
|
9427 HMF1=0.
|
|
|
F1REG=.FALSE.
|
|
|
c NMF1=0.
|
|
|
c C1=0.0
|
|
|
c
|
|
|
c Determine E-valley parameters if HEF was changed
|
|
|
c
|
|
|
|
|
|
3801 continue
|
|
|
if(hef.ne.hefold) then
|
|
|
width=hef-hme
|
|
|
IF(ENIGHT) DEPTH=-DEPTH
|
|
|
CALL TAL(HDEEP,DEPTH,WIDTH,DLNDH,EXT,E)
|
|
|
IF(.NOT.EXT) GOTO 380
|
|
|
C if(konsol.gt.1) WRITE(KONSOL,650)
|
|
|
WIDTH=.0
|
|
|
hef=hme
|
|
|
hefold=hef
|
|
|
goto 9245
|
|
|
endif
|
|
|
|
|
|
C
|
|
|
C SEARCH FOR HST [NE3(HST)=NME] ......................................
|
|
|
C
|
|
|
|
|
|
380 continue
|
|
|
|
|
|
IF(F1REG) then
|
|
|
hf1=hmf1
|
|
|
xf1=nmf1
|
|
|
else
|
|
|
hf1=(hmf2+hef)/2.
|
|
|
xf1=xe2(hf1)
|
|
|
endif
|
|
|
|
|
|
hf2=hef
|
|
|
xf2=xe3_1(hf2)
|
|
|
if(xf2.gt.nme) goto 3885
|
|
|
|
|
|
CALL REGFA1(hf1,HF2,XF1,XF2,0.001,NME,XE3_1,SCHALT,HST)
|
|
|
if(schalt) goto 3885
|
|
|
|
|
|
HZ=(HST+HF1)/2.0
|
|
|
D=HZ-HST
|
|
|
T=D*D/(HZ-HEF-D)
|
|
|
GOTO 4933
|
|
|
|
|
|
c
|
|
|
c assume linear interpolation between HZ and HEF ..................
|
|
|
c
|
|
|
|
|
|
C3885 if(konsol.gt.1) WRITE(KONSOL,100)
|
|
|
C100 FORMAT(1X,'*NE* HST IS NOT EVALUATED BY THE FUNCTION XE3')
|
|
|
3885 HZ=(HEF+HF1)/2.
|
|
|
xnehz=xe3_1(hz)
|
|
|
C if(konsol.gt.1) WRITE(KONSOL,901) HZ,HEF
|
|
|
C901 FORMAT(6X,'CORR.: LIN. APP. BETWEEN HZ=',F5.1,
|
|
|
C & ' AND HEF=',F5.1)
|
|
|
T=(XNEHZ-NME)/(HZ-HEF)
|
|
|
HST=-333.
|
|
|
GOTO 4933
|
|
|
|
|
|
C
|
|
|
C LAY-functions for middle ionosphere
|
|
|
C
|
|
|
|
|
|
6153 IF(HMF1IN) THEN
|
|
|
HMF1M=AHMF1
|
|
|
ELSE
|
|
|
HMF1M=165.+0.6428*XHI
|
|
|
ENDIF
|
|
|
HHALF = GRAT * HMF2
|
|
|
HV1R = HME + WIDTH
|
|
|
HV2R = HME + HDEEP
|
|
|
HHMF2 = HMF2
|
|
|
CALL INILAY(FNIGHT,F1REG,NMF2,NMF1,NME,VNER,HHMF2,HMF1M,HME,
|
|
|
& HV1R,HV2R,HHALF,HXL,SCL,AMP,IIQU)
|
|
|
C IF((IIQU.EQ.1).and.(konsol.gt.1)) WRITE(KONSOL,7733)
|
|
|
C7733 FORMAT('*NE* LAY amplitudes found with 2nd choice of HXL(1).')
|
|
|
C IF((IIQU.EQ.2).and.(konsol.gt.1)) WRITE(KONSOL,7722)
|
|
|
C7722 FORMAT('*NE* LAY amplitudes could not be found.')
|
|
|
|
|
|
C
|
|
|
C---------- CALCULATION OF NEUTRAL TEMPERATURE PARAMETER-------
|
|
|
C
|
|
|
|
|
|
4933 HTA=120.0
|
|
|
IF(NOTEM) GOTO 240
|
|
|
SEC=UT*3600.
|
|
|
CALL CIRA86(DAYNR,SEC,LATI,LONGI,HOUR,COV,TEXOS,TN120,SIGMA)
|
|
|
IF(HOUR.NE.0.0) THEN
|
|
|
iyz=iyear
|
|
|
idz=daynr
|
|
|
if(jf(18)) then
|
|
|
secni=(24.-longi/15)*3600.
|
|
|
else
|
|
|
call ut_lt(1,utni,0.0,longi,iyz,idz)
|
|
|
SECNI=utni*3600.
|
|
|
endif
|
|
|
CALL CIRA86(DAYNR,SECNI,LATI,LONGI,0.,COV,TEXNI,TN1NI,SIGNI)
|
|
|
ELSE
|
|
|
TEXNI=TEXOS
|
|
|
TN1NI=TN120
|
|
|
SIGNI=SIGMA
|
|
|
ENDIF
|
|
|
TLBDH=TEXOS-TN120
|
|
|
TLBDN=TEXNI-TN1NI
|
|
|
|
|
|
C
|
|
|
C--------- CALCULATION OF ELECTRON TEMPERATURE PARAMETER--------
|
|
|
C
|
|
|
|
|
|
881 CONTINUE
|
|
|
|
|
|
c Te(120km) = Tn(120km)
|
|
|
|
|
|
AHH(1)=120.
|
|
|
ATE(1)=TN120
|
|
|
|
|
|
C Te-MAXIMUM based on JICAMARCA and ARECIBO data
|
|
|
|
|
|
HMAXD=60.*EXP(-(MLAT/22.41)**2)+210.
|
|
|
HMAXN=150.
|
|
|
AHH(2)=HPOL(HOUR,HMAXD,HMAXN,SAX200,SUX200,1.,1.)
|
|
|
TMAXD=800.*EXP(-(MLAT/33.)**2)+1500.
|
|
|
TMAXN=TN(HMAXN,TEXNI,TLBDN,SIGNI)+20
|
|
|
ATE(2)=HPOL(HOUR,TMAXD,TMAXN,SAX200,SUX200,1.,1.)
|
|
|
|
|
|
c Te(300km), Te(400km) from AE-C, Te(1400km), Te(3000km) from
|
|
|
c ISIS, Brace and Theis
|
|
|
|
|
|
DIPLAT=MAGBR
|
|
|
CALL TEBA(DIPLAT,HOUR,NSEASN,TEA)
|
|
|
|
|
|
icd=0
|
|
|
if(jf(23)) then
|
|
|
|
|
|
c Te at fixed heights taken from Brace and Theis
|
|
|
|
|
|
AHH(3)=300.
|
|
|
AHH(4)=400.
|
|
|
AHH(5)=600.
|
|
|
AHH(6)=1400.
|
|
|
AHH(7)=3000.
|
|
|
hte=3000
|
|
|
ATE(3)=TEA(1)
|
|
|
ATE(4)=TEA(2)
|
|
|
ATE(6)=TEA(3)
|
|
|
ATE(7)=TEA(4)
|
|
|
|
|
|
c Te(600km) from AEROS, Spenner and Plugge (1979)
|
|
|
|
|
|
ETT=EXP(-MLAT/11.35)
|
|
|
TET=2900.-5600.*ETT/((ETT+1)**2.)
|
|
|
TEN=839.+1161./(1.+EXP(-(ABSMLT-45.)/5.))
|
|
|
ATE(5)=HPOL(HOUR,TET,TEN,SAX500,SUX500,1.5,1.5)
|
|
|
else
|
|
|
|
|
|
c Te at fixed heights from IK, Truhlik, Triskova, Smilauer
|
|
|
|
|
|
AHH(3)=300.
|
|
|
AHH(4)=550.
|
|
|
AHH(5)=900.
|
|
|
AHH(6)=1500.
|
|
|
AHH(7)=2500.
|
|
|
hte=2500
|
|
|
dimo=0.311653
|
|
|
c icd=1 ! compute INVDIP
|
|
|
c isa=0 ! solar activity correction off
|
|
|
c ise=0 ! season correction off
|
|
|
do 3491 ijk=4,7
|
|
|
call igrf_sub(lati,longi,ryear,ahh(ijk),
|
|
|
& xl,icode,dipl,babs)
|
|
|
if(xl.gt.10.) xl=10.
|
|
|
call elteik(1,0,0,invdip,xl,dimo,
|
|
|
& babs,dipl,hour,ahh(ijk),daynr,f107d,
|
|
|
& teh2,sdte)
|
|
|
ate(ijk)=teh2
|
|
|
3491 continue
|
|
|
ATE(3)=TEA(1)
|
|
|
endif
|
|
|
|
|
|
c Option to use Te = f(Ne) relation at ahh(3), ahh(4)
|
|
|
|
|
|
IF(TENEOP) THEN
|
|
|
DO 3395 I=1,2
|
|
|
IF(TECON(I)) ATE(I+2)=TEDE(AHH(I+2),XNAR(I),-COV)
|
|
|
3395 continue
|
|
|
endif
|
|
|
|
|
|
c Te corrected and Te > Tn enforced
|
|
|
|
|
|
TNAHH2=TN(AHH(2),TEXOS,TLBDH,SIGMA)
|
|
|
IF(ATE(2).LT.TNAHH2) ATE(2)=TNAHH2
|
|
|
STTE1=(ATE(2)-ATE(1))/(AHH(2)-AHH(1))
|
|
|
DO 1901 I=2,6
|
|
|
TNAHHI=TN(AHH(I+1),TEXOS,TLBDH,SIGMA)
|
|
|
IF(ATE(I+1).LT.TNAHHI) ATE(I+1)=TNAHHI
|
|
|
STTE2=(ATE(I+1)-ATE(I))/(AHH(I+1)-AHH(I))
|
|
|
ATE(I)=ATE(I)-(STTE2-STTE1)*DTE(I-1)*ALOG2
|
|
|
STTE1=STTE2
|
|
|
1901 CONTINUE
|
|
|
|
|
|
c Te gradients STTE are computed for each segment
|
|
|
|
|
|
DO 1902 I=1,6
|
|
|
STTE(I)=(ATE(I+1)-ATE(I))/(AHH(I+1)-AHH(I))
|
|
|
1902 CONTINUE
|
|
|
ATE1=ATE(1)
|
|
|
887 CONTINUE
|
|
|
|
|
|
C
|
|
|
C------------ CALCULATION OF ION TEMPERATURE PARAMETERS--------
|
|
|
C
|
|
|
|
|
|
c Ti(430km) during daytime from AEROS data
|
|
|
|
|
|
XSM1=430.0
|
|
|
XSM(1)=XSM1
|
|
|
Z1=EXP(-0.09*MLAT)
|
|
|
Z2=Z1+1.
|
|
|
TID1 = 1240.0 - 1400.0 * Z1 / ( Z2 * Z2 )
|
|
|
MM(2)=HPOL(HOUR,3.0,0.0,SAX500,SUX500,1.,1.)
|
|
|
|
|
|
c Ti(430km) duirng nighttime from AEROS data
|
|
|
|
|
|
Z1=ABSMLT
|
|
|
Z2=Z1*(0.47+Z1*0.024)*UMR
|
|
|
Z3=COS(Z2)
|
|
|
TIN1=1200.0-300.0*SIGN(1.0,Z3)*SQRT(ABS(Z3))
|
|
|
|
|
|
c Ti(430km) for specified time using HPOL
|
|
|
|
|
|
TI1=TIN1
|
|
|
IF(TID1.GT.TIN1) TI1=HPOL(HOUR,TID1,TIN1,SAX500,SUX500,1.,1.)
|
|
|
|
|
|
c Tn < Ti < Te enforced
|
|
|
|
|
|
TEN1=ELTE(XSM1)
|
|
|
TNN1=TN(XSM1,TEXNI,TLBDN,SIGNI)
|
|
|
IF(TEN1.LT.TNN1) TEN1=TNN1
|
|
|
IF(TI1.GT.TEN1) TI1=TEN1
|
|
|
IF(TI1.LT.TNN1) TI1=TNN1
|
|
|
|
|
|
c Tangent on Tn profile determines HS
|
|
|
|
|
|
TI13=TEDER(130.)
|
|
|
TI50=TEDER(500.)
|
|
|
CALL REGFA1(130.0,500.0,TI13,TI50,0.01,TI1,TEDER,SCHALT,HS)
|
|
|
IF(SCHALT) HS=200.
|
|
|
TNHS=TN(HS,TEXOS,TLBDH,SIGMA)
|
|
|
MM(1)=DTNDH(HS,TEXOS,TLBDH,SIGMA)
|
|
|
IF(SCHALT) MM(1)=(TI1-TNHS)/(XSM1-HS)
|
|
|
MXSM=2
|
|
|
|
|
|
c XTETI is altitude where Te=Ti
|
|
|
|
|
|
2391 XTTS=500.
|
|
|
X=500.
|
|
|
2390 X=X+XTTS
|
|
|
IF(X.GE.AHH(7)) GOTO 240
|
|
|
TEX=ELTE(X)
|
|
|
TIX=TI(X)
|
|
|
IF(TIX.LT.TEX) GOTO 2390
|
|
|
X=X-XTTS
|
|
|
XTTS=XTTS/10.
|
|
|
IF(XTTS.GT.0.1) GOTO 2390
|
|
|
XTETI=X+XTTS*5.
|
|
|
|
|
|
c Ti=Te above XTETI
|
|
|
|
|
|
MXSM=3
|
|
|
MM(3)=STTE(6)
|
|
|
XSM(2)=XTETI
|
|
|
IF(XTETI.GT.AHH(6)) GOTO 240
|
|
|
MXSM=4
|
|
|
MM(3)=STTE(5)
|
|
|
MM(4)=STTE(6)
|
|
|
XSM(3)=AHH(6)
|
|
|
IF(XTETI.GT.AHH(5)) GOTO 240
|
|
|
MXSM=5
|
|
|
DTI(1)=5.
|
|
|
DTI(2)=5.
|
|
|
MM(3)=STTE(4)
|
|
|
MM(4)=STTE(5)
|
|
|
MM(5)=STTE(6)
|
|
|
XSM(3)=AHH(5)
|
|
|
XSM(4)=AHH(6)
|
|
|
|
|
|
C
|
|
|
C CALCULATION OF ION DENSITY PARAMETER..................
|
|
|
C
|
|
|
|
|
|
240 IF(NOION) GOTO 141
|
|
|
HNIA=100.
|
|
|
if(DY) hnia=75
|
|
|
HNIE=2000.
|
|
|
if(dy) goto 141
|
|
|
C
|
|
|
C INPUT OF THE ION DENSITY PARAMETER ARRAYS PF1O,PF2O AND PF3O......
|
|
|
C
|
|
|
RIF(1)=2.
|
|
|
IF(ABSLAT.LT.30.0) RIF(1)=1.
|
|
|
RIF(2)=2.
|
|
|
IF(COV.LT.100.0) RIF(2)=1.
|
|
|
RIF(3)=SEASON
|
|
|
IF(SEASON.EQ.1) RIF(3)=3.
|
|
|
RIF(4)=1.
|
|
|
IF(FNIGHT) RIF(4)=2.
|
|
|
CALL KOEFP1(PG1O)
|
|
|
CALL KOEFP2(PG2O)
|
|
|
CALL KOEFP3(PG3O)
|
|
|
CALL SUFE(PG1O,RIF,12,PF1O)
|
|
|
CALL SUFE(PG2O,RIF, 4,PF2O)
|
|
|
CALL SUFE(PG3O,RIF,12,PF3O)
|
|
|
|
|
|
c
|
|
|
c calculate O+ profile parameters
|
|
|
c
|
|
|
|
|
|
IF(FNIGHT) THEN
|
|
|
ZZZ1=0.0
|
|
|
ELSE
|
|
|
ZZZ1=COS(XHI*UMR)
|
|
|
ENDIF
|
|
|
msumo=4
|
|
|
RDOMAX=100.0
|
|
|
MO(1)=EPSTEP(PF1O(1),PF1O(2),PF1O(3),PF1O(4),ZZZ1)
|
|
|
MO(2)=EPSTEP(PF1O(5),PF1O(6),PF1O(7),PF1O(8),ZZZ1)
|
|
|
MO(3)=0.0
|
|
|
HO(1)=EPSTEP(PF1O(9),PF1O(10),PF1O(11),PF1O(12),ZZZ1)
|
|
|
HO(2)=290.0
|
|
|
IF((RIF(2).EQ.2.).AND.(RIF(3).EQ.2.)) HO(2)=237.0
|
|
|
HO(4)=PF2O(1)
|
|
|
ho05=pf2o(4)
|
|
|
MO(4)=PF2O(2)
|
|
|
MO(5)=PF2O(3)
|
|
|
|
|
|
c
|
|
|
c adjust gradient MO(4) of O+ profile segment above F peak
|
|
|
c
|
|
|
|
|
|
7100 HO(3)=(ALG100-MO(5)*(HO(4)-ho05))/MO(4)+HO(4)
|
|
|
IF(HO(3).LE.HO(2)+20.) THEN
|
|
|
MO(4)=MO(4)-0.001
|
|
|
GOTO 7100
|
|
|
endif
|
|
|
hfixo=(ho(2)+ho(3))/2.
|
|
|
|
|
|
c
|
|
|
c find height H0O of maximum O+ relative density
|
|
|
c
|
|
|
|
|
|
DELX=5.0
|
|
|
X=HO(2)
|
|
|
YMAXX=0.0
|
|
|
7102 X=X+DELX
|
|
|
Y=RPID(X,HFIXO,RDOMAX,msumo,MO,DDO,HO)
|
|
|
IF(Y.LE.YMAXX) then
|
|
|
if(delx.le.0.1) GOTO 7104
|
|
|
x=x-delx
|
|
|
delx=delx/5.
|
|
|
ELSE
|
|
|
YMAXX=Y
|
|
|
ENDIF
|
|
|
GOTO 7102
|
|
|
7104 H0O=X-DELX/2.
|
|
|
7101 if(y.lt.100.0) goto 7103
|
|
|
rdomax=rdomax-0.01
|
|
|
y=rpid(h0o,hfixo,rdomax,msumo,mo,ddo,ho)
|
|
|
goto 7101
|
|
|
7103 yo2h0o=100.-y
|
|
|
yoh0o=y
|
|
|
|
|
|
c
|
|
|
c calculate parameters for O2+ profile
|
|
|
c
|
|
|
|
|
|
hfixo2 = pf3o(1)
|
|
|
rdo2mx = pf3o(2)
|
|
|
DO 7105 L=1,2
|
|
|
I = L * 2
|
|
|
HO2(L)=PF3O(1+I)+PF3O(2+I)*ZZZ1
|
|
|
MO2(L+1)=PF3O(7+I)+PF3O(8+I)*ZZZ1
|
|
|
7105 CONTINUE
|
|
|
|
|
|
MO2(1)=PF3O(7)+PF3O(8)*ZZZ1
|
|
|
if(hfixo2.gt.ho2(1)) then
|
|
|
ymo2z=mo2(2)
|
|
|
else
|
|
|
ymo2z=mo2(1)
|
|
|
endif
|
|
|
aldo21=alog(rdo2mx)+ymo2z*(ho2(1)-hfixo2)
|
|
|
hfixo2=(ho2(2)+ho2(1))/2.
|
|
|
rdo2mx=exp(aldo21+mo2(2)*(hfixo2-ho2(1)))
|
|
|
|
|
|
c
|
|
|
c make sure that rd(O2+) is less or equal 100-rd(O+) at O+ maximum
|
|
|
c
|
|
|
|
|
|
7106 Y=RPID(H0O,hfixo2,rdo2mx,2,MO2,DO2,HO2)
|
|
|
IF(Y.GT.yo2h0o) then
|
|
|
MO2(3)=MO2(3)-0.02
|
|
|
GOTO 7106
|
|
|
endif
|
|
|
|
|
|
c
|
|
|
C use ratio of NO+ to O2+ density at O+ maximum to calculate
|
|
|
c NO+ density above the O+ maximum (H0O)
|
|
|
c
|
|
|
|
|
|
IF(y.LT.1.) then
|
|
|
NOBO2=0.0
|
|
|
ELSE
|
|
|
NOBO2= (yo2h0o-y)/y
|
|
|
ENDIF
|
|
|
|
|
|
C
|
|
|
C CALCULATION FOR THE REQUIRED HEIGHT RANGE.......................
|
|
|
C In the absence of an F1 layer hmf1=hz since hmf1 is used in XE
|
|
|
C
|
|
|
|
|
|
141 xhmf1=hmf1
|
|
|
IF(hmf1.le.0.0) HMF1=HZ
|
|
|
|
|
|
height=heibeg
|
|
|
kk=1
|
|
|
|
|
|
300 IF(NODEN) GOTO 330
|
|
|
IF((HEIGHT.GT.HNEE).OR.(HEIGHT.LT.HNEA)) GOTO 330
|
|
|
IF(LAYVER) THEN
|
|
|
ELEDE=-9.
|
|
|
IF(IIQU.LT.2) ELEDE=
|
|
|
& XEN(HEIGHT,HMF2,NMF2,HME,4,HXL,SCL,AMP)
|
|
|
outf(1,kk)=elede
|
|
|
goto 330
|
|
|
endif
|
|
|
ELEDE=XE_1(HEIGHT)
|
|
|
c
|
|
|
c TTS model option for topside
|
|
|
c
|
|
|
if((itopn.eq.3).and.(height.ge.400.0)) then
|
|
|
call igrf_sub(lati,longi,ryear,height,
|
|
|
& xl1,icode,dipl1,babs1)
|
|
|
if(xl1.gt.10.) xl1=10.
|
|
|
c icd=1 ! compute INVDIP
|
|
|
dimo=0.311653
|
|
|
call CALNE(1,INVDIP,xl1,DIMO,babs1,
|
|
|
& DIPL,hour,height,daynr,F107D,ELEDE)
|
|
|
endif
|
|
|
|
|
|
c
|
|
|
c electron density in m-3 in outf(1,*)
|
|
|
c
|
|
|
|
|
|
OUTF(1,kk)=ELEDE
|
|
|
|
|
|
c
|
|
|
c plasma temperatures
|
|
|
c
|
|
|
|
|
|
330 IF(NOTEM) GOTO 7108
|
|
|
IF((HEIGHT.GT.HTE).OR.(HEIGHT.LT.HTA)) GOTO 7108
|
|
|
TNH=TN(HEIGHT,TEXOS,TLBDH,SIGMA)
|
|
|
TIH=TNH
|
|
|
IF(HEIGHT.GE.HS) TIH=TI(HEIGHT)
|
|
|
TEH=ELTE(HEIGHT)
|
|
|
IF(TIH.LT.TNH) TIH=TNH
|
|
|
IF(TEH.LT.TIH) TEH=TIH
|
|
|
OUTF(2,kk)=TNH
|
|
|
OUTF(3,kk)=TIH
|
|
|
OUTF(4,kk)=TEH
|
|
|
|
|
|
c
|
|
|
c ion composition
|
|
|
c
|
|
|
|
|
|
7108 IF(NOION) GOTO 7118
|
|
|
IF((HEIGHT.GT.HNIE).OR.(HEIGHT.LT.HNIA)) GOTO 7118
|
|
|
if(DY) then
|
|
|
call ioncomp(ryear,daynr,iseamon,hour,height,xhi,
|
|
|
& lati,longi,cov,dion)
|
|
|
ROX=DION(1)
|
|
|
RHX=DION(2)
|
|
|
RNX=DION(3)
|
|
|
RHEX=DION(4)
|
|
|
RNOX=DION(5)
|
|
|
RO2X=DION(6)
|
|
|
RCLUST=DION(7)
|
|
|
else
|
|
|
ROX=RPID(HEIGHT,HFIXO,RDOMAX,msumo,MO,DDO,HO)
|
|
|
RO2X=RPID(HEIGHT,HFIXO2,rdo2mx,2,MO2,DO2,HO2)
|
|
|
CALL RDHHE(HEIGHT,H0O,ROX,RO2X,NOBO2,10.,RHX,RHEX)
|
|
|
RNOX=RDNO(HEIGHT,H0O,RO2X,ROX,NOBO2)
|
|
|
RNX=-1.
|
|
|
RCLUST=-1.
|
|
|
endif
|
|
|
|
|
|
c
|
|
|
c ion densities are given in percent of total electron density;
|
|
|
c
|
|
|
|
|
|
if(jf(22)) then
|
|
|
xnorm=1
|
|
|
else
|
|
|
xnorm=elede/100.
|
|
|
endif
|
|
|
OUTF(5,kk)=ROX*xnorm
|
|
|
OUTF(6,kk)=RHX*xnorm
|
|
|
OUTF(7,kk)=RHEX*xnorm
|
|
|
OUTF(8,kk)=RO2X*xnorm
|
|
|
OUTF(9,kk)=RNOX*xnorm
|
|
|
OUTF(10,kk)=RCLUST*xnorm
|
|
|
OUTF(11,kk)=RNX*xnorm
|
|
|
|
|
|
c
|
|
|
c D region special: Friedrich&Torkar model in outf(13,*)
|
|
|
c
|
|
|
|
|
|
7118 if(.not.dreg) then
|
|
|
outf(13,kk)=-1.
|
|
|
call F00(HEIGHT,LATI,DAYNR,XHI,F107D,EDENS,IERROR)
|
|
|
if(ierror.eq.0) outf(13,kk)=edens
|
|
|
endif
|
|
|
|
|
|
height=height+heistp
|
|
|
kk=kk+1
|
|
|
if(kk.le.numhei) goto 300
|
|
|
|
|
|
c
|
|
|
c D region special: Danilov et al. model in outf(14,*):
|
|
|
c outf(14,1:7)=Ne(h,SW=0,WA=0) h=60,65,70,75,80,85,90 km;
|
|
|
C outf(14,8:14)=Ne(h,SW=1,WA=0); outf(14,15:21)=Ne(h,SW=0,WA=1)
|
|
|
c
|
|
|
|
|
|
if(.not.dreg) then
|
|
|
do ii=1,7
|
|
|
outf(14,ii)=ddens(1,ii)
|
|
|
outf(14,7+ii)=ddens(2,ii)
|
|
|
outf(14,14+ii)=ddens(3,ii)
|
|
|
enddo
|
|
|
endif
|
|
|
|
|
|
c
|
|
|
c equatorial vertical ion drift
|
|
|
c
|
|
|
|
|
|
drift=-1.
|
|
|
if(jf(21).and.abs(magbr).lt.25.0) then
|
|
|
param(1)=daynr
|
|
|
param(2)=f107d
|
|
|
call vdrift(hour,longi,param,drift)
|
|
|
endif
|
|
|
c
|
|
|
c spread-F occurrence probability
|
|
|
c
|
|
|
spreadf=-1.
|
|
|
if(.not.jf(28)) goto 1937
|
|
|
if(hour.gt.7.25.and.hour.lt.17.75) goto 1937
|
|
|
if(abs(lati).gt.25.0) goto 1937
|
|
|
spfhour=hour
|
|
|
daynr1=daynr
|
|
|
if(hour.lt.12.0) then
|
|
|
spfhour=hour+24.0
|
|
|
daynr1=daynr-1
|
|
|
if(daynr1.lt.1) daynr1=idayy
|
|
|
endif
|
|
|
call spreadf_brazil(daynr,idayy,f107d,lati,osfbr)
|
|
|
ispf=int((spfhour-17.75)/0.5)+1
|
|
|
if(ispf.gt.0.and.ispf.lt.26) spreadf=osfbr(ispf)
|
|
|
1937 continue
|
|
|
C
|
|
|
C ADDITIONAL PARAMETER FIELD OARR
|
|
|
C
|
|
|
|
|
|
IF(NODEN) GOTO 6192
|
|
|
OARR(1)=NMF2
|
|
|
OARR(2)=HMF2
|
|
|
if(f1reg) OARR(3)=NMF1
|
|
|
if(f1reg) OARR(4)=XHMF1
|
|
|
OARR(5)=NME
|
|
|
OARR(6)=HME
|
|
|
OARR(7)=NMD
|
|
|
OARR(8)=HMD
|
|
|
OARR(9)=HHALF
|
|
|
OARR(10)=B0
|
|
|
OARR(11)=VNER
|
|
|
OARR(12)=HEF
|
|
|
6192 IF(NOTEM) GOTO 6092
|
|
|
OARR(13)=ATE(2)
|
|
|
OARR(14)=AHH(2)
|
|
|
OARR(15)=ATE(3)
|
|
|
OARR(16)=ATE(4)
|
|
|
OARR(17)=ATE(5)
|
|
|
OARR(18)=ATE(6)
|
|
|
OARR(19)=ATE(7)
|
|
|
OARR(20)=ATE(1)
|
|
|
OARR(21)=TI1
|
|
|
OARR(22)=XTETI
|
|
|
6092 OARR(23)=XHI
|
|
|
OARR(24)=SUNDEC
|
|
|
OARR(25)=DIP
|
|
|
OARR(26)=MAGBR
|
|
|
OARR(27)=MODIP
|
|
|
OARR(28)=DELA
|
|
|
OARR(29)=SAX200
|
|
|
OARR(30)=SUX200
|
|
|
OARR(31)=SEASON
|
|
|
OARR(32)=NSEASN
|
|
|
OARR(33)=rssn
|
|
|
OARR(34)=COV
|
|
|
OARR(35)=B1
|
|
|
OARR(36)=xm3000
|
|
|
OARR(39)=gind
|
|
|
OARR(40)=f1pbo
|
|
|
OARR(41)=f107d
|
|
|
OARR(42)=c1
|
|
|
OARR(43)=daynr
|
|
|
OARR(44)=drift
|
|
|
OARR(45)=stormcorr
|
|
|
OARR(46)=f1pbw
|
|
|
OARR(47)=f1pbl
|
|
|
OARR(48)=spreadf
|
|
|
3330 CONTINUE
|
|
|
RETURN
|
|
|
END
|
|
|
c
|
|
|
c
|
|
|
|