C+ C NAME: C MkTimesvd C PURPOSE: C Makes Carrington longitude intervals and year and doy intervals for C the time dependent tomography program. C CALLING SEQUENCE: C call MkTimesvd(bDayd,bForecast,MJDcntr,NmidHR,aNday,XCtest1,XCtest2,xInc,NT,NTmax, C nCar,JDCar,ALng,XCinT,XCbe,XCtbeg,XCtend,XCtioff,Itoff,IYRS,DOYS) C INPUTS: C bDayd logical .TRUE. Each C.R. split into nearest days C .FALSE. C.R.s split into integer times C bForecast logical .TRUE. Forecast mode C .FALSE. Non forecast mode C MJDcntr real*8 Modified Julian date of the Earth position C NmidHR integer Number of hours before midnight C aNday real Number of days to combine (can be fractions of days) C XCtest1 real start Carrington variable time of sources C XCtest2 real end Carrington variable time of sources C xInc real XCmargin C NT integer # of intervals C NTmax integer Total # of times at ends of intervals C nCar integer # Carrington rotations C JDCar real*8 Julian Date at beginning of rotations C ALng real Carrington interval per nLng number C OUTPUTS: C XCinT(NTmax) real Carrington longitude time interval values C XCbe(2,NTmax) real Carrington longitude begining and end values C XCtbeg real Start time of sources (Carr. var. time from beginning) C XCtend real End time of sources (Carr. var. time from beginning) C XCtioff real Offset in time before XCtbeg C Itoff integer Interval # of offsets C IYRS(NTmax) integer Interval year values C DOYS(NTmax) real Interval day of year values C FUNCTIONS/SUBROUTINES: C Julian C- subroutine MkTimesvd(bDayd,bForecast,MJDcntr,NmidHR,aNday,XCtest1,XCtest2,xInc,NT,NTmax,nCar, & JDCar,ALng,XCinT,XCbe,XCtbeg,XCtend,XCtioff,Itoff,IYRS,DOYS) real XCinT(NTmax), & XCbe(2,NTmax), & DOYS(NTmax) integer IYRS(NTmax) logical bDayd,bForecast real*8 JDCar(nCar),JD,JEpoch,JDXC,MJDcntr external EARTH rot3d = 3./25.38 ! begin ahead in time about 3 days C print *, ' ' C print *, 'xInc, XCtest1, XCtest2, NT, aNday', xInc, XCtest1, XCtest2, NT, aNday if(bDayd) then aInc = xInc*25.38 Inc = aInc XCtibeg = XCtest1 + xInc if(bForecast) then NT = NT + 4 ! Add four more intervals in forecast mode C call Julian(1,iYr,Doy,JDCar(int(XCtibeg+0.5)),JEpoch) call Julian(11,iYr,Doy,(MJDcntr-(25.38/2.0)),JEpoch) else call Julian(1,iYr,Doy,JDCar(int(XCtibeg+0.5)),JEpoch) end if iDoy = Doy Doy = iDoy + NmidHR/24.0 ! Day at interval beginning Itoff = 4/aNday NT = NT/aNday XCtibeg = XMAP_SC_POS(EARTH,iYr,Doy-Inc-Itoff*aNday+aNDay/2.,nCAR,JDCar) XCtiend = XMAP_SC_POS(EARTH,iYr,Doy-Inc +NT*aNday-aNDay/2.,nCAR,JDCar) XCtbeg = XCtibeg - (XCtest1 + xInc) + 1 XCtend = XCtiend - (XCtest1 + xInc) + 1 dXC = (XCtend - XCtbeg)/(NT+Itoff-1) C print *, 'XCtibeg, XCtiend, XCtbeg, XCtend', XCtibeg, XCtiend, XCtbeg, XCtend else XCtibeg = XCtest1 + xInc XCtiend = XCtest2 - xInc dXC = (XCtiend-XCtibeg)/NT Itoff = 1.+rot3d/dXC ! NT intervals to start before XCtibeg C print *, 'XCtibeg, XCtiend', XCtibeg, XCtiend end if dXC2= dXC/2 if(NT.eq.1) Itoff = 1 Atoff = dXC*Itoff ! XC offset before XCtibeg XCstr = XCtibeg-Atoff+dXC2 ! XCtbeg in Carrington Variable if(NT.eq.1) XCstr = XCtibeg-rot3d if(.not.bDayd) then XCtbeg = 1.+XCstr-XCtibeg ! XCtbeg in time XCtend= XCtiend-XCstr+XCtbeg-dXC2 ! Ending time end if if(NT.eq.1) XCtend = XCtbeg+dXC XCtioff = XCtbeg ! Offset time from zero ALng2 = ALng/2 XCM = XCstr - dXC do N=1,NT+Itoff XCM = XCM + dXC ! Carrington variable at interval midpoint if(bDayd) XCM = XMAP_SC_POS(EARTH,iYr,Doy-Inc-aNDay/2.+ N*aNDay-Itoff*aNDay,nCAR,JDCar) XCI = XCM - dXC2 ! Carrington variable at interval boundary XCbe(1,N) = XCM - ALng2 XCbe(2,N) = XCM + ALng2 if(XCbe(1,N).lt.(XCtest1 + xInc - 1.)) then XCbe(1,N) = XCtest1 + xInc - 1. XCbe(2,N) = XCbe(1,N) + ALng end if if(XCbe(2,N).gt.(XCtest1 + xInc - 1. + Alng)) then XCbe(2,N) = XCtest1 + xInc - 1. + Alng XCbe(1,N) = XCbe(2,N) - ALng end if XCint(N) = XCI ! Interval boundary value begins at N = 1 I = XCI ! Even Carrington variable at ending boundary JDXC = JDCar(I)+(JDCar(I+1)-JDCar(I))*(XCI-I) call Julian(1,IYRS(N),DOYS(N),JDXC,JEpoch) C print *, 'N, dXC, XCint(N), XCbe(1,N), XCbe(2,N)', N,dXC,XCint(N),XCbe(1,N),XCbe(2,N) end do NT = NT + Itoff ! Change value of NT if(NT+1.gt.nTmax) stop 'NT too big' ! Check to see if new NT is too big XCint(NT+1) = XCI + dXC ! Last interval value at N + 1 I = XCI + dXC ! Even Carrington variable at ending boundary JDXC = JDCar(I)+(JDCar(I+1)-JDCar(I))*(XCI+dXC-I) call Julian(1,IYRS(NT+1),DOYS(NT+1),JDXC,JEpoch) if(NT.eq.2) Itoff = 0 ! original NT was one C print *, 'NT+1, dXC, XCint(NT+1),' , NT+1,dXC,XCint(NT+1) C print *, 'NT, Itoff, XCtbeg, XCtend', NT, Itoff, XCtbeg, XCtend C print *, ' ' return end