C+ C NAME: C Get4Dval C PURPOSE: C 4D linear interpolationInterpolates values from positions C specified as XC,XL,RP (modified Carrington variable, latitude (deg) and C distance (AU) C CATEGORY: C Data processing C CALLING SEQUENCE: C call Get4Dval3(NN,XCbe,XCtbeg,XCtend,RR,dRR,nLng,nLat,nMap,nT, C F4D1,N,NLOSP1,N,TI,XC,XL,RP,FF) C INPUTS: (all input is read-only) C NN integer # of F4D parameters C XCbeg real Beginning Carrington variable for longitude C XCend real End Carrington variable for longitude C XCbe(2,nT) real Beginning and ending Carrington variables C XCtbeg real Beginning of time intervals C Xctend real Ending of time intervals C xInt real time ofset (in XC) C RR real Beginning map distance C dRR real Distance between individual maps (in AU) C nLng integer # longitudes C nLat integer # latitudes C nMap integer # DF maps formed (height begins ~0 AU) C nT integer # time points C F4D1(nLng,nLat,nMap,nt,1) real 4D array (longitude, latitude, radial distance, time, 1) C NLOSP1 integer # LOS intervals + 1 C NLMAX integer # LOS points C C TI(NLOSP1,NLMAX) real Carrington variable value from first time C XC(NLOSP1,NLMAX) real Modified Carrington variable C XL(NLOSP1,NLMAX) real Heliographic latitude (deg) C RP(NLOSP1,NLMAX) real Heliocentric distance (AU) C OUTPUTS: C FF(NLOSP1,NLMAX) real Interpolated function values C FUNCTIONS/SUBROUTINES: C FLINT C INCLUDE: C include 'MAPANGLES.H' C PROCEDURE: C > The modified Carrington variable is mapped to the range [1,nLng] C The latitude is mapped to the range [1,nLat] C The distance is mapped to the range [1,nMap] C > For each point, if any of the neighbours contains a bad value, or if any of the C coordinates is more than one bin width outside the index ranges, then the value C BadR4() is returned (see FLINT). C MODIFICATION HISTORY: C MAY-1997, Paul Hick (UCSD; pphick@ucsd.edu) C- subroutine Get4Dval3(NN,XCbe,XCtbeg,XCtend,RR,dRR,nLng,nLat,nMap,nT, & F4D,NL,NLOSP1,TI,XC,XL,RP,FF) C & F4D,N,TI,XC,XL,RP,FF) real F4D(nLng,nLat,nMap,nT), & XCbe(2,nT),XCbeg,XCend, & XC(NLOSP1,NL), XL(NLOSP1,NL), RP(NLOSP1,NL), FF(NLOSP1,NL) real*8 TI(NLOSP1,NL) real*8 XCtbeg,XCtend,XCtfull,X integer ND(4) real PP(4) real FFN(NN,NL) include 'MAPCOORDINATES.H' write(*,'(A,5I6,I9)') 'Get4dval3 nLng, nLat, nMap, nT, NLOSP1, NL',nLng, nLat, nMap, nT, NLOSP1, NL ND(1) = nLng ND(2) = nLat ND(3) = nMap ND(4) = nT do J=1,NLOSP1 do I=1,NL PP(4) = XCtvar(TI(J,I)) X = PP(4) II = Itvar(X) ! Nearest interval time index C PP(4) = max(XCtbeg,min(XCtend,PP(4))) XCbeg = XCbe(1,II) XCend = XCbe(2,II) C print *, ' In Get4dval 1 - XCtvar II XCbeg XCend',PP(4),II,XCbeg,XCend X = XC(J,I) PP(1) = XCvar(X) X = XL(J,I) PP(2) = XLindx(X) PP(3) = RRindx(RP(J,I)) C write(*,'(A,I4,I8,4F10.3)' )' In Get4dval 2 - PP(1) to PP(4)', N5, I, PP(1), PP(2), PP(3), PP(4) FF(J,I) = FLINT(-4,ND,F4D(1,1,1,1),PP,0.00002) ! Minus sign forces check for bad values end do end do return end