📄 jplephtest.pro
字号:
;+; NAME:; JPLEPHTEST;; AUTHOR:; Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770; craigm@lheamail.gsfc.nasa.gov; UPDATED VERSIONs can be found on my WEB PAGE: ; http://cow.physics.wisc.edu/~craigm/idl/idl.html;; PURPOSE:; Test JPLEPHTEST with JPL test data set;; MAJOR TOPICS:; Planetary Orbits, Interpolation;; CALLING SEQUENCE:; JPLEPHTEST, EPHFILE, TESTFILE;; DESCRIPTION:;; JPLEPHTEST tests the JPLEPHINTERP procedure for precision. In; order to function, you must have a JPL ephemeris test data set.; The test data set testpo.405 is available in ; ftp://idlastro.gsfc.nasa.gov/pub/data;; The procedure opens and reads the test set, which contains; precomputed data. Every tenth value is printed on the screen.; Any deviations that exceed 1.5d-13 AU = 1.5 cm are reported.;; The columns are labelled according to the input file, except for; the final column, which is the deviation between the input file; and the computed value.;;; PARAMETERS: ;; EPHFILE - a scalar string, specifies the name of the ephemeris; file, in FITS format. JPLEPHTEST will look in the directory; $ASTRO_DATA for the file if it is not in the current directory.;; TESTFILE - a scalar string, specifies JPL test data set to compare; against. JPLEPHTEST will look in the directory; $ASTRO_DATA for the file if it is not in the current directory.;;; EXAMPLE:;; Test JPL DE200 and DE405 ephemerides. Assumes files are in the; current directory.;; JPLEPHTEST, 'JPLEPH.200', 'testpo.200'; JPLEPHTEST, 'JPLEPH.405', 'testpo.405'; ;; REFERENCES:;; JPL Export Ephemeris FTP Site; ftp://navigator.jpl.nasa.gov/pub/ephem/export/; (see test-data/ for test data sets); ; HORIZONS, JPL Web-based ephermis calculator (Ephemeris DE406); http://ssd.jpl.nasa.gov/horizons.html;;; SEE ALSO; JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST; ; MODIFICATION HISTORY:; Written and Documented, CM, Jun 2001; Removed TRANSREAD, improved output, improved docs, CM, 9 Jul 2001;; $Id: jplephtest.pro,v 1.4 2001/07/20 13:29:53 craigm Exp $;;-; Copyright (C) 2001, Craig Markwardt; This software is provided as is without any warranty whatsoever.; Permission to use, copy and distribute unmodified copies for; non-commercial purposes, and to modify and use for personal or; internal use, is granted. All other rights are reserved.;-pro jplephtest, ephfile, testfile, pause=pause if n_params() EQ 0 then begin message, 'USAGE: JPLEPHTEST, EPHFILE, TESTFILE', /info return endif testdata = find_with_def( testfile, 'ASTRO_DATA') openr, unit, testdata, /get_lun, error=err if err NE 0 then begin message, 'ERROR: could not open '+testdata return endif ;; Read header of file, up to and including the EOT line repeat begin line = '' readf, unit, line endrep until strupcase(strmid(line,0,3)) EQ 'EOT' ;; Read at least 20000 lines from file data = replicate({denum:0L, caldate: '', jd: 0D, targ: 0L, $ cent: 0L, coord: 0L, value: 0D}, 20000) on_ioerror, DONE readf, unit, data, format='(I5,A10,D0,I0,I0,I0,D0)' DONE: rc = floor((fstat(unit)).transfer_count/7) on_ioerror, NULL free_lun, unit if rc LT 10 then begin message, 'ERROR: could not read input data' endif ;; Cull the data out of the structure data = data[0:rc-1] denum = data.denum & caldate = data.caldate & jd = data.jd targ = data.targ & cent = data.cent & coord = data.coord value = data.value data = 0 bad = cent*0 ephdata = find_with_def(ephfile, 'ASTRO_DATA') jplephread, ephdata, pinfo, pdata, status=st, errmsg=errmsg if st EQ 0 then begin message, errmsg endif if denum[0] NE pinfo.denum then begin message, 'ERROR: test file and ephemeris are not of same version' endif wh = where(jd GE pinfo.tstart AND jd LE pinfo.tstop, totct) if totct EQ 0 then begin message, 'ERROR: test file and ephemeris do not overlap' endif j = 0L for i = 0L, totct-1 do begin if coord[wh[i]] GE 4 then vel = 1 else vel = 0 if targ[wh[i]] GE 14 then vel = 1 ;; Always for nut. & libr. jplephinterp, pinfo, pdata, jd[wh[i]], x, y, z, vx, vy, vz, $ objectname=targ[wh[i]], center=cent[wh[i]], $ posunits='AU', velunits='AU/DAY', velocity=vel case coord[wh[i]] of 1: newval = x 2: newval = y 3: newval = z 4: newval = vx 5: newval = vy 6: newval = vz else: message, 'ERROR: coordinate '+coord[wh[i]]+' does not exist' endcase ;; Nutations are handled differently than PLEPH if targ[wh[i]] EQ 14 AND coord[wh[i]] GT 2 then begin if coord[wh[i]] EQ 3 then newval = vx $ else newval = vy endif del = abs(newval - value[wh[i]]) if targ[wh[i]] EQ 15 AND coord[wh[i]] EQ 3 then $ del = del/(0.23d0*(jd[wh[i]]-2451545.d0)) if del GE 1.5d-13 OR (i MOD 10) EQ 0 then begin if del GE 1.5d-13 then begin print, '****** WARNING: Large difference ******' bad[wh[i]] = 1 endif if j GT 300 then j = 0L if j EQ 0 then $ print, 'REC#', 'Jul. Day', 'Targ', 'Cent', 'Coor', $ 'Value', 'Deviation', format='(A6,A10,3(A5),1(A20),A22)' print, i+1, jd[wh[i]], targ[wh[i]], cent[wh[i]], coord[wh[i]], $ value[wh[i]], del, $ format='(I6,D10.1,3(I5),1(D20.13),E22.13)' endif j = j + 1 endfor if keyword_set(pause) AND total(bad) NE 0 then stop wh = where(bad, ct) print, '' print, '***********************************' print, ' Time Range (Julian Days): ', minmax(jd) print, ' Number of Records: ', totct print, ' Erroneous Records: ', ctend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -