##// END OF EJS Templates
Add restart to nginx container
Add restart to nginx container

File last commit:

r0:b84e1135c2c4
r22:1c8c96a4f254 master
Show More
isrim.f
733 lines | 22.7 KiB | text/x-fortran | FortranFixedLexer
C Written by Shunrong Zhang
C Imported into Madrigal from modelRecovery/fullAnalytic/
C isrim.f on 10/21/2005 - Was revision 1.6
C
C Modified to change COEFDIR to Madrigal path, added comment
C on 4 = ion drift
C
C $Id: isrim.f 3375 2011-05-11 17:00:38Z brideout $
C
C
SUBROUTINE ISRIM(KINST,DOY,SLT,ALT,GLAT,F107,AP,IPAR,OUTPUT)
C
C INCOHERENT SCATTER RADAR IONOSPHERIC MODEL (ISRIM)
C
C ISRIMs have been developed from long-term datasets of seven
C incoherent scatter radars spanning invariant latitudes from
C 25 to 75 degrees in American, European and Asian longitudes
C at Svalbard, Tromso, Sondrestrom, Millstone Hill, St. Santin,
C Arecibo and Shigaraki. These models represent electron density,
C ion and electron temperatures, and ion drifts in the E and F
C regions, giving a comprehensive quantitative description of
C ionospheric properties.
C
C REFERENCES
C
C Zhang, S.-R., J. M. Holt, A. P. van Eyken, M. McCready, C.
C Amory-Mazaudier, S. Fukao, and M. Sulzer, Ionospheric local model
C and climatology from long-term databases of multiple incoherent
C scatter radars, Geophys. Res. Lett. 32, L20102, doi:10.1029/
C 2005GL023603, 2005.
C
C Zhang, S.-R., J. M. Holt, A. M. Zalucha, and C. Amory-Mazaudier,
C Mid-latitude ionospheric plasma temperature climatology and
C empirical model based on Saint Santin incoherent scatter radar data
C from 1966-1987, J. Geophys. Res., 109, A11311,
C doi:10.1029/2004JA010709, 2004.
C
C Holt, J. M., S.-R. Zhang, and M. J. Buonsanto, Regional and local
C ionospheric models based on Millstone Hill incoherent scatter radar
C data, Geophys. Res. Lett.,, 29(8), 10.1029/2002GL014678, 2002.
C
C
C ONLINE VERSION
C
C http://madrigal.haystack.mit.edu/models/
C
C
C CONTACT INFO
C
C Dr. Shun-Rong Zhang (shunrong@haystack.mit.edu)
C Dr. John M. Holt
C MIT Haystack Observatory
C Route 40,
C Westford, MA 01886
C USA
C PHONE: 781-981-5725; FAX: 781-981-5766
C
C
C REVISIONS
C
C Updated by SRZ, MAY 2007 --
C ALLOW FOR KINST = 30 FOR MH LOCAL MODEL
C
C Updated by SRZ, October 2005 --
C READ IN ALL COEFFICIENT FILES, INSTEAD OF READING IN
C AS NEEDED FOR A SPECIFIC PARAMETER. THIS CHANGE IS TO ACCOMMODATE
C THE MADRIGAL APPLICATIONS TO IMPROVE EFFICIENCY WHEN MULTIPLE
C PARAMETERS ARE COMPUTERED.
C
C Updated by SRZ, May 2005 ---
C ADD KINST (INSTRUMENT CODE); REMOVE THE FUNCTION OF OUTPUT(5)
C
C FIRST Version by SRZ, July 2002 ---
C MILLSTONE HILL IONOSPHERIC MODEL
C THIS SUBROUTINE RETURNS IONOSPHERIC PARAMETERS (NE, TE, AND TI)
C BASED ON MILLSTONE HILL INCOHERENT SCATTER RADAR OBSERVATION MADE
C DURING 1976-2001.
C
C
C INPUTS
C
C KINST - STATION/INSTRUMENT CODE
C 31 -> MILLSTONE HILL STEERABLE (regional model)
C 32 -> MILLSTONE HILL ZENITH (local model)
C 30 -> MILLSTONE HILL ZENITH (local model)
C !! 10 -> JICAMARCA - NOT AVAILABLE!!
C 20 -> ARECIBO
C 25 -> MU RADAR
C 40 -> ST. SANTIN
C 72 -> EISCAT TROMSO
C 80 -> SONDRESTROM (local)
C 95 -> EISCAT SVALBARD
C 0 -> AMERICA REGIONAL MODEL (GEODETC 15-70 DEGREES)
C 1 -> WESTERN eUROPEAN MODEL (GEODETIC 45-78 DEGREES)
C DOY: DAY NUMBER OF YEAR; DOUBLE PRECISION SCALAR
C [ 1 - 365 ] (always = an int value)
C SLT: LOCAL TIME (HOUR); DOUBLE PRECISION SCALAR
C [ 0 - 24]
C ALT: GEODETIC ALTITUDE (KM); DOUBLE PRECISION SCALAR
C LOCAL MODEL: [100 - 1000]; for Millstone Hill
C LOCAL MODEL: [200 - 500]; for Shigaraki
C LOCAL MODEL: [100 - 600]; for other sites
C REGIONAL MODEL: [100 - 600]: America/Europe
C REGIONAL MODEL: [200 - 600]: Millstone Hill
C GLAT: (ALSO AS OUTPUT IF LOCAL MODEL IS CALLED)
C GEODETIC LATITUDE DEGREE, DOUBLE PRECISION SCALAR
C NEEDED ONLY FOR REGIONAL MODELS
C F107: SOLAR 10.7 CM FLUX FOR THE PREVIOUS DAY;
C DOUBLE PRECISION SCALAR
C AP: 3-HOUR AP INDEX AT 3 HOURS BEFORE THE CURRENT TIME;
C DOUBLE PRECISION SCALAR
C IPAR: IONOSPHERIC PARAMETER TO BE RETURNED;
C INTEGER SCALAR
C = 1, FOR NE
C = 2, FOR TE
C = 3, FOR TI
C = 4, FOR PARALLEL ION DRIFT, + UPWARD
C OUTPUT(4): FLAG FOR HMAX AND NMAX OUTPUT;
C DOUBLE PRECISION SCALAR
C SET OUTPUT(4) TO ANY VALUE >0, THEN OUTPUT(2) AND
C OUTPUT(3) RETURN HMAX AND NMAX.
C
C OUTPUT
C
C OUTPUT: OUTPUT DATA; DOUBLE PRECISION ARRAY, 10 DIMS
C OUTPUT(1): OUTPUT DATA; NE 1/M^3 FOR IPAR=1
C TE, K FOR IPAR=2
C TI, K FOR IPAR=3
C OUTPUT(2): HMAX, KM FOR IPAR=1 AND OUTPUT(4)>0
C OUTPUT(3): NMAX, 1/M^3 FOR IPAR=1 AND OUTPUT(4)>0
C OUTPUT(4): MODEL DIAGNOSTIC STATUS
C = 0 NORMAL
C = -1 STATION NOT INCLUDED
C = -2 PARAMETER NOT INCLUDED
C = -3 STATION AND PARAMETER NOT MATCH
C GLAT: GEODETIC LATITUDE DEGREE, DOUBLE PRECISION SCALAR
C ONLY WHEN A LOCAL MODEL IS COMPUTED
C
C .. Scalar Arguments ..
DOUBLE PRECISION ALT,AP,DOY,F107,GLAT,SLT
INTEGER IPAR,KINST
C ..
C .. Array Arguments ..
DOUBLE PRECISION OUTPUT(10)
C ..
C .. Local Scalars ..
DOUBLE PRECISION DMAX,HMAX
INTEGER I,IAREA,IIPAR,IKINST,IKINST3,IKINST4,ISN,J,NCALLED,IND
INTEGER LIAREA
C LIAREA - last IAREA value
CHARACTER*2 CPAR
CHARACTER*128 COEFDIR,COEFILE,MADDIR
C ..
C .. Local Arrays ..
DOUBLE PRECISION GLATS(11),DWK1,DWK2
INTEGER STA(4),STATUS3(4),STATUS4(4)
CHARACTER*2 SNAME(11)
C ..
C .. External Subroutines ..
EXTERNAL PARAMETER3D,PARAMETER4D,READCOEF,SETKNOTS3D,
* SETKNOTS4D
C ..
C .. Save statement ..
SAVE NCALLED,IKINST,IKINST3,IKINST4,IIPAR,LIAREA
SAVE STATUS3,STATUS4
C .. IKINST is the kinst of the last instrument
C .. IKINST3 is the kinst of the last local instrument
C .. IKINST4 is the kinst of the last regional instrument
C .. Coeff from both regional and local are cached
C ..
C .. Intrinsic Functions ..
INTRINSIC INDEX
C ..
C .. Data statements ..
C
DATA SNAME/'AR','MU','MH','ST','TR','SO','ES','RM','EU','AM','M2'/
DATA GLATS/18D0,35D0,43D0,45D0,70D0,67D0,79D0,43D0,67D0,0D0,43D0/
DATA IKINST3/999/,IKINST4/999/,IIPAR/999/,LIAREA/999/
C ..
C .. DIRECTORY OF COEFFICIENT FILES ...............
C COEFDIR='coefiles/'
C this line modified by B. Rideout
C path should be automatically modified during installation
MADDIR = 'MADROOT'
IND = index(MADDIR, ' ') - 1
COEFDIR = MADDIR(1:IND) // '/source/madf/geolib/3D4DCoef/'
C COEFDIR='/opt/madrigal/empiricalModels/3D4DCoef/'
C ..................................................
C
C IAREA determines whether the local (2) or regional (1) used
IAREA = 2
C OUTPUT(4) = 0D0
IF (KINST.EQ.30) KINST = 32
C add other instruments near Millstone
IF (KINST.EQ.5340) KINST = 32
IF (KINST.EQ.5360) KINST = 32
IF (AP.GT.100) AP = 100D0
IF (KINST.EQ.31 .AND. OUTPUT(4) .LE. 0.0D0) THEN
IAREA = 1
ELSE IF (KINST.EQ.31 .AND. OUTPUT(4) .GT. 0.0D0) THEN
KINST = 32
END IF
IF (KINST.EQ.0) IAREA = 1
IF (KINST.EQ.1) IAREA = 1
C determine the cofficient file name to be read
CPAR = 'NO'
IF (IPAR.EQ.1) CPAR = 'Ne'
IF (IPAR.EQ.2) CPAR = 'Te'
IF (IPAR.EQ.3) CPAR = 'Ti'
IF (IPAR.EQ.4) CPAR = 'Vo'
ISN = 999
IF (KINST.EQ.20) ISN = 1
IF (KINST.EQ.25) ISN = 2
IF (KINST.EQ.32) ISN = 3
IF (KINST.EQ.40) ISN = 4
IF (KINST.EQ.72) ISN = 5
IF (KINST.EQ.80) ISN = 6
IF (KINST.EQ.95) ISN = 7
IF (KINST.EQ.31 .AND. OUTPUT(4) .LE. 0.0D0) ISN = 8
IF (KINST.EQ.31 .AND. OUTPUT(4) .GT. 0.0D0) ISN = 3
IF (KINST.EQ.1) ISN = 9
IF (KINST.EQ.0) ISN = 10
IF (KINST.EQ.33) ISN = 11
C .. invalid inputs ..
IF (ISN.EQ.999) OUTPUT(4) = -1D0
IF (CPAR.EQ.'NO') OUTPUT(4) = -2D0
IF (KINST.EQ.25 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.40 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.72 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.95 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.1 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.0 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.31 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
IF (KINST.EQ.33 .AND. CPAR.EQ.'Vo') OUTPUT(4) = -3D0
C
C Altitude rules are unneeded if just want hmax, nmax
IF (OUTPUT(4) .LE. 0.0D0) THEN
IF (ALT.LT.100D0.OR.ALT.GT.1000D0) OUTPUT(4) = -4D0
C IF (ALT.LT.200D0.AND.IAREA.EQ.1) OUTPUT(4) = -4D0
IF (ALT.LT.200D0.AND.KINST.EQ.31) OUTPUT(4) = -4D0
IF (ALT.GT.600D0.AND.IAREA.EQ.1) OUTPUT(4) = -4D0
IF (ALT.LT.200D0.AND.KINST.EQ.25) OUTPUT(4) = -4D0
IF (ALT.GT.450D0.AND.KINST.EQ.25) OUTPUT(4) = -4D0
ELSE
ALT=300.0D0
END IF
IF (OUTPUT(4).LT.0D0) THEN
OUTPUT(1) = -999D0
RETURN
END IF
C
IF (IAREA.NE.1) GLAT = GLATS(ISN)
COEFILE = COEFDIR(1:INDEX(COEFDIR,' ')-1)//SNAME(ISN)
IF (IAREA.EQ.1) THEN
COEFILE = COEFDIR(1:INDEX(COEFDIR,' ')-1)//SNAME(ISN)
END IF
C to check if the coefficient file has been read into common block
IF (IAREA .NE. 1) THEN
IF (IKINST3.NE.KINST) NCALLED = 0
ELSE
IF (IKINST4.NE.KINST) NCALLED = 0
END IF
IF (NCALLED.NE.12345) THEN
IF (IAREA .NE. 1) THEN
CALL READCOEF(0,COEFILE,IAREA,STATUS3)
ELSE
CALL READCOEF(0,COEFILE,IAREA,STATUS4)
END IF
NCALLED = 12345
END IF
IF (IAREA .NE. 1) THEN
DO I = 1,4
IF (STATUS3(I).NE.0 .AND. IPAR.EQ.I) THEN
OUTPUT(1) = -999D0
OUTPUT(4) = -3D0
RETURN
END IF
END DO
ELSE
DO I = 1,4
IF (STATUS4(I).NE.0 .AND. IPAR.EQ.I) THEN
OUTPUT(1) = -999D0
OUTPUT(4) = -3D0
RETURN
END IF
END DO
END IF
IF (IAREA .NE. 1) THEN
IF (IIPAR.NE.IPAR .OR. KINST.NE.IKINST3 .OR.
* LIAREA.NE.IAREA) THEN
CALL READCOEF(IPAR,COEFILE,IAREA,STA)
CALL SETKNOTS3D
IKINST3 = KINST
END IF
ELSE
IF (IIPAR.NE.IPAR .OR. KINST.NE.IKINST4 .OR.
* LIAREA.NE.IAREA) THEN
CALL READCOEF(IPAR,COEFILE,IAREA,STA)
CALL SETKNOTS4D
IKINST4 = KINST
END IF
END IF
IKINST = KINST
LIAREA = IAREA
IIPAR = IPAR
IF (IAREA.EQ.2) CALL PARAMETER3D(DOY,SLT,GLAT,ALT,F107,AP,
* OUTPUT(1))
IF (IAREA.EQ.1) CALL PARAMETER4D(DOY,SLT,GLAT,ALT,F107,AP,
* OUTPUT(1))
IF (IPAR.EQ.1 .AND. OUTPUT(1).LE.0D0) OUTPUT(4) = -5D0
IF (IPAR.EQ.1 .AND. OUTPUT(1).LE.0D0) OUTPUT(1) = -OUTPUT(1)
IF (IPAR.EQ.1 .AND. KINST.EQ.31) OUTPUT(1) = OUTPUT(1)*1D12
IF (IPAR.EQ.1 .AND. KINST.NE.31) OUTPUT(1) = 10**OUTPUT(1)
C find hmax and Nmax at 1 km resolution - only use local
IF (IPAR.EQ.1 .AND. OUTPUT(4).GT.0.d0) THEN
DWK1 = 0.0D0
DWK2 = 0.0D0
HMAX = 0.0D0
DMAX = -10.0D6
IF (SLT.LT.5.OR.SLT.GT.22) THEN
IEND = 250
ELSE
IEND = 200
END IF
C first loop - rough search in 20 km steps - look for decrease
DO I = 500,IEND,-20
DWK1 = I*1.d0
CALL PARAMETER3D(DOY,SLT,GLAT,DWK1,F107,AP,DWK2)
IF (DWK2 .LT. DMAX .AND. DWK2 .GT. 0.0D0) THEN
HMAX = DWK1 + 20.0D0
GOTO 100
ELSE
DMAX = DWK2
END IF
END DO
C if we reach here no peak was found, set error values
OUTPUT(2) = 0.0D0
OUTPUT(3) = 0.0D0
OUTPUT(4) = -999.D0
RETURN
C second loop - fine search in 1 km steps
100 DO I = INT(HMAX)-15,INT(HMAX)+15,1
DWK1 = I*1.d0
CALL PARAMETER3D(DOY,SLT,GLAT,DWK1,F107,AP,DWK2)
IF (DWK2 .GT. DMAX) THEN
DMAX = DWK2
HMAX = DWK1
END IF
END DO
OUTPUT(2) = HMAX
OUTPUT(3) = 10**DMAX
OUTPUT(4) = -999.D0
END IF
RETURN
END
C
C -------------------------------------------------------------
C
SUBROUTINE READCOEF(SW,COEFILEPATH,MODEL,STATUS)
C
C INPUT: SW, COEFILEPATH,IAREA
C OUTPUT: STATUS(4)
C SW: SW=0 IF ONLY READ COEFFICIENTS FROM FILES
C SW.NE.0 IF ONLY LOAD COEFFICIENTS INTO COMMON BLOCKS
C FOR THE SPECIFIC PARAMETER; I.E.,
C SW=1, NE
C SW=2, TE
C SW=3, TI
C SW=4, VO
C MODEL - 1 if regional model, 2 if local model
C
C .. Scalar Arguments ..
INTEGER SW,MODEL
CHARACTER*(*) COEFILEPATH
C ..
C .. Local Scalars ..
INTEGER I,IAREA,IC,IPAR,J
CHARACTER*2 CPAR
CHARACTER*256 COEFILE
C ..
C .. Common blocks ..
COMMON /BASINFO1/KKS,NX,NY,NS,NG
COMMON /BASINFO13/KKS3,NX3,NY3,NS3,NG3
COMMON /BASINFO14/KKS4,NX4,NY4,NS4,NG4
COMMON /BASINFO2/XA,XB,YA,YB,SA,SB,GA,GB
COMMON /BASINFO23/XA3,XB3,YA3,YB3,SA3,SB3,GA3,GB3
COMMON /BASINFO24/XA4,XB4,YA4,YB4,SA4,SB4,GA4,GB4
COMMON /COEF/COEFS,N,M,ICC
COMMON /COEF3/COEFS3,N3,M3,ICC3
COMMON /COEF4/COEFS4,N4,M4,ICC4
COMMON /NODES/TT,WL,NBKL
COMMON /NODES3/TT3,WL3,NBKL3
COMMON /NODES4/TT4,WL4,NBKL4
DOUBLE PRECISION GA,GB,SA,SB,XA,XB,YA,YB
INTEGER ICC,KKS,M,N,NBKL,NG,NS,NX,NY
DOUBLE PRECISION COEFS(10,5000),COEFS4(4,10,5000),GA4(4),GB4(4),
* SA4(4),SB4(4),TT(100),TT4(4,100),WL(50),
* WL4(4,50),XA4(4),XB4(4),YA4(4),YB4(4)
DOUBLE PRECISION COEFS3(4,10,5000),GA3(4),GB3(4),
* SA3(4),SB3(4),TT3(4,100),
* WL3(4,50),XA3(4),XB3(4),YA3(4),YB3(4)
INTEGER ICC4(4),KKS4(4),M4(4),N4(4),NBKL4(4),NG4(4),NS4(4),NX4(4),
* NY4(4)
INTEGER ICC3(4),KKS3(4),M3(4),N3(4),NBKL3(4),NG3(4),NS3(4),NX3(4),
* NY3(4)
C ..
C .. Common blocks ..
C ..
C .. Array Arguments ..
INTEGER STATUS(4)
C ..
C .. Intrinsic Functions ..
INTRINSIC INDEX
C ..
IF (SW.EQ.0) THEN
DO 20 J = 1,4
IF (J.EQ.1) CPAR = 'Ne'
IF (J.EQ.2) CPAR = 'Te'
IF (J.EQ.3) CPAR = 'Ti'
IF (J.EQ.4) CPAR = 'Vo'
IF (MODEL.EQ.2) THEN
COEFILE = COEFILEPATH(1:INDEX(COEFILEPATH,' ')-1)//
* 'Coef3D'//CPAR//'.out'
ELSE
COEFILE = COEFILEPATH(1:INDEX(COEFILEPATH,' ')-1)//
* 'Coef4D'//CPAR//'.out'
END IF
OPEN (1,FILE=COEFILE(1:INDEX(COEFILE,' ')-1),STATUS='OLD',
* IOSTAT=STATUS(J))
C READ (1,FMT=9000) IPAR,IAREA,N,M,ICC,KKS,NX,NY,NS,NG,XA,XB,YA,YB,
C * SA,SB,GA,GB
IF (STATUS(J).NE.0) GO TO 20
IF (MODEL.EQ.1) THEN
C read in regional model
READ (1,FMT=*) IPAR,IAREA,N4(J),M4(J),ICC4(J),KKS4(J),
* NX4(J),NY4(J),NS4(J),NG4(J),XA4(J),XB4(J),YA4(J),YB4(J),
* SA4(J),SB4(J),GA4(J),GB4(J)
READ (1,FMT='(100F7.1)') (TT4(J,I),I=1,NY4(J)+KKS4(J))
DO I = 1,N4(J)
READ (1,FMT=9010) (COEFS4(J,IC,I),IC=1,ICC4(J))
END DO
NBKL4(J) = 0
WL4(J,1) = 0D0
READ (1,END=10,FMT='(I4)') NBKL4(J)
IF (NBKL4(J).LE.0) GO TO 10
READ (1,FMT='(100F7.1)') (WL4(J,I),I=1,
* NBKL4(J)+KKS4(J)+KKS4(J)-2)
ELSE
C read in local model
READ (1,FMT=*) IPAR,IAREA,N3(J),M3(J),ICC3(J),KKS3(J),
* NX3(J),NY3(J),NS3(J),NG3(J),XA3(J),XB3(J),YA3(J),YB3(J),
* SA3(J),SB3(J),GA3(J),GB3(J)
READ (1,FMT='(100F7.1)') (TT3(J,I),I=1,NY3(J)+KKS3(J))
DO I = 1,N3(J)
READ (1,FMT=9010) (COEFS3(J,IC,I),IC=1,ICC3(J))
END DO
NBKL3(J) = 0
WL3(J,1) = 0D0
READ (1,END=10,FMT='(I4)') NBKL3(J)
IF (NBKL3(J).LE.0) GO TO 10
READ (1,FMT='(100F7.1)') (WL3(J,I),I=1,
* NBKL3(J)+KKS3(J)+KKS3(J)-2)
END IF
10 CLOSE (1)
9000 FORMAT (2i3,I6,I7,6I3,8F8.2)
9010 FORMAT (4D15.7)
20 CONTINUE
END IF
IF (SW.NE.0) THEN
IF (MODEL.EQ.1) THEN
KKS = KKS4(SW)
NX = NX4(SW)
NY = NY4(SW)
NS = NS4(SW)
NG = NG4(SW)
XA = XA4(SW)
XB = XB4(SW)
YA = YA4(SW)
YB = YB4(SW)
SA = SA4(SW)
SB = SB4(SW)
GA = GA4(SW)
GB = GB4(SW)
N = N4(SW)
M = M4(SW)
ICC = ICC4(SW)
NBKL = NBKL4(SW)
DO I = 1,100
TT(I) = TT4(SW,I)
END DO
DO I = 1,50
WL(I) = WL4(SW,I)
END DO
DO I = 1,10
DO J = 1,5000
COEFS(I,J) = COEFS4(SW,I,J)
END DO
END DO
ELSE
KKS = KKS3(SW)
NX = NX3(SW)
NY = NY3(SW)
NS = NS3(SW)
NG = NG3(SW)
XA = XA3(SW)
XB = XB3(SW)
YA = YA3(SW)
YB = YB3(SW)
SA = SA3(SW)
SB = SB3(SW)
GA = GA3(SW)
GB = GB3(SW)
N = N3(SW)
M = M3(SW)
ICC = ICC3(SW)
NBKL = NBKL3(SW)
DO I = 1,100
TT(I) = TT3(SW,I)
END DO
DO I = 1,50
WL(I) = WL3(SW,I)
END DO
DO I = 1,10
DO J = 1,5000
COEFS(I,J) = COEFS3(SW,I,J)
END DO
END DO
END IF
END IF
RETURN
END
C
C -------------------------------------------------------------
C
SUBROUTINE SETKNOTS3D
INCLUDE 'basis3.h'
C .. Local Scalars ..
INTEGER I,KS
C ..
C .. External Subroutines ..
C ..
C .. Common blocks ..
COMMON /BASINFO1/KKS,NX,NY,NS,NG
COMMON /BASINFO2/XA,XB,YA,YB,SA,SB,GA,GB
COMMON /NODES/TT,WL,NBKL
DOUBLE PRECISION GA,GB,SA,SB,XA,XB,YA,YB
INTEGER KKS,NBKL,NG,NS,NX,NY
DOUBLE PRECISION TT(100),WL(50)
C ..
KS = KKS
DO I = 1,NY + KKS
T2(I) = TT(I)
END DO
XA = 0.d0
XB = 2.0D0*3.1415926535897D0
SA = 0.d0
SB = 2.0D0*3.1415926535897D0
N1 = NX
N2 = NY
N3 = NS
RETURN
END
C
C -------------------------------------------------------------
C
SUBROUTINE SETKNOTS4D
INCLUDE 'basis4.h'
C .. Local Scalars ..
INTEGER I,KS
C ..
C .. External Subroutines ..
C ..
C .. Common blocks ..
COMMON /BASINFO1/KKS,NX,NY,NS,NG
COMMON /BASINFO2/XA,XB,YA,YB,SA,SB,GA,GB
COMMON /NODES/TT,WL,NBKL
DOUBLE PRECISION GA,GB,SA,SB,XA,XB,YA,YB
INTEGER KKS,NBKL,NG,NS,NX,NY
DOUBLE PRECISION TT(100),WL(50)
C ..
KS = KKS
DO I = 1,NY + KKS
T2(I) = TT(I)
END DO
C ... IF LATITUDINAL VARIATION IS A B-SPLINE ..
C .. COMMENT OUT BELOW IF POLYNOMIA USED
IF (NBKL.LE.0) THEN
T4(1) = 12345D0
ELSE
DO I = 1,NBKL + KKS + KKS - 2
T4(I) = WL(I)
END DO
END IF
C ..
XA = 0.d0
XB = 2.0D0*3.1415926535897D0
SA = 0.d0
SB = 2.0D0*3.1415926535897D0
N1 = NX
N2 = NY
N3 = NS
N4 = NG
RETURN
END
C
C -------------------------------------------------------------
C
SUBROUTINE PARAMETER3D(DOY,SLT,LAT,ALT,F107,AP,V3D)
INCLUDE 'basis3.h'
C .. Scalar Arguments ..
DOUBLE PRECISION ALT,AP,DOY,F107,LAT,SLT,V3D
C ..
C .. Local Scalars ..
DOUBLE PRECISION APM,F107M,TWOPI
INTEGER I,IC
C ..
C .. Local Arrays ..
DOUBLE PRECISION BAS(30000),WK(10),WK2(10)
C ..
C .. External Subroutines ..
EXTERNAL SPLBAS3
C ..
C .. Common blocks ..
COMMON /COEF/COEFS,N,M,ICC
INTEGER ICC,M,N
DOUBLE PRECISION COEFS(10,5000)
C ..
TWOPI = 2.d0*3.1415926535897d0
IX1(1) = 1
IX2(1) = 1
IX3(1) = 1
X1(1) = SLT
X2(1) = ALT
X3(1) = DOY
C for peridiocal spline
X1(1) = X1(1)*TWOPI/24.d0
X3(1) = X3(1)*TWOPI/365.d0
C determine basis value, bas
CALL SPLBAS3(N,1,X1(1),BAS)
DO IC = 1,ICC
WK(IC) = 0.d0
DO I = 1,N
WK(IC) = WK(IC) + BAS(I)*COEFS(IC,I)
END DO
END DO
F107M = 135.D0
APM = 15.D0
DO IC = 1,ICC
WK2(IC) = 0.d0
END DO
WK2(1) = 1.d0
WK2(2) = (F107-F107M)/100.d0
WK2(3) = (AP-APM)/10.d0
WK2(4) = WK2(2)*WK2(3)
V3D = 0.d0
DO IC = 1,ICC
V3D = V3D + WK(IC)*WK2(IC)
END DO
RETURN
END
C
C -------------------------------------------------------------
C
SUBROUTINE PARAMETER4D(DOY,SLT,LAT,ALT,F107,AP,V4D)
INCLUDE 'basis4.h'
C .. Scalar Arguments ..
DOUBLE PRECISION ALT,AP,DOY,F107,LAT,SLT,V4D
C ..
C .. Local Scalars ..
DOUBLE PRECISION APM,F107M,TWOPI
INTEGER I,IC
C ..
C .. Local Arrays ..
DOUBLE PRECISION BAS(30000),WK(10),WK2(10)
C ..
C .. External Subroutines ..
EXTERNAL SPLBASP4
C ..
C .. Common blocks ..
COMMON /COEF/COEFS,N,M,ICC
INTEGER ICC,M,N
DOUBLE PRECISION COEFS(10,5000)
C ..
TWOPI = 2.d0*3.1415926535897d0
IX1(1) = 1
IX2(1) = 1
IX3(1) = 1
IX4(1) = 1
X1(1) = SLT
X2(1) = ALT
X3(1) = DOY
X4(1) = LAT
C for peridiocal spline
X1(1) = X1(1)*TWOPI/24.d0
X3(1) = X3(1)*TWOPI/365.d0
C determine basis value, bas
CALL SPLBASP4(N,1,X1(1),BAS)
DO IC = 1,ICC
WK(IC) = 0.d0
DO I = 1,N
WK(IC) = WK(IC) + BAS(I)*COEFS(IC,I)
END DO
END DO
C print*,t4(1),wk(1),coefs(1,1),coefs(2,1),coefs(3,1)
F107M = 135.D0
APM = 15.D0
DO IC = 1,ICC
WK2(IC) = 0.d0
END DO
WK2(1) = 1.d0
WK2(2) = (F107-F107M)/100.d0
WK2(3) = (AP-APM)/15.d0
WK2(4) = WK2(2)*WK2(3)
V4D = 0.d0
DO IC = 1,ICC
V4D = V4D + WK(IC)*WK2(IC)
END DO
C WRITE(18,'(F8.1,1000E15.7)')ALT,(BAS(I),I=1,N)
RETURN
END