From 3121254bf4f7e0c7df435ee3b83be8445e0d2f94 Mon Sep 17 00:00:00 2001 From: Francois NGUYEN Date: Wed, 12 Aug 2020 20:03:56 +0200 Subject: [PATCH] Initial commit --- 20200721/c/00READ.ME | 49 + 20200721/c/doc/board.lis | 39 + 20200721/c/doc/board.pdf | Bin 0 -> 1760 bytes 20200721/c/doc/changes.lis | 101 + 20200721/c/doc/changes.pdf | Bin 0 -> 3051 bytes 20200721/c/doc/consts.lis | 54 + 20200721/c/doc/consts.pdf | Bin 0 -> 1637 bytes 20200721/c/doc/contents.lis | 25 + 20200721/c/doc/contents.pdf | Bin 0 -> 1287 bytes 20200721/c/doc/copyr.lis | 111 + 20200721/c/doc/copyr.pdf | Bin 0 -> 3821 bytes 20200721/c/doc/intro.lis | 215 + 20200721/c/doc/intro.pdf | Bin 0 -> 6934 bytes 20200721/c/doc/manual.lis | 18903 ++++++++++++++++++++++++++ 20200721/c/doc/manual.pdf | Bin 0 -> 468983 bytes 20200721/c/doc/sofa_ast_c.pdf | Bin 0 -> 302023 bytes 20200721/c/doc/sofa_ast_summary.pdf | Bin 0 -> 63625 bytes 20200721/c/doc/sofa_lib.lis | 751 + 20200721/c/doc/sofa_lib.pdf | Bin 0 -> 14775 bytes 20200721/c/doc/sofa_pn_c.pdf | Bin 0 -> 555519 bytes 20200721/c/doc/sofa_ts_c.pdf | Bin 0 -> 150340 bytes 20200721/c/doc/sofa_vml.lis | 307 + 20200721/c/doc/sofa_vml.pdf | Bin 0 -> 6963 bytes 20200721/c/doc/title.lis | 58 + 20200721/c/doc/title.pdf | Bin 0 -> 1290 bytes 20200721/c/src/a2af.c | 170 + 20200721/c/src/a2tf.c | 166 + 20200721/c/src/ab.c | 178 + 20200721/c/src/ae2hd.c | 185 + 20200721/c/src/af2a.c | 157 + 20200721/c/src/anp.c | 132 + 20200721/c/src/anpm.c | 132 + 20200721/c/src/apcg.c | 222 + 20200721/c/src/apcg13.c | 225 + 20200721/c/src/apci.c | 231 + 20200721/c/src/apci13.c | 243 + 20200721/c/src/apco.c | 305 + 20200721/c/src/apco13.c | 328 + 20200721/c/src/apcs.c | 274 + 20200721/c/src/apcs13.c | 232 + 20200721/c/src/aper.c | 203 + 20200721/c/src/aper13.c | 222 + 20200721/c/src/apio.c | 254 + 20200721/c/src/apio13.c | 300 + 20200721/c/src/atci13.c | 200 + 20200721/c/src/atciq.c | 195 + 20200721/c/src/atciqn.c | 232 + 20200721/c/src/atciqz.c | 194 + 20200721/c/src/atco13.c | 284 + 20200721/c/src/atic13.c | 193 + 20200721/c/src/aticq.c | 240 + 20200721/c/src/aticqn.c | 278 + 20200721/c/src/atio13.c | 263 + 20200721/c/src/atioq.c | 284 + 20200721/c/src/atoc13.c | 274 + 20200721/c/src/atoi13.c | 269 + 20200721/c/src/atoiq.c | 298 + 20200721/c/src/bi00.c | 166 + 20200721/c/src/bp00.c | 222 + 20200721/c/src/bp06.c | 193 + 20200721/c/src/bpn2xy.c | 150 + 20200721/c/src/c2i00a.c | 189 + 20200721/c/src/c2i00b.c | 189 + 20200721/c/src/c2i06a.c | 186 + 20200721/c/src/c2ibpn.c | 192 + 20200721/c/src/c2ixy.c | 181 + 20200721/c/src/c2ixys.c | 173 + 20200721/c/src/c2s.c | 146 + 20200721/c/src/c2t00a.c | 204 + 20200721/c/src/c2t00b.c | 200 + 20200721/c/src/c2t06a.c | 202 + 20200721/c/src/c2tcio.c | 172 + 20200721/c/src/c2teqx.c | 172 + 20200721/c/src/c2tpe.c | 217 + 20200721/c/src/c2txy.c | 209 + 20200721/c/src/cal2jd.c | 189 + 20200721/c/src/cp.c | 130 + 20200721/c/src/cpv.c | 132 + 20200721/c/src/cr.c | 133 + 20200721/c/src/d2dtf.c | 286 + 20200721/c/src/d2tf.c | 210 + 20200721/c/src/dat.c | 352 + 20200721/c/src/dtdb.c | 1263 ++ 20200721/c/src/dtf2d.c | 253 + 20200721/c/src/eceq06.c | 182 + 20200721/c/src/ecm06.c | 185 + 20200721/c/src/ee00.c | 178 + 20200721/c/src/ee00a.c | 185 + 20200721/c/src/ee00b.c | 191 + 20200721/c/src/ee06a.c | 172 + 20200721/c/src/eect00.c | 332 + 20200721/c/src/eform.c | 196 + 20200721/c/src/eo06a.c | 181 + 20200721/c/src/eors.c | 158 + 20200721/c/src/epb.c | 141 + 20200721/c/src/epb2jd.c | 141 + 20200721/c/src/epj.c | 143 + 20200721/c/src/epj2jd.c | 141 + 20200721/c/src/epv00.c | 2639 ++++ 20200721/c/src/eqec06.c | 183 + 20200721/c/src/eqeq94.c | 182 + 20200721/c/src/era00.c | 186 + 20200721/c/src/fad03.c | 153 + 20200721/c/src/fae03.c | 152 + 20200721/c/src/faf03.c | 156 + 20200721/c/src/faju03.c | 152 + 20200721/c/src/fal03.c | 153 + 20200721/c/src/falp03.c | 153 + 20200721/c/src/fama03.c | 152 + 20200721/c/src/fame03.c | 152 + 20200721/c/src/fane03.c | 149 + 20200721/c/src/faom03.c | 154 + 20200721/c/src/fapa03.c | 153 + 20200721/c/src/fasa03.c | 152 + 20200721/c/src/faur03.c | 149 + 20200721/c/src/fave03.c | 152 + 20200721/c/src/fk425.c | 321 + 20200721/c/src/fk45z.c | 251 + 20200721/c/src/fk524.c | 333 + 20200721/c/src/fk52h.c | 193 + 20200721/c/src/fk54z.c | 193 + 20200721/c/src/fk5hip.c | 176 + 20200721/c/src/fk5hz.c | 210 + 20200721/c/src/fw2m.c | 188 + 20200721/c/src/fw2xy.c | 171 + 20200721/c/src/g2icrs.c | 211 + 20200721/c/src/gc2gd.c | 184 + 20200721/c/src/gc2gde.c | 249 + 20200721/c/src/gd2gc.c | 183 + 20200721/c/src/gd2gce.c | 187 + 20200721/c/src/gmst00.c | 195 + 20200721/c/src/gmst06.c | 186 + 20200721/c/src/gmst82.c | 200 + 20200721/c/src/gst00a.c | 188 + 20200721/c/src/gst00b.c | 196 + 20200721/c/src/gst06.c | 190 + 20200721/c/src/gst06a.c | 181 + 20200721/c/src/gst94.c | 181 + 20200721/c/src/h2fk5.c | 198 + 20200721/c/src/hd2ae.c | 190 + 20200721/c/src/hd2pa.c | 164 + 20200721/c/src/hfk5z.c | 225 + 20200721/c/src/icrs2g.c | 211 + 20200721/c/src/ir.c | 133 + 20200721/c/src/jd2cal.c | 247 + 20200721/c/src/jdcalf.c | 222 + 20200721/c/src/ld.c | 202 + 20200721/c/src/ldn.c | 224 + 20200721/c/src/ldsun.c | 156 + 20200721/c/src/lteceq.c | 179 + 20200721/c/src/ltecm.c | 198 + 20200721/c/src/lteqec.c | 180 + 20200721/c/src/ltp.c | 181 + 20200721/c/src/ltpb.c | 174 + 20200721/c/src/ltpecl.c | 218 + 20200721/c/src/ltpequ.c | 218 + 20200721/c/src/makefile | 886 ++ 20200721/c/src/num00a.c | 171 + 20200721/c/src/num00b.c | 171 + 20200721/c/src/num06a.c | 175 + 20200721/c/src/numat.c | 159 + 20200721/c/src/nut00a.c | 2097 +++ 20200721/c/src/nut00b.c | 422 + 20200721/c/src/nut06a.c | 200 + 20200721/c/src/nut80.c | 375 + 20200721/c/src/nutm80.c | 167 + 20200721/c/src/obl06.c | 168 + 20200721/c/src/obl80.c | 168 + 20200721/c/src/p06e.c | 378 + 20200721/c/src/p2pv.c | 133 + 20200721/c/src/p2s.c | 141 + 20200721/c/src/pap.c | 189 + 20200721/c/src/pas.c | 146 + 20200721/c/src/pb06.c | 200 + 20200721/c/src/pdp.c | 134 + 20200721/c/src/pfw06.c | 215 + 20200721/c/src/plan94.c | 564 + 20200721/c/src/pm.c | 126 + 20200721/c/src/pmat00.c | 168 + 20200721/c/src/pmat06.c | 172 + 20200721/c/src/pmat76.c | 191 + 20200721/c/src/pmp.c | 135 + 20200721/c/src/pmpx.c | 194 + 20200721/c/src/pmsafe.c | 247 + 20200721/c/src/pn.c | 159 + 20200721/c/src/pn00.c | 227 + 20200721/c/src/pn00a.c | 213 + 20200721/c/src/pn00b.c | 213 + 20200721/c/src/pn06.c | 237 + 20200721/c/src/pn06a.c | 203 + 20200721/c/src/pnm00a.c | 171 + 20200721/c/src/pnm00b.c | 171 + 20200721/c/src/pnm06a.c | 174 + 20200721/c/src/pnm80.c | 176 + 20200721/c/src/pom00.c | 165 + 20200721/c/src/ppp.c | 135 + 20200721/c/src/ppsp.c | 144 + 20200721/c/src/pr00.c | 192 + 20200721/c/src/prec76.c | 198 + 20200721/c/src/pv2p.c | 131 + 20200721/c/src/pv2s.c | 194 + 20200721/c/src/pvdpv.c | 152 + 20200721/c/src/pvm.c | 136 + 20200721/c/src/pvmpv.c | 137 + 20200721/c/src/pvppv.c | 137 + 20200721/c/src/pvstar.c | 257 + 20200721/c/src/pvtob.c | 203 + 20200721/c/src/pvu.c | 143 + 20200721/c/src/pvup.c | 138 + 20200721/c/src/pvxpv.c | 157 + 20200721/c/src/pxp.c | 144 + 20200721/c/src/refco.c | 303 + 20200721/c/src/rm2v.c | 161 + 20200721/c/src/rv2m.c | 168 + 20200721/c/src/rx.c | 160 + 20200721/c/src/rxp.c | 149 + 20200721/c/src/rxpv.c | 136 + 20200721/c/src/rxr.c | 149 + 20200721/c/src/ry.c | 160 + 20200721/c/src/rz.c | 160 + 20200721/c/src/s00.c | 421 + 20200721/c/src/s00a.c | 193 + 20200721/c/src/s00b.c | 193 + 20200721/c/src/s06.c | 418 + 20200721/c/src/s06a.c | 195 + 20200721/c/src/s2c.c | 135 + 20200721/c/src/s2p.c | 138 + 20200721/c/src/s2pv.c | 153 + 20200721/c/src/s2xpv.c | 137 + 20200721/c/src/sepp.c | 155 + 20200721/c/src/seps.c | 143 + 20200721/c/src/sofa.h | 592 + 20200721/c/src/sofam.h | 251 + 20200721/c/src/sp00.c | 168 + 20200721/c/src/starpm.c | 255 + 20200721/c/src/starpv.c | 315 + 20200721/c/src/sxp.c | 134 + 20200721/c/src/sxpv.c | 135 + 20200721/c/src/t_sofa_c.c | 10252 ++++++++++++++ 20200721/c/src/taitt.c | 160 + 20200721/c/src/taiut1.c | 162 + 20200721/c/src/taiutc.c | 209 + 20200721/c/src/tcbtdb.c | 182 + 20200721/c/src/tcgtt.c | 159 + 20200721/c/src/tdbtcb.c | 187 + 20200721/c/src/tdbtt.c | 172 + 20200721/c/src/tf2a.c | 157 + 20200721/c/src/tf2d.c | 157 + 20200721/c/src/tpors.c | 222 + 20200721/c/src/tporv.c | 219 + 20200721/c/src/tpsts.c | 170 + 20200721/c/src/tpstv.c | 194 + 20200721/c/src/tpxes.c | 203 + 20200721/c/src/tpxev.c | 223 + 20200721/c/src/tr.c | 143 + 20200721/c/src/trxp.c | 143 + 20200721/c/src/trxpv.c | 143 + 20200721/c/src/tttai.c | 160 + 20200721/c/src/tttcg.c | 162 + 20200721/c/src/tttdb.c | 171 + 20200721/c/src/ttut1.c | 160 + 20200721/c/src/ut1tai.c | 161 + 20200721/c/src/ut1tt.c | 160 + 20200721/c/src/ut1utc.c | 243 + 20200721/c/src/utctai.c | 228 + 20200721/c/src/utcut1.c | 197 + 20200721/c/src/xy06.c | 2808 ++++ 20200721/c/src/xys00a.c | 183 + 20200721/c/src/xys00b.c | 183 + 20200721/c/src/xys06a.c | 183 + 20200721/c/src/zp.c | 127 + 20200721/c/src/zpv.c | 129 + 20200721/c/src/zr.c | 133 + 273 files changed, 87943 insertions(+) create mode 100644 20200721/c/00READ.ME create mode 100644 20200721/c/doc/board.lis create mode 100644 20200721/c/doc/board.pdf create mode 100644 20200721/c/doc/changes.lis create mode 100644 20200721/c/doc/changes.pdf create mode 100644 20200721/c/doc/consts.lis create mode 100644 20200721/c/doc/consts.pdf create mode 100644 20200721/c/doc/contents.lis create mode 100644 20200721/c/doc/contents.pdf create mode 100644 20200721/c/doc/copyr.lis create mode 100644 20200721/c/doc/copyr.pdf create mode 100644 20200721/c/doc/intro.lis create mode 100644 20200721/c/doc/intro.pdf create mode 100644 20200721/c/doc/manual.lis create mode 100644 20200721/c/doc/manual.pdf create mode 100644 20200721/c/doc/sofa_ast_c.pdf create mode 100644 20200721/c/doc/sofa_ast_summary.pdf create mode 100644 20200721/c/doc/sofa_lib.lis create mode 100644 20200721/c/doc/sofa_lib.pdf create mode 100644 20200721/c/doc/sofa_pn_c.pdf create mode 100644 20200721/c/doc/sofa_ts_c.pdf create mode 100644 20200721/c/doc/sofa_vml.lis create mode 100644 20200721/c/doc/sofa_vml.pdf create mode 100644 20200721/c/doc/title.lis create mode 100644 20200721/c/doc/title.pdf create mode 100644 20200721/c/src/a2af.c create mode 100644 20200721/c/src/a2tf.c create mode 100644 20200721/c/src/ab.c create mode 100644 20200721/c/src/ae2hd.c create mode 100644 20200721/c/src/af2a.c create mode 100644 20200721/c/src/anp.c create mode 100644 20200721/c/src/anpm.c create mode 100644 20200721/c/src/apcg.c create mode 100644 20200721/c/src/apcg13.c create mode 100644 20200721/c/src/apci.c create mode 100644 20200721/c/src/apci13.c create mode 100644 20200721/c/src/apco.c create mode 100644 20200721/c/src/apco13.c create mode 100644 20200721/c/src/apcs.c create mode 100644 20200721/c/src/apcs13.c create mode 100644 20200721/c/src/aper.c create mode 100644 20200721/c/src/aper13.c create mode 100644 20200721/c/src/apio.c create mode 100644 20200721/c/src/apio13.c create mode 100644 20200721/c/src/atci13.c create mode 100644 20200721/c/src/atciq.c create mode 100644 20200721/c/src/atciqn.c create mode 100644 20200721/c/src/atciqz.c create mode 100644 20200721/c/src/atco13.c create mode 100644 20200721/c/src/atic13.c create mode 100644 20200721/c/src/aticq.c create mode 100644 20200721/c/src/aticqn.c create mode 100644 20200721/c/src/atio13.c create mode 100644 20200721/c/src/atioq.c create mode 100644 20200721/c/src/atoc13.c create mode 100644 20200721/c/src/atoi13.c create mode 100644 20200721/c/src/atoiq.c create mode 100644 20200721/c/src/bi00.c create mode 100644 20200721/c/src/bp00.c create mode 100644 20200721/c/src/bp06.c create mode 100644 20200721/c/src/bpn2xy.c create mode 100644 20200721/c/src/c2i00a.c create mode 100644 20200721/c/src/c2i00b.c create mode 100644 20200721/c/src/c2i06a.c create mode 100644 20200721/c/src/c2ibpn.c create mode 100644 20200721/c/src/c2ixy.c create mode 100644 20200721/c/src/c2ixys.c create mode 100644 20200721/c/src/c2s.c create mode 100644 20200721/c/src/c2t00a.c create mode 100644 20200721/c/src/c2t00b.c create mode 100644 20200721/c/src/c2t06a.c create mode 100644 20200721/c/src/c2tcio.c create mode 100644 20200721/c/src/c2teqx.c create mode 100644 20200721/c/src/c2tpe.c create mode 100644 20200721/c/src/c2txy.c create mode 100644 20200721/c/src/cal2jd.c create mode 100644 20200721/c/src/cp.c create mode 100644 20200721/c/src/cpv.c create mode 100644 20200721/c/src/cr.c create mode 100644 20200721/c/src/d2dtf.c create mode 100644 20200721/c/src/d2tf.c create mode 100644 20200721/c/src/dat.c create mode 100644 20200721/c/src/dtdb.c create mode 100644 20200721/c/src/dtf2d.c create mode 100644 20200721/c/src/eceq06.c create mode 100644 20200721/c/src/ecm06.c create mode 100644 20200721/c/src/ee00.c create mode 100644 20200721/c/src/ee00a.c create mode 100644 20200721/c/src/ee00b.c create mode 100644 20200721/c/src/ee06a.c create mode 100644 20200721/c/src/eect00.c create mode 100644 20200721/c/src/eform.c create mode 100644 20200721/c/src/eo06a.c create mode 100644 20200721/c/src/eors.c create mode 100644 20200721/c/src/epb.c create mode 100644 20200721/c/src/epb2jd.c create mode 100644 20200721/c/src/epj.c create mode 100644 20200721/c/src/epj2jd.c create mode 100644 20200721/c/src/epv00.c create mode 100644 20200721/c/src/eqec06.c create mode 100644 20200721/c/src/eqeq94.c create mode 100644 20200721/c/src/era00.c create mode 100644 20200721/c/src/fad03.c create mode 100644 20200721/c/src/fae03.c create mode 100644 20200721/c/src/faf03.c create mode 100644 20200721/c/src/faju03.c create mode 100644 20200721/c/src/fal03.c create mode 100644 20200721/c/src/falp03.c create mode 100644 20200721/c/src/fama03.c create mode 100644 20200721/c/src/fame03.c create mode 100644 20200721/c/src/fane03.c create mode 100644 20200721/c/src/faom03.c create mode 100644 20200721/c/src/fapa03.c create mode 100644 20200721/c/src/fasa03.c create mode 100644 20200721/c/src/faur03.c create mode 100644 20200721/c/src/fave03.c create mode 100644 20200721/c/src/fk425.c create mode 100644 20200721/c/src/fk45z.c create mode 100644 20200721/c/src/fk524.c create mode 100644 20200721/c/src/fk52h.c create mode 100644 20200721/c/src/fk54z.c create mode 100644 20200721/c/src/fk5hip.c create mode 100644 20200721/c/src/fk5hz.c create mode 100644 20200721/c/src/fw2m.c create mode 100644 20200721/c/src/fw2xy.c create mode 100644 20200721/c/src/g2icrs.c create mode 100644 20200721/c/src/gc2gd.c create mode 100644 20200721/c/src/gc2gde.c create mode 100644 20200721/c/src/gd2gc.c create mode 100644 20200721/c/src/gd2gce.c create mode 100644 20200721/c/src/gmst00.c create mode 100644 20200721/c/src/gmst06.c create mode 100644 20200721/c/src/gmst82.c create mode 100644 20200721/c/src/gst00a.c create mode 100644 20200721/c/src/gst00b.c create mode 100644 20200721/c/src/gst06.c create mode 100644 20200721/c/src/gst06a.c create mode 100644 20200721/c/src/gst94.c create mode 100644 20200721/c/src/h2fk5.c create mode 100644 20200721/c/src/hd2ae.c create mode 100644 20200721/c/src/hd2pa.c create mode 100644 20200721/c/src/hfk5z.c create mode 100644 20200721/c/src/icrs2g.c create mode 100644 20200721/c/src/ir.c create mode 100644 20200721/c/src/jd2cal.c create mode 100644 20200721/c/src/jdcalf.c create mode 100644 20200721/c/src/ld.c create mode 100644 20200721/c/src/ldn.c create mode 100644 20200721/c/src/ldsun.c create mode 100644 20200721/c/src/lteceq.c create mode 100644 20200721/c/src/ltecm.c create mode 100644 20200721/c/src/lteqec.c create mode 100644 20200721/c/src/ltp.c create mode 100644 20200721/c/src/ltpb.c create mode 100644 20200721/c/src/ltpecl.c create mode 100644 20200721/c/src/ltpequ.c create mode 100644 20200721/c/src/makefile create mode 100644 20200721/c/src/num00a.c create mode 100644 20200721/c/src/num00b.c create mode 100644 20200721/c/src/num06a.c create mode 100644 20200721/c/src/numat.c create mode 100644 20200721/c/src/nut00a.c create mode 100644 20200721/c/src/nut00b.c create mode 100644 20200721/c/src/nut06a.c create mode 100644 20200721/c/src/nut80.c create mode 100644 20200721/c/src/nutm80.c create mode 100644 20200721/c/src/obl06.c create mode 100644 20200721/c/src/obl80.c create mode 100644 20200721/c/src/p06e.c create mode 100644 20200721/c/src/p2pv.c create mode 100644 20200721/c/src/p2s.c create mode 100644 20200721/c/src/pap.c create mode 100644 20200721/c/src/pas.c create mode 100644 20200721/c/src/pb06.c create mode 100644 20200721/c/src/pdp.c create mode 100644 20200721/c/src/pfw06.c create mode 100644 20200721/c/src/plan94.c create mode 100644 20200721/c/src/pm.c create mode 100644 20200721/c/src/pmat00.c create mode 100644 20200721/c/src/pmat06.c create mode 100644 20200721/c/src/pmat76.c create mode 100644 20200721/c/src/pmp.c create mode 100644 20200721/c/src/pmpx.c create mode 100644 20200721/c/src/pmsafe.c create mode 100644 20200721/c/src/pn.c create mode 100644 20200721/c/src/pn00.c create mode 100644 20200721/c/src/pn00a.c create mode 100644 20200721/c/src/pn00b.c create mode 100644 20200721/c/src/pn06.c create mode 100644 20200721/c/src/pn06a.c create mode 100644 20200721/c/src/pnm00a.c create mode 100644 20200721/c/src/pnm00b.c create mode 100644 20200721/c/src/pnm06a.c create mode 100644 20200721/c/src/pnm80.c create mode 100644 20200721/c/src/pom00.c create mode 100644 20200721/c/src/ppp.c create mode 100644 20200721/c/src/ppsp.c create mode 100644 20200721/c/src/pr00.c create mode 100644 20200721/c/src/prec76.c create mode 100644 20200721/c/src/pv2p.c create mode 100644 20200721/c/src/pv2s.c create mode 100644 20200721/c/src/pvdpv.c create mode 100644 20200721/c/src/pvm.c create mode 100644 20200721/c/src/pvmpv.c create mode 100644 20200721/c/src/pvppv.c create mode 100644 20200721/c/src/pvstar.c create mode 100644 20200721/c/src/pvtob.c create mode 100644 20200721/c/src/pvu.c create mode 100644 20200721/c/src/pvup.c create mode 100644 20200721/c/src/pvxpv.c create mode 100644 20200721/c/src/pxp.c create mode 100644 20200721/c/src/refco.c create mode 100644 20200721/c/src/rm2v.c create mode 100644 20200721/c/src/rv2m.c create mode 100644 20200721/c/src/rx.c create mode 100644 20200721/c/src/rxp.c create mode 100644 20200721/c/src/rxpv.c create mode 100644 20200721/c/src/rxr.c create mode 100644 20200721/c/src/ry.c create mode 100644 20200721/c/src/rz.c create mode 100644 20200721/c/src/s00.c create mode 100644 20200721/c/src/s00a.c create mode 100644 20200721/c/src/s00b.c create mode 100644 20200721/c/src/s06.c create mode 100644 20200721/c/src/s06a.c create mode 100644 20200721/c/src/s2c.c create mode 100644 20200721/c/src/s2p.c create mode 100644 20200721/c/src/s2pv.c create mode 100644 20200721/c/src/s2xpv.c create mode 100644 20200721/c/src/sepp.c create mode 100644 20200721/c/src/seps.c create mode 100644 20200721/c/src/sofa.h create mode 100644 20200721/c/src/sofam.h create mode 100644 20200721/c/src/sp00.c create mode 100644 20200721/c/src/starpm.c create mode 100644 20200721/c/src/starpv.c create mode 100644 20200721/c/src/sxp.c create mode 100644 20200721/c/src/sxpv.c create mode 100644 20200721/c/src/t_sofa_c.c create mode 100644 20200721/c/src/taitt.c create mode 100644 20200721/c/src/taiut1.c create mode 100644 20200721/c/src/taiutc.c create mode 100644 20200721/c/src/tcbtdb.c create mode 100644 20200721/c/src/tcgtt.c create mode 100644 20200721/c/src/tdbtcb.c create mode 100644 20200721/c/src/tdbtt.c create mode 100644 20200721/c/src/tf2a.c create mode 100644 20200721/c/src/tf2d.c create mode 100644 20200721/c/src/tpors.c create mode 100644 20200721/c/src/tporv.c create mode 100644 20200721/c/src/tpsts.c create mode 100644 20200721/c/src/tpstv.c create mode 100644 20200721/c/src/tpxes.c create mode 100644 20200721/c/src/tpxev.c create mode 100644 20200721/c/src/tr.c create mode 100644 20200721/c/src/trxp.c create mode 100644 20200721/c/src/trxpv.c create mode 100644 20200721/c/src/tttai.c create mode 100644 20200721/c/src/tttcg.c create mode 100644 20200721/c/src/tttdb.c create mode 100644 20200721/c/src/ttut1.c create mode 100644 20200721/c/src/ut1tai.c create mode 100644 20200721/c/src/ut1tt.c create mode 100644 20200721/c/src/ut1utc.c create mode 100644 20200721/c/src/utctai.c create mode 100644 20200721/c/src/utcut1.c create mode 100644 20200721/c/src/xy06.c create mode 100644 20200721/c/src/xys00a.c create mode 100644 20200721/c/src/xys00b.c create mode 100644 20200721/c/src/xys06a.c create mode 100644 20200721/c/src/zp.c create mode 100644 20200721/c/src/zpv.c create mode 100644 20200721/c/src/zr.c diff --git a/20200721/c/00READ.ME b/20200721/c/00READ.ME new file mode 100644 index 0000000..5be2c9d --- /dev/null +++ b/20200721/c/00READ.ME @@ -0,0 +1,49 @@ + +SOFA-Issue: 2020-07-21 + +This is the IAU Standards of Fundamental Astronomy (SOFA) Libraries product, +issued on 2020-07-21. The tag `SOFA-Issue' above defines this release and +differentiates it from previous or subsequent releases of the SOFA product. +The 00READ.ME file must remain with this distribution set. + +Changes made since the previous release are noted in the file changes.lis. + +Notes: + +1/ Unix users: The distribution set contains a simple makefile which + can be used to create a single object library for the SOFA Libraries. + To build the object library: + + a/ Examine the makefile to be sure definition of the C compiler + is correct for your system. You need an ANSI standard compliant + C compiler. Edit the CCOMPC macro in the makefile as necessary. + + b/ To create libsofa.a, execute make: + + % make + + (where % is the shell prompt). + + c/ To remove the object files: + + % make clean + + To link with the SOFA library, include the library in the compile/link + command in the normal Unix fashion, eg: + + % gcc myprog.c -o myprog libsofa.a + + You should specify the appropriate C compiler name for `gcc' + in the above command sequence. + + +2/ Windows/DOS/Mac users: There is no `build' procedure to create a linkable + object library or DLL for the SOFA Libraries. This is due to the many + different C compilers and development environments available on + Windows/DOS and Mac machines. + + To use the SOFA routines with your program(s), you must use your preferred + development environment to create the appropriate library or DLL. + +IAU SOFA Center +2020/07/21 diff --git a/20200721/c/doc/board.lis b/20200721/c/doc/board.lis new file mode 100644 index 0000000..8db0a08 --- /dev/null +++ b/20200721/c/doc/board.lis @@ -0,0 +1,39 @@ +board.lis 2020 June 2 + + + +IAU STANDARDS OF FUNDAMENTAL ASTRONOMY BOARD + + +Current Membership + + John Bangert - United States Naval Observatory, retired + Steven Bell - Her Majesty's Nautical Almanac Office (HMNAO) + Nicole Capitaine - Paris Observatory + Mickael Gastineau - Paris Observatory, IMCCE + Catherine Hohenkerk - HMNAO (Chair, retired) + Li Jinling - Shanghai Astronomical Observatory + Brian Luzum - United States Naval Observatory (IERS) + Zinovy Malkin - Pulkovo Observatory, St Petersburg + Jeffrey Percival - University of Wisconsin + Wendy Puatua - United States Naval Observatory + Scott Ransom - National Radio Astronomy Observatory + Nick Stamatakos - United States Naval Observatory + Patrick Wallace - RAL Space, retired + Toni Wilmot - Her Majesty's Nautical Almanac Office (Trainee) + + +Past Members + + Wim Brouw University of Groningen + Mark Calabretta Australia Telescope National Facility + William Folkner Jet Propulsion Laboratory + Anne-Marie Gontier Paris Observatory + George Hobbs Australia Telescope National Facility + George Kaplan United States Naval Observatory + Dennis McCarthy United States Naval Observatory + Skip Newhall Jet Propulsion Laboratory + Jin Wen-Jing Shanghai Astronomical Observatory + + +The email address for the Board chair is catherine.hohenkerk@gmail.com diff --git a/20200721/c/doc/board.pdf b/20200721/c/doc/board.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e128a7579adac37e6206ccc36b3843ae2687c4bc GIT binary patch literal 1760 zcmah~Yfuwc6!rl{7oom*O4~(@fN1ssVS^wPNCFX%n4qFG>XIxZ6%yHOB$}y8H4>dx zE#lxKAcG=PD^P7gRM4t`RYaMpAdVtFP%PF|E48TD-o+?YXWIRk^hzPlWW zKr{{G;t=QbgH0t64@O~a>gP~c7!pru(is&T3=khU@0L0!2n{jICb(qZ}aSyvx5jdi8((zykW&iy?{b0f2U z^a=Ku?D4QJ`>1sp@uB389*HiyH=eHiV8+X7wGNfX=I8wS&7GEwb(LFOEzg^usq02Q zx@Jth>~ZnQg}%zU-*pk^4gOD^_j)#;D=1n0ca3M2$mv<>M3qz882RWcUSO)#33DrD`obXNshSd#+#y%ae?Nk3#KeK2jrtWT$OWGRr5c|@eUZ( zoUFPXSAM`{!_;zfY3$6_!xM*lcgV=LMV47=;Yn%Ex!L5f-F=@;vdeaucN2BL{?S3p zMfVMYxG$Z#CgBN<*C}_Wlq2J!?45*p-r{bO^jP0zyy8>i99pOm-Y-r#!*35L%sczD zk}Gu^8uN>I_O^R3ilRM7bUSiP3((-1?S74slH}c6&lBQ0r;1FwDen2J&c0A2F1PkP zoV23j(ILr-sTLFTN$tykN z>o;k*uI3Uhvt;Od*EgN&ru-fEo)}Vg^}%#cKjG=xI=EX+2^(I_tL%;4Y3kW=pUFP* z#pITmw;Z^f?8b_D#_>Pd`#0p6#13C4wC(bV*`9oI^T)D^qQcIIgXWzby{EHo=wCKf zU9h`SUd-nddztJk&7)lG&s7aAif&nU!!h>SrJ=L9?asat*PY9(jxkTh75<HfF3=H6jv>=#25De^z zM1xmA*TJllCj_9sCqqjqOB{5)i>A9$aK!ZHrN)j$+GaKS`@8dLaA2h9E?!0SAs+lMaWl zbVR04WmpN>%CW&@?4m8%fWog?h(Mi|MgbjxaA0dZBvY-?>*Rw(e2@rKRq7QK?H417 zhhtP)9ivmw>ZL$bE`j<3MZtl`sI?jaXpf&@I*#HfO5iv~;2}6a0L6S!)E9&$XqEpN z5gu-9gn_2gAQZ+>2z_(G!8~3d4^D$^7={u+RQ7^3Z!nw>dh`y4V((!n|9visVqhNL z=AwMwdt40TfvJ2u4#RLT0PkQp4*K{SV`x&HLDAq30wXf@3JUBE2J@^1Q^Yn8M#P#l zEzC*|23jnDQ^KM#0*l0>z^?g`fr20bN<{NQqEQ@235<{7g7E*3kh24-V@R4A5EKhS M35dfHCW@ec0I=+NQ~&?~ literal 0 HcmV?d00001 diff --git a/20200721/c/doc/changes.lis b/20200721/c/doc/changes.lis new file mode 100644 index 0000000..ce7a346 --- /dev/null +++ b/20200721/c/doc/changes.lis @@ -0,0 +1,101 @@ + Updates for SOFA Release 16 : 2020 July 21 + - - - - - - - - - - - - - - - - - - - - - - + +Summary of Changes +------------------ +The changes fall into the following categories: + +1. Correction of a sign in routine P06E. + +2. Correction in the ANSI C macro function dnint in the include file + sofam.h, to improve rounding. + +3. Improvements in precision and rounding (see 2 and 3 below). + +4. Miscellaneous typographical corrections and improvements to + various other documents. + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FORTRAN 77 Library +------------------ + +1. iau_P06E Correction. The series are taken from Table 1 of + Hilton, J. et al., 2006, Celest. Mech. Dyn. Astron. + 94, 351., and it has been discovered that the one + for general precession, p_A, had the wrong sign for + the t^5 coefficient. The error in the paper has + been corrected in the SOFA code. The correct value + is -0.0000000383 arcsec. (Even after five centuries + the error would be lower than 250 microarcsec.) + +2. iau_PB06 Improvements in the method of decomposing the rotation + matrix by ensuring that angles near zero are preferred. + +3. iau_JD2CAL Improvements by ensuring precision is not lost when + iau_JDCALF splitting date and time. + +4. iau_DAT Release year updated. + +5. t_sofa_f.for Updated due to the correction in iau_P06E. + +6. iau_FK524 Minor corrections/improvements to the documentation. + iau_FW2M + iau_GMST82 + iau_TRXP + iau_XYS00A + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ANSI C Library +-------------- + +1. iauP06e Correction. The series are taken from Table 1 of + Hilton, J. et al., 2006, Celest. Mech. Dyn. Astron. + 94, 351., and it has been discovered that the one + for general precession, p_A, had the wrong sign for + the t^5 coefficient. The error in the paper has + been corrected in the SOFA code. The correct value + is -0.0000000383 arcsec. (Even after five centuries + the error would be lower than 250 microarcsec.) + +2. sofam.h Correction to dnint(A). + + The existing dnint macro could incorrectly round + numbers just over -0.5 and just under +0.5 due to + the loss of precision when calculating ceil(A-0.5) + or floor(A+0.5). A preliminary test for |A|<0.5 + has been added to ensure that such numbers always + round to zero. As none of the SOFA C functions + depend critically on perfect rounding, the change + is unlikely to affect user applications noticeably, + though critical round-trip tests may see an + improvement. + +3. iauPb06 Improvements in the method of decomposing the rotation + matrix by ensuring that angles near zero are preferred. + +4. iauJd2cal Improvements by ensuring precision is not lost when + iauJdcalf splitting date and time. + +5. iauDat Release year updated. + +6. t_sofa_c.c Updated due to the correction in iauP06e. + +7. iauA2af Minor corrections/improvements to the documentation. + iauA2tf + iauD2tf + iauFk524 + iauFw2m + iauGmst82 + iauTrxp + iauXys00a + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ SOFA thanks all those who have reported the various issues that go ++ to ensuring the libraries and documentation are kept up-to-date and ++ relevant. ++ ++ End of updates ++ 2020 June 22 ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/20200721/c/doc/changes.pdf b/20200721/c/doc/changes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ac353dacc72df57ab5e4d27bee1452cb482b3e0 GIT binary patch literal 3051 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 EFNxlyf&c&j literal 0 HcmV?d00001 diff --git a/20200721/c/doc/consts.lis b/20200721/c/doc/consts.lis new file mode 100644 index 0000000..62578cf --- /dev/null +++ b/20200721/c/doc/consts.lis @@ -0,0 +1,54 @@ +consts.lis 2008 September 30 + + +SOFA Fortran constants +---------------------- + +These must be used exactly as presented below. + +* Pi + DOUBLE PRECISION DPI + PARAMETER ( DPI = 3.141592653589793238462643D0 ) + +* 2Pi + DOUBLE PRECISION D2PI + PARAMETER ( D2PI = 6.283185307179586476925287D0 ) + +* Radians to hours + DOUBLE PRECISION DR2H + PARAMETER ( DR2H = 3.819718634205488058453210D0 ) + +* Radians to seconds + DOUBLE PRECISION DR2S + PARAMETER ( DR2S = 13750.98708313975701043156D0 ) + +* Radians to degrees + DOUBLE PRECISION DR2D + PARAMETER ( DR2D = 57.29577951308232087679815D0 ) + +* Radians to arc seconds + DOUBLE PRECISION DR2AS + PARAMETER ( DR2AS = 206264.8062470963551564734D0 ) + +* Hours to radians + DOUBLE PRECISION DH2R + PARAMETER ( DH2R = 0.2617993877991494365385536D0 ) + +* Seconds to radians + DOUBLE PRECISION DS2R + PARAMETER ( DS2R = 7.272205216643039903848712D-5 ) + +* Degrees to radians + DOUBLE PRECISION DD2R + PARAMETER ( DD2R = 1.745329251994329576923691D-2 ) + +* Arc seconds to radians + DOUBLE PRECISION DAS2R + PARAMETER ( DAS2R = 4.848136811095359935899141D-6 ) + + +SOFA C constants +---------------- + +The constants used by the C version of SOFA are defined in the header +file sofam.h. diff --git a/20200721/c/doc/consts.pdf b/20200721/c/doc/consts.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f260964230fd518628dd275666ba74926b8dc79c GIT binary patch literal 1637 zcmah}eNYr-7_StpHLXZUDf7iZMA7}Y+xt);y^m#15%CU|4)nyRoO3dCH`%Vnv5WGVS9h?#k1g?>5igflH{4w(oketF23Y8 zE{*qSyk$jx)5;(KUzvo`}vGcdb*pJ^Dm~ybG&;LeG-3l@(b3wqWO8bw) zx$sKAn4)JFR11rzR@E!wbF4Mp$t7Fdy~jsS@#~I_?Y>l1Fd-$+q}w%I;i%Y~9Nhb5 z=b81*@i*ay&7<}O*6%vD{H%l{<4Y)cA90;6!(Vl{%llOVL{ZK z8P1IX7`83xO1(Ao;~Zw(nm8=6pE%)Z|G8~KX+Y_==Hlv|Ybz+%xG_Hn?$78}&AMNg zxS~S~4xS5SI-f4TG74752cK+edVbn?53yslIdq*;ckS|5J#)5is~xfD4b$`j%3n9B zb7{!g#NF{po}*QgIpJ>gdGrJ@@a)jV=Hg1m|S<{kJ_qMY<`P1hvkG;K{Znw6>jeRt1w9j;CLzUzL}=~p`qMKcm3J=Ldz zHfV!$T#8`9MNRY!J56|&g!lLT)i_X-#_YJ)9`c}H7~AUX;WPfz3gpPFE8VNKy3HkyxHH zp!Q5Q%%BL0Ak-8^swu5fIh7#82_hVY&EswV84(lXYec>P?HB<_0wW$RprUC74eVeL z)6&Qt@&eo-Mv^Mjh{rKPqkR%nKglHs68Yg@T(#l}E=f?RKmUr;YEeTU$4HVuei_6h z!OCVq0sY1SZef>0bT@$f%p(`c%>%fJv-3cf92weV04Y(kDTYvM^o&BU(W{I`rB=nz lN|jNkFfs-Mt<}W*e?+QmP*Ji9l2=fY(kQX8Fynj%`x}ciO(_5X literal 0 HcmV?d00001 diff --git a/20200721/c/doc/contents.lis b/20200721/c/doc/contents.lis new file mode 100644 index 0000000..d3acfdb --- /dev/null +++ b/20200721/c/doc/contents.lis @@ -0,0 +1,25 @@ +contents.lis 2018 January 26 + + + -------- + CONTENTS + -------- + + + + + + 1) Introduction + + 2) The SOFA Astronomy Library + + 3) The SOFA Vector/Matrix Library + + 4) The individual routines + + + A1 The SOFA copyright notice + + A2 Constants + + A3 SOFA Board membership diff --git a/20200721/c/doc/contents.pdf b/20200721/c/doc/contents.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0ec6b5fb0831fbee1bc8a0ac9d0e9477fd5e8031 GIT binary patch literal 1287 zcmah}YiJZ#7%dXD3@9pCi9x&;5Xc6Gbh&17{=(j*&$3EM>{yLWd-HZ#l2 zENl|1XcYS+Xd0DPF)CGyij>lTikkc|p=vAmKt&Pa>zDX`ptL^lyXz(^vDEo9bI<+G zH|L)7%@o(j{<(aqz!jgmzv&lFL#n_S5hr*C6E)4Aoi~lZr)U8quTF z>*Y+#ph`2B*|D{&w)!NQaO%dZ*$=B;EN=`gzkY`#9G}-t-LKlw~8s(@P{Tk z`uEHXlvMNen|B({MA6h^&T+5fPk!E)T6*>Hc zH~Qymk16gtbEdMi^B?ost22Hdz4fWS)yoR>!Roc``25w2C${}D_sY$1QOD(RlWZHhdmjDt z)sbs0JqJfMOzF57AKdor&C%{=-<8dVjaoc5R~jlcvfZ->;&8bJgQ;q9CykK@OpDWWDFYP2;vDxhA-q4MZ1V%Xb5u> zFr8gU8^&Bbs2+idj*l_Ne{cy8^Du&IcYVxtN)XU1jcapHFs!qkh@%5+vt0E{FHi X6=61@rllBG)=;-yStNq+N^ahwd literal 0 HcmV?d00001 diff --git a/20200721/c/doc/copyr.lis b/20200721/c/doc/copyr.lis new file mode 100644 index 0000000..c0c276e --- /dev/null +++ b/20200721/c/doc/copyr.lis @@ -0,0 +1,111 @@ +copyr.lis 2020 June 2 + + +COPYRIGHT NOTICE + +Text equivalent to that below appears at the end of every SOFA routine +(with one exception). There are small formatting differences between +the Fortran and C versions. + +The one exception is the "leap second" routine DAT. This uniquely is +classified as "user replaceable", and has a mitigated license statement +that permits the distribution of local variants under the same name. +This measure allows other SOFA routines to call the local variant, which +may be file or network based, or otherwise equipped to pick up IERS leap +second updates with no need to download new SOFA code. + +*+---------------------------------------------------------------------- +* +* Copyright (C) 2020 +* Standards Of Fundamental Astronomy Board +* of the International Astronomical Union. +* +* ===================== +* SOFA Software License +* ===================== +* +* NOTICE TO USER: +* +* BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +* CONDITIONS WHICH APPLY TO ITS USE. +* +* 1. The Software is owned by the IAU SOFA Board ("SOFA"). +* +* 2. Permission is granted to anyone to use the SOFA software for any +* purpose, including commercial applications, free of charge and +* without payment of royalties, subject to the conditions and +* restrictions listed below. +* +* 3. You (the user) may copy and distribute SOFA source code to others, +* and use and adapt its code and algorithms in your own software, +* on a world-wide, royalty-free basis. That portion of your +* distribution that does not consist of intact and unchanged copies +* of SOFA source code files is a "derived work" that must comply +* with the following requirements: +* +* a) Your work shall be marked or carry a statement that it +* (i) uses routines and computations derived by you from +* software provided by SOFA under license to you; and +* (ii) does not itself constitute software provided by and/or +* endorsed by SOFA. +* +* b) The source code of your derived work must contain descriptions +* of how the derived work is based upon, contains and/or differs +* from the original SOFA software. +* +* c) The names of all routines in your derived work shall not +* include the prefix "iau" or "sofa" or trivial modifications +* thereof such as changes of case. +* +* d) The origin of the SOFA components of your derived work must +* not be misrepresented; you must not claim that you wrote the +* original software, nor file a patent application for SOFA +* software or algorithms embedded in the SOFA software. +* +* e) These requirements must be reproduced intact in any source +* distribution and shall apply to anyone to whom you have +* granted a further right to modify the source code of your +* derived work. +* +* Note that, as originally distributed, the SOFA software is +* intended to be a definitive implementation of the IAU standards, +* and consequently third-party modifications are discouraged. All +* variations, no matter how minor, must be explicitly marked as +* such, as explained above. +* +* 4. You shall not cause the SOFA software to be brought into +* disrepute, either by misuse, or use for inappropriate tasks, or +* by inappropriate modification. +* +* 5. The SOFA software is provided "as is" and SOFA makes no warranty +* as to its use or performance. SOFA does not and cannot warrant +* the performance or results which the user may obtain by using the +* SOFA software. SOFA makes no warranties, express or implied, as +* to non-infringement of third party rights, merchantability, or +* fitness for any particular purpose. In no event will SOFA be +* liable to the user for any consequential, incidental, or special +* damages, including any lost profits or lost savings, even if a +* SOFA representative has been advised of such damages, or for any +* claim by any third party. +* +* 6. The provision of any version of the SOFA software under the terms +* and conditions specified herein does not imply that future +* versions will also be made available under the same terms and +* conditions. +* +* In any published work or commercial product which uses the SOFA +* software directly, acknowledgement (see www.iausofa.org) is +* appreciated. +* +* Correspondence concerning SOFA software should be addressed as +* follows: +* +* By email: sofa@ukho.gov.uk +* By post: IAU SOFA Center +* HM Nautical Almanac Office +* UK Hydrographic Office +* Admiralty Way, Taunton +* Somerset, TA1 2DN +* United Kingdom +* +*----------------------------------------------------------------------- diff --git a/20200721/c/doc/copyr.pdf b/20200721/c/doc/copyr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d7bfecaf8470eef57ee2f9cf31585453125eb64 GIT binary patch literal 3821 zcmcInc_5VQ_jh#*lQvzhtkXya@y?7{Ol4^-*|`!S%V02=8ODq)+f{^%n5`<##JN|qA0qB-#f1Rt$zKM??2!7pZ9$~&pFR?&gVJjIp>kL(A8H#s-htB z9kUk-As8qEN^|jo96bt{kfJ=YC`-ObP|yQ z3CdyHIMBG*pTd@}-&*L->G69}>^UrY#@C_rZE~CKwfybLKid^jDp_U8snV;Ta*d7Z zUb>4TOpcA8gUxr~m-D)h4m@=>@c4W(qTO~Xfir$)F!+t|s$_-Mc!K8f-1_B=B|l$e zs8&P1=To85m?3}UN^D7YcX#tgfrhTbji-K2+gIGx9}(2k+td519+kle7g-&|-;)Xr zT^^Ix!{v?!1uO??t%gYdF?Z-vl7fO3Ge&mXJkYbsHQ=bTdP|05ttOLl4%Uk$iJ=DV zMfCPZ-#oXqKK;Prxh2+w{-yZI>Z^P9IUG(i9$K>HNQM-dH?ry8{es6i_p5x3rpy(# z6nd&89{81(9fvL{!Djj1xKXI9k`a{E(cf~LYn0XMb>UA(@{5E{!=}~D=OZn7(z7B$ z!7Tw?xgU%)M@>uMon5D<4C~`EISDY?-Pp9-A*v+1G3|?;w%Q72(Y0RXZiE)g`kMaa z6g?#uMX~bP4`C+W4SQ1+ORZao-W4uc_7krbJhoZs!1!(^Z{re9#Z~o`=}qfwttd~@ zGm<2xc1jDRHSMF-z%Hh~5bzjT+~Z+6#7Z$~X2~Z~uIR;*V6HKlDm5m{Gk@=-1ZL)3!tc`Gq=?nrN3Gs*r3r$Y(`!z>{3 zbgR4i#aEO(uM}sZBrK5$yMPZ}T%2BiC-uil%$86c^rYB{tF=X?qbt+*15H=G-ZT{> z;!2*fD)~6h63^(n zRc27TANuWuymIOtlq5KvKo_0=II)(|YI9lkCbn_a=#Te|9>+pj(I+8|9vM%xjQJZ_ zLuTLL?4tSX^TwsS+H5VB0JbX8Ipnhh0<&u72Anw8}RpQ}Ol5+Q0 zotSGFQ4VfFjn$G1CqAD(~K!sM8vbnbNw=-7nVV3l`#SZ$p}p!F%a5JUx+R&48^*dEs1K7G)tH-g-#ICyy<@jksSMuWe3he(?OZ;$_SVg|#>DicV4?{cE%zjecy{Xr zHevk-bJ^gXn(svO`T4XzL33VS_*k81t15BKA+~Jzxzu)h+)9^GcX$AIMp-2ly?63RP63}Q5h2$WzU{|nU2~M@!LJp?`GEjn zBnLQdbI0Q1qvFVI{0U_ixwQ$ikb8)bEk>Wsb{S>vf2dBdeg3&L03QQYkC)yG7tT`E z*lUKbykVo!^uV5Cm+q_8*ZyXUxKu%1q@>t+ovPR4`8tIX@fLh#?YhH5aIJnyw{%ja zpW)lqr3G~6vYc?M!PIJd5?ij4CP6tNT!A~MdP-4jG5v~^g2UHg zEeiA_Y27r7;(V9r6yx^<2l+1542z#fqt|yltRj|opZYsE=gZd{YTJ1rGZ}K~*1r0|ztw zv6vf*9h!F&@G!lVCs4Eh5f!qbl;k)BauH zXh_WqY}dLEpN4g!NkQFTM~q%>&q#CesEyrjMiF7IH9dJoHZ=7iQQbDH2l&OSIJ`Q; zdm}OG>X1zgiTJJ@A(8)9J+d;TN#b@l&e#ak$*0xryQ$*`OO>XNN1=s=;c&`Iur&aK|1RKUFMF-ojF#rn)^3V*+Rv_aI+I5$KlMm)w7za?eh;O`%W1j$p# zu)ez5`05>;azEFFftYkB-R_D))5 zMZI!{t$dhGBl|ioGRvlK!<0U}n-^pfME*SZdz7fD($2oSJr$MP@(q5>)rdaXo=`l) zy5`h9CiMDRZHx@HMFJjcTV%j;sgupY*d0Rb7fl|!eCnCL6|(Vd7U4H9te1rPq=w#a z<@^=6UzklV)0o)#-qL~L*^;CL)+*-h%S;)p4tCcLtN1y_Ju!cEV~G_=vl9j4+qjK{^J0 zSL!B26y)|Pm$u#?D!DVO;jPm^nt9!1CM>cnx1(Hhdd=X)HK$XB!zI^pOrAmzbc8+H}a@NHw6;RMhM=~!Cwx7>c3qil1>iAuJcrGBZO-0O(N;nWU5=ha&|tMR?h1k!Ql-{tg1vhtEz{Yy@xzofKPurCR)AbOAh zQ<58*NT3Bl?RgoG!DFE6Xp{p4u%t1-eiMoSrRXFo1FFVLeh?=4)0lKul0Vp{TF_~( zCrAu?0BmHTfE6i-0qW_~Kw^8Y%@6W$yo5dBF!#(4(O$t3!Q?HhXl z0raTgU4cyXfFd{622LrZl(zQ$ka7GkSvPBzFh`ibO*Y|9YTU3`PwDb%$8`B?(P(+T}s#mc2Ph=8l*)~5T#Q}%Af=ZC6rdW zR7zUuxQnmP`#fGhH~zWz_s{OmZ)VP%neRE@J#%>Vl~qL`qEG;D=eL9$01OBQV(eW3 zGBO}-6xs>r420t)h9FfJHyp|f2vT*k!=aQ>4j3d#Ru+K8d7zI$G*&b|lgZxEGw6?0Szjn5pNyYM2x4n4Y%h6mEAH9X z<3$Dz9lqrLdKQ@yzjO138{9Xzj(aO^na#5tSTnw|T$WFcX}4*-mE6DjqZcN^?iY%Y zxOQ?{5tHdhw7)z_y#tb+?sq#__;R#4cz@%@Ch7pEMqN#(>xcCudEvPA$y@kwm6=^ z!lI3lWvO{{vsmEI`8IdNdb zed|Npfr73+Gqp;0;IM+~+Yx%v4h=n370JlbIeHQA5{q;#-23>y3Jgi|*&1ar^x z?G?E9s?q?j$nN)U(9krOG)G{$G2rWu7apG!N3S>x54gU+xilCdYj;Z@4dtZK{6qc>7pid;UX+(inl=LKN=+g^W zz~*fD>C`!Qof*Bz@|=$j(FgUT>2FmY4Q$WUd-*gmHIlSWKtqb?I9*-yL)vtp>gcCw z=o26R+qZRg#|T--Vx2|mISjX)sua^oI?9s>oC?!xW?wDn`vZu*EsqAPq(^Srn`(-- z89?=0#B=XZ<(!OptTwlYxDtLrz7^snD50WoX+JL-I>p?mq|q;Cs6k$=S5q#K&J!Z* z(UK&~MI8It_ce#2FhleP^DN-<1D&L~ZIV^--2`ltXSis>H5-n%vQD=mxwyM)J-f!P zc9sP6DC)SoPccl@i?!Czr4u1p*=Bt=z62tInwT7m)obi?wTte@u!PDBy?2}4?06${ zow=dNc!lvY84*-=GriyW^Xtce#n4)3xvz87;$3xN8kn#F&0w!1^&c^coz5?k_xf+O zdk7qExc8#SZ0~fEPEsAw%=KThelH_?qt{Q7wFDr@XI)5}YG zr|0waY5_z$(#J{jYuF{N#$kqID|U?q^9_!*jZe`%c5>f8w_UwcWvXkXcw8!);N)+c z_H~0b&sovdKjlJgU6?r~%e%u(A`|u2&`O(+%p;qAqHhGtYBYhh-9>{o(zXaM1f}xD z;El{Gapg59=)``9V%>n=Q!V2Zl`QNdsZ4pwTuw&TTN>2B}sRx zoWmR&vpe@ueWs9zlq<2}MOp2dUs%V8Gs%Jw+jsSnB>9CX-`U0Dbc4SI=VC7u+pUpT0)NReck@0z(5TC(t}>ThWYC!F#NmoTdN-?1T_@J3)%RbE=dNV)C{L2G z8XHP>GBIzD_{u^&W^jUxa?bbDyy~PwREhN ziS4;nSUTrnzbx&(iYjy>miZ=E5PYaa+wz*OEo_gq&^M&G(rF-W9J(?=QXlucHE38K zvqcXmrkUljt)q0oJ@Ja`eH@0E(;TH#Li@-LGum%BQ*CCyX|cC5Y~nyLk~z)aYM1Ry zwOF5IcnP@V&An|=e(CXp-YM-Y=}#Xcp7_UXcyOi&Icpb0RKKH}f0ey+)0H)Xg!m(| z;C<~K0uF}WCu2?{4R2k6UlY7|E~~lLwqDBjrf28sfTfQPSG?8tQ!W)u0}P}-yKikJ zN=D!mq4>$E3&<6yHh=_;9&QufMijIQTlG1VOyM*^+Q9C z${Xinlfy;_kRcken)C2;KCIz`&e9`_IWjwtYpjR{iwaLnSJaCLZ7um;&s+h$vLl~E zndfc$ot;73K|*T`ji)n*LD9+#rYJP>7YX9Ooe}35U7meHBqSvOzhn^bAFK+2{BLO0 z-E7>DMT#b1*Q{u(suFd9G$c5{i?-D;<+Z4!)uFtJCi^=FUS=0A7qi$yp8xysiEznO^o#b>s@n_4M+#FMn7#C-LUuJa>1G4$QFn3+e&jQAX9#Xix|ltc=b(hN%xWM6Cg!y4L-=&%*t zW}c+f>-1O)ezu&A>NoEa*sWxwE+vB+L&YTw1Z>1FZIDJb|A=@H8dE)pmF0P~j?`|E zwkew;3}i-{N4J`JgD=Kk09C-RU*#C83%*zwo~erQ9w3;g+Zm0d&s(`3`~XV6@IY~- zHr1ojQF*PgC~i$tsNe z;2_CkZ}ibNfxt#Ex2U)%5z%ep)9XBaAItP%7}Ut88DeDmpvv6yp-vpS4^ZxS;hFeI zh+8rFz}Tfuqbz;_ug9aEfjd%y2P%f?2cNwc81!2*b7zMa?PJu5hx`OBn-d?Z`f+%shYmN$7*N{HS>HQpA0SyE+wFTyI-1@X>3Ab!fjd zVf473>OrKxm}E{j$&mh#mdoq*f^yt@aguv%Os=^C9xHzQmYji%RT@KfL%9?IB2~V3 zH_=C{&R1eGqY`q`wLYb}u6|mePY>a;Nf)0cH=VH|_a@vY*zROc_D=L*DIJHCsk?Of zDqc_YP`Su;Mb|x!hfc77`Ehk8vnMg26HRL57p6_5sl1zK5k*;kg|Y&8=TL@7AsQ)s zOyCk-H2kAO?#qMse#I{g#frGl0O!SJf&JX8y1f_fxC+IT=MjfEZ=`yXH&q%T@^KNQP~HTibsN^bJw2As?j(k*Q$c#2hgpFla>ay$EIC%)%RX< zJWq~eb>RX0s1@qlElyJ<)=0CZxY+d~hrE(UOonSjsmsAtjKq`H7x39vErTpmOX>2m zBX?Yr?lmXUdCDN8=A%)r7+$R~<$8mUN#}%N^jrgM4XywH;If@}uH#JngkLatm+}}+ z8%X_%UVM$Lml#v~7^=$tLYsa>cqs#;Pi$JWDop!X*dw)yKuHiQg`faTX2Fx^L)D~% zjkoxF*_7w4G)M#ISeT4$>+|lNOL$`Y&J*=SZIZG^SVQhuWrFJhvnb`==VM=n3L_Jy zo2Dl8I_SVFuxB07W3Xj61hugGt+|4MgY&)1^il_RClqxJG;(4rn1A0ms;!XatPy|H6%OtIg_=MGe}Lo?93`ZT<S4#jLmL&j%{uB<|aF zFbUW@HOu85_YjK@xu(c^2^Z-oa*LLUi-r9BjGcQop{i}Zi-TY9{E+T6(0b#GkO#6E z)FHfYm<3b|$#QsHHk_c3xbrH~-JNQiXMJS)c?>c#ROt4dML}-6>8Yi-W_AuVN2g8m z)a3MC(EQ;zW`6t;KcwlD=Lz4QY~WE1cYAXA`|)J|m1;nMyu}tm{!5WSCd1_T#uMPj z)til{^KYEnlH%7h*V@!R?1k19v6%e{zw-P_C&3moj!q!16 z!)d#d*x0tHFZ7;2Y~P5Xbt5cDZ0R_z;*>CWx1jA0#`{TSKPe9`3I8|ciT_D?XJ^a* z@g(VOX068}MIZ2?qSA*j4<2rqa&vk>T%_M{QLzu5ubDExseMi6rt585$DrdUx37wk zk6LpoLpgTmC$R5f&26K5*E0I`cFl%!#WpWD4=;XP%vg_FODJiNY+oFn%=eLNk_@^X z$jR_UpxHa#Nwj0#b7^bK>*#eJsVodItvN)o5hHWETC<@+mfmfS2UW z2h~|NUWVY%Y(NZkT-$YrQtYJMLPFqPy$}e zR8Jio3|MyizK$*Vi3A)Fhjx#RBlZa<5)w#HhAWV79zC!1i$KYbl%yw!H*E3_yisWmS0R)_y zbeaC@K32rjJh~MPS_6{GtvGteWqoej_9)L7fYuPjuvl~2bvgeGHrpt*dtd7k$9=yG zE9Lk(F9$Srcdr*-X7x}a!t+NN9clwcD9`qwV>tsFUq(nfp3-7VLqF{-E7VAyLX==$}E3pvMbpMA>?YZUNJM?)p}LslSsWD_^4u2tRHaLau{&i_SyfO*fX=502Z&t+;7%BzUrU1lz5 zNVv97+QN8>*Xzm4`%}Q>atY(7ZblxTa*3tQm*>vsh_9hC?>ptwFxEv7-3^`P>3DbF zJune5&T#`dNaIG=<qcd@6jVtZeHZHUO8AYC{<<&LI75CTyI>M@N7umgE z!>C#kg&Wi9NZ2l5aA~7!p^*+gDUK)s9*x4_t|8 z?;m_>Rki(2DgO0g-lORN4$AeBN-j zVvaA10aW1SW}?2T!^zD5sHT_$^P`(oI_Q+o^`;Rrv-!zI(-0 zmZaUv{u33ny4T>shb;|ERzsAnnk>}TM@Dp#PT9|9-3kI0m{c%0t(9z=kPQ92y6rKA zDmM`_x?al_B>eoAAm}5-e#kPc1g0W?M?_Bdnf4g&(}; z7ygiwxO~yuj>V*&WEAEY(ckU&j;uzP@3GukCU>!G;=<{2D|(1mIIfn+Sfbz)+lw1I zyd4fD6EnJ@OZF7J7w8Y;?Vn5pOX=t%IIyqD51h!5OtH2lE|)yi4rePoR%4E$%SPEb zy7oysI-Mq?%kq;oCsIB5Jwzj?hj(YxndWZs*Arf%NU+no0@-+7KK!Nn_oKPSg6w<{`5#s~2Iy+9nq+mcvai}!_WQf7x zd$K?0{WF@MXJ^BIgabL7-~UrQKYQP2WB;8U z$XRXv8PDJ0;4_Oa7Vu}aut1QO3la;o0{lz=EQyAIpRpSPtburc-e;xy=e&NO7GA{; zXXl1-`pe(H%KCR%&MNmS4Tcf`i8KFyzxINBNh)) ze3oD!cNerb*7|SDGcf#$1CL*%w*$&cKuup8sOF5p;;;^0E*^OJib{Y5@zud!L*QI6 zXl49D5Ku-y!B8+*0t$slh=IXULSP6#7|f4X)4?GBTMb#+Uy%3lLOBA!K!_v&{O<<{ zhrz^PKu6#&85|77uavU~i2k<>Dupl0?=t*C#h30s$zXrlg29kK{6Qoo@LBlX77l^` zDFaLVIR+e#FZ1uV5J{;&Y{lR({C@Jg9vlMxLk}hi#)J5GJu$chzK`|03(Fk8yEcb}nuxFZ{g|5M<=yhr;I`h~L>TIN;Al84#p_cEkYjPR_PA4P~H} zjJSj(7$T+whbzDpA(9GU6{wVgstQ~csv;&Psi-I}`#)<~pDjNu&dv+>v*2)XCh0_z#hK*uVe) literal 0 HcmV?d00001 diff --git a/20200721/c/doc/manual.lis b/20200721/c/doc/manual.lis new file mode 100644 index 0000000..f94cf6f --- /dev/null +++ b/20200721/c/doc/manual.lis @@ -0,0 +1,18903 @@ + + + + + + + + + + + + + + + + + + + T H E + + + SSSSS OOOOOO FFFFFFFFFFFFF AAAAAAA + SSSSSSSSSS OOOOOOOOOOOO FFFFFFFFFFFF AAAAAAAA + SSSSSSSSSSS OOOOOOOOOOOOOO FFFFFFFFFFFF AAAA AAAA + SSSS S OOOOOO OOOOO FFFF AAAA AAAA + SSSSS OOOOO OOOO FFFFF AAAA AAAA + SSSSSSSSSS OOOO OOOOO FFFFFFFFFFFF AAAA AAAA + SSSSSSSSS OOOOO OOOO FFFFFFFFFFFF AAAAAAAAAAAAA + SSSSS OOOO OOOO FFFF AAAAAAAAAAAAAA + S SSSS OOOOO OOOOO FFFF AAAAAAAAAAAAAAA + SSSSSSSSSSS OOOOOOOOOOOOO FFFF AAAA AAAAA + SSSSSSSSS OOOOOOOOOO FFFF AAAA AAAAA + SSSS OOOOO FFFF AAAA AAAAA + + + S O F T W A R E + + L I B R A R I E S + + + + + + + International Astronomical Union + + Division A: Fundamental Astronomy + + + Standards Of Fundamental Astronomy Board + + + + + + Release 16 + + 2020 July 21 + +contents.lis 2018 January 26 + + + -------- + CONTENTS + -------- + + + + + + 1) Introduction + + 2) The SOFA Astronomy Library + + 3) The SOFA Vector/Matrix Library + + 4) The individual routines + + + A1 The SOFA copyright notice + + A2 Constants + + A3 SOFA Board membership + +intro.lis 2018 December 7 + + + ------------------------------- + THE IAU-SOFA SOFTWARE LIBRARIES + ------------------------------- + + + SOFA stands for "Standards Of Fundamental Astronomy". The SOFA + software libraries are a collection of subprograms, in source- + code form, which implement official IAU algorithms for fundamental- + astronomy computations. The subprograms at present comprise 189 + "astronomy" routines supported by 55 "vector/matrix" routines, + available in both Fortran77 and C implementations. + + +THE SOFA INITIATIVE + +SOFA is an IAU Service which operates as a Standing Working Group under +Division A (Fundamental Astronomy). + +The IAU set up the SOFA initiative at the 1994 General Assembly, to +promulgate an authoritative set of fundamental-astronomy constants and +algorithms. At the subsequent General Assembly, in 1997, the +appointment of a review board and the selection of a site for the SOFA +Center (the outlet for SOFA products) were announced. + +The SOFA initiative was originally proposed by the IAU Working Group on +Astronomical Standards (WGAS), under the chairmanship of +Toshio Fukushima. The proposal was for "...new arrangements to +establish and maintain an accessible and authoritative set of constants, +algorithms and procedures that implement standard models used in +fundamental astronomy". The SOFA Software Libraries implement the +"algorithms" part of the SOFA initiative. They were developed under the +supervision of an international panel called the SOFA Board. The +current membership of this panel is listed in an appendix. + +A feature of the original SOFA software proposals was that the products +would be self-contained and not depend on other software. This includes +basic documentation, which, like the present file, will mostly be plain +ASCII text. It should also be noted that there is no assumption that +the software will be used on a particular computer and Operating System. +Although OS-related facilities may be present (Unix make files for +instance, use by the SOFA Center of automatic code management systems, +HTML versions of some documentation), the routines themselves will be +visible as individual text files and will run on a variety of platforms. + + +ALGORITHMS + +The SOFA Board's initial goal has been to create a set of callable +subprograms. Whether "subroutines" or "functions", they are all +referred to simply as "routines". They are designed for use by software +developers wishing to write complete applications; no runnable, free- +standing applications are included in SOFA's present plans. + +The algorithms are drawn from a variety of sources. Because most of the +routines so far developed have either been standard "text-book" +operations or implement well-documented standard algorithms, it has not +been necessary to invite the whole community to submit algorithms, +though consultation with authorities has occurred where necessary. It +should also be noted that consistency with the conventions published by +the International Earth Rotation Service was a stipulation in the +original SOFA proposals, further constraining the software designs. +This state of affairs will continue to exist for some time, as there is +a large backlog of agreed extensions to work on. However, in the future +the Board may decide to call for proposals, and is in the meantime +willing to look into any suggestions that are received by the SOFA +Center. + + +SCOPE + +The routines currently available are listed in the next two chapters of +this document. + +The "astronomy" library comprises 189 routines (plus one obsolete +Fortran routine that now appears under a revised name). The areas +addressed include calendars, astrometry, time scales, Earth rotation, +ephemerides, precession-nutation, star catalog transformations, +gnomonic projection, horizon/equatorial transformations and +geodetic/geocentric transformations. + +The "vector-matrix" library, comprising 55 routines, contains a +collection of simple tools for manipulating the vectors, matrices and +angles used by the astronomy routines. + +There is no explicit commitment by SOFA to support historical models, +though as time goes on a legacy of superseded models will naturally +accumulate. There is, for example, no support of pre-1976 precession +models, though these capabilities could be added were there significant +demand. + +Though the SOFA software libraries are rather limited in scope, and are +likely to remain so for a considerable time, they do offer distinct +advantages to prospective users. In particular, the routines are: + + * authoritative: they are IAU-backed and have been constructed with + great care; + + * practical: they are straightforward to use in spite of being + precise and rigorous (to some stated degree); + + * accessible and supported: they are downloadable from an easy-to- + find place, they are in an integrated and consistent form, they + come with adequate internal documentation, and help for users is + available. + + +VERSIONS + +Once it has been published, an issue is never revised or updated, and +remains accessible indefinitely. Subsequent issues may, however, +include corrected versions under the original routine name and +filenames. However, where a different model is introduced, it will have +a different name. + +The issues will be referred to by the date when they were announced. +The frequency of re-issue will be decided by the Board, taking into +account the importance of the changes and the impact on the user +community. + + +DOCUMENTATION + +At present there is little free-standing documentation about individual +routines. However, each routine has preamble comments which specify in +detail what the routine does and how it is used. + +The files sofa_pn_f.pdf and sofa_pn_c.pdf (for Fortran and C users +respectively) describe the SOFA tools for precession-nutation +and other aspects of Earth attitude, and include example code and, +in an appendix, diagrams showing the interrelationships between the +routines supporting the latest (IAU 2006/2000A) models. Two other pairs +of documents introduce time scale transformations (sofa_ts_f.pdf and +sofa_ts_c.pdf ) and astrometric transformations (sofa_ast_f.pdf and +sofa_ast_c.pdf). + + +PROGRAMMING LANGUAGES AND STANDARDS + +The SOFA routines are available in two programming languages at present: +Fortran77 and ANSI C. Related software in other languages is under +consideration. + +The Fortran code conforms to ANSI X3.9-1978 in all but two minor +respects: each has an IMPLICIT NONE declaration, and its name has a +prefix of "iau_" and may be longer than 6 characters. A global edit to +erase both of these will produce ANSI-compliant code with no change in +its function. + +Coding style, and restrictions on the range of language features, have +been much debated by the Board, and the results comply with the majority +view. There is (at present) no document that defines the standards, but +the code itself offers a wide range of examples of what is acceptable. + +The Fortran routines contain explicit numerical constants (the INCLUDE +statement is not part of ANSI Fortran77). These are drawn from the +file consts.lis, which is listed in an appendix. Constants for the +SOFA/C functions are defined in a header file sofam.h. + +The naming convention is such that a SOFA routine referred to +generically as "EXAMPL" exists as a Fortran subprogram iau_EXAMPL and a +C function iauExampl. The calls for the two versions are very similar, +with the same arguments in the same order. In a few cases, the C +equivalent of a Fortran SUBROUTINE subprogram uses a return value rather +than an argument. + +Each language version includes a "testbed" main-program that can be used +to verify that the SOFA routines have been correctly compiled on the end +user's system. The Fortran and C versions are called t_sofa_f.for and +t_sofa_c.c respectively. The testbeds execute every SOFA routine and +check that the results are within expected accuracy margins. It is not +possible to guarantee that all platforms will meet the rather stringent +criteria that have been used, and an occasional warning message may be +encountered on some systems. + + +COPYRIGHT ISSUES + +Copyright for all of the SOFA software and documentation is owned by the +IAU SOFA Board. The Software is made available free of charge for all +classes of user, including commercial. However, there are strict rules +designed to avoid unauthorized variants coming into circulation. It is +permissible to distribute derived works and other modifications, but +they must be clearly marked to avoid confusion with the SOFA originals. + +Further details are included in the block of comments which concludes +every routine. The text is also set out in an appendix to the present +document. + + +ACCURACY + +The SOFA policy is to organize the calculations so that the machine +accuracy is fully exploited. The gap between the precision of the +underlying model or theory and the computational resolution has to be +kept as large as possible, hopefully leaving several orders of +magnitude of headroom. + +The SOFA routines in some cases involve design compromises between rigor +and ease of use (and also speed, though nowadays this is seldom a major +concern). + + +ACKNOWLEDGEMENTS + +The Board is indebted to a number of contributors, who are acknowledged +in the preamble comments of the routines concerned. + +The Board's effort is provided by the members' individual institutes. + +Resources for operating the SOFA Center are provided by Her Majesty's +Nautical Almanac Office, operated by the United Kingdom Hydrographic +Office. + +sofa_lib.lis 2018 December 7 + + ---------------------- + SOFA Astronomy Library + ---------------------- + + +PREFACE + +The routines described here comprise the SOFA astronomy library. Their +general appearance and coding style conforms to conventions agreed by +the SOFA Board, and their functions, names and algorithms have been +ratified by the Board. Procedures for soliciting and agreeing additions +to the library are still evolving. + + +PROGRAMMING LANGUAGES + +The SOFA routines are available in two programming languages at present: +Fortran 77 and ANSI C. + +Except for a single obsolete Fortran routine, which has no C equivalent, +there is a one-to-one relationship between the two language versions. +The naming convention is such that a SOFA routine referred to +generically as "EXAMPL" exists as a Fortran subprogram iau_EXAMPL and a +C function iauExampl. The calls for the two versions are very similar, +with the same arguments in the same order. In a few cases, the C +equivalent of a Fortran SUBROUTINE subprogram uses a return value rather +than an argument. + + +GENERAL PRINCIPLES + +The principal function of the SOFA Astronomy Library is to provide +definitive algorithms. A secondary function is to provide software +suitable for convenient direct use by writers of astronomical +applications. + +The astronomy routines call on the SOFA vector/matrix library routines, +which are separately listed. + +The routines are designed to exploit the full floating-point accuracy +of the machines on which they run, and not to rely on compiler +optimizations. Within these constraints, the intention is that the code +corresponds to the published formulation (if any). + +Dates are always Julian Dates (except in calendar conversion routines) +and are expressed as two double precision numbers which sum to the +required value. + +A distinction is made between routines that implement IAU-approved +models and those that use those models to create other results. The +former are referred to as "canonical models" in the preamble comments; +the latter are described as "support routines". + +Using the library requires knowledge of positional astronomy and +time-scales. These topics are covered in "Explanatory Supplement to the +Astronomical Almanac", 3rd Edition, Sean E. Urban & +P. Kenneth Seidelmann (eds.), University Science Books, 2013. Recent +developments are documented in the scientific journals, and references +to the relevant papers are given in the SOFA code as required. The IERS +Conventions are also an essential reference. The routines concerned +with Earth attitude (precession-nutation etc.) are described in the SOFA +document sofa_pn.pdf. Those concerned with transformations between +different time scales are described in sofa_ts_f.pdf (Fortran) and +sofa_ts_c.pdf (C). Those concerned with astrometric transformations +are described in sofa_ast_f.pdf (Fortran) and sofa_ast_c (C). + + +ROUTINES + + Calendars + + CAL2JD Gregorian calendar to Julian Day number + EPB Julian Date to Besselian Epoch + EPB2JD Besselian Epoch to Julian Date + EPJ Julian Date to Julian Epoch + EPJ2JD Julian Epoch to Julian Date + JD2CAL Julian Date to Gregorian year, month, day, fraction + JDCALF Julian Date to Gregorian date for formatted output + + Astrometry + + AB apply stellar aberration + APCG prepare for ICRS <-> GCRS, geocentric, special + APCG13 prepare for ICRS <-> GCRS, geocentric + APCI prepare for ICRS <-> CIRS, terrestrial, special + APCI13 prepare for ICRS <-> CIRS, terrestrial + APCO prepare for ICRS <-> observed, terrestrial, special + APCO13 prepare for ICRS <-> observed, terrestrial + APCS prepare for ICRS <-> CIRS, space, special + APCS13 prepare for ICRS <-> CIRS, space + APER insert ERA into context + APER13 update context for Earth rotation + APIO prepare for CIRS <-> observed, terrestrial, special + APIO13 prepare for CIRS <-> observed, terrestrial + ATCI13 catalog -> CIRS + ATCIQ quick ICRS -> CIRS + ATCIQN quick ICRS -> CIRS, multiple deflections + ATCIQZ quick astrometric ICRS -> CIRS + ATCO13 ICRS -> observed + ATIC13 CIRS -> ICRS + ATICQ quick CIRS -> ICRS + ATCIQN quick CIRS -> ICRS, multiple deflections + ATIO13 CIRS -> observed + ATIOQ quick CIRS -> observed + ATOC13 observed -> astrometric ICRS + ATOI13 observed -> CIRS + ATOIQ quick observed -> CIRS + LD light deflection by a single solar-system body + LDN light deflection by multiple solar-system bodies + LDSUN light deflection by the Sun + PMPX apply proper motion and parallax + PMSAFE apply proper motion, with zero-parallax precautions + PVTOB observatory position and velocity + PVSTAR space motion pv-vector to star catalog data + REFCO refraction constants + STARPM apply proper motion + STARPV star catalog data to space motion pv-vector + + Time scales + + D2DTF format 2-part JD for output + DAT Delta(AT) (=TAI-UTC) for a given UTC date + DTDB TDB-TT + DTF2D encode time and date fields into 2-part JD + TAITT TAI to TT + TAIUT1 TAI to UT1 + TAIUTC TAI to UTC + TCBTDB TCB to TDB + TCGTT TCG to TT + TDBTCB TDB to TCB + TDBTT TDB to TT + TTTAI TT to TAI + TTTCG TT to TCG + TTTDB TT to TDB + TTUT1 TT to UT1 + UT1TAI UT1 to TAI + UT1TT UT1 to TT + UT1UTC UT1 to UTC + UTCTAI UTC to TAI + UTCUT1 UTC to UT1 + + Earth rotation angle and sidereal time + + EE00 equation of the equinoxes, IAU 2000 + EE00A equation of the equinoxes, IAU 2000A + EE00B equation of the equinoxes, IAU 2000B + EE06A equation of the equinoxes, IAU 2006/2000A + EECT00 equation of the equinoxes complementary terms, IAU 2000 + EQEQ94 equation of the equinoxes, IAU 1994 + ERA00 Earth rotation angle, IAU 2000 + GMST00 Greenwich mean sidereal time, IAU 2000 + GMST06 Greenwich mean sidereal time, IAU 2006 + GMST82 Greenwich mean sidereal time, IAU 1982 + GST00A Greenwich apparent sidereal time, IAU 2000A + GST00B Greenwich apparent sidereal time, IAU 2000B + GST06 Greenwich apparent ST, IAU 2006, given NPB matrix + GST06A Greenwich apparent sidereal time, IAU 2006/2000A + GST94 Greenwich apparent sidereal time, IAU 1994 + + Ephemerides (limited precision) + + EPV00 Earth position and velocity + PLAN94 major-planet position and velocity + + Precession, nutation, polar motion + + BI00 frame bias components, IAU 2000 + BP00 frame bias and precession matrices, IAU 2000 + BP06 frame bias and precession matrices, IAU 2006 + BPN2XY extract CIP X,Y coordinates from NPB matrix + C2I00A celestial-to-intermediate matrix, IAU 2000A + C2I00B celestial-to-intermediate matrix, IAU 2000B + C2I06A celestial-to-intermediate matrix, IAU 2006/2000A + C2IBPN celestial-to-intermediate matrix, given NPB matrix, IAU 2000 + C2IXY celestial-to-intermediate matrix, given X,Y, IAU 2000 + C2IXYS celestial-to-intermediate matrix, given X,Y and s + C2T00A celestial-to-terrestrial matrix, IAU 2000A + C2T00B celestial-to-terrestrial matrix, IAU 2000B + C2T06A celestial-to-terrestrial matrix, IAU 2006/2000A + C2TCIO form CIO-based celestial-to-terrestrial matrix + C2TEQX form equinox-based celestial-to-terrestrial matrix + C2TPE celestial-to-terrestrial matrix given nutation, IAU 2000 + C2TXY celestial-to-terrestrial matrix given CIP, IAU 2000 + EO06A equation of the origins, IAU 2006/2000A + EORS equation of the origins, given NPB matrix and s + FW2M Fukushima-Williams angles to r-matrix + FW2XY Fukushima-Williams angles to X,Y + LTP long-term precession matrix + LTPB long-term precession matrix, including ICRS frame bias + LTPECL long-term precession of the ecliptic + LTPEQU long-term precession of the equator + NUM00A nutation matrix, IAU 2000A + NUM00B nutation matrix, IAU 2000B + NUM06A nutation matrix, IAU 2006/2000A + NUMAT form nutation matrix + NUT00A nutation, IAU 2000A + NUT00B nutation, IAU 2000B + NUT06A nutation, IAU 2006/2000A + NUT80 nutation, IAU 1980 + NUTM80 nutation matrix, IAU 1980 + OBL06 mean obliquity, IAU 2006 + OBL80 mean obliquity, IAU 1980 + PB06 zeta,z,theta precession angles, IAU 2006, including bias + PFW06 bias-precession Fukushima-Williams angles, IAU 2006 + PMAT00 precession matrix (including frame bias), IAU 2000 + PMAT06 PB matrix, IAU 2006 + PMAT76 precession matrix, IAU 1976 + PN00 bias/precession/nutation results, IAU 2000 + PN00A bias/precession/nutation, IAU 2000A + PN00B bias/precession/nutation, IAU 2000B + PN06 bias/precession/nutation results, IAU 2006 + PN06A bias/precession/nutation results, IAU 2006/2000A + PNM00A classical NPB matrix, IAU 2000A + PNM00B classical NPB matrix, IAU 2000B + PNM06A classical NPB matrix, IAU 2006/2000A + PNM80 precession/nutation matrix, IAU 1976/1980 + P06E precession angles, IAU 2006, equinox based + POM00 polar motion matrix + PR00 IAU 2000 precession adjustments + PREC76 accumulated precession angles, IAU 1976 + S00 the CIO locator s, given X,Y, IAU 2000A + S00A the CIO locator s, IAU 2000A + S00B the CIO locator s, IAU 2000B + S06 the CIO locator s, given X,Y, IAU 2006 + S06A the CIO locator s, IAU 2006/2000A + SP00 the TIO locator s', IERS 2003 + XY06 CIP, IAU 2006/2000A, from series + XYS00A CIP and s, IAU 2000A + XYS00B CIP and s, IAU 2000B + XYS06A CIP and s, IAU 2006/2000A + + Fundamental arguments for nutation etc. + + FAD03 mean elongation of the Moon from the Sun + FAE03 mean longitude of Earth + FAF03 mean argument of the latitude of the Moon + FAJU03 mean longitude of Jupiter + FAL03 mean anomaly of the Moon + FALP03 mean anomaly of the Sun + FAMA03 mean longitude of Mars + FAME03 mean longitude of Mercury + FANE03 mean longitude of Neptune + FAOM03 mean longitude of the Moon's ascending node + FAPA03 general accumulated precession in longitude + FASA03 mean longitude of Saturn + FAUR03 mean longitude of Uranus + FAVE03 mean longitude of Venus + + Star catalog conversions + + FK52H transform FK5 star data into the Hipparcos system + FK5HIP FK5 to Hipparcos rotation and spin + FK5HZ FK5 to Hipparcos assuming zero Hipparcos proper motion + H2FK5 transform Hipparcos star data into the FK5 system + HFK5Z Hipparcos to FK5 assuming zero Hipparcos proper motion + FK425 transform FK4 star data into FK5 + FK45Z FK4 to FK5 assuming zero FK5 proper motion + FK524 transform FK5 star data into FK4 + FK54Z FK5 to FK4 assuming zero FK5 proper motion + + Ecliptic coordinates + + ECEQ06 ecliptic to ICRS, IAU 2006 + ECM06 rotation matrix, ICRS to ecliptic, IAU 2006 + EQEC06 ICRS to ecliptic, IAU 2006 + LTECEQ ecliptic to ICRS, long term + LTECM rotation matrix, ICRS to ecliptic, long-term + LTEQEC ICRS to ecliptic, long term + + Galactic coordinates + + G2ICRS transform IAU 1958 galactic coordinates to ICRS + ICRS2G transform ICRS coordinates to IAU 1958 Galactic + + Geodetic/geocentric + + EFORM a,f for a nominated Earth reference ellipsoid + GC2GD geocentric to geodetic for a nominated ellipsoid + GC2GDE geocentric to geodetic given ellipsoid a,f + GD2GC geodetic to geocentric for a nominated ellipsoid + GD2GCE geodetic to geocentric given ellipsoid a,f + + Gnomonic projection + + TPORS solve for tangent point, spherical + TPORV solve for tangent point, vector + TPSTS deproject tangent plane to celestial, spherical + TPSTV deproject tangent plane to celestial, vector + TPXES project celestial to tangent plane, spherical + TPXEV project celestial to tangent plane, vector + + Horizon/equatorial + + AE2HD (azimuth, altitude) to (hour angle, declination) + HD2AE (hour angle, declination) to (azimuth, altitude) + HD2PA parallactic angle + + Obsolete + + C2TCEO former name of C2TCIO + + +CALLS: FORTRAN VERSION + + CALL iau_AB ( PNAT, V, S, BM1, PPR ) + CALL iau_AE2HD ( AZ, EL, PHI, HA, DEC ) + CALL iau_APCG ( DATE1, DATE2, EB, EH, ASTROM ) + CALL iau_APCG13 ( DATE1, DATE2, ASTROM ) + CALL iau_APCI ( DATE1, DATE2, EB, EH, X, Y, S, ASTROM ) + CALL iau_APCI13 ( DATE1, DATE2, ASTROM, EO ) + CALL iau_APCO ( DATE1, DATE2, EB, EH, X, Y, S, + : THETA, ELONG, PHI, HM, XP, YP, SP, + : REFA, REFB, ASTROM ) + CALL iau_APCO13 ( UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + : PHPA, TC, RH, WL, ASTROM, EO, J ) + CALL iau_APCS ( DATE1, DATE2, PV, EB, EH, ASTROM ) + CALL iau_APCS13 ( DATE1, DATE2, PV, ASTROM ) + CALL iau_APER ( THETA, ASTROM ) + CALL iau_APER13 ( UT11, UT12, ASTROM ) + CALL iau_APIO ( SP, THETA, ELONG, PHI, HM, XP, YP, + : REFA, REFB, ASTROM ) + CALL iau_APIO13 ( UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + : PHPA, TC, RH, WL, ASTROM, J ) + CALL iau_ATCI13 ( RC, DC, PR, PD, PX, RV, DATE1, DATE2, RI, DI, EO ) + CALL iau_ATCIQ ( RC, DC, PR, PD, PX, RV, ASTROM, RI, DI ) + CALL iau_ATCIQN ( RC, DC, PR, PD, PX, RV, ASTROM, N, B, RI, DI ) + CALL iau_ATCIQZ ( RC, DC, ASTROM, RI, DI ) + CALL iau_ATCO13 ( RC, DC, PR, PD, PX, RV, UTC1, UTC2, DUT1, ELONG, + : PHI, HM, XP, YP, PHPA, TC, RH, WL, + : AOB, ZOB, HOB, DOB, ROB, EO, J ) + CALL iau_ATIC13 ( RI, DI, DATE1, DATE2, RC, DC, EO ) + CALL iau_ATICQ ( RI, DI, ASTROM, RC, DC ) + CALL iau_ATCIQN ( RI, DI, ASTROM, N, B, RC, DC ) + CALL iau_ATIO13 ( RI, DI, UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + PHPA, TC, RH, WL, AOB, ZOB, HOB, DOB, ROB, J ) + CALL iau_ATIOQ ( RI, DI, ASTROM, AOB, ZOB, HOB, DOB, ROB ) + CALL iau_ATOC13 ( TYPE, OB1, OB2, UTC1, UTC2, DUT1, + : ELONG, PHI, HM, XP, YP, PHPA, TC, RH, WL, + : RC, DC, J ) + CALL iau_ATOI13 ( TYPE, OB1, OB2, UTC1, UTC2, DUT1, + : ELONG, PHI, HM, XP, YP, PHPA, TC, RH, WL, + : RI, DI, J ) + CALL iau_ATOIQ ( TYPE, OB1, OB2, ASTROM, RI, DI ) + CALL iau_BI00 ( DPSIBI, DEPSBI, DRA ) + CALL iau_BP00 ( DATE1, DATE2, RB, RP, RBP ) + CALL iau_BP06 ( DATE1, DATE2, RB, RP, RBP ) + CALL iau_BPN2XY ( RBPN, X, Y ) + CALL iau_C2I00A ( DATE1, DATE2, RC2I ) + CALL iau_C2I00B ( DATE1, DATE2, RC2I ) + CALL iau_C2I06A ( DATE1, DATE2, RC2I ) + CALL iau_C2IBPN ( DATE1, DATE2, RBPN, RC2I ) + CALL iau_C2IXY ( DATE1, DATE2, X, Y, RC2I ) + CALL iau_C2IXYS ( X, Y, S, RC2I ) + CALL iau_C2T00A ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2T00B ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2T06A ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2TCEO ( RC2I, ERA, RPOM, RC2T ) + CALL iau_C2TCIO ( RC2I, ERA, RPOM, RC2T ) + CALL iau_C2TEQX ( RBPN, GST, RPOM, RC2T ) + CALL iau_C2TPE ( TTA, TTB, UTA, UTB, DPSI, DEPS, XP, YP, RC2T ) + CALL iau_C2TXY ( TTA, TTB, UTA, UTB, X, Y, XP, YP, RC2T ) + CALL iau_CAL2JD ( IY, IM, ID, DJM0, DJM, J ) + CALL iau_D2DTF ( SCALE, NDP, D1, D2, IY, IM, ID, IHMSF, J ) + CALL iau_DAT ( IY, IM, ID, FD, DELTAT, J ) + D = iau_DTDB ( DATE1, DATE2, UT, ELONG, U, V ) + CALL iau_DTF2D ( SCALE, IY, IM, ID, IHR, IMN, SEC, D1, D2, J ) + CALL iau_ECEQ06 ( DATE1, DATE2, DL, DB, DR, DD ) + CALL iau_ECM06 ( DATE1, DATE2, RM ); + D = iau_EE00 ( DATE1, DATE2, EPSA, DPSI ) + D = iau_EE00A ( DATE1, DATE2 ) + D = iau_EE00B ( DATE1, DATE2 ) + D = iau_EE06A ( DATE1, DATE2 ) + D = iau_EECT00 ( DATE1, DATE2 ) + CALL iau_EFORM ( N, A, F, J ) + D = iau_EO06A ( DATE1, DATE2 ) + D = iau_EORS ( RNPB, S ) + D = iau_EPB ( DJ1, DJ2 ) + CALL iau_EPB2JD ( EPB, DJM0, DJM ) + D = iau_EPJ ( DJ1, DJ2 ) + CALL iau_EPJ2JD ( EPJ, DJM0, DJM ) + CALL iau_EPV00 ( DJ1, DJ2, PVH, PVB, J ) + CALL iau_EQEC06 ( DATE1, DATE2, DR, DD, DL, DB ) + D = iau_EQEQ94 ( DATE1, DATE2 ) + D = iau_ERA00 ( DJ1, DJ2 ) + D = iau_FAD03 ( T ) + D = iau_FAE03 ( T ) + D = iau_FAF03 ( T ) + D = iau_FAJU03 ( T ) + D = iau_FAL03 ( T ) + D = iau_FALP03 ( T ) + D = iau_FAMA03 ( T ) + D = iau_FAME03 ( T ) + D = iau_FANE03 ( T ) + D = iau_FAOM03 ( T ) + D = iau_FAPA03 ( T ) + D = iau_FASA03 ( T ) + D = iau_FAUR03 ( T ) + D = iau_FAVE03 ( T ) + CALL iau_FK425 ( R1950, D1950, DR1950, DD1950, P1950, V1950, + : R2000, D2000, DR2000, DD2000, P2000, V2000 ) + CALL iau_FK45Z ( R1950, D1950, BEPOCH, R2000, D2000 ) + CALL iau_FK524 ( R2000, D2000, DR2000, DD2000, P2000, V2000, + : R1950, D1950, DR1950, DD1950, P1950, V1950 ) + CALL iau_FK52H ( R5, D5, DR5, DD5, PX5, RV5, + : RH, DH, DRH, DDH, PXH, RVH ) + CALL iau_FK54Z ( R2000, D2000, BEPOCH, R1950, D1950, DR1950, DD1950 ) + CALL iau_FK5HIP ( R5H, S5H ) + CALL iau_FK5HZ ( R5, D5, DATE1, DATE2, RH, DH ) + CALL iau_FW2M ( GAMB, PHIB, PSI, EPS, R ) + CALL iau_FW2XY ( GAMB, PHIB, PSI, EPS, X, Y ) + CALL iau_G2ICRS ( DL, DB, DR, DD ) + CALL iau_GC2GD ( N, XYZ, ELONG, PHI, HEIGHT, J ) + CALL iau_GC2GDE ( A, F, XYZ, ELONG, PHI, HEIGHT, J ) + CALL iau_GD2GC ( N, ELONG, PHI, HEIGHT, XYZ, J ) + CALL iau_GD2GCE ( A, F, ELONG, PHI, HEIGHT, XYZ, J ) + D = iau_GMST00 ( UTA, UTB, TTA, TTB ) + D = iau_GMST06 ( UTA, UTB, TTA, TTB ) + D = iau_GMST82 ( UTA, UTB ) + D = iau_GST00A ( UTA, UTB, TTA, TTB ) + D = iau_GST00B ( UTA, UTB ) + D = iau_GST06 ( UTA, UTB, TTA, TTB, RNPB ) + D = iau_GST06A ( UTA, UTB, TTA, TTB ) + D = iau_GST94 ( UTA, UTB ) + CALL iau_H2FK5 ( RH, DH, DRH, DDH, PXH, RVH, + : R5, D5, DR5, DD5, PX5, RV5 ) + CALL iau_HD2AE ( HA, DEC, PHI, AZ, EL ) + D = iau_HD2PA ( HA, DEC, PHI ) + CALL iau_HFK5Z ( RH, DH, DATE1, DATE2, R5, D5, DR5, DD5 ) + CALL iau_ICRS2G ( DR, DD, DL, DB ) + CALL iau_JD2CAL ( DJ1, DJ2, IY, IM, ID, FD, J ) + CALL iau_JDCALF ( NDP, DJ1, DJ2, IYMDF, J ) + CALL iau_LD ( BM, P, Q, E, EM, DLIM, P1 ) + CALL iau_LDN ( N, B, OB, SC, SN ) + CALL iau_LDSUN ( P, E, EM, P1 ) + CALL iau_LTECEQ ( EPJ, DL, DB, DR, DD ) + CALL iau_LTECM ( EPJ, RM] ) + CALL iau_LTEQEC ( EPJ, DR, DD, DL, DB ) + CALL iau_LTP ( EPJ, RP ) + CALL iau_LTPB ( EPJ, RPB ) + CALL iau_LTPECL ( EPJ, VEC ) + CALL iau_LTPEQU ( EPJ, VEQ ) + CALL iau_NUM00A ( DATE1, DATE2, RMATN ) + CALL iau_NUM00B ( DATE1, DATE2, RMATN ) + CALL iau_NUM06A ( DATE1, DATE2, RMATN ) + CALL iau_NUMAT ( EPSA, DPSI, DEPS, RMATN ) + CALL iau_NUT00A ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT00B ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT06A ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT80 ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUTM80 ( DATE1, DATE2, RMATN ) + D = iau_OBL06 ( DATE1, DATE2 ) + D = iau_OBL80 ( DATE1, DATE2 ) + CALL iau_PB06 ( DATE1, DATE2, BZETA, BZ, BTHETA ) + CALL iau_PFW06 ( DATE1, DATE2, GAMB, PHIB, PSIB, EPSA ) + CALL iau_PLAN94 ( DATE1, DATE2, NP, PV, J ) + CALL iau_PMAT00 ( DATE1, DATE2, RBP ) + CALL iau_PMAT06 ( DATE1, DATE2, RBP ) + CALL iau_PMAT76 ( DATE1, DATE2, RMATP ) + CALL iau_PMPX ( RC, DC, PR, PD, PX, RV, PMT, POB, PCO ) + CALL iau_PMSAFE ( RA1, DEC1, PMR1, PMD1, PX1, RV1, + : EP1A, EP1B, EP2A, EP2B, + : RA2, DEC2, PMR2, PMD2, PX2, RV2, J ) + CALL iau_PN00 ( DATE1, DATE2, DPSI, DEPS, + : EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN00A ( DATE1, DATE2, + : DPSI, DEPS, EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN00B ( DATE1, DATE2, + : DPSI, DEPS, EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN06 ( DATE1, DATE2, DPSI, DEPS, + : EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN06A ( DATE1, DATE2, + : DPSI, DEPS, RB, RP, RBP, RN, RBPN ) + CALL iau_PNM00A ( DATE1, DATE2, RBPN ) + CALL iau_PNM00B ( DATE1, DATE2, RBPN ) + CALL iau_PNM06A ( DATE1, DATE2, RNPB ) + CALL iau_PNM80 ( DATE1, DATE2, RMATPN ) + CALL iau_P06E ( DATE1, DATE2, + : EPS0, PSIA, OMA, BPA, BQA, PIA, BPIA, + : EPSA, CHIA, ZA, ZETAA, THETAA, PA, GAM, PHI, PSI ) + CALL iau_POM00 ( XP, YP, SP, RPOM ) + CALL iau_PR00 ( DATE1, DATE2, DPSIPR, DEPSPR ) + CALL iau_PREC76 ( DATE01, DATE02, DATE11, DATE12, ZETA, Z, THETA ) + CALL iau_PVSTAR ( PV, RA, DEC, PMR, PMD, PX, RV, J ) + CALL iau_PVTOB ( ELONG, PHI, HM, XP, YP, SP, THETA, PV ) + CALL iau_REFCO ( PHPA, TC, RH, WL, REFA, REFB ) + D = iau_S00 ( DATE1, DATE2, X, Y ) + D = iau_S00A ( DATE1, DATE2 ) + D = iau_S00B ( DATE1, DATE2 ) + D = iau_S06 ( DATE1, DATE2, X, Y ) + D = iau_S06A ( DATE1, DATE2 ) + D = iau_SP00 ( DATE1, DATE2 ) + CALL iau_STARPM ( RA1, DEC1, PMR1, PMD1, PX1, RV1, + : EP1A, EP1B, EP2A, EP2B, + : RA2, DEC2, PMR2, PMD2, PX2, RV2, J ) + CALL iau_STARPV ( RA, DEC, PMR, PMD, PX, RV, PV, J ) + CALL iau_TAITT ( TAI1, TAI2, TT1, TT2, J ) + CALL iau_TAIUT1 ( TAI1, TAI2, DTA, UT11, UT12, J ) + CALL iau_TAIUTC ( TAI1, TAI2, UTC1, UTC2, J ) + CALL iau_TCBTDB ( TCB1, TCB2, TDB1, TDB2, J ) + CALL iau_TCGTT ( TCG1, TCG2, TT1, TT2, J ) + CALL iau_TDBTCB ( TDB1, TDB2, TCB1, TCB2, J ) + CALL iau_TDBTT ( TDB1, TDB2, DTR, TT1, TT2, J ) + CALL iau_TPORS ( XI, ETA, A, B, A01, B01, A02, B02, N ) + CALL iau_TPORV ( XI, ETA, V, V01, V02, N ) + CALL iau_TPSTS ( XI, ETA, A0, B0, A, B ) + CALL iau_TPSTV ( XI, ETA, V0, V ) + CALL iau_TPXES ( A, B, A0, B0, XI, ETA, J ) + CALL iau_TPXEV ( V, V0, XI, ETA, J ) + CALL iau_TTTAI ( TT1, TT2, TAI1, TAI2, J ) + CALL iau_TTTCG ( TT1, TT2, TCG1, TCG2, J ) + CALL iau_TTTDB ( TT1, TT2, DTR, TDB1, TDB2, J ) + CALL iau_TTUT1 ( TT1, TT2, DT, UT11, UT12, J ) + CALL iau_UT1TAI ( UT11, UT12, TAI1, TAI2, J ) + CALL iau_UT1TT ( UT11, UT12, DT, TT1, TT2, J ) + CALL iau_UT1UTC ( UT11, UT12, DUT, UTC1, UTC2, J ) + CALL iau_UTCTAI ( UTC1, UTC2, DTA, TAI1, TAI2, J ) + CALL iau_UTCUT1 ( UTC1, UTC2, DUT, UT11, UT12, J ) + CALL iau_XY06 ( DATE1, DATE2, X, Y ) + CALL iau_XYS00A ( DATE1, DATE2, X, Y, S ) + CALL iau_XYS00B ( DATE1, DATE2, X, Y, S ) + CALL iau_XYS06A ( DATE1, DATE2, X, Y, S ) + + +CALLS: C VERSION + + iauAb ( pnat, v, s, bm1, ppr ); + iauAe2hd ( az, el, phi, &ha, &dec ); + iauApcg ( date1, date2, eb, eh, &astrom ); + iauApcg13 ( date1, date2, &astrom ); + iauApci ( date1, date2, eb, eh, x, y, s, &astrom ); + iauApci13 ( date1, date2, &astrom, &eo ); + iauApco ( date1, date2, eb, eh, x, y, s, + theta, elong, phi, hm, xp, yp, sp, + refa, refb, &astrom ); + i = iauApco13 ( utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom, &eo ); + iauApcs ( date1, date2, pv, eb, eh, &astrom ); + iauApcs13 ( date1, date2, pv, &astrom ); + iauAper ( theta, &astrom ); + iauAper13 ( ut11, ut12, &astrom ); + iauApio ( sp, theta, elong, phi, hm, xp, yp, refa, refb, + &astrom ); + i = iauApio13 ( utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom ); + iauAtci13 ( rc, dc, pr, pd, px, rv, date1, date2, + &ri, &di, &eo ); + iauAtciq ( rc, dc, pr, pd, px, rv, &astrom, &ri, &di ); + iauAtciqn ( rc, dc, pr, pd, px, rv, astrom, n, b, &ri, &di ); + iauAtciqz ( rc, dc, &astrom, &ri, &di ); + i = iauAtco13 ( rc, dc, pr, pd, px, rv, utc1, utc2, dut1, + elong phi, hm, xp, yp, phpa, tc, rh, wl, + aob, zob, hob, dob, rob, eo ); + iauAtic13 ( ri, di, date1, date2, &rc, &dc, &eo ); + iauAticq ( ri, di, &astrom, &rc, &dc ); + iauAtciqn ( ri, di, astrom, n, b, &rc, &dc ); + i = iauAtio13 ( ri, di, utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, aob, zob, hob, dob, rob ); + iauAtioq ( ri, di, &astrom, &aob, &zob, &hob, &dob, &rob ); + i = iauAtoc13 ( type, ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &rc, &dc ); + i = iauAtoi13 ( type, ob1, ob2, utc1, utc2, dut1, elong, phi, hm, + xp, yp, phpa, tc, rh, wl, &ri, &di ); + iauAtoiq ( type, ob1, ob2, &astrom, &ri, &di ); + iauBi00 ( &dpsibi, &depsbi, &dra ); + iauBp00 ( date1, date2, rb, rp, rbp ); + iauBp06 ( date1, date2, rb, rp, rbp ); + iauBpn2xy ( rbpn, &x, &y ); + iauC2i00a ( date1, date2, rc2i ); + iauC2i00b ( date1, date2, rc2i ); + iauC2i06a ( date1, date2, rc2i ); + iauC2ibpn ( date1, date2, rbpn, rc2i ); + iauC2ixy ( date1, date2, x, y, rc2i ); + iauC2ixys ( x, y, s, rc2i ); + iauC2t00a ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2t00b ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2t06a ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2tcio ( rc2i, era, rpom, rc2t ); + iauC2teqx ( rbpn, gst, rpom, rc2t ); + iauC2tpe ( tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t ); + iauC2txy ( tta, ttb, uta, utb, x, y, xp, yp, rc2t ); + i = iauCal2jd ( iy, im, id, &djm0, &djm ); + i = iauD2dtf ( scale, ndp, d1, d2, &iy, &im, &id, ihmsf ); + i = iauDat ( iy, im, id, fd, &deltat ); + d = iauDtdb ( date1, date2, ut, elong, u, v ); + i = iauDtf2d ( scale, iy, im, id, ihr, imn, sec, &d1, &d2 ); + iauEceq06 ( date1, date2, dl, db, &dr, &dd ); + iauEcm06 ( date1, date2, rm ); + d = iauEe00 ( date1, date2, epsa, dpsi ); + d = iauEe00a ( date1, date2 ); + d = iauEe00b ( date1, date2 ); + d = iauEe06 ( date1, date2 ); + d = iauEect00 ( date1, date2 ); + i = iauEform ( n, &a, &f ); + d = iauEo06 ( date1, date2 ); + d = iauEors ( rnpb, s ); + d = iauEpb ( dj1, dj2 ); + iauEpb2jd ( epb, &djm0, &djm ); + d = iauEpj ( dj1, dj2 ); + iauEpj2jd ( epj, &djm0, &djm ); + i = iauEpv00 ( dj1, dj2, pvh, pvb ); + iauEqec06 ( date1, date2, dr, dd, &dl, &db ); + d = iauEqeq94 ( date1, date2 ); + d = iauEra00 ( dj1, dj2 ); + d = iauFad03 ( t ); + d = iauFae03 ( t ); + d = iauFaf03 ( t ); + d = iauFaju03 ( t ); + d = iauFal03 ( t ); + d = iauFalp03 ( t ); + d = iauFama03 ( t ); + d = iauFame03 ( t ); + d = iauFane03 ( t ); + d = iauFaom03 ( t ); + d = iauFapa03 ( t ); + d = iauFasa03 ( t ); + d = iauFaur03 ( t ); + d = iauFave03 ( t ); + iauFk425 ( r1950, d1950, dr1950, dd1950, p1950, v1950, + &r2000, &d2000, &dr2000, &dd2000, &p2000, &v2000 ); + iauFk45z ( r1950, d1950, bepoch, &r2000, &d2000 ); + iauFk524 ( r2000, d2000, dr2000, dd2000, p2000, v2000, + &r1950, &d1950, &dr1950, &dd1950, &p1950, &v1950 ); + iauFk52h ( r5, d5, dr5, dd5, px5, rv5, + &rh, &dh, &drh, &ddh, &pxh, &rvh ); + iauFk54z ( r2000, d2000, bepoch, + &r1950, &d1950, &dr1950, &dd1950 ); + iauFk5hip ( r5h, s5h ); + iauFk5hz ( r5, d5, date1, date2, &rh, &dh ); + iauFw2m ( gamb, phib, psi, eps, r ); + iauFw2xy ( gamb, phib, psi, eps, &x, &y ); + iauG2icrs ( dl, db, &dr, &dd ); + i = iauGc2gd ( n, xyz, &elong, &phi, &height ); + i = iauGc2gde ( a, f, xyz, &elong, &phi, &height ); + i = iauGd2gc ( n, elong, phi, height, xyz ); + i = iauGd2gce ( a, f, elong, phi, height, xyz ); + d = iauGmst00 ( uta, utb, tta, ttb ); + d = iauGmst06 ( uta, utb, tta, ttb ); + d = iauGmst82 ( uta, utb ); + d = iauGst00a ( uta, utb, tta, ttb ); + d = iauGst00b ( uta, utb ); + d = iauGst06 ( uta, utb, tta, ttb, rnpb ); + d = iauGst06a ( uta, utb, tta, ttb ); + d = iauGst94 ( uta, utb ); + iauH2fk5 ( rh, dh, drh, ddh, pxh, rvh, + &r5, &d5, &dr5, &dd5, &px5, &rv5 ); + iauHd2ae ( ha, dec, phi, &az, &el ); + d = iauHd2pa ( ha, dec, phi ); + iauHfk5z ( rh, dh, date1, date2, + &r5, &d5, &dr5, &dd5 ); + iauIcrs2g ( dr, dd, &dl, &db ); + i = iauJd2cal ( dj1, dj2, &iy, &im, &id, &fd ); + i = iauJdcalf ( ndp, dj1, dj2, iymdf ); + iauLd ( bm, p, q, e, em, dlim, p1 ); + iauLdn ( n, b, ob, sc, sn ); + iauLdsun ( p, e, em, p1 ); + iauLteceq ( epj, dl, db, &dr, &dd ); + iauLtecm ( epj, rm ); + iauLteqec ( epj, dr, dd, &dl, &db ); + iauLtp ( epj, rp ); + iauLtpb ( epj, rpb ); + iauLtpecl ( epj, vec ); + iauLtpequ ( epj, veq ); + iauNum00a ( date1, date2, rmatn ); + iauNum00b ( date1, date2, rmatn ); + iauNum06a ( date1, date2, rmatn ); + iauNumat ( epsa, dpsi, deps, rmatn ); + iauNut00a ( date1, date2, &dpsi, &deps ); + iauNut00b ( date1, date2, &dpsi, &deps ); + iauNut06a ( date1, date2, &dpsi, &deps ); + iauNut80 ( date1, date2, &dpsi, &deps ); + iauNutm80 ( date1, date2, rmatn ); + d = iauObl06 ( date1, date2 ); + d = iauObl80 ( date1, date2 ); + iauPb06 ( date1, date2, &bzeta, &bz, &btheta ); + iauPfw06 ( date1, date2, &gamb, &phib, &psib, &epsa ); + i = iauPlan94 ( date1, date2, np, pv ); + iauPmat00 ( date1, date2, rbp ); + iauPmat06 ( date1, date2, rbp ); + iauPmat76 ( date1, date2, rmatp ); + iauPmpx ( rc, dc, pr, pd, px, rv, pmt, pob, pco ); + i = iauPmsafe ( ra1, dec1, pmr1, pmd1, px1, rv1, + ep1a, ep1b, ep2a, ep2b, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2); + iauPn00 ( date1, date2, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn ); + iauPn00a ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPn00b ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPn06 ( date1, date2, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn ); + iauPn06a ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPnm00a ( date1, date2, rbpn ); + iauPnm00b ( date1, date2, rbpn ); + iauPnm06a ( date1, date2, rnpb ); + iauPnm80 ( date1, date2, rmatpn ); + iauP06e ( date1, date2, + &eps0, &psia, &oma, &bpa, &bqa, &pia, &bpia, + &epsa, &chia, &za, &zetaa, &thetaa, &pa, + &gam, &phi, &psi ); + iauPom00 ( xp, yp, sp, rpom ); + iauPr00 ( date1, date2, &dpsipr, &depspr ); + iauPrec76 ( date01, date02, date11, date12, &zeta, &z, &theta ); + i = iauPvstar ( pv, &ra, &dec, &pmr, &pmd, &px, &rv ); + iauPvtob ( elong, phi, hm, xp, yp, sp, theta, pv ); + iauRefco ( phpa, tc, rh, wl, refa, refb ); + d = iauS00 ( date1, date2, x, y ); + d = iauS00a ( date1, date2 ); + d = iauS00b ( date1, date2 ); + d = iauS06 ( date1, date2, x, y ); + d = iauS06a ( date1, date2 ); + d = iauSp00 ( date1, date2 ); + i = iauStarpm ( ra1, dec1, pmr1, pmd1, px1, rv1, + ep1a, ep1b, ep2a, ep2b, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2 ); + i = iauStarpv ( ra, dec, pmr, pmd, px, rv, pv ); + i = iauTaitt ( tai1, tai2, &tt1, &tt2 ); + i = iauTaiut1 ( tai1, tai2, dta, &ut11, &ut12 ); + i = iauTaiutc ( tai1, tai2, &utc1, &utc2 ); + i = iauTcbtdb ( tcb1, tcb2, &tdb1, &tdb2 ); + i = iauTcgtt ( tcg1, tcg2, &tt1, &tt2 ); + i = iauTdbtcb ( tdb1, tdb2, &tcb1, &tcb2 ); + i = iauTdbtt ( tdb1, tdb2, dtr, &tt1, &tt2 ); + i = iauTpors ( xi, eta, a, b, &a01, &b01, &a02, &b02 ); + i = iauTporv ( xi, eta, v, v01, v02 ); + iauTpsts ( xi, eta, a0, b0, &a, &b ); + iauTpstv ( xi, eta, v0, v ); + i = iauTpxes ( a, b, a0, b0, &xi, &eta ); + i = iauTpxev ( v, v0, &xi, &eta ); + i = iauTttai ( tt1, tt2, &tai1, &tai2 ); + i = iauTttcg ( tt1, tt2, &tcg1, &tcg2 ); + i = iauTttdb ( tt1, tt2, dtr, &tdb1, &tdb2 ); + i = iauTtut1 ( tt1, tt2, dt, &ut11, &ut12 ); + i = iauUt1tai ( ut11, ut12, &tai1, &tai2 ); + i = iauUt1tt ( ut11, ut12, dt, &tt1, &tt2 ); + i = iauUt1utc ( ut11, ut12, dut, &utc1, &utc2 ); + i = iauUtctai ( utc1, utc2, dta, &tai1, &tai2 ); + i = iauUtcut1 ( utc1, utc2, dut, &ut11, &ut12 ); + iauXy06 ( date1, date2, &x, &y ); + iauXys00a ( date1, date2, &x, &y, &s ); + iauXys00b ( date1, date2, &x, &y, &s ); + iauXys06a ( date1, date2, &x, &y, &s ); + + + + + + +sofa_vml.lis 2013 October 8 + + -------------------------- + SOFA Vector/Matrix Library + -------------------------- + +PREFACE + +The routines described here comprise the SOFA vector/matrix library. +Their general appearance and coding style conforms to conventions +agreed by the SOFA Board, and their functions, names and algorithms have +been ratified by the Board. Procedures for soliciting and agreeing +additions to the library are still evolving. + + +PROGRAMMING LANGUAGES + +The SOFA routines are available in two programming languages at present: +Fortran 77 and ANSI C. + +There is a one-to-one relationship between the two language versions. +The naming convention is such that a SOFA routine referred to +generically as "EXAMPL" exists as a Fortran subprogram iau_EXAMPL and a +C function iauExampl. The calls for the two versions are very similar, +with the same arguments in the same order. In a few cases, the C +equivalent of a Fortran SUBROUTINE subprogram uses a return value rather +than an argument. + + +GENERAL PRINCIPLES + +The library consists mostly of routines which operate on ordinary +Cartesian vectors (x,y,z) and 3x3 rotation matrices. However, there is +also support for vectors which represent velocity as well as position +and vectors which represent rotation instead of position. The vectors +which represent both position and velocity may be considered still to +have dimensions (3), but to comprise elements each of which is two +numbers, representing the value itself and the time derivative. Thus: + +* "Position" or "p" vectors (or just plain 3-vectors) have dimension + (3) in Fortran and [3] in C. + +* "Position/velocity" or "pv" vectors have dimensions (3,2) in Fortran + and [2][3] in C. + +* "Rotation" or "r" matrices have dimensions (3,3) in Fortran and [3][3] + in C. When used for rotation, they are "orthogonal"; the inverse of + such a matrix is equal to the transpose. Most of the routines in + this library do not assume that r-matrices are necessarily orthogonal + and in fact work on any 3x3 matrix. + +* "Rotation" or "r" vectors have dimensions (3) in Fortran and [3] in C. + Such vectors are a combination of the Euler axis and angle and are + convertible to and from r-matrices. The direction is the axis of + rotation and the magnitude is the angle of rotation, in radians. + Because the amount of rotation can be scaled up and down simply by + multiplying the vector by a scalar, r-vectors are useful for + representing spins about an axis which is fixed. + +* The above rules mean that in terms of memory address, the three + velocity components of a pv-vector follow the three position + components. Application code is permitted to exploit this and all + other knowledge of the internal layouts: that x, y and z appear in + that order and are in a right-handed Cartesian coordinate system etc. + For example, the cp function (copy a p-vector) can be used to copy + the velocity component of a pv-vector (indeed, this is how the + CPV routine is coded). + +* The routines provided do not completely fill the range of operations + that link all the various vector and matrix options, but are confined + to functions that are required by other parts of the SOFA software or + which are likely to prove useful. + +In addition to the vector/matrix routines, the library contains some +routines related to spherical angles, including conversions to and +from sexagesimal format. + +Using the library requires knowledge of vector/matrix methods, spherical +trigonometry, and methods of attitude representation. These topics are +covered in many textbooks, including "Spacecraft Attitude Determination +and Control", James R. Wertz (ed.), Astrophysics and Space Science +Library, Vol. 73, D. Reidel Publishing Company, 1986. + + +OPERATIONS INVOLVING P-VECTORS AND R-MATRICES + + Initialize + + ZP zero p-vector + ZR initialize r-matrix to null + IR initialize r-matrix to identity + + Copy/extend/extract + + CP copy p-vector + CR copy r-matrix + + Build rotations + + RX rotate r-matrix about x + RY rotate r-matrix about y + RZ rotate r-matrix about z + + Spherical/Cartesian conversions + + S2C spherical to unit vector + C2S unit vector to spherical + S2P spherical to p-vector + P2S p-vector to spherical + + Operations on vectors + + PPP p-vector plus p-vector + PMP p-vector minus p-vector + PPSP p-vector plus scaled p-vector + PDP inner (=scalar=dot) product of two p-vectors + PXP outer (=vector=cross) product of two p-vectors + PM modulus of p-vector + PN normalize p-vector returning modulus + SXP multiply p-vector by scalar + + Operations on matrices + + RXR r-matrix multiply + TR transpose r-matrix + + Matrix-vector products + + RXP product of r-matrix and p-vector + TRXP product of transpose of r-matrix and p-vector + + Separation and position-angle + + SEPP angular separation from p-vectors + SEPS angular separation from spherical coordinates + PAP position-angle from p-vectors + PAS position-angle from spherical coordinates + + Rotation vectors + + RV2M r-vector to r-matrix + RM2V r-matrix to r-vector + + +OPERATIONS INVOLVING PV-VECTORS + + Initialize + + ZPV zero pv-vector + + Copy/extend/extract + + CPV copy pv-vector + P2PV append zero velocity to p-vector + PV2P discard velocity component of pv-vector + + Spherical/Cartesian conversions + + S2PV spherical to pv-vector + PV2S pv-vector to spherical + + Operations on vectors + + PVPPV pv-vector plus pv-vector + PVMPV pv-vector minus pv-vector + PVDPV inner (=scalar=dot) product of two pv-vectors + PVXPV outer (=vector=cross) product of two pv-vectors + PVM modulus of pv-vector + SXPV multiply pv-vector by scalar + S2XPV multiply pv-vector by two scalars + PVU update pv-vector + PVUP update pv-vector discarding velocity + + Matrix-vector products + + RXPV product of r-matrix and pv-vector + TRXPV product of transpose of r-matrix and pv-vector + + +OPERATIONS ON ANGLES + + ANP normalize radians to range 0 to 2pi + ANPM normalize radians to range -pi to +pi + A2TF decompose radians into hours, minutes, seconds + A2AF decompose radians into degrees, arcminutes, arcseconds + AF2A degrees, arcminutes, arcseconds to radians + D2TF decompose days into hours, minutes, seconds + TF2A hours, minutes, seconds to radians + TF2D hours, minutes, seconds to days + + +CALLS: FORTRAN VERSION + + CALL iau_A2AF ( NDP, ANGLE, SIGN, IDMSF ) + CALL iau_A2TF ( NDP, ANGLE, SIGN, IHMSF ) + CALL iau_AF2A ( S, IDEG, IAMIN, ASEC, RAD, J ) + D = iau_ANP ( A ) + D = iau_ANPM ( A ) + CALL iau_C2S ( P, THETA, PHI ) + CALL iau_CP ( P, C ) + CALL iau_CPV ( PV, C ) + CALL iau_CR ( R, C ) + CALL iau_D2TF ( NDP, DAYS, SIGN, IHMSF ) + CALL iau_IR ( R ) + CALL iau_P2PV ( P, PV ) + CALL iau_P2S ( P, THETA, PHI, R ) + CALL iau_PAP ( A, B, THETA ) + CALL iau_PAS ( AL, AP, BL, BP, THETA ) + CALL iau_PDP ( A, B, ADB ) + CALL iau_PM ( P, R ) + CALL iau_PMP ( A, B, AMB ) + CALL iau_PN ( P, R, U ) + CALL iau_PPP ( A, B, APB ) + CALL iau_PPSP ( A, S, B, APSB ) + CALL iau_PV2P ( PV, P ) + CALL iau_PV2S ( PV, THETA, PHI, R, TD, PD, RD ) + CALL iau_PVDPV ( A, B, ADB ) + CALL iau_PVM ( PV, R, S ) + CALL iau_PVMPV ( A, B, AMB ) + CALL iau_PVPPV ( A, B, APB ) + CALL iau_PVU ( DT, PV, UPV ) + CALL iau_PVUP ( DT, PV, P ) + CALL iau_PVXPV ( A, B, AXB ) + CALL iau_PXP ( A, B, AXB ) + CALL iau_RM2V ( R, P ) + CALL iau_RV2M ( P, R ) + CALL iau_RX ( PHI, R ) + CALL iau_RXP ( R, P, RP ) + CALL iau_RXPV ( R, PV, RPV ) + CALL iau_RXR ( A, B, ATB ) + CALL iau_RY ( THETA, R ) + CALL iau_RZ ( PSI, R ) + CALL iau_S2C ( THETA, PHI, C ) + CALL iau_S2P ( THETA, PHI, R, P ) + CALL iau_S2PV ( THETA, PHI, R, TD, PD, RD, PV ) + CALL iau_S2XPV ( S1, S2, PV ) + CALL iau_SEPP ( A, B, S ) + CALL iau_SEPS ( AL, AP, BL, BP, S ) + CALL iau_SXP ( S, P, SP ) + CALL iau_SXPV ( S, PV, SPV ) + CALL iau_TF2A ( S, IHOUR, IMIN, SEC, RAD, J ) + CALL iau_TF2D ( S, IHOUR, IMIN, SEC, DAYS, J ) + CALL iau_TR ( R, RT ) + CALL iau_TRXP ( R, P, TRP ) + CALL iau_TRXPV ( R, PV, TRPV ) + CALL iau_ZP ( P ) + CALL iau_ZPV ( PV ) + CALL iau_ZR ( R ) + + +CALLS: C VERSION + + iauA2af ( ndp, angle, &sign, idmsf ); + iauA2tf ( ndp, angle, &sign, ihmsf ); + i = iauAf2a ( s, ideg, iamin, asec, &rad ); + d = iauAnp ( a ); + d = iauAnpm ( a ); + iauC2s ( p, &theta, &phi ); + iauCp ( p, c ); + iauCpv ( pv, c ); + iauCr ( r, c ); + iauD2tf ( ndp, days, &sign, ihmsf ); + iauIr ( r ); + iauP2pv ( p, pv ); + iauP2s ( p, &theta, &phi, &r ); + d = iauPap ( a, b ); + d = iauPas ( al, ap, bl, bp ); + d = iauPdp ( a, b ); + d = iauPm ( p ); + iauPmp ( a, b, amb ); + iauPn ( p, &r, u ); + iauPpp ( a, b, apb ); + iauPpsp ( a, s, b, apsb ); + iauPv2p ( pv, p ); + iauPv2s ( pv, &theta, &phi, &r, &td, &pd, &rd ); + iauPvdpv ( a, b, adb ); + iauPvm ( pv, &r, &s ); + iauPvmpv ( a, b, amb ); + iauPvppv ( a, b, apb ); + iauPvu ( dt, pv, upv ); + iauPvup ( dt, pv, p ); + iauPvxpv ( a, b, axb ); + iauPxp ( a, b, axb ); + iauRm2v ( r, p ); + iauRv2m ( p, r ); + iauRx ( phi, r ); + iauRxp ( r, p, rp ); + iauRxpv ( r, pv, rpv ); + iauRxr ( a, b, atb ); + iauRy ( theta, r ); + iauRz ( psi, r ); + iauS2c ( theta, phi, c ); + iauS2p ( theta, phi, r, p ); + iauS2pv ( theta, phi, r, td, pd, rd, pV ); + iauS2xpv ( s1, s2, pv ); + d = iauSepp ( a, b ); + d = iauSeps ( al, ap, bl, bp ); + iauSxp ( s, p, sp ); + iauSxpv ( s, pv, spv ); + i = iauTf2a ( s, ihour, imin, sec, &rad ); + i = iauTf2d ( s, ihour, imin, sec, &days ); + iauTr ( r, rt ); + iauTrxp ( r, p, trp ); + iauTrxpv ( r, pv, trpv ); + iauZp ( p ); + iauZpv ( pv ); + iauZr ( r ); + + + +void iauA2af(int ndp, double angle, char *sign, int idmsf[4]) +/* +** - - - - - - - - +** i a u A 2 a f +** - - - - - - - - +** +** Decompose radians into degrees, arcminutes, arcseconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** angle double angle in radians +** +** Returned: +** sign char* '+' or '-' +** idmsf int[4] degrees, arcminutes, arcseconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of angle, the format of doubles on the target platform, and +** the risk of overflowing idmsf[3]. On a typical platform, for +** angle up to 2pi, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of angle may exceed 2pi. In cases where it +** does not, it is up to the caller to test for and handle the +** case where angle is very nearly 2pi and rounds up to 360 degrees, +** by testing for idmsf[0]=360 and setting idmsf[0-3] to zero. +** +** Called: +** iauD2tf decompose days to hms +** +*/ + + + +void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4]) +/* +** - - - - - - - - +** i a u A 2 t f +** - - - - - - - - +** +** Decompose radians into hours, minutes, seconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** angle double angle in radians +** +** Returned: +** sign char* '+' or '-' +** ihmsf int[4] hours, minutes, seconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of angle, the format of doubles on the target platform, and +** the risk of overflowing ihmsf[3]. On a typical platform, for +** angle up to 2pi, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of angle may exceed 2pi. In cases where it +** does not, it is up to the caller to test for and handle the +** case where angle is very nearly 2pi and rounds up to 24 hours, +** by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero. +** +** Called: +** iauD2tf decompose days to hms +** +*/ + + + +void iauAb(double pnat[3], double v[3], double s, double bm1, + double ppr[3]) +/* +** - - - - - - +** i a u A b +** - - - - - - +** +** Apply aberration to transform natural direction into proper +** direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** pnat double[3] natural direction to the source (unit vector) +** v double[3] observer barycentric velocity in units of c +** s double distance between the Sun and the observer (au) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** +** Returned: +** ppr double[3] proper direction to source (unit vector) +** +** Notes: +** +** 1) The algorithm is based on Expr. (7.40) in the Explanatory +** Supplement (Urban & Seidelmann 2013), but with the following +** changes: +** +** o Rigorous rather than approximate normalization is applied. +** +** o The gravitational potential term from Expr. (7) in +** Klioner (2003) is added, taking into account only the Sun's +** contribution. This has a maximum effect of about +** 0.4 microarcsecond. +** +** 2) In almost all cases, the maximum accuracy will be limited by the +** supplied velocity. For example, if the SOFA iauEpv00 function is +** used, errors of up to 5 microarcseconds could occur. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauPdp scalar product of two p-vectors +** +*/ + + + +void iauAe2hd (double az, double el, double phi, + double *ha, double *dec) +/* +** - - - - - - - - - +** i a u A e 2 h d +** - - - - - - - - - +** +** Horizon to equatorial coordinates: transform azimuth and altitude +** to hour angle and declination. +** +** Given: +** az double azimuth +** el double altitude (informally, elevation) +** phi double site latitude +** +** Returned: +** ha double hour angle (local) +** dec double declination +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) The sign convention for azimuth is north zero, east +pi/2. +** +** 3) HA is returned in the range +/-pi. Declination is returned in +** the range +/-pi/2. +** +** 4) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 5) The azimuth az must be with respect to the rotational north pole, +** as opposed to the ITRS pole, and an azimuth with respect to north +** on a map of the Earth's surface will need to be adjusted for +** polar motion if sub-arcsecond accuracy is required. +** +** 6) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of ha will also be affected. +** +** 7) The transformation is the same as Ve = Ry(phi-pi/2)*Rz(pi)*Vh, +** where Ve and Vh are lefthanded unit vectors in the (ha,dec) and +** (az,el) systems respectively and Rz and Ry are rotations about +** first the z-axis and then the y-axis. (n.b. Rz(pi) simply +** reverses the signs of the x and y components.) For efficiency, +** the algorithm is written out rather than calling other utility +** functions. For applications that require even greater +** efficiency, additional savings are possible if constant terms +** such as functions of latitude are computed once and for all. +** +** 8) Again for efficiency, no range checking of arguments is carried +** out. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sa, ca, se, ce, sp, cp, x, y, z, r; + + +/* Useful trig functions. */ + sa = sin(az); + ca = cos(az); + se = sin(el); + ce = cos(el); + sp = sin(phi); + cp = cos(phi); + +/* HA,Dec unit vector. */ + x = - ca*ce*sp + se*cp; + y = - sa*ce; + z = ca*ce*cp + se*sp; + +/* To spherical. */ + r = sqrt(x*x + y*y); + *ha = (r != 0.0) ? atan2(y,x) : 0.0; + *dec = atan2(z,r); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} + + + +int iauAf2a(char s, int ideg, int iamin, double asec, double *rad) +/* +** - - - - - - - - +** i a u A f 2 a +** - - - - - - - - +** +** Convert degrees, arcminutes, arcseconds to radians. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ideg int degrees +** iamin int arcminutes +** asec double arcseconds +** +** Returned: +** rad double angle in radians +** +** Returned (function value): +** int status: 0 = OK +** 1 = ideg outside range 0-359 +** 2 = iamin outside range 0-59 +** 3 = asec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ideg, iamin and/or asec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +*/ + + + +double iauAnp(double a) +/* +** - - - - - - - +** i a u A n p +** - - - - - - - +** +** Normalize angle into the range 0 <= a < 2pi. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double angle (radians) +** +** Returned (function value): +** double angle in range 0-2pi +** +*/ + + + +double iauAnpm(double a) +/* +** - - - - - - - - +** i a u A n p m +** - - - - - - - - +** +** Normalize angle into the range -pi <= a < +pi. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double angle (radians) +** +** Returned (function value): +** double angle in range +/-pi +** +*/ + + + +void iauApcg(double date1, double date2, + double ebpv[2][3], double ehp[3], + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c g +** - - - - - - - - +** +** For a geocentric observer, prepare star-independent astrometry +** parameters for transformations between ICRS and GCRS coordinates. +** The Earth ephemeris is supplied by the caller. +** +** The parameters produced by this function are required in the +** parallax, light deflection and aberration parts of the astrometric +** transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric pos/vel (au, au/day) +** ehp double[3] Earth heliocentric position (au) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 4) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** +*/ + + + +void iauApcg13(double date1, double date2, iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p c g 1 3 +** - - - - - - - - - - +** +** For a geocentric observer, prepare star-independent astrometry +** parameters for transformations between ICRS and GCRS coordinates. +** The caller supplies the date, and SOFA models are used to predict +** the Earth ephemeris. +** +** The parameters produced by this function are required in the +** parallax, light deflection and aberration parts of the astrometric +** transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller wishes to supply his own Earth +** ephemeris, the function iauApcg can be used instead of the present +** function. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauApcg astrometry parameters, ICRS-GCRS, geocenter +** +*/ + + + +void iauApci(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c i +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and geocentric CIRS +** coordinates. The Earth ephemeris and CIP/CIO are supplied by the +** caller. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric position/velocity (au, au/day) +** ehp double[3] Earth heliocentric position (au) +** x,y double CIP X,Y (components of unit vector) +** s double the CIO locator s (radians) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller does not wish to provide the Earth +** ephemeris and CIP/CIO, the function iauApci13 can be used instead +** of the present function. This computes the required quantities +** using other SOFA functions. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauApcg astrometry parameters, ICRS-GCRS, geocenter +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** +*/ + + + +void iauApci13(double date1, double date2, + iauASTROM *astrom, double *eo) +/* +** - - - - - - - - - - +** i a u A p c i 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and geocentric CIRS +** coordinates. The caller supplies the date, and SOFA models are used +** to predict the Earth ephemeris and CIP/CIO. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** eo double* equation of the origins (ERA-GST) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller wishes to supply his own Earth +** ephemeris and CIP/CIO, the function iauApci can be used instead +** of the present function. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauApci astrometry parameters, ICRS-CIRS +** iauEors equation of the origins, given NPB matrix and s +** +*/ + + + +void iauApco(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, double theta, + double elong, double phi, double hm, + double xp, double yp, double sp, + double refa, double refb, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c o +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and observed +** coordinates. The caller supplies the Earth ephemeris, the Earth +** rotation information and the refraction constants as well as the +** site coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric PV (au, au/day, Note 2) +** ehp double[3] Earth heliocentric P (au, Note 2) +** x,y double CIP X,Y (components of unit vector) +** s double the CIO locator s (radians) +** theta double Earth rotation angle (radians) +** elong double longitude (radians, east +ve, Note 3) +** phi double latitude (geodetic, radians, Note 3) +** hm double height above ellipsoid (m, geodetic, Note 3) +** xp,yp double polar motion coordinates (radians, Note 4) +** sp double the TIO locator s' (radians, Note 4) +** refa double refraction constant A (radians, Note 5) +** refb double refraction constant B (radians, Note 5) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) The vectors eb, eh, and all the astrom vectors, are with respect +** to BCRS axes. +** +** 3) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN +** CONVENTION: the longitude required by the present function is +** right-handed, i.e. east-positive, in accordance with geographical +** convention. +** +** 4) xp and yp are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions), measured along the +** meridians 0 and 90 deg west respectively. sp is the TIO locator +** s', in radians, which positions the Terrestrial Intermediate +** Origin on the equator. For many applications, xp, yp and +** (especially) sp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto the +** local meridian. +** +** 5) The refraction constants refa and refb are for use in a +** dZ = A*tan(Z)+B*tan^3(Z) model, where Z is the observed +** (i.e. refracted) zenith distance and dZ is the amount of +** refraction. +** +** 6) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 7) In cases where the caller does not wish to provide the Earth +** Ephemeris, the Earth rotation information and refraction +** constants, the function iauApco13 can be used instead of the +** present function. This starts from UTC and weather readings etc. +** and computes suitable values using other SOFA functions. +** +** 8) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 9) The context structure astrom produced by this function is used by +** iauAtioq, iauAtoiq, iauAtciq* and iauAticq*. +** +** Called: +** iauAper astrometry parameters: update ERA +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** iauPvtob position/velocity of terrestrial station +** iauTrxpv product of transpose of r-matrix and pv-vector +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** iauCr copy r-matrix +** +*/ + + + +int iauApco13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom, double *eo) +/* +** - - - - - - - - - - +** i a u A p c o 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and observed +** coordinates. The caller supplies UTC, site coordinates, ambient air +** conditions and observing wavelength, and SOFA models are used to +** obtain the Earth ephemeris, CIP/CIO and refraction constants. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the ICRS/CIRS transformations. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds, Note 3) +** elong double longitude (radians, east +ve, Note 4) +** phi double latitude (geodetic, radians, Note 4) +** hm double height above ellipsoid (m, geodetic, Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** eo double* equation of the origins (ERA-GST) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto +** the local meridian. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 9) In cases where the caller wishes to supply his own Earth +** ephemeris, Earth rotation information and refraction constants, +** the function iauApco can be used instead of the present function. +** +** 10) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 11) The context structure astrom produced by this function is used +** by iauAtioq, iauAtoiq, iauAtciq* and iauAticq*. +** +** Called: +** iauUtctai UTC to TAI +** iauTaitt TAI to TT +** iauUtcut1 UTC to UT1 +** iauEpv00 Earth position and velocity +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauRefco refraction constants for given ambient conditions +** iauApco astrometry parameters, ICRS-observed +** iauEors equation of the origins, given NPB matrix and s +** +*/ + + + +void iauApcs(double date1, double date2, double pv[2][3], + double ebpv[2][3], double ehp[3], + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c s +** - - - - - - - - +** +** For an observer whose geocentric position and velocity are known, +** prepare star-independent astrometry parameters for transformations +** between ICRS and GCRS. The Earth ephemeris is supplied by the +** caller. +** +** The parameters produced by this function are required in the space +** motion, parallax, light deflection and aberration parts of the +** astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** pv double[2][3] observer's geocentric pos/vel (m, m/s) +** ebpv double[2][3] Earth barycentric PV (au, au/day) +** ehp double[3] Earth heliocentric P (au) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) Providing separate arguments for (i) the observer's geocentric +** position and velocity and (ii) the Earth ephemeris is done for +** convenience in the geocentric, terrestrial and Earth orbit cases. +** For deep space applications it maybe more convenient to specify +** zero geocentric position and velocity and to supply the +** observer's position and velocity information directly instead of +** with respect to the Earth. However, note the different units: +** m and m/s for the geocentric vectors, au and au/day for the +** heliocentric and barycentric vectors. +** +** 4) In cases where the caller does not wish to provide the Earth +** ephemeris, the function iauApcs13 can be used instead of the +** present function. This computes the Earth ephemeris using the +** SOFA function iauEpv00. +** +** 5) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 6) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauCp copy p-vector +** iauPm modulus of p-vector +** iauPn decompose p-vector into modulus and direction +** iauIr initialize r-matrix to identity +** +*/ + + + +void iauApcs13(double date1, double date2, double pv[2][3], + iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p c s 1 3 +** - - - - - - - - - - +** +** For an observer whose geocentric position and velocity are known, +** prepare star-independent astrometry parameters for transformations +** between ICRS and GCRS. The Earth ephemeris is from SOFA models. +** +** The parameters produced by this function are required in the space +** motion, parallax, light deflection and aberration parts of the +** astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** pv double[2][3] observer's geocentric pos/vel (Note 3) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) The observer's position and velocity pv are geocentric but with +** respect to BCRS axes, and in units of m and m/s. No assumptions +** are made about proximity to the Earth, and the function can be +** used for deep space applications as well as Earth orbit and +** terrestrial. +** +** 4) In cases where the caller wishes to supply his own Earth +** ephemeris, the function iauApcs can be used instead of the present +** function. +** +** 5) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 6) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** +*/ + + + +void iauAper(double theta, iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p e r +** - - - - - - - - +** +** In the star-independent astrometry parameters, update only the +** Earth rotation angle, supplied by the caller explicitly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** theta double Earth rotation angle (radians, Note 2) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double not used +** eb double[3] not used +** eh double[3] not used +** em double not used +** v double[3] not used +** bm1 double not used +** bpn double[3][3] not used +** along double longitude + s' (radians) +** xpl double not used +** ypl double not used +** sphi double not used +** cphi double not used +** diurab double not used +** eral double not used +** refa double not used +** refb double not used +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double "local" Earth rotation angle (radians) +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) This function exists to enable sidereal-tracking applications to +** avoid wasteful recomputation of the bulk of the astrometry +** parameters: only the Earth rotation is updated. +** +** 2) For targets expressed as equinox based positions, such as +** classical geocentric apparent (RA,Dec), the supplied theta can be +** Greenwich apparent sidereal time rather than Earth rotation +** angle. +** +** 3) The function iauAper13 can be used instead of the present +** function, and starts from UT1 rather than ERA itself. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +*/ + + + +void iauAper13(double ut11, double ut12, iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p e r 1 3 +** - - - - - - - - - - +** +** In the star-independent astrometry parameters, update only the +** Earth rotation angle. The caller provides UT1, (n.b. not UTC). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ut11 double UT1 as a 2-part... +** ut12 double ...Julian Date (Note 1) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double not used +** eb double[3] not used +** eh double[3] not used +** em double not used +** v double[3] not used +** bm1 double not used +** bpn double[3][3] not used +** along double longitude + s' (radians) +** xpl double not used +** ypl double not used +** sphi double not used +** cphi double not used +** diurab double not used +** eral double not used +** refa double not used +** refb double not used +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double "local" Earth rotation angle (radians) +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The UT1 date (n.b. not UTC) ut11+ut12 is a Julian Date, +** apportioned in any convenient way between the arguments ut11 and +** ut12. For example, JD(UT1)=2450123.7 could be expressed in any +** of these ways, among others: +** +** ut11 ut12 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum precision is +** delivered when the ut11 argument is for 0hrs UT1 on the day in +** question and the ut12 argument lies in the range 0 to 1, or vice +** versa. +** +** 2) If the caller wishes to provide the Earth rotation angle itself, +** the function iauAper can be used instead. One use of this +** technique is to substitute Greenwich apparent sidereal time and +** thereby to support equinox based transformations directly. +** +** 3) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** Called: +** iauAper astrometry parameters: update ERA +** iauEra00 Earth rotation angle, IAU 2000 +** +*/ + + + +void iauApio(double sp, double theta, + double elong, double phi, double hm, double xp, double yp, + double refa, double refb, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p i o +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between CIRS and observed +** coordinates. The caller supplies the Earth orientation information +** and the refraction constants as well as the site coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** sp double the TIO locator s' (radians, Note 1) +** theta double Earth rotation angle (radians) +** elong double longitude (radians, east +ve, Note 2) +** phi double geodetic latitude (radians, Note 2) +** hm double height above ellipsoid (m, geodetic Note 2) +** xp,yp double polar motion coordinates (radians, Note 3) +** refa double refraction constant A (radians, Note 4) +** refb double refraction constant B (radians, Note 4) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Notes: +** +** 1) sp, the TIO locator s', is a tiny quantity needed only by the +** most precise applications. It can either be set to zero or +** predicted using the SOFA function iauSp00. +** +** 2) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 3) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many applications, +** xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto the +** local meridian. +** +** 4) The refraction constants refa and refb are for use in a +** dZ = A*tan(Z)+B*tan^3(Z) model, where Z is the observed +** (i.e. refracted) zenith distance and dZ is the amount of +** refraction. +** +** 5) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 6) In cases where the caller does not wish to provide the Earth +** rotation information and refraction constants, the function +** iauApio13 can be used instead of the present function. This +** starts from UTC and weather readings etc. and computes suitable +** values using other SOFA functions. +** +** 7) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 8) The context structure astrom produced by this function is used by +** iauAtioq and iauAtoiq. +** +** Called: +** iauPvtob position/velocity of terrestrial station +** iauAper astrometry parameters: update ERA +** +*/ + + + +int iauApio13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p i o 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between CIRS and observed +** coordinates. The caller supplies UTC, site coordinates, ambient air +** conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds) +** elong double longitude (radians, east +ve, Note 3) +** phi double geodetic latitude (radians, Note 3) +** hm double height above ellipsoid (m, geodetic Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many applications, +** xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto +** the local meridian. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to the +** pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 9) In cases where the caller wishes to supply his own Earth +** rotation information and refraction constants, the function +** iauApc can be used instead of the present function. +** +** 10) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 11) The context structure astrom produced by this function is used +** by iauAtioq and iauAtoiq. +** +** Called: +** iauUtctai UTC to TAI +** iauTaitt TAI to TT +** iauUtcut1 UTC to UT1 +** iauSp00 the TIO locator s', IERS 2000 +** iauEra00 Earth rotation angle, IAU 2000 +** iauRefco refraction constants for given ambient conditions +** iauApio astrometry parameters, CIRS-observed +** +*/ + + + +void iauAtci13(double rc, double dc, + double pr, double pd, double px, double rv, + double date1, double date2, + double *ri, double *di, double *eo) +/* +** - - - - - - - - - - +** i a u A t c i 1 3 +** - - - - - - - - - - +** +** Transform ICRS star data, epoch J2000.0, to CIRS. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc double ICRS right ascension at J2000.0 (radians, Note 1) +** dc double ICRS declination at J2000.0 (radians, Note 1) +** pr double RA proper motion (radians/year; Note 2) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 3) +** +** Returned: +** ri,di double* CIRS geocentric RA,Dec (radians) +** eo double* equation of the origins (ERA-GST, Note 5) +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 4) The available accuracy is better than 1 milliarcsecond, limited +** mainly by the precession-nutation model that is used, namely +** IAU 2000A/2006. Very close to solar system bodies, additional +** errors of up to several milliarcseconds can occur because of +** unmodeled light deflection; however, the Sun's contribution is +** taken into account, to first order. The accuracy limitations of +** the SOFA function iauEpv00 (used to compute Earth position and +** velocity) can contribute aberration errors of up to +** 5 microarcseconds. Light deflection at the Sun's limb is +** uncertain at the 0.4 mas level. +** +** 5) Should the transformation to (equinox based) apparent place be +** required rather than (CIO based) intermediate place, subtract the +** equation of the origins from the returned right ascension: +** RA = RI - EO. (The iauAnp function can then be applied, as +** required, to keep the result in the conventional 0-2pi range.) +** +** Called: +** iauApci13 astrometry parameters, ICRS-CIRS, 2013 +** iauAtciq quick ICRS to CIRS +** +*/ + + + +void iauAtciq(double rc, double dc, + double pr, double pd, double px, double rv, + iauASTROM *astrom, double *ri, double *di) +/* +** - - - - - - - - - +** i a u A t c i q +** - - - - - - - - - +** +** Quick ICRS, epoch J2000.0, to CIRS transformation, given precomputed +** star-independent astrometry parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** If the parallax and proper motions are zero the iauAtciqz function +** can be used instead. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at J2000.0 (radians) +** pr double RA proper motion (radians/year; Note 3) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Notes: +** +** 1) All the vectors are with respect to BCRS axes. +** +** 2) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 3) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** Called: +** iauPmpx proper motion and parallax +** iauLdsun light deflection by the Sun +** iauAb stellar aberration +** iauRxp product of r-matrix and pv-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +*/ + + + +void iauAtciqn(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + int n, iauLDBODY b[], double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t c i q n +** - - - - - - - - - - +** +** Quick ICRS, epoch J2000.0, to CIRS transformation, given precomputed +** star-independent astrometry parameters plus a list of light- +** deflecting bodies. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** +** If the only light-deflecting body to be taken into account is the +** Sun, the iauAtciq function can be used instead. If in addition the +** parallax and proper motions are zero, the iauAtciqz function can be +** used. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at J2000.0 (radians) +** pr double RA proper motion (radians/year; Note 3) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** n int number of bodies (Note 3) +** b iauLDBODY[n] data for each of the n bodies (Notes 3,4): +** bm double mass of the body (solar masses, Note 5) +** dl double deflection limiter (Note 6) +** pv [2][3] barycentric PV of the body (au, au/day) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The struct b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 4) The struct b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 5) In the entry in the b struct for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 6) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 7) For efficiency, validation of the contents of the b array is +** omitted. The supplied masses must be greater than zero, the +** position and velocity vectors must be right, and the deflection +** limiter greater than zero. +** +** Called: +** iauPmpx proper motion and parallax +** iauLdn light deflection by n bodies +** iauAb stellar aberration +** iauRxp product of r-matrix and pv-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +*/ + + + +void iauAtciqz(double rc, double dc, iauASTROM *astrom, + double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t c i q z +** - - - - - - - - - - +** +** Quick ICRS to CIRS transformation, given precomputed star- +** independent astrometry parameters, and assuming zero parallax and +** proper motion. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** The corresponding function for the case of non-zero parallax and +** proper motion is iauAtciq. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS astrometric RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Note: +** +** All the vectors are with respect to BCRS axes. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLdsun light deflection due to Sun +** iauAb stellar aberration +** iauRxp product of r-matrix and p-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +*/ + + + +int iauAtco13(double rc, double dc, + double pr, double pd, double px, double rv, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob, double *eo) +/* +** - - - - - - - - - - +** i a u A t c o 1 3 +** - - - - - - - - - - +** +** ICRS RA,Dec to observed place. The caller supplies UTC, site +** coordinates, ambient air conditions and observing wavelength. +** +** SOFA models are used for the Earth ephemeris, bias-precession- +** nutation, Earth orientation and refraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS right ascension at J2000.0 (radians, Note 1) +** pr double RA proper motion (radians/year; Note 2) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3-4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double latitude (geodetic, radians, Note 6) +** hm double height above ellipsoid (m, geodetic, Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** eo double* equation of the origins (ERA-GST) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require +** a preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), +** is available, an adequate estimate of hm can be obtained from +** the expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtco13 and +** iauAtoc13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 11) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 12) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApco13 astrometry parameters, ICRS-observed, 2013 +** iauAtciq quick ICRS to CIRS +** iauAtioq quick CIRS to observed +** +*/ + + + +void iauAtic13(double ri, double di, double date1, double date2, + double *rc, double *dc, double *eo) +/* +** - - - - - - - - - - +** i a u A t i c 1 3 +** - - - - - - - - - - +** +** Transform star RA,Dec from geocentric CIRS to ICRS astrometric. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS geocentric RA,Dec (radians) +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** eo double equation of the origins (ERA-GST, Note 4) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAtic13 (or +** iauAticq) and iauAtci13 (or iauAtciq) are accurate inverses; +** even at the edge of the Sun's disk the discrepancy is only about +** 1 nanoarcsecond. +** +** 3) The available accuracy is better than 1 milliarcsecond, limited +** mainly by the precession-nutation model that is used, namely +** IAU 2000A/2006. Very close to solar system bodies, additional +** errors of up to several milliarcseconds can occur because of +** unmodeled light deflection; however, the Sun's contribution is +** taken into account, to first order. The accuracy limitations of +** the SOFA function iauEpv00 (used to compute Earth position and +** velocity) can contribute aberration errors of up to +** 5 microarcseconds. Light deflection at the Sun's limb is +** uncertain at the 0.4 mas level. +** +** 4) Should the transformation to (equinox based) J2000.0 mean place +** be required rather than (CIO based) ICRS coordinates, subtract the +** equation of the origins from the returned right ascension: +** RA = RI - EO. (The iauAnp function can then be applied, as +** required, to keep the result in the conventional 0-2pi range.) +** +** Called: +** iauApci13 astrometry parameters, ICRS-CIRS, 2013 +** iauAticq quick CIRS to ICRS astrometric +** +*/ + + + +void iauAticq(double ri, double di, iauASTROM *astrom, + double *rc, double *dc) +/* +** - - - - - - - - - +** i a u A t i c q +** - - - - - - - - - +** +** Quick CIRS RA,Dec to ICRS astrometric place, given the star- +** independent astrometry parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling one of the functions iauApci[13], iauApcg[13], iauApco[13] +** or iauApcs[13]. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Notes: +** +** 1) Only the Sun is taken into account in the light deflection +** correction. +** +** 2) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAtic13 (or +** iauAticq) and iauAtci13 (or iauAtciq) are accurate inverses; +** even at the edge of the Sun's disk the discrepancy is only about +** 1 nanoarcsecond. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauZp zero p-vector +** iauAb stellar aberration +** iauLdsun light deflection by the Sun +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +*/ + + + +void iauAticqn(double ri, double di, iauASTROM *astrom, + int n, iauLDBODY b[], double *rc, double *dc) +/* +** - - - - - - - - - - +** i a u A t i c q n +** - - - - - - - - - - +** +** Quick CIRS to ICRS astrometric place transformation, given the star- +** independent astrometry parameters plus a list of light-deflecting +** bodies. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling one of the functions iauApci[13], iauApcg[13], iauApco[13] +** or iauApcs[13]. +* +* If the only light-deflecting body to be taken into account is the +* Sun, the iauAticq function can be used instead. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** n int number of bodies (Note 3) +** b iauLDBODY[n] data for each of the n bodies (Notes 3,4): +** bm double mass of the body (solar masses, Note 5) +** dl double deflection limiter (Note 6) +** pv [2][3] barycentric PV of the body (au, au/day) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Notes: +** +** 1) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAticqn and +** iauAtciqn are accurate inverses; even at the edge of the Sun's +** disk the discrepancy is only about 1 nanoarcsecond. +** +** 2) If the only light-deflecting body to be taken into account is the +** Sun, the iauAticq function can be used instead. +** +** 3) The struct b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 4) The struct b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 5) In the entry in the b struct for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 6) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 7) For efficiency, validation of the contents of the b array is +** omitted. The supplied masses must be greater than zero, the +** position and velocity vectors must be right, and the deflection +** limiter greater than zero. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauZp zero p-vector +** iauAb stellar aberration +** iauLdn light deflection by n bodies +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +*/ + + + +int iauAtio13(double ri, double di, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob) +/* +** - - - - - - - - - - +** i a u A t i o 1 3 +** - - - - - - - - - - +** +** CIRS RA,Dec to observed place. The caller supplies UTC, site +** coordinates, ambient air conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri double CIRS right ascension (CIO-based, radians) +** di double CIRS declination (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds, Note 3) +** elong double longitude (radians, east +ve, Note 4) +** phi double geodetic latitude (radians, Note 4) +** hm double height above ellipsoid (m, geodetic Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 9) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** 10) The complementary functions iauAtio13 and iauAtoi13 are self- +** consistent to better than 1 microarcsecond all over the +** celestial sphere. +** +** 11) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApio13 astrometry parameters, CIRS-observed, 2013 +** iauAtioq quick CIRS to observed +** +*/ + + + +void iauAtioq(double ri, double di, iauASTROM *astrom, + double *aob, double *zob, + double *hob, double *dob, double *rob) +/* +** - - - - - - - - - +** i a u A t i o q +** - - - - - - - - - +** +** Quick CIRS to observed place transformation. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling iauApio[13] or iauApco[13]. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri double CIRS right ascension +** di double CIRS declination +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** +** Notes: +** +** 1) This function returns zenith distance rather than altitude in +** order to reflect the fact that no allowance is made for +** depression of the horizon. +** +** 2) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtioq and +** iauAtoiq are self-consistent to better than 1 microarcsecond all +** over the celestial sphere. With refraction included, consistency +** falls off at high zenith distances, but is still better than +** 0.05 arcsec at 85 degrees. +** +** 3) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 4) The CIRS RA,Dec is obtained from a star catalog mean place by +** allowing for space motion, parallax, the Sun's gravitational lens +** effect, annual aberration and precession-nutation. For star +** positions in the ICRS, these effects can be applied by means of +** the iauAtci13 (etc.) functions. Starting from classical "mean +** place" systems, additional transformations will be needed first. +** +** 5) "Observed" Az,El means the position that would be seen by a +** perfect geodetically aligned theodolite. This is obtained from +** the CIRS RA,Dec by allowing for Earth orientation and diurnal +** aberration, rotating from equator to horizon coordinates, and +** then adjusting for refraction. The HA,Dec is obtained by +** rotating back into equatorial coordinates, and is the position +** that would be seen by a perfect equatorial with its polar axis +** aligned to the Earth's axis of rotation. Finally, the RA is +** obtained by subtracting the HA from the local ERA. +** +** 6) The star-independent CIRS-to-observed-place parameters in ASTROM +** may be computed with iauApio[13] or iauApco[13]. If nothing has +** changed significantly except the time, iauAper[13] may be used to +** perform the requisite adjustment to the astrom structure. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +*/ + + + +int iauAtoc13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *rc, double *dc) +/* +** - - - - - - - - - - +** i a u A t o c 1 3 +** - - - - - - - - - - +** +** Observed place at a groundbased site to to ICRS astrometric RA,Dec. +** The caller supplies UTC, site coordinates, ambient air conditions +** and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates - "R", "H" or "A" (Notes 1,2) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3,4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double geodetic latitude (radians, Note 6) +** hm double height above ellipsoid (m, geodetic Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth +** (north zero, east 90 deg) and zenith distance. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtco13 and +** iauAtoc13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 11) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApco13 astrometry parameters, ICRS-observed +** iauAtoiq quick observed to CIRS +** iauAticq quick CIRS to ICRS +** +*/ + + + +int iauAtoi13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t o i 1 3 +** - - - - - - - - - - +** +** Observed place to CIRS. The caller supplies UTC, site coordinates, +** ambient air conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates - "R", "H" or "A" (Notes 1,2) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3,4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double geodetic latitude (radians, Note 6) +** hm double height above the ellipsoid (meters, Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** ri double* CIRS right ascension (CIO-based, radians) +** di double* CIRS declination (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth +** (north zero, east 90 deg) and zenith distance. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtio13 and +** iauAtoi13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 12) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApio13 astrometry parameters, CIRS-observed, 2013 +** iauAtoiq quick observed to CIRS +** +*/ + + + +void iauAtoiq(const char *type, + double ob1, double ob2, iauASTROM *astrom, + double *ri, double *di) +/* +** - - - - - - - - - +** i a u A t o i q +** - - - - - - - - - +** +** Quick observed place to CIRS, given the star-independent astrometry +** parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling iauApio[13] or iauApco[13]. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates: "R", "H" or "A" (Note 1) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri double* CIRS right ascension (CIO-based, radians) +** di double* CIRS declination (radians) +** +** Notes: +** +** 1) "Observed" Az,El means the position that would be seen by a +** perfect geodetically aligned theodolite. This is related to +** the observed HA,Dec via the standard rotation, using the geodetic +** latitude (corrected for polar motion), while the observed HA and +** RA are related simply through the Earth rotation angle and the +** site longitude. "Observed" RA,Dec or HA,Dec thus means the +** position that would be seen by a perfect equatorial with its +** polar axis aligned to the Earth's axis of rotation. By removing +** from the observed place the effects of atmospheric refraction and +** diurnal aberration, the CIRS RA,Dec is obtained. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth (north +** zero, east 90 deg) and zenith distance. (Zenith distance is used +** rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) +** +** 3) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better than +** 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtioq and +** iauAtoiq are self-consistent to better than 1 microarcsecond all +** over the celestial sphere. With refraction included, consistency +** falls off at high zenith distances, but is still better than +** 0.05 arcsec at 85 degrees. +** +** 4) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +*/ + + + +void iauBi00(double *dpsibi, double *depsbi, double *dra) +/* +** - - - - - - - - +** i a u B i 0 0 +** - - - - - - - - +** +** Frame bias components of IAU 2000 precession-nutation models (part +** of MHB2000 with additions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Returned: +** dpsibi,depsbi double longitude and obliquity corrections +** dra double the ICRS RA of the J2000.0 mean equinox +** +** Notes: +** +** 1) The frame bias corrections in longitude and obliquity (radians) +** are required in order to correct for the offset between the GCRS +** pole and the mean J2000.0 pole. They define, with respect to the +** GCRS frame, a J2000.0 mean pole that is consistent with the rest +** of the IAU 2000A precession-nutation model. +** +** 2) In addition to the displacement of the pole, the complete +** description of the frame bias requires also an offset in right +** ascension. This is not part of the IAU 2000A model, and is from +** Chapront et al. (2002). It is returned in radians. +** +** 3) This is a supplemented implementation of one aspect of the IAU +** 2000A nutation model, formally adopted by the IAU General +** Assembly in 2000, namely MHB2000 (Mathews et al. 2002). +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G., Astron. +** Astrophys., 387, 700, 2002. +** +** Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation +** and precession New nutation series for nonrigid Earth and +** insights into the Earth's interior", J.Geophys.Res., 107, B4, +** 2002. The MHB2000 code itself was obtained on 9th September 2002 +** from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +*/ + + + +void iauBp00(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]) +/* +** - - - - - - - - +** i a u B p 0 0 +** - - - - - - - - +** +** Frame bias and precession, IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rb double[3][3] frame bias matrix (Note 2) +** rp double[3][3] precession matrix (Note 3) +** rbp double[3][3] bias-precession matrix (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 3) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 4) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 5) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauBi00 frame bias components, IAU 2000 +** iauPr00 IAU 2000 precession adjustments +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRy rotate around Y-axis +** iauRz rotate around Z-axis +** iauCr copy r-matrix +** iauRxr product of two r-matrices +** +** Reference: +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +*/ + + + +void iauBp06(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]) +/* +** - - - - - - - - +** i a u B p 0 6 +** - - - - - - - - +** +** Frame bias and precession, IAU 2006. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rb double[3][3] frame bias matrix (Note 2) +** rp double[3][3] precession matrix (Note 3) +** rbp double[3][3] bias-precession matrix (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 3) The matrix rp transforms vectors from mean J2000.0 to mean of +** date by applying precession. +** +** 4) The matrix rbp transforms vectors from GCRS to mean of date by +** applying frame bias then precession. It is the product rp x rb. +** +** 5) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** iauPmat06 PB matrix, IAU 2006 +** iauTr transpose r-matrix +** iauRxr product of two r-matrices +** iauCr copy r-matrix +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauBpn2xy(double rbpn[3][3], double *x, double *y) +/* +** - - - - - - - - - - +** i a u B p n 2 x y +** - - - - - - - - - - +** +** Extract from the bias-precession-nutation matrix the X,Y coordinates +** of the Celestial Intermediate Pole. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rbpn double[3][3] celestial-to-true matrix (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** +** Notes: +** +** 1) The matrix rbpn transforms vectors from GCRS to true equator (and +** CIO or equinox) of date, and therefore the Celestial Intermediate +** Pole unit vector is the bottom row of the matrix. +** +** 2) The arguments x,y are components of the Celestial Intermediate +** Pole unit vector in the Geocentric Celestial Reference System. +** +** Reference: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +*/ + + + +void iauC2i00a(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 0 a +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2000A precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauC2i00b function. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauC2ibpn celestial-to-intermediate matrix, given NPB matrix +** +** References: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2i00b(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 0 b +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2000B precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauC2i00a function. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauC2ibpn celestial-to-intermediate matrix, given NPB matrix +** +** References: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2i06a(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 6 a +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2006 precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +*/ + + + +void iauC2ibpn(double date1, double date2, double rbpn[3][3], + double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i b p n +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date given +** the bias-precession-nutation matrix. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** rbpn double[3][3] celestial-to-true matrix (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rbpn transforms vectors from GCRS to true equator (and +** CIO or equinox) of date. Only the CIP (bottom row) is used. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 4) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauC2ixy celestial-to-intermediate matrix, given X,Y +** +** References: +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2ixy(double date1, double date2, double x, double y, + double rc2i[3][3]) +/* +** - - - - - - - - - +** i a u C 2 i x y +** - - - - - - - - - +** +** Form the celestial to intermediate-frame-of-date matrix for a given +** date when the CIP X,Y coordinates are known. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double Celestial Intermediate Pole (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y components +** of the unit vector in the Geocentric Celestial Reference System. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 4) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2ixys(double x, double y, double s, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i x y s +** - - - - - - - - - - +** +** Form the celestial to intermediate-frame-of-date matrix given the CIP +** X,Y and the CIO locator s. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** x,y double Celestial Intermediate Pole (Note 1) +** s double the CIO locator s (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 2) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2s(double p[3], double *theta, double *phi) +/* +** - - - - - - - +** i a u C 2 s +** - - - - - - - +** +** P-vector to spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** +** Notes: +** +** 1) The vector p can have any magnitude; only its direction is used. +** +** 2) If p is null, zero theta and phi are returned. +** +** 3) At either pole, zero theta is returned. +** +*/ + + + +void iauC2t00a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 0 a +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2000A nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** 4) A faster, but slightly less accurate result (about 1 mas), can +** be obtained by using instead the iauC2t00b function. +** +** Called: +** iauC2i00a celestial-to-intermediate matrix, IAU 2000A +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2t00b(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 0 b +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2000B nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** 4) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauC2t00a function. +** +** Called: +** iauC2i00b celestial-to-intermediate matrix, IAU 2000B +** iauEra00 Earth rotation angle, IAU 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2t06a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 6 a +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2006 precession and IAU 2000A +** nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** Called: +** iauC2i06a celestial-to-intermediate matrix, IAU 2006/2000A +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +*/ + + + +void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3], + double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t c i o +** - - - - - - - - - - +** +** Assemble the celestial to terrestrial matrix from CIO-based +** components (the celestial-to-intermediate matrix, the Earth Rotation +** Angle and the polar motion matrix). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc2i double[3][3] celestial-to-intermediate matrix +** era double Earth rotation angle (radians) +** rpom double[3][3] polar-motion matrix +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix +** +** Notes: +** +** 1) This function constructs the rotation matrix that transforms +** vectors in the celestial system into vectors in the terrestrial +** system. It does so starting from precomputed components, namely +** the matrix which rotates from celestial coordinates to the +** intermediate frame, the Earth rotation angle and the polar motion +** matrix. One use of the present function is when generating a +** series of celestial-to-terrestrial matrices where only the Earth +** Rotation Angle changes, avoiding the considerable overhead of +** recomputing the precession-nutation more often than necessary to +** achieve given accuracy objectives. +** +** 2) The relationship between the arguments is as follows: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003). +** +** Called: +** iauCr copy r-matrix +** iauRz rotate around Z-axis +** iauRxr product of two r-matrices +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +*/ + + + +void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3], + double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t e q x +** - - - - - - - - - - +** +** Assemble the celestial to terrestrial matrix from equinox-based +** components (the celestial-to-true matrix, the Greenwich Apparent +** Sidereal Time and the polar motion matrix). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rbpn double[3][3] celestial-to-true matrix +** gst double Greenwich (apparent) Sidereal Time (radians) +** rpom double[3][3] polar-motion matrix +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 2) +** +** Notes: +** +** 1) This function constructs the rotation matrix that transforms +** vectors in the celestial system into vectors in the terrestrial +** system. It does so starting from precomputed components, namely +** the matrix which rotates from celestial coordinates to the +** true equator and equinox of date, the Greenwich Apparent Sidereal +** Time and the polar motion matrix. One use of the present function +** is when generating a series of celestial-to-terrestrial matrices +** where only the Sidereal Time changes, avoiding the considerable +** overhead of recomputing the precession-nutation more often than +** necessary to achieve given accuracy objectives. +** +** 2) The relationship between the arguments is as follows: +** +** [TRS] = rpom * R_3(gst) * rbpn * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003). +** +** Called: +** iauCr copy r-matrix +** iauRz rotate around Z-axis +** iauRxr product of two r-matrices +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2tpe(double tta, double ttb, double uta, double utb, + double dpsi, double deps, double xp, double yp, + double rc2t[3][3]) +/* +** - - - - - - - - - +** i a u C 2 t p e +** - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1, +** the nutation and the polar motion. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** xp,yp double coordinates of the pole (radians, Note 3) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 4) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 4) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(GST) * RBPN * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RBPN is the +** bias-precession-nutation matrix, GST is the Greenwich (apparent) +** Sidereal Time and RPOM is the polar motion matrix. +** +** 5) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauPn00 bias/precession/nutation results, IAU 2000 +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauEe00 equation of the equinoxes, IAU 2000 +** iauPom00 polar motion matrix +** iauC2teqx form equinox-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauC2txy(double tta, double ttb, double uta, double utb, + double x, double y, double xp, double yp, + double rc2t[3][3]) +/* +** - - - - - - - - - +** i a u C 2 t x y +** - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1, +** the CIP coordinates and the polar motion. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** x,y double Celestial Intermediate Pole (Note 2) +** xp,yp double coordinates of the pole (radians, Note 3) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 4) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any o +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 4) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 5) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauC2ixy celestial-to-intermediate matrix, given X,Y +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +int iauCal2jd(int iy, int im, int id, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u C a l 2 j d +** - - - - - - - - - - +** +** Gregorian Calendar to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** iy,im,id int year, month, day in Gregorian calendar (Note 1) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date for 0 hrs +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = bad year (Note 3: JD not computed) +** -2 = bad month (JD not computed) +** -3 = bad day (JD computed) +** +** Notes: +** +** 1) The algorithm used is valid from -4800 March 1, but this +** implementation rejects dates before -4799 January 1. +** +** 2) The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** 3) In early eras the conversion is from the "Proleptic Gregorian +** Calendar"; no account is taken of the date(s) of adoption of +** the Gregorian Calendar, nor is the AD/BC numbering convention +** observed. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +*/ + + + +void iauCp(double p[3], double c[3]) +/* +** - - - - - - +** i a u C p +** - - - - - - +** +** Copy a p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector to be copied +** +** Returned: +** c double[3] copy +** +*/ + + + +void iauCpv(double pv[2][3], double c[2][3]) +/* +** - - - - - - - +** i a u C p v +** - - - - - - - +** +** Copy a position/velocity vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] position/velocity vector to be copied +** +** Returned: +** c double[2][3] copy +** +** Called: +** iauCp copy p-vector +** +*/ + + + +void iauCr(double r[3][3], double c[3][3]) +/* +** - - - - - - +** i a u C r +** - - - - - - +** +** Copy an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix to be copied +** +** Returned: +** c double[3][3] copy +** +** Called: +** iauCp copy p-vector +** +*/ + + + +int iauD2dtf(const char *scale, int ndp, double d1, double d2, + int *iy, int *im, int *id, int ihmsf[4]) +/* +** - - - - - - - - - +** i a u D 2 d t f +** - - - - - - - - - +** +** Format for output a 2-part Julian Date (or in the case of UTC a +** quasi-JD form that includes special provision for leap seconds). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** scale char[] time scale ID (Note 1) +** ndp int resolution (Note 2) +** d1,d2 double time as a 2-part Julian Date (Notes 3,4) +** +** Returned: +** iy,im,id int year, month, day in Gregorian calendar (Note 5) +** ihmsf int[4] hours, minutes, seconds, fraction (Note 1) +** +** Returned (function value): +** int status: +1 = dubious year (Note 5) +** 0 = OK +** -1 = unacceptable date (Note 6) +** +** Notes: +** +** 1) scale identifies the time scale. Only the value "UTC" (in upper +** case) is significant, and enables handling of leap seconds (see +** Note 4). +** +** 2) ndp is the number of decimal places in the seconds field, and can +** have negative as well as positive values, such as: +** +** ndp resolution +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** +** The limits are platform dependent, but a safe range is -5 to +9. +** +** 3) d1+d2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where d1 is the Julian Day Number +** and d2 is the fraction of a day. In the case of UTC, where the +** use of JD is problematical, special conventions apply: see the +** next note. +** +** 4) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The SOFA internal convention is that +** the quasi-JD day represents UTC days whether the length is 86399, +** 86400 or 86401 SI seconds. In the 1960-1972 era there were +** smaller jumps (in either direction) each time the linear UTC(TAI) +** expression was changed, and these "mini-leaps" are also included +** in the SOFA convention. +** +** 5) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 6) For calendar conventions and limitations, see iauCal2jd. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauD2tf decompose days to hms +** iauDat delta(AT) = TAI-UTC +** +*/ + + + +void iauD2tf(int ndp, double days, char *sign, int ihmsf[4]) +/* +** - - - - - - - - +** i a u D 2 t f +** - - - - - - - - +** +** Decompose days to hours, minutes, seconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** days double interval in days +** +** Returned: +** sign char* '+' or '-' +** ihmsf int[4] hours, minutes, seconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of days, the format of double on the target platform, and +** the risk of overflowing ihmsf[3]. On a typical platform, for +** days up to 1.0, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of days may exceed 1.0. In cases where it +** does not, it is up to the caller to test for and handle the +** case where days is very nearly 1.0 and rounds up to 24 hours, +** by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero. +** +*/ + + + +int iauDat(int iy, int im, int id, double fd, double *deltat) +/* +** - - - - - - - +** i a u D a t +** - - - - - - - +** +** For a given UTC date, calculate Delta(AT) = TAI-UTC. +** +** :------------------------------------------: +** : : +** : IMPORTANT : +** : : +** : A new version of this function must be : +** : produced whenever a new leap second is : +** : announced. There are four items to : +** : change on each such occasion: : +** : : +** : 1) A new line must be added to the set : +** : of statements that initialize the : +** : array "changes". : +** : : +** : 2) The constant IYV must be set to the : +** : current year. : +** : : +** : 3) The "Latest leap second" comment : +** : below must be set to the new leap : +** : second date. : +** : : +** : 4) The "This revision" comment, later, : +** : must be set to the current date. : +** : : +** : Change (2) must also be carried out : +** : whenever the function is re-issued, : +** : even if no leap seconds have been : +** : added. : +** : : +** : Latest leap second: 2016 December 31 : +** : : +** :__________________________________________: +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: user-replaceable support function. +** +** Given: +** iy int UTC: year (Notes 1 and 2) +** im int month (Note 2) +** id int day (Notes 2 and 3) +** fd double fraction of day (Note 4) +** +** Returned: +** deltat double TAI minus UTC, seconds +** +** Returned (function value): +** int status (Note 5): +** 1 = dubious year (Note 1) +** 0 = OK +** -1 = bad year +** -2 = bad month +** -3 = bad day (Note 3) +** -4 = bad fraction (Note 4) +** -5 = internal error (Note 5) +** +** Notes: +** +** 1) UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper +** to call the function with an earlier date. If this is attempted, +** zero is returned together with a warning status. +** +** Because leap seconds cannot, in principle, be predicted in +** advance, a reliable check for dates beyond the valid range is +** impossible. To guard against gross errors, a year five or more +** after the release year of the present function (see the constant +** IYV) is considered dubious. In this case a warning status is +** returned but the result is computed in the normal way. +** +** For both too-early and too-late years, the warning status is +1. +** This is distinct from the error status -1, which signifies a year +** so early that JD could not be computed. +** +** 2) If the specified date is for a day which ends with a leap second, +** the TAI-UTC value returned is for the period leading up to the +** leap second. If the date is for a day which begins as a leap +** second ends, the TAI-UTC returned is for the period following the +** leap second. +** +** 3) The day number must be in the normal calendar range, for example +** 1 through 30 for April. The "almanac" convention of allowing +** such dates as January 0 and December 32 is not supported in this +** function, in order to avoid confusion near leap seconds. +** +** 4) The fraction of day is used only for dates before the +** introduction of leap seconds, the first of which occurred at the +** end of 1971. It is tested for validity (0 to 1 is the valid +** range) even if not used; if invalid, zero is used and status -4 +** is returned. For many applications, setting fd to zero is +** acceptable; the resulting error is always less than 3 ms (and +** occurs only pre-1972). +** +** 5) The status value returned in the case where there are multiple +** errors refers to the first error detected. For example, if the +** month and day are 13 and 32 respectively, status -2 (bad month) +** will be returned. The "internal error" status refers to a +** case that is impossible but causes some compilers to issue a +** warning. +** +** 6) In cases where a valid result is not available, zero is returned. +** +** References: +** +** 1) For dates from 1961 January 1 onwards, the expressions from the +** file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used. +** +** 2) The 5ms timestep at 1961 January 1 is taken from 2.58.1 (p87) of +** the 1992 Explanatory Supplement. +** +** Called: +** iauCal2jd Gregorian calendar to JD +** +*/ + + + +double iauDtdb(double date1, double date2, + double ut, double elong, double u, double v) +/* +** - - - - - - - - +** i a u D t d b +** - - - - - - - - +** +** An approximation to TDB-TT, the difference between barycentric +** dynamical time and terrestrial time, for an observer on the Earth. +** +** The different time scales - proper, coordinate and realized - are +** related to each other: +** +** TAI <- physically realized +** : +** offset <- observed (nominally +32.184s) +** : +** TT <- terrestrial time +** : +** rate adjustment (L_G) <- definition of TT +** : +** TCG <- time scale for GCRS +** : +** "periodic" terms <- iauDtdb is an implementation +** : +** rate adjustment (L_C) <- function of solar-system ephemeris +** : +** TCB <- time scale for BCRS +** : +** rate adjustment (-L_B) <- definition of TDB +** : +** TDB <- TCB scaled to track TT +** : +** "periodic" terms <- -iauDtdb is an approximation +** : +** TT <- terrestrial time +** +** Adopted values for the various constants can be found in the IERS +** Conventions (McCarthy & Petit 2003). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double date, TDB (Notes 1-3) +** ut double universal time (UT1, fraction of one day) +** elong double longitude (east positive, radians) +** u double distance from Earth spin axis (km) +** v double distance north of equatorial plane (km) +** +** Returned (function value): +** double TDB-TT (seconds) +** +** Notes: +** +** 1) The date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** Although the date is, formally, barycentric dynamical time (TDB), +** the terrestrial dynamical time (TT) can be used with no practical +** effect on the accuracy of the prediction. +** +** 2) TT can be regarded as a coordinate time that is realized as an +** offset of 32.184s from International Atomic Time, TAI. TT is a +** specific linear transformation of geocentric coordinate time TCG, +** which is the time scale for the Geocentric Celestial Reference +** System, GCRS. +** +** 3) TDB is a coordinate time, and is a specific linear transformation +** of barycentric coordinate time TCB, which is the time scale for +** the Barycentric Celestial Reference System, BCRS. +** +** 4) The difference TCG-TCB depends on the masses and positions of the +** bodies of the solar system and the velocity of the Earth. It is +** dominated by a rate difference, the residual being of a periodic +** character. The latter, which is modeled by the present function, +** comprises a main (annual) sinusoidal term of amplitude +** approximately 0.00166 seconds, plus planetary terms up to about +** 20 microseconds, and lunar and diurnal terms up to 2 microseconds. +** These effects come from the changing transverse Doppler effect +** and gravitational red-shift as the observer (on the Earth's +** surface) experiences variations in speed (with respect to the +** BCRS) and gravitational potential. +** +** 5) TDB can be regarded as the same as TCB but with a rate adjustment +** to keep it close to TT, which is convenient for many applications. +** The history of successive attempts to define TDB is set out in +** Resolution 3 adopted by the IAU General Assembly in 2006, which +** defines a fixed TDB(TCB) transformation that is consistent with +** contemporary solar-system ephemerides. Future ephemerides will +** imply slightly changed transformations between TCG and TCB, which +** could introduce a linear drift between TDB and TT; however, any +** such drift is unlikely to exceed 1 nanosecond per century. +** +** 6) The geocentric TDB-TT model used in the present function is that of +** Fairhead & Bretagnon (1990), in its full form. It was originally +** supplied by Fairhead (private communications with P.T.Wallace, +** 1990) as a Fortran subroutine. The present C function contains an +** adaptation of the Fairhead code. The numerical results are +** essentially unaffected by the changes, the differences with +** respect to the Fairhead & Bretagnon original being at the 1e-20 s +** level. +** +** The topocentric part of the model is from Moyer (1981) and +** Murray (1983), with fundamental arguments adapted from +** Simon et al. 1994. It is an approximation to the expression +** ( v / c ) . ( r / c ), where v is the barycentric velocity of +** the Earth, r is the geocentric position of the observer and +** c is the speed of light. +** +** By supplying zeroes for u and v, the topocentric part of the +** model can be nullified, and the function will return the Fairhead +** & Bretagnon result alone. +** +** 7) During the interval 1950-2050, the absolute accuracy is better +** than +/- 3 nanoseconds relative to time ephemerides obtained by +** direct numerical integrations based on the JPL DE405 solar system +** ephemeris. +** +** 8) It must be stressed that the present function is merely a model, +** and that numerical integration of solar-system ephemerides is the +** definitive method for predicting the relationship between TCG and +** TCB and hence between TT and TDB. +** +** References: +** +** Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247 +** (1990). +** +** IAU 2006 Resolution 3. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Moyer, T.D., Cel.Mech., 23, 33 (1981). +** +** Murray, C.A., Vectorial Astrometry, Adam Hilger (1983). +** +** Seidelmann, P.K. et al., Explanatory Supplement to the +** Astronomical Almanac, Chapter 2, University Science Books (1992). +** +** Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G. & Laskar, J., Astron.Astrophys., 282, 663-683 (1994). +** +*/ + + + +int iauDtf2d(const char *scale, int iy, int im, int id, + int ihr, int imn, double sec, double *d1, double *d2) +/* +** - - - - - - - - - +** i a u D t f 2 d +** - - - - - - - - - +** +** Encode date and time fields into 2-part Julian Date (or in the case +** of UTC a quasi-JD form that includes special provision for leap +** seconds). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** scale char[] time scale ID (Note 1) +** iy,im,id int year, month, day in Gregorian calendar (Note 2) +** ihr,imn int hour, minute +** sec double seconds +** +** Returned: +** d1,d2 double 2-part Julian Date (Notes 3,4) +** +** Returned (function value): +** int status: +3 = both of next two +** +2 = time is after end of day (Note 5) +** +1 = dubious year (Note 6) +** 0 = OK +** -1 = bad year +** -2 = bad month +** -3 = bad day +** -4 = bad hour +** -5 = bad minute +** -6 = bad second (<0) +** +** Notes: +** +** 1) scale identifies the time scale. Only the value "UTC" (in upper +** case) is significant, and enables handling of leap seconds (see +** Note 4). +** +** 2) For calendar conventions and limitations, see iauCal2jd. +** +** 3) The sum of the results, d1+d2, is Julian Date, where normally d1 +** is the Julian Day Number and d2 is the fraction of a day. In the +** case of UTC, where the use of JD is problematical, special +** conventions apply: see the next note. +** +** 4) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The SOFA internal convention is that +** the quasi-JD day represents UTC days whether the length is 86399, +** 86400 or 86401 SI seconds. In the 1960-1972 era there were +** smaller jumps (in either direction) each time the linear UTC(TAI) +** expression was changed, and these "mini-leaps" are also included +** in the SOFA convention. +** +** 5) The warning status "time is after end of day" usually means that +** the sec argument is greater than 60.0. However, in a day ending +** in a leap second the limit changes to 61.0 (or 59.0 in the case +** of a negative leap second). +** +** 6) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 7) Only in the case of continuous and regular time scales (TAI, TT, +** TCG, TCB and TDB) is the result d1+d2 a Julian Date, strictly +** speaking. In the other cases (UT1 and UTC) the result must be +** used with circumspection; in particular the difference between +** two such results cannot be interpreted as a precise time +** interval. +** +** Called: +** iauCal2jd Gregorian calendar to JD +** iauDat delta(AT) = TAI-UTC +** iauJd2cal JD to Gregorian calendar +** +*/ + + + +void iauEceq06(double date1, double date2, double dl, double db, + double *dr, double *dd) +/* +** - - - - - - - - - - +** i a u E c e q 0 6 +** - - - - - - - - - - +** +** Transformation from ecliptic coordinates (mean equinox and ecliptic +** of date) to ICRS RA,Dec, using the IAU 2006 precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** dl,db double ecliptic longitude and latitude (radians) +** +** Returned: +** dr,dd double ICRS right ascension and declination (radians) +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 3) The transformation is approximately that from ecliptic longitude +** and latitude (mean equinox and ecliptic of date) to mean J2000.0 +** right ascension and declination, with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauEcm06 J2000.0 to ecliptic rotation matrix, IAU 2006 +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +*/ + + + +void iauEcm06(double date1, double date2, double rm[3][3]) +/* +** - - - - - - - - - +** i a u E c m 0 6 +** - - - - - - - - - +** +** ICRS equatorial to ecliptic rotation matrix, IAU 2006. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** +** Returned: +** rm double[3][3] ICRS to ecliptic rotation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 1) The matrix is in the sense +** +** E_ep = rm x P_ICRS, +** +** where P_ICRS is a vector with respect to ICRS right ascension +** and declination axes and E_ep is the same vector with respect to +** the (inertial) ecliptic and equinox of date. +** +** 2) P_ICRS is a free vector, merely a direction, typically of unit +** magnitude, and not bound to any particular spatial origin, such +** as the Earth, Sun or SSB. No assumptions are made about whether +** it represents starlight and embodies astrometric effects such as +** parallax or aberration. The transformation is approximately that +** between mean J2000.0 right ascension and declination and ecliptic +** longitude and latitude, with only frame bias (always less than +** 25 mas) to disturb this classical picture. +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** iauPmat06 PB matrix, IAU 2006 +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRxr product of two r-matrices +** +*/ + + + +double iauEe00(double date1, double date2, double epsa, double dpsi) +/* +** - - - - - - - - +** i a u E e 0 0 +** - - - - - - - - +** +** The equation of the equinoxes, compatible with IAU 2000 resolutions, +** given the nutation in longitude and the mean obliquity. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** epsa double mean obliquity (Note 2) +** dpsi double nutation in longitude (Note 3) +** +** Returned (function value): +** double equation of the equinoxes (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The obliquity, in radians, is mean of date. +** +** 3) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 4) The result is compatible with the IAU 2000 resolutions. For +** further details, see IERS Conventions 2003 and Capitaine et al. +** (2002). +** +** Called: +** iauEect00 equation of the equinoxes complementary terms +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauEe00a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 0 a +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 3) The result is compatible with the IAU 2000 resolutions. For +** further details, see IERS Conventions 2003 and Capitaine et al. +** (2002). +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauNut00a nutation, IAU 2000A +** iauEe00 equation of the equinoxes, IAU 2000 +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003). +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004). +** +*/ + + + +double iauEe00b(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 0 b +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions but +** using the truncated nutation model IAU 2000B. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 3) The result is compatible with the IAU 2000 resolutions except +** that accuracy has been compromised for the sake of speed. For +** further details, see McCarthy & Luzum (2001), IERS Conventions +** 2003 and Capitaine et al. (2003). +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauNut00b nutation, IAU 2000B +** iauEe00 equation of the equinoxes, IAU 2000 +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Celestial Mechanics & +** Dynamical Astronomy, 85, 37-49 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauEe06a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 6 a +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions and +** IAU 2006/2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** Called: +** iauAnpm normalize angle into range +/- pi +** iauGst06a Greenwich apparent sidereal time, IAU 2006/2000A +** iauGmst06 Greenwich mean sidereal time, IAU 2006 +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +*/ + + + +double iauEect00(double date1, double date2) +/* +** - - - - - - - - - - +** i a u E e c t 0 0 +** - - - - - - - - - - +** +** Equation of the equinoxes complementary terms, consistent with +** IAU 2000 resolutions. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double complementary terms (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The "complementary terms" are part of the equation of the +** equinoxes (EE), classically the difference between apparent and +** mean Sidereal Time: +** +** GAST = GMST + EE +** +** with: +** +** EE = dpsi * cos(eps) +** +** where dpsi is the nutation in longitude and eps is the obliquity +** of date. However, if the rotation of the Earth were constant in +** an inertial frame the classical formulation would lead to +** apparent irregularities in the UT1 timescale traceable to side- +** effects of precession-nutation. In order to eliminate these +** effects from UT1, "complementary terms" were introduced in 1994 +** (IAU, 1994) and took effect from 1997 (Capitaine and Gontier, +** 1993): +** +** GAST = GMST + CT + EE +** +** By convention, the complementary terms are included as part of +** the equation of the equinoxes rather than as part of the mean +** Sidereal Time. This slightly compromises the "geometrical" +** interpretation of mean sidereal time but is otherwise +** inconsequential. +** +** The present function computes CT in the above expression, +** compatible with IAU 2000 resolutions (Capitaine et al., 2002, and +** IERS Conventions 2003). +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N. & Gontier, A.-M., Astron.Astrophys., 275, +** 645-650 (1993) +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astron.Astrophys., 406, +** 1135-1149 (2003) +** +** IAU Resolution C7, Recommendation 3 (1994) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +int iauEform ( int n, double *a, double *f ) +/* +** - - - - - - - - - +** i a u E f o r m +** - - - - - - - - - +** +** Earth reference ellipsoids. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** n int ellipsoid identifier (Note 1) +** +** Returned: +** a double equatorial radius (meters, Note 2) +** f double flattening (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The ellipsoid parameters are returned in the form of equatorial +** radius in meters (a) and flattening (f). The latter is a number +** around 0.00335, i.e. around 1/298. +** +** 3) For the case where an unsupported n value is supplied, zero a and +** f are returned, as well as error status. +** +** References: +** +** Department of Defense World Geodetic System 1984, National +** Imagery and Mapping Agency Technical Report 8350.2, Third +** Edition, p3-2. +** +** Moritz, H., Bull. Geodesique 66-2, 187 (1992). +** +** The Department of Defense World Geodetic System 1972, World +** Geodetic System Committee, May 1974. +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** p220. +** +*/ + + + +double iauEo06a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E o 0 6 a +** - - - - - - - - - +** +** Equation of the origins, IAU 2006 precession and IAU 2000A nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the origins in radians +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The equation of the origins is the distance between the true +** equinox and the celestial intermediate origin and, equivalently, +** the difference between Earth rotation angle and Greenwich +** apparent sidereal time (ERA-GST). It comprises the precession +** (since J2000.0) in right ascension plus the equation of the +** equinoxes (including the small correction terms). +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauEors equation of the origins, given NPB matrix and s +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +double iauEors(double rnpb[3][3], double s) +/* +** - - - - - - - - +** i a u E o r s +** - - - - - - - - +** +** Equation of the origins, given the classical NPB matrix and the +** quantity s. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rnpb double[3][3] classical nutation x precession x bias matrix +** s double the quantity s (the CIO locator) +** +** Returned (function value): +** double the equation of the origins in radians. +** +** Notes: +** +** 1) The equation of the origins is the distance between the true +** equinox and the celestial intermediate origin and, equivalently, +** the difference between Earth rotation angle and Greenwich +** apparent sidereal time (ERA-GST). It comprises the precession +** (since J2000.0) in right ascension plus the equation of the +** equinoxes (including the small correction terms). +** +** 2) The algorithm is from Wallace & Capitaine (2006). +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +double iauEpb(double dj1, double dj2) +/* +** - - - - - - - +** i a u E p b +** - - - - - - - +** +** Julian Date to Besselian Epoch. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (see note) +** +** Returned (function value): +** double Besselian Epoch. +** +** Note: +** +** The Julian Date is supplied in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding dj1 and +** dj2. The maximum resolution is achieved if dj1 is 2451545.0 +** (J2000.0). +** +** Reference: +** +** Lieske, J.H., 1979. Astron.Astrophys., 73, 282. +** +*/ + + + +void iauEpb2jd(double epb, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u E p b 2 j d +** - - - - - - - - - - +** +** Besselian Epoch to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epb double Besselian Epoch (e.g. 1957.3) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date +** +** Note: +** +** The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +*/ + + + +double iauEpj(double dj1, double dj2) +/* +** - - - - - - - +** i a u E p j +** - - - - - - - +** +** Julian Date to Julian Epoch. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (see note) +** +** Returned (function value): +** double Julian Epoch +** +** Note: +** +** The Julian Date is supplied in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding dj1 and +** dj2. The maximum resolution is achieved if dj1 is 2451545.0 +** (J2000.0). +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +*/ + + + +void iauEpj2jd(double epj, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u E p j 2 j d +** - - - - - - - - - - +** +** Julian Epoch to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian Epoch (e.g. 1996.8) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date +** +** Note: +** +** The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +*/ + + + +int iauEpv00(double date1, double date2, + double pvh[2][3], double pvb[2][3]) +/* +** - - - - - - - - - +** i a u E p v 0 0 +** - - - - - - - - - +** +** Earth position and velocity, heliocentric and barycentric, with +** respect to the Barycentric Celestial Reference System. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** pvh double[2][3] heliocentric Earth position/velocity +** pvb double[2][3] barycentric Earth position/velocity +** +** Returned (function value): +** int status: 0 = OK +** +1 = warning: date outside +** the range 1900-2100 AD +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. However, +** the accuracy of the result is more likely to be limited by the +** algorithm itself than the way the date has been expressed. +** +** n.b. TT can be used instead of TDB in most applications. +** +** 2) On return, the arrays pvh and pvb contain the following: +** +** pvh[0][0] x } +** pvh[0][1] y } heliocentric position, au +** pvh[0][2] z } +** +** pvh[1][0] xdot } +** pvh[1][1] ydot } heliocentric velocity, au/d +** pvh[1][2] zdot } +** +** pvb[0][0] x } +** pvb[0][1] y } barycentric position, au +** pvb[0][2] z } +** +** pvb[1][0] xdot } +** pvb[1][1] ydot } barycentric velocity, au/d +** pvb[1][2] zdot } +** +** The vectors are with respect to the Barycentric Celestial +** Reference System. The time unit is one day in TDB. +** +** 3) The function is a SIMPLIFIED SOLUTION from the planetary theory +** VSOP2000 (X. Moisson, P. Bretagnon, 2001, Celes. Mechanics & +** Dyn. Astron., 80, 3/4, 205-213) and is an adaptation of original +** Fortran code supplied by P. Bretagnon (private comm., 2000). +** +** 4) Comparisons over the time span 1900-2100 with this simplified +** solution and the JPL DE405 ephemeris give the following results: +** +** RMS max +** Heliocentric: +** position error 3.7 11.2 km +** velocity error 1.4 5.0 mm/s +** +** Barycentric: +** position error 4.6 13.4 km +** velocity error 1.4 4.9 mm/s +** +** Comparisons with the JPL DE406 ephemeris show that by 1800 and +** 2200 the position errors are approximately double their 1900-2100 +** size. By 1500 and 2500 the deterioration is a factor of 10 and +** by 1000 and 3000 a factor of 60. The velocity accuracy falls off +** at about half that rate. +** +** 5) It is permissible to use the same array for pvh and pvb, which +** will receive the barycentric values. +** +*/ + + + +void iauEqec06(double date1, double date2, double dr, double dd, + double *dl, double *db) +/* +** - - - - - - - - - - +** i a u E q e c 0 6 +** - - - - - - - - - - +** +** Transformation from ICRS equatorial coordinates to ecliptic +** coordinates (mean equinox and ecliptic of date) using IAU 2006 +** precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** dr,dd double ICRS right ascension and declination (radians) +** +** Returned: +** dl,db double ecliptic longitude and latitude (radians) +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 3) The transformation is approximately that from mean J2000.0 right +** ascension and declination to ecliptic longitude and latitude +** (mean equinox and ecliptic of date), with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauEcm06 J2000.0 to ecliptic rotation matrix, IAU 2006 +** iauRxp product of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +*/ + + + +double iauEqeq94(double date1, double date2) +/* +** - - - - - - - - - - +** i a u E q e q 9 4 +** - - - - - - - - - - +** +** Equation of the equinoxes, IAU 1994 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** Called: +** iauAnpm normalize angle into range +/- pi +** iauNut80 nutation, IAU 1980 +** iauObl80 mean obliquity, IAU 1980 +** +** References: +** +** IAU Resolution C7, Recommendation 3 (1994). +** +** Capitaine, N. & Gontier, A.-M., 1993, Astron.Astrophys., 275, +** 645-650. +** +*/ + + + +double iauEra00(double dj1, double dj2) +/* +** - - - - - - - - - +** i a u E r a 0 0 +** - - - - - - - - - +** +** Earth rotation angle (IAU 2000 model). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** dj1,dj2 double UT1 as a 2-part Julian Date (see note) +** +** Returned (function value): +** double Earth rotation angle (radians), range 0-2pi +** +** Notes: +** +** 1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any +** convenient way between the arguments dj1 and dj2. For example, +** JD(UT1)=2450123.7 could be expressed in any of these ways, +** among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum precision is +** delivered when the dj1 argument is for 0hrs UT1 on the day in +** question and the dj2 argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The algorithm is adapted from Expression 22 of Capitaine et al. +** 2000. The time argument has been expressed in days directly, +** and, to retain precision, integer contributions have been +** eliminated. The same formulation is given in IERS Conventions +** (2003), Chap. 5, Eq. 14. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine N., Guinot B. and McCarthy D.D, 2000, Astron. +** Astrophys., 355, 398-405. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauFad03(double t) +/* +** - - - - - - - - - +** i a u F a d 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean elongation of the Moon from the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double D, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFae03(double t) +/* +** - - - - - - - - - +** i a u F a e 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Earth. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Earth, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +double iauFaf03(double t) +/* +** - - - - - - - - - +** i a u F a f 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of the Moon minus mean longitude of the ascending +** node. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double F, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFaju03(double t) +/* +** - - - - - - - - - - +** i a u F a j u 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Jupiter. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Jupiter, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +double iauFal03(double t) +/* +** - - - - - - - - - +** i a u F a l 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean anomaly of the Moon. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double l, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFalp03(double t) +/* +** - - - - - - - - - - +** i a u F a l p 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean anomaly of the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double l', radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFama03(double t) +/* +** - - - - - - - - - - +** i a u F a m a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Mars. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Mars, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +double iauFame03(double t) +/* +** - - - - - - - - - - +** i a u F a m e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Mercury. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Mercury, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +double iauFane03(double t) +/* +** - - - - - - - - - - +** i a u F a n e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Neptune. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Neptune, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is adapted from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFaom03(double t) +/* +** - - - - - - - - - - +** i a u F a o m 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of the Moon's ascending node. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double Omega, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFapa03(double t) +/* +** - - - - - - - - - - +** i a u F a p a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** general accumulated precession in longitude. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double general precession in longitude, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003). It +** is taken from Kinoshita & Souchay (1990) and comes originally +** from Lieske et al. (1977). +** +** References: +** +** Kinoshita, H. and Souchay J. 1990, Celest.Mech. and Dyn.Astron. +** 48, 187 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauFasa03(double t) +/* +** - - - - - - - - - - +** i a u F a s a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Saturn. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Saturn, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +double iauFaur03(double t) +/* +** - - - - - - - - - - +** i a u F a u r 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Uranus. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Uranus, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is adapted from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +*/ + + + +double iauFave03(double t) +/* +** - - - - - - - - - - +** i a u F a v e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Venus. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Venus, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +*/ + + + +void iauFk425(double r1950, double d1950, + double dr1950, double dd1950, + double p1950, double v1950, + double *r2000, double *d2000, + double *dr2000, double *dd2000, + double *p2000, double *v2000) +/* +** - - - - - - - - - +** i a u F k 4 2 5 +** - - - - - - - - - +** +** Convert B1950.0 FK4 star catalog data to J2000.0 FK5. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** This function converts a star's catalog data from the old FK4 +** (Bessel-Newcomb) system to the later IAU 1976 FK5 (Fricke) system. +** +** Given: (all B1950.0, FK4) +** r1950,d1950 double B1950.0 RA,Dec (rad) +** dr1950,dd1950 double B1950.0 proper motions (rad/trop.yr) +** p1950 double parallax (arcsec) +** v1950 double radial velocity (km/s, +ve = moving away) +** +** Returned: (all J2000.0, FK5) +** r2000,d2000 double J2000.0 RA,Dec (rad) +** dr2000,dd2000 double J2000.0 proper motions (rad/Jul.yr) +** p2000 double parallax (arcsec) +** v2000 double radial velocity (km/s, +ve = moving away) +** +** Notes: +** +** 1) The proper motions in RA are dRA/dt rather than cos(Dec)*dRA/dt, +** and are per year rather than per century. +** +** 2) The conversion is somewhat complicated, for several reasons: +** +** . Change of standard epoch from B1950.0 to J2000.0. +** +** . An intermediate transition date of 1984 January 1.0 TT. +** +** . A change of precession model. +** +** . Change of time unit for proper motion (tropical to Julian). +** +** . FK4 positions include the E-terms of aberration, to simplify +** the hand computation of annual aberration. FK5 positions +** assume a rigorous aberration computation based on the Earth's +** barycentric velocity. +** +** . The E-terms also affect proper motions, and in particular cause +** objects at large distances to exhibit fictitious proper +** motions. +** +** The algorithm is based on Smith et al. (1989) and Yallop et al. +** (1989), which presented a matrix method due to Standish (1982) as +** developed by Aoki et al. (1983), using Kinoshita's development of +** Andoyer's post-Newcomb precession. The numerical constants from +** Seidelmann (1992) are used canonically. +** +** 3) Conversion from B1950.0 FK4 to J2000.0 FK5 only is provided for. +** Conversions for different epochs and equinoxes would require +** additional treatment for precession, proper motion and E-terms. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch J2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauPv2s pv-vector to spherical coordinates +** iauPdp scalar product of two p-vectors +** iauPvmpv pv-vector minus pv_vector +** iauPvppv pv-vector plus pv_vector +** iauS2pv spherical coordinates to pv-vector +** iauSxp multiply p-vector by scalar +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Smith, C.A. et al., 1989, "The transformation of astrometric +** catalog systems to the equinox J2000.0". Astron.J. 97, 265. +** +** Standish, E.M., 1982, "Conversion of positions and proper motions +** from B1950.0 to the IAU system at J2000.0". Astron.Astrophys., +** 115, 1, 20-22. +** +** Yallop, B.D. et al., 1989, "Transformation of mean star places +** from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space". +** Astron.J. 97, 274. +** +*/ + + + +void iauFk45z(double r1950, double d1950, double bepoch, + double *r2000, double *d2000) +/* +** - - - - - - - - - +** i a u F k 4 5 z +** - - - - - - - - - +** +** Convert a B1950.0 FK4 star position to J2000.0 FK5, assuming zero +** proper motion in the FK5 system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** This function converts a star's catalog data from the old FK4 +** (Bessel-Newcomb) system to the later IAU 1976 FK5 (Fricke) system, +** in such a way that the FK5 proper motion is zero. Because such a +** star has, in general, a non-zero proper motion in the FK4 system, +** the routine requires the epoch at which the position in the FK4 +** system was determined. +** +** Given: +** r1950,d1950 double B1950.0 FK4 RA,Dec at epoch (rad) +** bepoch double Besselian epoch (e.g. 1979.3D0) +** +** Returned: +** r2000,d2000 double J2000.0 FK5 RA,Dec (rad) +** +** Notes: +** +** 1) The epoch bepoch is strictly speaking Besselian, but if a +** Julian epoch is supplied the result will be affected only to a +** negligible extent. +** +** 2) The method is from Appendix 2 of Aoki et al. (1983), but using +** the constants of Seidelmann (1992). See the routine iauFk425 +** for a general introduction to the FK4 to FK5 conversion. +** +** 3) Conversion from equinox B1950.0 FK4 to equinox J2000.0 FK5 only +** is provided for. Conversions for different starting and/or +** ending epochs would require additional treatment for precession, +** proper motion and E-terms. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch 2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauC2s p-vector to spherical +** iauEpb2jd Besselian epoch to Julian date +** iauEpj Julian date to Julian epoch +** iauPdp scalar product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPpsp p-vector plus scaled p-vector +** iauPvu update a pv-vector +** iauS2c spherical to p-vector +** +*/ + + + +void iauFk524(double r2000, double d2000, + double dr2000, double dd2000, + double p2000, double v2000, + double *r1950, double *d1950, + double *dr1950, double *dd1950, + double *p1950, double *v1950) +/* +** - - - - - - - - - +** i a u F k 5 2 4 +** - - - - - - - - - +** +** Convert J2000.0 FK5 star catalog data to B1950.0 FK4. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: (all J2000.0, FK5) +** r2000,d2000 double J2000.0 RA,Dec (rad) +** dr2000,dd2000 double J2000.0 proper motions (rad/Jul.yr) +** p2000 double parallax (arcsec) +** v2000 double radial velocity (km/s, +ve = moving away) +** +** Returned: (all B1950.0, FK4) +** r1950,d1950 double B1950.0 RA,Dec (rad) +** dr1950,dd1950 double B1950.0 proper motions (rad/trop.yr) +** p1950 double parallax (arcsec) +** v1950 double radial velocity (km/s, +ve = moving away) +** +** Notes: +** +** 1) The proper motions in RA are dRA/dt rather than cos(Dec)*dRA/dt, +** and are per year rather than per century. +** +** 2) The conversion is somewhat complicated, for several reasons: +** +** . Change of standard epoch from J2000.0 to B1950.0. +** +** . An intermediate transition date of 1984 January 1.0 TT. +** +** . A change of precession model. +** +** . Change of time unit for proper motion (Julian to tropical). +** +** . FK4 positions include the E-terms of aberration, to simplify +** the hand computation of annual aberration. FK5 positions +** assume a rigorous aberration computation based on the Earth's +** barycentric velocity. +** +** . The E-terms also affect proper motions, and in particular cause +** objects at large distances to exhibit fictitious proper +** motions. +** +** The algorithm is based on Smith et al. (1989) and Yallop et al. +** (1989), which presented a matrix method due to Standish (1982) as +** developed by Aoki et al. (1983), using Kinoshita's development of +** Andoyer's post-Newcomb precession. The numerical constants from +** Seidelmann (1992) are used canonically. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch J2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauPdp scalar product of two p-vectors +** iauPm modulus of p-vector +** iauPmp p-vector minus p-vector +** iauPpp p-vector pluus p-vector +** iauPv2s pv-vector to spherical coordinates +** iauS2pv spherical coordinates to pv-vector +** iauSxp multiply p-vector by scalar +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Smith, C.A. et al., 1989, "The transformation of astrometric +** catalog systems to the equinox J2000.0". Astron.J. 97, 265. +** +** Standish, E.M., 1982, "Conversion of positions and proper motions +** from B1950.0 to the IAU system at J2000.0". Astron.Astrophys., +** 115, 1, 20-22. +** +** Yallop, B.D. et al., 1989, "Transformation of mean star places +** from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space". +** Astron.J. 97, 274. +** +*/ + + + +void iauFk52h(double r5, double d5, + double dr5, double dd5, double px5, double rv5, + double *rh, double *dh, + double *drh, double *ddh, double *pxh, double *rvh) +/* +** - - - - - - - - - +** i a u F k 5 2 h +** - - - - - - - - - +** +** Transform FK5 (J2000.0) star data into the Hipparcos system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (all FK5, equinox J2000.0, epoch J2000.0): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double proper motion in RA (dRA/dt, rad/Jyear) +** dd5 double proper motion in Dec (dDec/dt, rad/Jyear) +** px5 double parallax (arcsec) +** rv5 double radial velocity (km/s, positive = receding) +** +** Returned (all Hipparcos, epoch J2000.0): +** rh double RA (radians) +** dh double Dec (radians) +** drh double proper motion in RA (dRA/dt, rad/Jyear) +** ddh double proper motion in Dec (dDec/dt, rad/Jyear) +** pxh double parallax (arcsec) +** rvh double radial velocity (km/s, positive = receding) +** +** Notes: +** +** 1) This function transforms FK5 star positions and proper motions +** into the system of the Hipparcos catalog. +** +** 2) The proper motions in RA are dRA/dt rather than +** cos(Dec)*dRA/dt, and are per year rather than per century. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalog are not +** taken into account. +** +** 4) See also iauH2fk5, iauFk5hz, iauHfk5z. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRxp product of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPpp p-vector plus p-vector +** iauPvstar space motion pv-vector to star catalog data +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +*/ + + + +void iauFk54z(double r2000, double d2000, double bepoch, + double *r1950, double *d1950, + double *dr1950, double *dd1950) +/* +** - - - - - - - - - +** i a u F k 5 4 z +** - - - - - - - - - +** +** Convert a J2000.0 FK5 star position to B1950.0 FK4, assuming zero +** proper motion in FK5 and parallax. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** r2000,d2000 double J2000.0 FK5 RA,Dec (rad) +** bepoch double Besselian epoch (e.g. 1950.0) +** +** Returned: +** r1950,d1950 double B1950.0 FK4 RA,Dec (rad) at epoch BEPOCH +** dr1950,dd1950 double B1950.0 FK4 proper motions (rad/trop.yr) +** +** Notes: +** +** 1) In contrast to the iauFk524 routine, here the FK5 proper +** motions, the parallax and the radial velocity are presumed zero. +** +** 2) This function converts a star position from the IAU 1976 FK5 +** (Fricke) system to the former FK4 (Bessel-Newcomb) system, for +** cases such as distant radio sources where it is presumed there is +** zero parallax and no proper motion. Because of the E-terms of +** aberration, such objects have (in general) non-zero proper motion +** in FK4, and the present routine returns those fictitious proper +** motions. +** +** 3) Conversion from B1950.0 FK4 to J2000.0 FK5 only is provided for. +** Conversions involving other equinoxes would require additional +** treatment for precession. +** +** 4) The position returned by this routine is in the B1950.0 FK4 +** reference system but at Besselian epoch BEPOCH. For comparison +** with catalogs the BEPOCH argument will frequently be 1950.0. (In +** this context the distinction between Besselian and Julian epoch +** is insignificant.) +** +** 5) The RA component of the returned (fictitious) proper motion is +** dRA/dt rather than cos(Dec)*dRA/dt. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauC2s p-vector to spherical +** iauFk524 FK4 to FK5 +** iauS2c spherical to p-vector +** +*/ + + + +void iauFk5hip(double r5h[3][3], double s5h[3]) +/* +** - - - - - - - - - - +** i a u F k 5 h i p +** - - - - - - - - - - +** +** FK5 to Hipparcos rotation and spin. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Returned: +** r5h double[3][3] r-matrix: FK5 rotation wrt Hipparcos (Note 2) +** s5h double[3] r-vector: FK5 spin wrt Hipparcos (Note 3) +** +** Notes: +** +** 1) This function models the FK5 to Hipparcos transformation as a +** pure rotation and spin; zonal errors in the FK5 catalogue are +** not taken into account. +** +** 2) The r-matrix r5h operates in the sense: +** +** P_Hipparcos = r5h x P_FK5 +** +** where P_FK5 is a p-vector in the FK5 frame, and P_Hipparcos is +** the equivalent Hipparcos p-vector. +** +** 3) The r-vector s5h represents the time derivative of the FK5 to +** Hipparcos rotation. The units are radians per year (Julian, +** TDB). +** +** Called: +** iauRv2m r-vector to r-matrix +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +*/ + + + +void iauFk5hz(double r5, double d5, double date1, double date2, + double *rh, double *dh) +/* +** - - - - - - - - - +** i a u F k 5 h z +** - - - - - - - - - +** +** Transform an FK5 (J2000.0) star position into the system of the +** Hipparcos catalogue, assuming zero Hipparcos proper motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** r5 double FK5 RA (radians), equinox J2000.0, at date +** d5 double FK5 Dec (radians), equinox J2000.0, at date +** date1,date2 double TDB date (Notes 1,2) +** +** Returned: +** rh double Hipparcos RA (radians) +** dh double Hipparcos Dec (radians) +** +** Notes: +** +** 1) This function converts a star position from the FK5 system to +** the Hipparcos system, in such a way that the Hipparcos proper +** motion is zero. Because such a star has, in general, a non-zero +** proper motion in the FK5 system, the function requires the date +** at which the position in the FK5 system was determined. +** +** 2) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalogue are not +** taken into account. +** +** 4) The position returned by this function is in the Hipparcos +** reference system but at date date1+date2. +** +** 5) See also iauFk52h, iauH2fk5, iauHfk5z. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauSxp multiply p-vector by scalar +** iauRv2m r-vector to r-matrix +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739. +** +*/ + + + +void iauFw2m(double gamb, double phib, double psi, double eps, + double r[3][3]) +/* +** - - - - - - - - +** i a u F w 2 m +** - - - - - - - - +** +** Form rotation matrix given the Fukushima-Williams angles. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psi double F-W angle psi (radians) +** eps double F-W angle epsilon (radians) +** +** Returned: +** r double[3][3] rotation matrix +** +** Notes: +** +** 1) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole, +** E = ecliptic pole of date, +** and P = CIP, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma = epE +** phib = phi = pE +** psi = psi = pEP +** eps = epsilon = EP +** +** 2) The matrix representing the combined effects of frame bias, +** precession and nutation is: +** +** NxPxB = R_1(-eps).R_3(-psi).R_1(phib).R_3(gamb) +** +** 3) The present function can construct three different matrices, +** depending on which angles are supplied as the arguments gamb, +** phib, psi and eps: +** +** o To obtain the nutation x precession x frame bias matrix, +** first generate the four precession angles known conventionally +** as gamma_bar, phi_bar, psi_bar and epsilon_A, then generate +** the nutation components Dpsi and Depsilon and add them to +** psi_bar and epsilon_A, and finally call the present function +** using those four angles as arguments. +** +** o To obtain the precession x frame bias matrix, generate the +** four precession angles and call the present function. +** +** o To obtain the frame bias matrix, generate the four precession +** angles for date J2000.0 and call the present function. +** +** The nutation-only and precession-only matrices can if necessary +** be obtained by combining these three appropriately. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRx rotate around X-axis +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +*/ + + + +void iauFw2xy(double gamb, double phib, double psi, double eps, + double *x, double *y) +/* +** - - - - - - - - - +** i a u F w 2 x y +** - - - - - - - - - +** +** CIP X,Y given Fukushima-Williams bias-precession-nutation angles. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psi double F-W angle psi (radians) +** eps double F-W angle epsilon (radians) +** +** Returned: +** x,y double CIP unit vector X,Y +** +** Notes: +** +** 1) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole +** E = ecliptic pole of date, +** and P = CIP, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma = epE +** phib = phi = pE +** psi = psi = pEP +** eps = epsilon = EP +** +** 2) The matrix representing the combined effects of frame bias, +** precession and nutation is: +** +** NxPxB = R_1(-epsA).R_3(-psi).R_1(phib).R_3(gamb) +** +** The returned values x,y are elements [2][0] and [2][1] of the +** matrix. Near J2000.0, they are essentially angles in radians. +** +** Called: +** iauFw2m F-W angles to r-matrix +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +*/ + + + +void iauG2icrs ( double dl, double db, double *dr, double *dd ) +/* +** - - - - - - - - - - +** i a u G 2 i c r s +** - - - - - - - - - - +** +** Transformation from Galactic Coordinates to ICRS. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dl double galactic longitude (radians) +** db double galactic latitude (radians) +** +** Returned: +** dr double ICRS right ascension (radians) +** dd double ICRS declination (radians) +** +** Notes: +** +** 1) The IAU 1958 system of Galactic coordinates was defined with +** respect to the now obsolete reference system FK4 B1950.0. When +** interpreting the system in a modern context, several factors have +** to be taken into account: +** +** . The inclusion in FK4 positions of the E-terms of aberration. +** +** . The distortion of the FK4 proper motion system by differential +** Galactic rotation. +** +** . The use of the B1950.0 equinox rather than the now-standard +** J2000.0. +** +** . The frame bias between ICRS and the J2000.0 mean place system. +** +** The Hipparcos Catalogue (Perryman & ESA 1997) provides a rotation +** matrix that transforms directly between ICRS and Galactic +** coordinates with the above factors taken into account. The +** matrix is derived from three angles, namely the ICRS coordinates +** of the Galactic pole and the longitude of the ascending node of +** the galactic equator on the ICRS equator. They are given in +** degrees to five decimal places and for canonical purposes are +** regarded as exact. In the Hipparcos Catalogue the matrix +** elements are given to 10 decimal places (about 20 microarcsec). +** In the present SOFA function the matrix elements have been +** recomputed from the canonical three angles and are given to 30 +** decimal places. +** +** 2) The inverse transformation is performed by the function iauIcrs2g. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s p-vector to spherical +** +** Reference: +** Perryman M.A.C. & ESA, 1997, ESA SP-1200, The Hipparcos and Tycho +** catalogues. Astrometric and photometric star catalogues +** derived from the ESA Hipparcos Space Astrometry Mission. ESA +** Publications Division, Noordwijk, Netherlands. +** +*/ + + + +int iauGc2gd ( int n, double xyz[3], + double *elong, double *phi, double *height ) +/* +** - - - - - - - - - +** i a u G c 2 g d +** - - - - - - - - - +** +** Transform geocentric coordinates to geodetic using the specified +** reference ellipsoid. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical transformation. +** +** Given: +** n int ellipsoid identifier (Note 1) +** xyz double[3] geocentric vector (Note 2) +** +** Returned: +** elong double longitude (radians, east +ve, Note 3) +** phi double latitude (geodetic, radians, Note 3) +** height double height above ellipsoid (geodetic, Notes 2,3) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** -2 = internal error (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The geocentric vector (xyz, given) and height (height, returned) +** are in meters. +** +** 3) An error status -1 means that the identifier n is illegal. An +** error status -2 is theoretically impossible. In all error cases, +** all three results are set to -1e9. +** +** 4) The inverse transformation is performed in the function iauGd2gc. +** +** Called: +** iauEform Earth reference ellipsoids +** iauGc2gde geocentric to geodetic transformation, general +** +*/ + + + +int iauGc2gde ( double a, double f, double xyz[3], + double *elong, double *phi, double *height ) +/* +** - - - - - - - - - - +** i a u G c 2 g d e +** - - - - - - - - - - +** +** Transform geocentric coordinates to geodetic for a reference +** ellipsoid of specified form. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a double equatorial radius (Notes 2,4) +** f double flattening (Note 3) +** xyz double[3] geocentric vector (Note 4) +** +** Returned: +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians) +** height double height above ellipsoid (geodetic, Note 4) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal f +** -2 = illegal a +** +** Notes: +** +** 1) This function is based on the GCONV2H Fortran subroutine by +** Toshio Fukushima (see reference). +** +** 2) The equatorial radius, a, can be in any units, but meters is +** the conventional choice. +** +** 3) The flattening, f, is (for the Earth) a value around 0.00335, +** i.e. around 1/298. +** +** 4) The equatorial radius, a, and the geocentric vector, xyz, +** must be given in the same units, and determine the units of +** the returned height, height. +** +** 5) If an error occurs (status < 0), elong, phi and height are +** unchanged. +** +** 6) The inverse transformation is performed in the function +** iauGd2gce. +** +** 7) The transformation for a standard ellipsoid (such as WGS84) can +** more conveniently be performed by calling iauGc2gd, which uses a +** numerical code to identify the required A and F values. +** +** Reference: +** +** Fukushima, T., "Transformation from Cartesian to geodetic +** coordinates accelerated by Halley's method", J.Geodesy (2006) +** 79: 689-693 +** +*/ + + + +int iauGd2gc ( int n, double elong, double phi, double height, + double xyz[3] ) +/* +** - - - - - - - - - +** i a u G d 2 g c +** - - - - - - - - - +** +** Transform geodetic coordinates to geocentric using the specified +** reference ellipsoid. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical transformation. +** +** Given: +** n int ellipsoid identifier (Note 1) +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians, Note 3) +** height double height above ellipsoid (geodetic, Notes 2,3) +** +** Returned: +** xyz double[3] geocentric vector (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** -2 = illegal case (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The height (height, given) and the geocentric vector (xyz, +** returned) are in meters. +** +** 3) No validation is performed on the arguments elong, phi and +** height. An error status -1 means that the identifier n is +** illegal. An error status -2 protects against cases that would +** lead to arithmetic exceptions. In all error cases, xyz is set +** to zeros. +** +** 4) The inverse transformation is performed in the function iauGc2gd. +** +** Called: +** iauEform Earth reference ellipsoids +** iauGd2gce geodetic to geocentric transformation, general +** iauZp zero p-vector +** +*/ + + + +int iauGd2gce ( double a, double f, double elong, double phi, + double height, double xyz[3] ) +/* +** - - - - - - - - - - +** i a u G d 2 g c e +** - - - - - - - - - - +** +** Transform geodetic coordinates to geocentric for a reference +** ellipsoid of specified form. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a double equatorial radius (Notes 1,4) +** f double flattening (Notes 2,4) +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians, Note 4) +** height double height above ellipsoid (geodetic, Notes 3,4) +** +** Returned: +** xyz double[3] geocentric vector (Note 3) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal case (Note 4) +** Notes: +** +** 1) The equatorial radius, a, can be in any units, but meters is +** the conventional choice. +** +** 2) The flattening, f, is (for the Earth) a value around 0.00335, +** i.e. around 1/298. +** +** 3) The equatorial radius, a, and the height, height, must be +** given in the same units, and determine the units of the +** returned geocentric vector, xyz. +** +** 4) No validation is performed on individual arguments. The error +** status -1 protects against (unrealistic) cases that would lead +** to arithmetic exceptions. If an error occurs, xyz is unchanged. +** +** 5) The inverse transformation is performed in the function +** iauGc2gde. +** +** 6) The transformation for a standard ellipsoid (such as WGS84) can +** more conveniently be performed by calling iauGd2gc, which uses a +** numerical code to identify the required a and f values. +** +** References: +** +** Green, R.M., Spherical Astronomy, Cambridge University Press, +** (1985) Section 4.5, p96. +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 4.22, p202. +** +*/ + + + +double iauGmst00(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G m s t 0 0 +** - - - - - - - - - - +** +** Greenwich mean sidereal time (model consistent with IAU 2000 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession. If UT1 is used for +** both purposes, errors of order 100 microarcseconds result. +** +** 3) This GMST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation and equation of the +** equinoxes. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauEra00 Earth rotation angle, IAU 2000 +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauGmst06(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G m s t 0 6 +** - - - - - - - - - - +** +** Greenwich mean sidereal time (consistent with IAU 2006 precession). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession. If UT1 is used for +** both purposes, errors of order 100 microarcseconds result. +** +** 3) This GMST is compatible with the IAU 2006 precession and must not +** be used with other precession models. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauEra00 Earth rotation angle, IAU 2000 +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2005, +** Astron.Astrophys. 432, 355 +** +*/ + + + +double iauGmst82(double dj1, double dj2) +/* +** - - - - - - - - - - +** i a u G m s t 8 2 +** - - - - - - - - - - +** +** Universal Time to Greenwich mean sidereal time (IAU 1982 model). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** dj1,dj2 double UT1 Julian Date (see note) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any +** convenient way between the arguments dj1 and dj2. For example, +** JD(UT1)=2450123.7 could be expressed in any of these ways, +** among others: +** +** dj1 dj2 +** +** 2450123.7 0 (JD method) +** 2451545 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum accuracy (or, at +** least, minimum noise) is delivered when the dj1 argument is for +** 0hrs UT1 on the day in question and the dj2 argument lies in the +** range 0 to 1, or vice versa. +** +** 2) The algorithm is based on the IAU 1982 expression. This is +** always described as giving the GMST at 0 hours UT1. In fact, it +** gives the difference between the GMST and the UT, the steady +** 4-minutes-per-day drawing-ahead of ST with respect to UT. When +** whole days are ignored, the expression happens to equal the GMST +** at 0 hours UT1 each day. +** +** 3) In this function, the entire UT1 (the sum of the two arguments +** dj1 and dj2) is used directly as the argument for the standard +** formula, the constant term of which is adjusted by 12 hours to +** take account of the noon phasing of Julian Date. The UT1 is then +** added, but omitting whole days to conserve accuracy. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Transactions of the International Astronomical Union, +** XVIII B, 67 (1983). +** +** Aoki et al., Astron.Astrophys., 105, 359-361 (1982). +** +*/ + + + +double iauGst00a(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G s t 0 0 a +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) This GAST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauEe00a equation of the equinoxes, IAU 2000A +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauGst00b(double uta, double utb) +/* +** - - - - - - - - - - +** i a u G s t 0 0 b +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 +** resolutions but using the truncated nutation model IAU 2000B). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date uta+utb is a Julian Date, apportioned in any +** convenient way between the argument pair. For example, +** JD=2450123.7 could be expressed in any of these ways, among +** others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The result is compatible with the IAU 2000 resolutions, except +** that accuracy has been compromised for the sake of speed and +** convenience in two respects: +** +** . UT is used instead of TDB (or TT) to compute the precession +** component of GMST and the equation of the equinoxes. This +** results in errors of order 0.1 mas at present. +** +** . The IAU 2000B abridged nutation model (McCarthy & Luzum, 2001) +** is used, introducing errors of up to 1 mas. +** +** 3) This GAST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauEe00b equation of the equinoxes, IAU 2000B +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Celestial Mechanics & +** Dynamical Astronomy, 85, 37-49 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauGst06(double uta, double utb, double tta, double ttb, + double rnpb[3][3]) +/* +** - - - - - - - - - +** i a u G s t 0 6 +** - - - - - - - - - +** +** Greenwich apparent sidereal time, IAU 2006, given the NPB matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** rnpb double[3][3] nutation x precession x bias matrix +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) Although the function uses the IAU 2006 series for s+XY/2, it is +** otherwise independent of the precession-nutation model and can in +** practice be used with any equinox-based NPB matrix. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauAnp normalize angle into range 0 to 2pi +** iauEra00 Earth rotation angle, IAU 2000 +** iauEors equation of the origins, given NPB matrix and s +** +** Reference: +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +double iauGst06a(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G s t 0 6 a +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 and 2006 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) This GAST is compatible with the IAU 2000/2006 resolutions and +** must be used only in conjunction with IAU 2006 precession and +** IAU 2000A nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauGst06 Greenwich apparent ST, IAU 2006, given NPB matrix +** +** Reference: +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +double iauGst94(double uta, double utb) +/* +** - - - - - - - - - +** i a u G s t 9 4 +** - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 1982/94 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date uta+utb is a Julian Date, apportioned in any +** convenient way between the argument pair. For example, +** JD=2450123.7 could be expressed in any of these ways, among +** others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The result is compatible with the IAU 1982 and 1994 resolutions, +** except that accuracy has been compromised for the sake of +** convenience in that UT is used instead of TDB (or TT) to compute +** the equation of the equinoxes. +** +** 3) This GAST must be used only in conjunction with contemporaneous +** IAU standards such as 1976 precession, 1980 obliquity and 1982 +** nutation. It is not compatible with the IAU 2000 resolutions. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauGmst82 Greenwich mean sidereal time, IAU 1982 +** iauEqeq94 equation of the equinoxes, IAU 1994 +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** IAU Resolution C7, Recommendation 3 (1994) +** +*/ + + + +void iauH2fk5(double rh, double dh, + double drh, double ddh, double pxh, double rvh, + double *r5, double *d5, + double *dr5, double *dd5, double *px5, double *rv5) +/* +** - - - - - - - - - +** i a u H 2 f k 5 +** - - - - - - - - - +** +** Transform Hipparcos star data into the FK5 (J2000.0) system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (all Hipparcos, epoch J2000.0): +** rh double RA (radians) +** dh double Dec (radians) +** drh double proper motion in RA (dRA/dt, rad/Jyear) +** ddh double proper motion in Dec (dDec/dt, rad/Jyear) +** pxh double parallax (arcsec) +** rvh double radial velocity (km/s, positive = receding) +** +** Returned (all FK5, equinox J2000.0, epoch J2000.0): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double proper motion in RA (dRA/dt, rad/Jyear) +** dd5 double proper motion in Dec (dDec/dt, rad/Jyear) +** px5 double parallax (arcsec) +** rv5 double radial velocity (km/s, positive = receding) +** +** Notes: +** +** 1) This function transforms Hipparcos star positions and proper +** motions into FK5 J2000.0. +** +** 2) The proper motions in RA are dRA/dt rather than +** cos(Dec)*dRA/dt, and are per year rather than per century. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalog are not +** taken into account. +** +** 4) See also iauFk52h, iauFk5hz, iauHfk5z. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRv2m r-vector to r-matrix +** iauRxp product of r-matrix and p-vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPvstar space motion pv-vector to star catalog data +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +*/ + + + +void iauHd2ae (double ha, double dec, double phi, + double *az, double *el) +/* +** - - - - - - - - - +** i a u H d 2 a e +** - - - - - - - - - +** +** Equatorial to horizon coordinates: transform hour angle and +** declination to azimuth and altitude. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ha double hour angle (local) +** dec double declination +** phi double site latitude +** +** Returned: +** *az double azimuth +** *el double altitude (informally, elevation) +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) Azimuth is returned in the range 0-2pi; north is zero, and east +** is +pi/2. Altitude is returned in the range +/- pi/2. +** +** 3) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 4) The returned azimuth az is with respect to the rotational north +** pole, as opposed to the ITRS pole, and for sub-arcsecond +** accuracy will need to be adjusted for polar motion if it is to +** be with respect to north on a map of the Earth's surface. +** +** 5) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of the hour angle ha will also +** be affected. +** +** 6) The transformation is the same as Vh = Rz(pi)*Ry(pi/2-phi)*Ve, +** where Vh and Ve are lefthanded unit vectors in the (az,el) and +** (ha,dec) systems respectively and Ry and Rz are rotations about +** first the y-axis and then the z-axis. (n.b. Rz(pi) simply +** reverses the signs of the x and y components.) For efficiency, +** the algorithm is written out rather than calling other utility +** functions. For applications that require even greater +** efficiency, additional savings are possible if constant terms +** such as functions of latitude are computed once and for all. +** +** 7) Again for efficiency, no range checking of arguments is carried +** out. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sh, ch, sd, cd, sp, cp, x, y, z, r, a; + + +/* Useful trig functions. */ + sh = sin(ha); + ch = cos(ha); + sd = sin(dec); + cd = cos(dec); + sp = sin(phi); + cp = cos(phi); + +/* Az,Alt unit vector. */ + x = - ch*cd*sp + sd*cp; + y = - sh*cd; + z = ch*cd*cp + sd*sp; + +/* To spherical. */ + r = sqrt(x*x + y*y); + a = (r != 0.0) ? atan2(y,x) : 0.0; + *az = (a < 0.0) ? a+D2PI : a; + *el = atan2(z,r); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} + + + +double iauHd2pa (double ha, double dec, double phi) +/* +** - - - - - - - - - +** i a u H d 2 p a +** - - - - - - - - - +** +** Parallactic angle for a given hour angle and declination. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ha double hour angle +** dec double declination +** phi double site latitude +** +** Returned (function value): +** double parallactic angle +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) The parallactic angle at a point in the sky is the position +** angle of the vertical, i.e. the angle between the directions to +** the north celestial pole and to the zenith respectively. +** +** 3) The result is returned in the range -pi to +pi. +** +** 4) At the pole itself a zero result is returned. +** +** 5) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 6) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of the hour angle ha will also +** be affected. +** +** Reference: +** Smart, W.M., "Spherical Astronomy", Cambridge University Press, +** 6th edition (Green, 1977), p49. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double cp, cqsz, sqsz; + + + cp = cos(phi); + sqsz = cp*sin(ha); + cqsz = sin(phi)*cos(dec) - cp*sin(dec)*cos(ha); + return ( ( sqsz != 0.0 || cqsz != 0.0 ) ? atan2(sqsz,cqsz) : 0.0 ); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} + + + +void iauHfk5z(double rh, double dh, double date1, double date2, + double *r5, double *d5, double *dr5, double *dd5) +/* +** - - - - - - - - - +** i a u H f k 5 z +** - - - - - - - - - +** +** Transform a Hipparcos star position into FK5 J2000.0, assuming +** zero Hipparcos proper motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rh double Hipparcos RA (radians) +** dh double Hipparcos Dec (radians) +** date1,date2 double TDB date (Note 1) +** +** Returned (all FK5, equinox J2000.0, date date1+date2): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double FK5 RA proper motion (rad/year, Note 4) +** dd5 double Dec proper motion (rad/year, Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure rotation +** and spin; zonal errors in the FK5 catalogue are not taken into +** account. +** +** 4) It was the intention that Hipparcos should be a close +** approximation to an inertial frame, so that distant objects have +** zero proper motion; such objects have (in general) non-zero +** proper motion in FK5, and this function returns those fictitious +** proper motions. +** +** 5) The position returned by this function is in the FK5 J2000.0 +** reference system but at date date1+date2. +** +** 6) See also iauFk52h, iauH2fk5, iauFk5zhz. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRxp product of r-matrix and p-vector +** iauSxp multiply p-vector by scalar +** iauRxr product of two r-matrices +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPv2s pv-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739. +** +*/ + + + +void iauIcrs2g ( double dr, double dd, double *dl, double *db ) +/* +** - - - - - - - - - - +** i a u I c r s 2 g +** - - - - - - - - - - +** +** Transformation from ICRS to Galactic Coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dr double ICRS right ascension (radians) +** dd double ICRS declination (radians) +** +** Returned: +** dl double galactic longitude (radians) +** db double galactic latitude (radians) +** +** Notes: +** +** 1) The IAU 1958 system of Galactic coordinates was defined with +** respect to the now obsolete reference system FK4 B1950.0. When +** interpreting the system in a modern context, several factors have +** to be taken into account: +** +** . The inclusion in FK4 positions of the E-terms of aberration. +** +** . The distortion of the FK4 proper motion system by differential +** Galactic rotation. +** +** . The use of the B1950.0 equinox rather than the now-standard +** J2000.0. +** +** . The frame bias between ICRS and the J2000.0 mean place system. +** +** The Hipparcos Catalogue (Perryman & ESA 1997) provides a rotation +** matrix that transforms directly between ICRS and Galactic +** coordinates with the above factors taken into account. The +** matrix is derived from three angles, namely the ICRS coordinates +** of the Galactic pole and the longitude of the ascending node of +** the galactic equator on the ICRS equator. They are given in +** degrees to five decimal places and for canonical purposes are +** regarded as exact. In the Hipparcos Catalogue the matrix +** elements are given to 10 decimal places (about 20 microarcsec). +** In the present SOFA function the matrix elements have been +** recomputed from the canonical three angles and are given to 30 +** decimal places. +** +** 2) The inverse transformation is performed by the function iauG2icrs. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** iauS2c spherical coordinates to unit vector +** iauRxp product of r-matrix and p-vector +** iauC2s p-vector to spherical +** +** Reference: +** Perryman M.A.C. & ESA, 1997, ESA SP-1200, The Hipparcos and Tycho +** catalogues. Astrometric and photometric star catalogues +** derived from the ESA Hipparcos Space Astrometry Mission. ESA +** Publications Division, Noordwijk, Netherlands. +** +*/ + + + +void iauIr(double r[3][3]) +/* +** - - - - - - +** i a u I r +** - - - - - - +** +** Initialize an r-matrix to the identity matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** r double[3][3] r-matrix +** +*/ + + + +int iauJd2cal(double dj1, double dj2, + int *iy, int *im, int *id, double *fd) +/* +** - - - - - - - - - - +** i a u J d 2 c a l +** - - - - - - - - - - +** +** Julian Date to Gregorian year, month, day, and fraction of a day. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (Notes 1, 2) +** +** Returned (arguments): +** iy int year +** im int month +** id int day +** fd double fraction of day +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = unacceptable date (Note 1) +** +** Notes: +** +** 1) The earliest valid date is -68569.5 (-4900 March 1). The +** largest value accepted is 1e9. +** +** 2) The Julian Date is apportioned in any convenient way between +** the arguments dj1 and dj2. For example, JD=2450123.7 could +** be expressed in any of these ways, among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** Separating integer and fraction uses the "compensated summation" +** algorithm of Kahan-Neumaier to preserve as much precision as +** possible irrespective of the jd1+jd2 apportionment. +** +** 3) In early eras the conversion is from the "proleptic Gregorian +** calendar"; no account is taken of the date(s) of adoption of +** the Gregorian calendar, nor is the AD/BC numbering convention +** observed. +** +** References: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +** Klein, A., A Generalized Kahan-Babuska-Summation-Algorithm. +** Computing 76, 279-293 (2006), Section 3. +** +*/ + + + +int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4]) +/* +** - - - - - - - - - - +** i a u J d c a l f +** - - - - - - - - - - +** +** Julian Date to Gregorian Calendar, expressed in a form convenient +** for formatting messages: rounded to a specified precision. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ndp int number of decimal places of days in fraction +** dj1,dj2 double dj1+dj2 = Julian Date (Note 1) +** +** Returned: +** iymdf int[4] year, month, day, fraction in Gregorian +** calendar +** +** Returned (function value): +** int status: +** -1 = date out of range +** 0 = OK +** +1 = NDP not 0-9 (interpreted as 0) +** +** Notes: +** +** 1) The Julian Date is apportioned in any convenient way between +** the arguments dj1 and dj2. For example, JD=2450123.7 could +** be expressed in any of these ways, among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** 2) In early eras the conversion is from the "Proleptic Gregorian +** Calendar"; no account is taken of the date(s) of adoption of +** the Gregorian Calendar, nor is the AD/BC numbering convention +** observed. +** +** 3) Refer to the function iauJd2cal. +** +** 4) NDP should be 4 or less if internal overflows are to be +** avoided on machines which use 16-bit integers. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +*/ + + + +void iauLd(double bm, double p[3], double q[3], double e[3], + double em, double dlim, double p1[3]) +/* +** - - - - - - +** i a u L d +** - - - - - - +** +** Apply light deflection by a solar-system body, as part of +** transforming coordinate direction into natural direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** bm double mass of the gravitating body (solar masses) +** p double[3] direction from observer to source (unit vector) +** q double[3] direction from body to source (unit vector) +** e double[3] direction from body to observer (unit vector) +** em double distance from body to observer (au) +** dlim double deflection limiter (Note 4) +** +** Returned: +** p1 double[3] observer to deflected source (unit vector) +** +** Notes: +** +** 1) The algorithm is based on Expr. (70) in Klioner (2003) and +** Expr. (7.63) in the Explanatory Supplement (Urban & Seidelmann +** 2013), with some rearrangement to minimize the effects of machine +** precision. +** +** 2) The mass parameter bm can, as required, be adjusted in order to +** allow for such effects as quadrupole field. +** +** 3) The barycentric position of the deflecting body should ideally +** correspond to the time of closest approach of the light ray to +** the body. +** +** 4) The deflection limiter parameter dlim is phi^2/2, where phi is +** the angular separation (in radians) between source and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. +** +** 5) The returned vector p1 is not normalized, but the consequential +** departure from unit magnitude is always negligible. +** +** 6) The arguments p and p1 can be the same array. +** +** 7) To accumulate total light deflection taking into account the +** contributions from several bodies, call the present function for +** each body in succession, in decreasing order of distance from the +** observer. +** +** 8) For efficiency, validation is omitted. The supplied vectors must +** be of unit magnitude, and the deflection limiter non-zero and +** positive. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauPdp scalar product of two p-vectors +** iauPxp vector product of two p-vectors +** +*/ + + + +void iauLdn(int n, iauLDBODY b[], double ob[3], double sc[3], + double sn[3]) +/*+ +** - - - - - - - +** i a u L d n +** - - - - - - - +** +** For a star, apply light deflection by multiple solar-system bodies, +** as part of transforming coordinate direction into natural direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** n int number of bodies (note 1) +** b iauLDBODY[n] data for each of the n bodies (Notes 1,2): +** bm double mass of the body (solar masses, Note 3) +** dl double deflection limiter (Note 4) +** pv [2][3] barycentric PV of the body (au, au/day) +** ob double[3] barycentric position of the observer (au) +** sc double[3] observer to star coord direction (unit vector) +** +** Returned: +** sn double[3] observer to deflected star (unit vector) +** +** 1) The array b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 2) The array b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 3) In the entry in the b array for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 4) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 5) For cases where the starlight passes the body before reaching the +** observer, the body is placed back along its barycentric track by +** the light time from that point to the observer. For cases where +** the body is "behind" the observer no such shift is applied. If +** a different treatment is preferred, the user has the option of +** instead using the iauLd function. Similarly, iauLd can be used +** for cases where the source is nearby, not a star. +** +** 6) The returned vector sn is not normalized, but the consequential +** departure from unit magnitude is always negligible. +** +** 7) The arguments sc and sn can be the same array. +** +** 8) For efficiency, validation is omitted. The supplied masses must +** be greater than zero, the position and velocity vectors must be +** right, and the deflection limiter greater than zero. +** +** Reference: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.2.4. +** +** Called: +** iauCp copy p-vector +** iauPdp scalar product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPpsp p-vector plus scaled p-vector +** iauPn decompose p-vector into modulus and direction +** iauLd light deflection by a solar-system body +** +*/ + + + +void iauLdsun(double p[3], double e[3], double em, double p1[3]) +/* +** - - - - - - - - - +** i a u L d s u n +** - - - - - - - - - +** +** Deflection of starlight by the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** p double[3] direction from observer to star (unit vector) +** e double[3] direction from Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** +** Returned: +** p1 double[3] observer to deflected star (unit vector) +** +** Notes: +** +** 1) The source is presumed to be sufficiently distant that its +** directions seen from the Sun and the observer are essentially +** the same. +** +** 2) The deflection is restrained when the angle between the star and +** the center of the Sun is less than a threshold value, falling to +** zero deflection for zero separation. The chosen threshold value +** is within the solar limb for all solar-system applications, and +** is about 5 arcminutes for the case of a terrestrial observer. +** +** 3) The arguments p and p1 can be the same array. +** +** Called: +** iauLd light deflection by a solar-system body +** +*/ + + + +void iauLteceq(double epj, double dl, double db, double *dr, double *dd) +/* +** - - - - - - - - - - +** i a u L t e c e q +** - - - - - - - - - - +** +** Transformation from ecliptic coordinates (mean equinox and ecliptic +** of date) to ICRS RA,Dec, using a long-term precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** dl,db double ecliptic longitude and latitude (radians) +** +** Returned: +** dr,dd double ICRS right ascension and declination (radians) +** +** 1) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 2) The transformation is approximately that from ecliptic longitude +** and latitude (mean equinox and ecliptic of date) to mean J2000.0 +** right ascension and declination, with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLtecm J2000.0 to ecliptic rotation matrix, long term +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLtecm(double epj, double rm[3][3]) +/* +** - - - - - - - - - +** i a u L t e c m +** - - - - - - - - - +** +** ICRS equatorial to ecliptic rotation matrix, long-term. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rm double[3][3] ICRS to ecliptic rotation matrix +** +** Notes: +** +** 1) The matrix is in the sense +** +** E_ep = rm x P_ICRS, +** +** where P_ICRS is a vector with respect to ICRS right ascension +** and declination axes and E_ep is the same vector with respect to +** the (inertial) ecliptic and equinox of epoch epj. +** +** 2) P_ICRS is a free vector, merely a direction, typically of unit +** magnitude, and not bound to any particular spatial origin, such +** as the Earth, Sun or SSB. No assumptions are made about whether +** it represents starlight and embodies astrometric effects such as +** parallax or aberration. The transformation is approximately that +** between mean J2000.0 right ascension and declination and ecliptic +** longitude and latitude, with only frame bias (always less than +** 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauLtpequ equator pole, long term +** iauLtpecl ecliptic pole, long term +** iauPxp vector product +** iauPn normalize vector +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLteqec(double epj, double dr, double dd, double *dl, double *db) +/* +** - - - - - - - - - - +** i a u L t e q e c +** - - - - - - - - - - +** +** Transformation from ICRS equatorial coordinates to ecliptic +** coordinates (mean equinox and ecliptic of date) using a long-term +** precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** dr,dd double ICRS right ascension and declination (radians) +** +** Returned: +** dl,db double ecliptic longitude and latitude (radians) +** +** 1) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 2) The transformation is approximately that from mean J2000.0 right +** ascension and declination to ecliptic longitude and latitude +** (mean equinox and ecliptic of date), with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLtecm J2000.0 to ecliptic rotation matrix, long term +** iauRxp product of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLtp(double epj, double rp[3][3]) +/* +** - - - - - - - +** i a u L t p +** - - - - - - - +** +** Long-term precession matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rp double[3][3] precession matrix, J2000.0 to date +** +** Notes: +** +** 1) The matrix is in the sense +** +** P_date = rp x P_J2000, +** +** where P_J2000 is a vector with respect to the J2000.0 mean +** equator and equinox and P_date is the same vector with respect to +** the equator and equinox of epoch epj. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauLtpequ equator pole, long term +** iauLtpecl ecliptic pole, long term +** iauPxp vector product +** iauPn normalize vector +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLtpb(double epj, double rpb[3][3]) +/* +** - - - - - - - - +** i a u L t p b +** - - - - - - - - +** +** Long-term precession matrix, including ICRS frame bias. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rpb double[3][3] precession-bias matrix, J2000.0 to date +** +** Notes: +** +** 1) The matrix is in the sense +** +** P_date = rpb x P_ICRS, +** +** where P_ICRS is a vector in the Geocentric Celestial Reference +** System, and P_date is the vector with respect to the Celestial +** Intermediate Reference System at that date but with nutation +** neglected. +** +** 2) A first order frame bias formulation is used, of sub- +** microarcsecond accuracy compared with a full 3D rotation. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLtpecl(double epj, double vec[3]) +/* +** - - - - - - - - - - +** i a u L t p e c l +** - - - - - - - - - - +** +** Long-term precession of the ecliptic. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** vec double[3] ecliptic pole unit vector +** +** Notes: +** +** 1) The returned vector is with respect to the J2000.0 mean equator +** and equinox. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauLtpequ(double epj, double veq[3]) +/* +** - - - - - - - - - - +** i a u L t p e q u +** - - - - - - - - - - +** +** Long-term precession of the equator. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** veq double[3] equator pole unit vector +** +** Notes: +** +** 1) The returned vector is with respect to the J2000.0 mean equator +** and equinox. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +*/ + + + +void iauNum00a(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 0 a +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauNum00b function. +** +** Called: +** iauPn00a bias/precession/nutation, IAU 2000A +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +*/ + + + +void iauNum00b(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 0 b +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauNum00a function. +** +** Called: +** iauPn00b bias/precession/nutation, IAU 2000B +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +*/ + + + +void iauNum06a(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 6 a +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2006/2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** iauNut06a nutation, IAU 2006/2000A +** iauNumat form nutation matrix +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +*/ + + + +void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3]) +/* +** - - - - - - - - - +** i a u N u m a t +** - - - - - - - - - +** +** Form the matrix of nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epsa double mean obliquity of date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** rmatn double[3][3] nutation matrix (Note 3) +** +** Notes: +** +** +** 1) The supplied mean obliquity epsa, must be consistent with the +** precession-nutation models from which dpsi and deps were obtained. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. +** +** 3) The matrix operates in the sense V(true) = rmatn * V(mean), +** where the p-vector V(true) is with respect to the true +** equatorial triad of date and the p-vector V(mean) is with +** respect to the mean equatorial triad of date. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRz rotate around Z-axis +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +*/ + + + +void iauNut00a(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 0 a +** - - - - - - - - - - +** +** Nutation, IAU 2000A model (MHB2000 luni-solar and planetary nutation +** with free core nutation omitted). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the equinox and ecliptic of date. The +** obliquity at J2000.0 is assumed to be the Lieske et al. (1977) +** value of 84381.448 arcsec. +** +** Both the luni-solar and planetary nutations are included. The +** latter are due to direct planetary nutations and the +** perturbations of the lunar and terrestrial orbits. +** +** 3) The function computes the MHB2000 nutation series with the +** associated corrections for planetary nutations. It is an +** implementation of the nutation part of the IAU 2000A precession- +** nutation model, formally adopted by the IAU General Assembly in +** 2000, namely MHB2000 (Mathews et al. 2002), but with the free +** core nutation (FCN - see Note 4) omitted. +** +** 4) The full MHB2000 model also contains contributions to the +** nutations in longitude and obliquity due to the free-excitation +** of the free-core-nutation during the period 1979-2000. These FCN +** terms, which are time-dependent and unpredictable, are NOT +** included in the present function and, if required, must be +** independently computed. With the FCN corrections included, the +** present function delivers a pole which is at current epochs +** accurate to a few hundred microarcseconds. The omission of FCN +** introduces further errors of about that size. +** +** 5) The present function provides classical nutation. The MHB2000 +** algorithm, from which it is adapted, deals also with (i) the +** offsets between the GCRS and mean poles and (ii) the adjustments +** in longitude and obliquity due to the changed precession rates. +** These additional functions, namely frame bias and precession +** adjustments, are supported by the SOFA functions iauBi00 and +** iauPr00. +** +** 6) The MHB2000 algorithm also provides "total" nutations, comprising +** the arithmetic sum of the frame bias, precession adjustments, +** luni-solar nutation and planetary nutation. These total +** nutations can be used in combination with an existing IAU 1976 +** precession implementation, such as iauPmat76, to deliver GCRS- +** to-true predictions of sub-mas accuracy at current dates. +** However, there are three shortcomings in the MHB2000 model that +** must be taken into account if more accurate or definitive results +** are required (see Wallace 2002): +** +** (i) The MHB2000 total nutations are simply arithmetic sums, +** yet in reality the various components are successive Euler +** rotations. This slight lack of rigor leads to cross terms +** that exceed 1 mas after a century. The rigorous procedure +** is to form the GCRS-to-true rotation matrix by applying the +** bias, precession and nutation in that order. +** +** (ii) Although the precession adjustments are stated to be with +** respect to Lieske et al. (1977), the MHB2000 model does +** not specify which set of Euler angles are to be used and +** how the adjustments are to be applied. The most literal +** and straightforward procedure is to adopt the 4-rotation +** epsilon_0, psi_A, omega_A, xi_A option, and to add DPSIPR +** to psi_A and DEPSPR to both omega_A and eps_A. +** +** (iii) The MHB2000 model predates the determination by Chapront +** et al. (2002) of a 14.6 mas displacement between the +** J2000.0 mean equinox and the origin of the ICRS frame. It +** should, however, be noted that neglecting this displacement +** when calculating star coordinates does not lead to a +** 14.6 mas change in right ascension, only a small second- +** order distortion in the pattern of the precession-nutation +** effect. +** +** For these reasons, the SOFA functions do not generate the "total +** nutations" directly, though they can of course easily be +** generated by calling iauBi00, iauPr00 and the present function +** and adding the results. +** +** 7) The MHB2000 model contains 41 instances where the same frequency +** appears multiple times, of which 38 are duplicates and three are +** triplicates. To keep the present code close to the original MHB +** algorithm, this small inefficiency has not been corrected. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFaf03 mean argument of the latitude of the Moon +** iauFaom03 mean longitude of the Moon's ascending node +** iauFame03 mean longitude of Mercury +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFama03 mean longitude of Mars +** iauFaju03 mean longitude of Jupiter +** iauFasa03 mean longitude of Saturn +** iauFaur03 mean longitude of Uranus +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G. 2002, +** Astron.Astrophys. 387, 700 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res. +** 107, B4. The MHB_2000 code itself was obtained on 9th September +** 2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002) +** +*/ + + + +void iauNut00b(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 0 b +** - - - - - - - - - - +** +** Nutation, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the equinox and ecliptic of date. The +** obliquity at J2000.0 is assumed to be the Lieske et al. (1977) +** value of 84381.448 arcsec. (The errors that result from using +** this function with the IAU 2006 value of 84381.406 arcsec can be +** neglected.) +** +** The nutation model consists only of luni-solar terms, but +** includes also a fixed offset which compensates for certain long- +** period planetary terms (Note 7). +** +** 3) This function is an implementation of the IAU 2000B abridged +** nutation model formally adopted by the IAU General Assembly in +** 2000. The function computes the MHB_2000_SHORT luni-solar +** nutation series (Luzum 2001), but without the associated +** corrections for the precession rate adjustments and the offset +** between the GCRS and J2000.0 mean poles. +** +** 4) The full IAU 2000A (MHB2000) nutation model contains nearly 1400 +** terms. The IAU 2000B model (McCarthy & Luzum 2003) contains only +** 77 terms, plus additional simplifications, yet still delivers +** results of 1 mas accuracy at present epochs. This combination of +** accuracy and size makes the IAU 2000B abridged nutation model +** suitable for most practical applications. +** +** The function delivers a pole accurate to 1 mas from 1900 to 2100 +** (usually better than 1 mas, very occasionally just outside +** 1 mas). The full IAU 2000A model, which is implemented in the +** function iauNut00a (q.v.), delivers considerably greater accuracy +** at current dates; however, to realize this improved accuracy, +** corrections for the essentially unpredictable free-core-nutation +** (FCN) must also be included. +** +** 5) The present function provides classical nutation. The +** MHB_2000_SHORT algorithm, from which it is adapted, deals also +** with (i) the offsets between the GCRS and mean poles and (ii) the +** adjustments in longitude and obliquity due to the changed +** precession rates. These additional functions, namely frame bias +** and precession adjustments, are supported by the SOFA functions +** iauBi00 and iauPr00. +** +** 6) The MHB_2000_SHORT algorithm also provides "total" nutations, +** comprising the arithmetic sum of the frame bias, precession +** adjustments, and nutation (luni-solar + planetary). These total +** nutations can be used in combination with an existing IAU 1976 +** precession implementation, such as iauPmat76, to deliver GCRS- +** to-true predictions of mas accuracy at current epochs. However, +** for symmetry with the iauNut00a function (q.v. for the reasons), +** the SOFA functions do not generate the "total nutations" +** directly. Should they be required, they could of course easily +** be generated by calling iauBi00, iauPr00 and the present function +** and adding the results. +** +** 7) The IAU 2000B model includes "planetary bias" terms that are +** fixed in size but compensate for long-period nutations. The +** amplitudes quoted in McCarthy & Luzum (2003), namely +** Dpsi = -1.5835 mas and Depsilon = +1.6339 mas, are optimized for +** the "total nutations" method described in Note 6. The Luzum +** (2001) values used in this SOFA implementation, namely -0.135 mas +** and +0.388 mas, are optimized for the "rigorous" method, where +** frame bias, precession and nutation are applied separately and in +** that order. During the interval 1995-2050, the SOFA +** implementation delivers a maximum error of 1.001 mas (not +** including FCN). +** +** References: +** +** Lieske, J.H., Lederle, T., Fricke, W., Morando, B., "Expressions +** for the precession quantities based upon the IAU /1976/ system of +** astronomical constants", Astron.Astrophys. 58, 1-2, 1-16. (1977) +** +** Luzum, B., private communication, 2001 (Fortran code +** MHB_2000_SHORT) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Cel.Mech.Dyn.Astron. +** 85, 37-49 (2003) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J., Astron.Astrophys. 282, 663-683 (1994) +** +*/ + + + +void iauNut06a(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 6 a +** - - - - - - - - - - +** +** IAU 2000A nutation with adjustments to match the IAU 2006 +** precession. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Status: canonical model. +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the mean equinox and ecliptic of date, +** IAU 2006 precession model (Hilton et al. 2006, Capitaine et al. +** 2005). +** +** 3) The function first computes the IAU 2000A nutation, then applies +** adjustments for (i) the consequences of the change in obliquity +** from the IAU 1980 ecliptic to the IAU 2006 ecliptic and (ii) the +** secular variation in the Earth's dynamical form factor J2. +** +** 4) The present function provides classical nutation, complementing +** the IAU 2000 frame bias and IAU 2006 precession. It delivers a +** pole which is at current epochs accurate to a few tens of +** microarcseconds, apart from the free core nutation. +** +** Called: +** iauNut00a nutation, IAU 2000A +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G. 2002, +** Astron.Astrophys. 387, 700 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res. +** 107, B4. The MHB_2000 code itself was obtained on 9th September +** 2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002) +** +*/ + + + +void iauNut80(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - +** i a u N u t 8 0 +** - - - - - - - - - +** +** Nutation, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi double nutation in longitude (radians) +** deps double nutation in obliquity (radians) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components are with respect to the ecliptic of +** date. +** +** Called: +** iauAnpm normalize angle into range +/- pi +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222 (p111). +** +*/ + + + +void iauNutm80(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u t m 8 0 +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), +** where the p-vector V(true) is with respect to the true +** equatorial triad of date and the p-vector V(mean) is with +** respect to the mean equatorial triad of date. +** +** Called: +** iauNut80 nutation, IAU 1980 +** iauObl80 mean obliquity, IAU 1980 +** iauNumat form nutation matrix +** +*/ + + + +double iauObl06(double date1, double date2) +/* +** - - - - - - - - - +** i a u O b l 0 6 +** - - - - - - - - - +** +** Mean obliquity of the ecliptic, IAU 2006 precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double obliquity of the ecliptic (radians, Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result is the angle between the ecliptic and mean equator of +** date date1+date2. +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +*/ + + + +double iauObl80(double date1, double date2) +/* +** - - - - - - - - - +** i a u O b l 8 0 +** - - - - - - - - - +** +** Mean obliquity of the ecliptic, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double obliquity of the ecliptic (radians, Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result is the angle between the ecliptic and mean equator of +** date date1+date2. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Expression 3.222-1 (p114). +** +*/ + + + +void iauP06e(double date1, double date2, + double *eps0, double *psia, double *oma, double *bpa, + double *bqa, double *pia, double *bpia, + double *epsa, double *chia, double *za, double *zetaa, + double *thetaa, double *pa, + double *gam, double *phi, double *psi) +/* +** - - - - - - - - +** i a u P 0 6 e +** - - - - - - - - +** +** Precession angles, IAU 2006, equinox based. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical models. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (see Note 2): +** eps0 double epsilon_0 +** psia double psi_A +** oma double omega_A +** bpa double P_A +** bqa double Q_A +** pia double pi_A +** bpia double Pi_A +** epsa double obliquity epsilon_A +** chia double chi_A +** za double z_A +** zetaa double zeta_A +** thetaa double theta_A +** pa double p_A +** gam double F-W angle gamma_J2000 +** phi double F-W angle phi_J2000 +** psi double F-W angle psi_J2000 +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) This function returns the set of equinox based angles for the +** Capitaine et al. "P03" precession theory, adopted by the IAU in +** 2006. The angles are set out in Table 1 of Hilton et al. (2006): +** +** eps0 epsilon_0 obliquity at J2000.0 +** psia psi_A luni-solar precession +** oma omega_A inclination of equator wrt J2000.0 ecliptic +** bpa P_A ecliptic pole x, J2000.0 ecliptic triad +** bqa Q_A ecliptic pole -y, J2000.0 ecliptic triad +** pia pi_A angle between moving and J2000.0 ecliptics +** bpia Pi_A longitude of ascending node of the ecliptic +** epsa epsilon_A obliquity of the ecliptic +** chia chi_A planetary precession +** za z_A equatorial precession: -3rd 323 Euler angle +** zetaa zeta_A equatorial precession: -1st 323 Euler angle +** thetaa theta_A equatorial precession: 2nd 323 Euler angle +** pa p_A general precession (n.b. see below) +** gam gamma_J2000 J2000.0 RA difference of ecliptic poles +** phi phi_J2000 J2000.0 codeclination of ecliptic pole +** psi psi_J2000 longitude difference of equator poles, J2000.0 +** +** The returned values are all radians. +** +** Note that the t^5 coefficient in the series for p_A from +** Capitaine et al. (2003) is incorrectly signed in Hilton et al. +** (2006). +** +** 3) Hilton et al. (2006) Table 1 also contains angles that depend on +** models distinct from the P03 precession theory itself, namely the +** IAU 2000A frame bias and nutation. The quoted polynomials are +** used in other SOFA functions: +** +** . iauXy06 contains the polynomial parts of the X and Y series. +** +** . iauS06 contains the polynomial part of the s+XY/2 series. +** +** . iauPfw06 implements the series for the Fukushima-Williams +** angles that are with respect to the GCRS pole (i.e. the variants +** that include frame bias). +** +** 4) The IAU resolution stipulated that the choice of parameterization +** was left to the user, and so an IAU compliant precession +** implementation can be constructed using various combinations of +** the angles returned by the present function. +** +** 5) The parameterization used by SOFA is the version of the Fukushima- +** Williams angles that refers directly to the GCRS pole. These +** angles may be calculated by calling the function iauPfw06. SOFA +** also supports the direct computation of the CIP GCRS X,Y by +** series, available by calling iauXy06. +** +** 6) The agreement between the different parameterizations is at the +** 1 microarcsecond level in the present era. +** +** 7) When constructing a precession formulation that refers to the GCRS +** pole rather than the dynamical pole, it may (depending on the +** choice of angles) be necessary to introduce the frame bias +** explicitly. +** +** 8) It is permissible to re-use the same variable in the returned +** arguments. The quantities are stored in the stated order. +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, +** Astron.Astrophys., 412, 567 +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** +*/ + + + +void iauP2pv(double p[3], double pv[2][3]) +/* +** - - - - - - - - +** i a u P 2 p v +** - - - - - - - - +** +** Extend a p-vector to a pv-vector by appending a zero velocity. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** pv double[2][3] pv-vector +** +** Called: +** iauCp copy p-vector +** iauZp zero p-vector +** +*/ + + + +void iauP2s(double p[3], double *theta, double *phi, double *r) +/* +** - - - - - - - +** i a u P 2 s +** - - - - - - - +** +** P-vector to spherical polar coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** +** Notes: +** +** 1) If P is null, zero theta, phi and r are returned. +** +** 2) At either pole, zero theta is returned. +** +** Called: +** iauC2s p-vector to spherical +** iauPm modulus of p-vector +** +*/ + + + +double iauPap(double a[3], double b[3]) +/* +** - - - - - - - +** i a u P a p +** - - - - - - - +** +** Position-angle from two p-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] direction of reference point +** b double[3] direction of point whose PA is required +** +** Returned (function value): +** double position angle of b with respect to a (radians) +** +** Notes: +** +** 1) The result is the position angle, in radians, of direction b with +** respect to direction a. It is in the range -pi to +pi. The +** sense is such that if b is a small distance "north" of a the +** position angle is approximately zero, and if b is a small +** distance "east" of a the position angle is approximately +pi/2. +** +** 2) The vectors a and b need not be of unit length. +** +** 3) Zero is returned if the two directions are the same or if either +** vector is null. +** +** 4) If vector a is at a pole, the result is ill-defined. +** +** Called: +** iauPn decompose p-vector into modulus and direction +** iauPm modulus of p-vector +** iauPxp vector product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPdp scalar product of two p-vectors +** +*/ + + + +double iauPas(double al, double ap, double bl, double bp) +/* +** - - - - - - - +** i a u P a s +** - - - - - - - +** +** Position-angle from spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** al double longitude of point A (e.g. RA) in radians +** ap double latitude of point A (e.g. Dec) in radians +** bl double longitude of point B +** bp double latitude of point B +** +** Returned (function value): +** double position angle of B with respect to A +** +** Notes: +** +** 1) The result is the bearing (position angle), in radians, of point +** B with respect to point A. It is in the range -pi to +pi. The +** sense is such that if B is a small distance "east" of point A, +** the bearing is approximately +pi/2. +** +** 2) Zero is returned if the two points are coincident. +** +*/ + + + +void iauPb06(double date1, double date2, + double *bzeta, double *bz, double *btheta) +/* +** - - - - - - - - +** i a u P b 0 6 +** - - - - - - - - +** +** This function forms three Euler angles which implement general +** precession from epoch J2000.0, using the IAU 2006 model. Frame +** bias (the offset between ICRS and mean J2000.0) is included. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** bzeta double 1st rotation: radians cw around z +** bz double 3rd rotation: radians cw around z +** btheta double 2nd rotation: radians ccw around y +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The traditional accumulated precession angles zeta_A, z_A, +** theta_A cannot be obtained in the usual way, namely through +** polynomial expressions, because of the frame bias. The latter +** means that two of the angles undergo rapid changes near this +** date. They are instead the results of decomposing the +** precession-bias matrix obtained by using the Fukushima-Williams +** method, which does not suffer from the problem. The +** decomposition returns values which can be used in the +** conventional formulation and which include frame bias. +** +** 3) The three angles are returned in the conventional order, which +** is not the same as the order of the corresponding Euler +** rotations. The precession-bias matrix is +** R_3(-z) x R_2(+theta) x R_3(-zeta). +** +** 4) Should zeta_A, z_A, theta_A angles be required that do not +** contain frame bias, they are available by calling the SOFA +** function iauP06e. +** +** Called: +** iauPmat06 PB matrix, IAU 2006 +** iauRz rotate around Z-axis +** +*/ + + + +double iauPdp(double a[3], double b[3]) +/* +** - - - - - - - +** i a u P d p +** - - - - - - - +** +** p-vector inner (=scalar=dot) product. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned (function value): +** double a . b +** +*/ + + + +void iauPfw06(double date1, double date2, + double *gamb, double *phib, double *psib, double *epsa) +/* +** - - - - - - - - - +** i a u P f w 0 6 +** - - - - - - - - - +** +** Precession angles, IAU 2006 (Fukushima-Williams 4-angle formulation). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psib double F-W angle psi_bar (radians) +** epsa double F-W angle epsilon_A (radians) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole, +** E = mean ecliptic pole of date, +** and P = mean pole of date, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma_bar = epE +** phib = phi_bar = pE +** psib = psi_bar = pEP +** epsa = epsilon_A = EP +** +** 3) The matrix representing the combined effects of frame bias and +** precession is: +** +** PxB = R_1(-epsa).R_3(-psib).R_1(phib).R_3(gamb) +** +** 4) The matrix representing the combined effects of frame bias, +** precession and nutation is simply: +** +** NxPxB = R_1(-epsa-dE).R_3(-psib-dP).R_1(phib).R_3(gamb) +** +** where dP and dE are the nutation components with respect to the +** ecliptic of date. +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** +*/ + + + +int iauPlan94(double date1, double date2, int np, double pv[2][3]) +/* +** - - - - - - - - - - +** i a u P l a n 9 4 +** - - - - - - - - - - +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Approximate heliocentric position and velocity of a nominated major +** planet: Mercury, Venus, EMB, Mars, Jupiter, Saturn, Uranus or +** Neptune (but not the Earth itself). +** +** Given: +** date1 double TDB date part A (Note 1) +** date2 double TDB date part B (Note 1) +** np int planet (1=Mercury, 2=Venus, 3=EMB, 4=Mars, +** 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune) +** +** Returned (argument): +** pv double[2][3] planet p,v (heliocentric, J2000.0, au,au/d) +** +** Returned (function value): +** int status: -1 = illegal NP (outside 1-8) +** 0 = OK +** +1 = warning: year outside 1000-3000 +** +2 = warning: failed to converge +** +** Notes: +** +** 1) The date date1+date2 is in the TDB time scale (in practice TT can +** be used) and is a Julian Date, apportioned in any convenient way +** between the two arguments. For example, JD(TDB)=2450123.7 could +** be expressed in any of these ways, among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. The limited +** accuracy of the present algorithm is such that any of the methods +** is satisfactory. +** +** 2) If an np value outside the range 1-8 is supplied, an error status +** (function value -1) is returned and the pv vector set to zeroes. +** +** 3) For np=3 the result is for the Earth-Moon Barycenter. To obtain +** the heliocentric position and velocity of the Earth, use instead +** the SOFA function iauEpv00. +** +** 4) On successful return, the array pv contains the following: +** +** pv[0][0] x } +** pv[0][1] y } heliocentric position, au +** pv[0][2] z } +** +** pv[1][0] xdot } +** pv[1][1] ydot } heliocentric velocity, au/d +** pv[1][2] zdot } +** +** The reference frame is equatorial and is with respect to the +** mean equator and equinox of epoch J2000.0. +** +** 5) The algorithm is due to J.L. Simon, P. Bretagnon, J. Chapront, +** M. Chapront-Touze, G. Francou and J. Laskar (Bureau des +** Longitudes, Paris, France). From comparisons with JPL +** ephemeris DE102, they quote the following maximum errors +** over the interval 1800-2050: +** +** L (arcsec) B (arcsec) R (km) +** +** Mercury 4 1 300 +** Venus 5 1 800 +** EMB 6 1 1000 +** Mars 17 1 7700 +** Jupiter 71 5 76000 +** Saturn 81 13 267000 +** Uranus 86 7 712000 +** Neptune 11 1 253000 +** +** Over the interval 1000-3000, they report that the accuracy is no +** worse than 1.5 times that over 1800-2050. Outside 1000-3000 the +** accuracy declines. +** +** Comparisons of the present function with the JPL DE200 ephemeris +** give the following RMS errors over the interval 1960-2025: +** +** position (km) velocity (m/s) +** +** Mercury 334 0.437 +** Venus 1060 0.855 +** EMB 2010 0.815 +** Mars 7690 1.98 +** Jupiter 71700 7.70 +** Saturn 199000 19.4 +** Uranus 564000 16.4 +** Neptune 158000 14.4 +** +** Comparisons against DE200 over the interval 1800-2100 gave the +** following maximum absolute differences. (The results using +** DE406 were essentially the same.) +** +** L (arcsec) B (arcsec) R (km) Rdot (m/s) +** +** Mercury 7 1 500 0.7 +** Venus 7 1 1100 0.9 +** EMB 9 1 1300 1.0 +** Mars 26 1 9000 2.5 +** Jupiter 78 6 82000 8.2 +** Saturn 87 14 263000 24.6 +** Uranus 86 7 661000 27.4 +** Neptune 11 2 248000 21.4 +** +** 6) The present SOFA re-implementation of the original Simon et al. +** Fortran code differs from the original in the following respects: +** +** * C instead of Fortran. +** +** * The date is supplied in two parts. +** +** * The result is returned only in equatorial Cartesian form; +** the ecliptic longitude, latitude and radius vector are not +** returned. +** +** * The result is in the J2000.0 equatorial frame, not ecliptic. +** +** * More is done in-line: there are fewer calls to subroutines. +** +** * Different error/warning status values are used. +** +** * A different Kepler's-equation-solver is used (avoiding +** use of double precision complex). +** +** * Polynomials in t are nested to minimize rounding errors. +** +** * Explicit double constants are used to avoid mixed-mode +** expressions. +** +** None of the above changes affects the result significantly. +** +** 7) The returned status indicates the most serious condition +** encountered during execution of the function. Illegal np is +** considered the most serious, overriding failure to converge, +** which in turn takes precedence over the remote date warning. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: Simon, J.L, Bretagnon, P., Chapront, J., +** Chapront-Touze, M., Francou, G., and Laskar, J., +** Astron.Astrophys., 282, 663 (1994). +** +*/ + + + +double iauPm(double p[3]) +/* +** - - - - - - +** i a u P m +** - - - - - - +** +** Modulus of p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned (function value): +** double modulus +** +*/ + + + +void iauPmat00(double date1, double date2, double rbp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 0 0 +** - - - - - - - - - - +** +** Precession matrix (including frame bias) from GCRS to a specified +** date, IAU 2000 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbp double[3][3] bias-precession matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbp * V(GCRS), where +** the p-vector V(GCRS) is with respect to the Geocentric Celestial +** Reference System (IAU, 2000) and the p-vector V(date) is with +** respect to the mean equatorial triad of the given date. +** +** Called: +** iauBp00 frame bias and precession matrices, IAU 2000 +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +*/ + + + +void iauPmat06(double date1, double date2, double rbp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 0 6 +** - - - - - - - - - - +** +** Precession matrix (including frame bias) from GCRS to a specified +** date, IAU 2006 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbp double[3][3] bias-precession matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbp * V(GCRS), where +** the p-vector V(GCRS) is with respect to the Geocentric Celestial +** Reference System (IAU, 2000) and the p-vector V(date) is with +** respect to the mean equatorial triad of the given date. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauPmat76(double date1, double date2, double rmatp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 7 6 +** - - - - - - - - - - +** +** Precession matrix from J2000.0 to a specified date, IAU 1976 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double ending date, TT (Note 1) +** +** Returned: +** rmatp double[3][3] precession matrix, J2000.0 -> date1+date2 +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = RMATP * V(J2000), +** where the p-vector V(J2000) is with respect to the mean +** equatorial triad of epoch J2000.0 and the p-vector V(date) +** is with respect to the mean equatorial triad of the given +** date. +** +** 3) Though the matrix method itself is rigorous, the precession +** angles are expressed through canonical polynomials which are +** valid only for a limited time span. In addition, the IAU 1976 +** precession rate is known to be imperfect. The absolute accuracy +** of the present formulation is better than 0.1 arcsec from +** 1960AD to 2040AD, better than 1 arcsec from 1640AD to 2360AD, +** and remains below 3 arcsec for the whole of the period +** 500BC to 3000AD. The errors exceed 10 arcsec outside the +** range 1200BC to 3900AD, exceed 100 arcsec outside 4200BC to +** 5600AD and exceed 1000 arcsec outside 6800BC to 8200AD. +** +** Called: +** iauPrec76 accumulated precession angles, IAU 1976 +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** iauCr copy r-matrix +** +** References: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** equations (6) & (7), p283. +** +** Kaplan,G.H., 1981. USNO circular no. 163, pA2. +** +*/ + + + +void iauPmp(double a[3], double b[3], double amb[3]) +/* +** - - - - - - - +** i a u P m p +** - - - - - - - +** +** P-vector subtraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** amb double[3] a - b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +*/ + + + +void iauPmpx(double rc, double dc, double pr, double pd, + double px, double rv, double pmt, double pob[3], + double pco[3]) +/* +** - - - - - - - - +** i a u P m p x +** - - - - - - - - +** +** Proper motion and parallax. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at catalog epoch (radians) +** pr double RA proper motion (radians/year; Note 1) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** pmt double proper motion time interval (SSB, Julian years) +** pob double[3] SSB to observer vector (au) +** +** Returned: +** pco double[3] coordinate direction (BCRS unit vector) +** +** Notes: +** +** 1) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 2) The proper motion time interval is for when the starlight +** reaches the solar system barycenter. +** +** 3) To avoid the need for iteration, the Roemer effect (i.e. the +** small annual modulation of the proper motion coming from the +** changing light time) is applied approximately, using the +** direction of the star at the catalog epoch. +** +** References: +** +** 1984 Astronomical Almanac, pp B39-B41. +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.2. +** +** Called: +** iauPdp scalar product of two p-vectors +** iauPn decompose p-vector into modulus and direction +** +*/ + + + +int iauPmsafe(double ra1, double dec1, double pmr1, double pmd1, + double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, double *pmr2, double *pmd2, + double *px2, double *rv2) +/* +** - - - - - - - - - - +** i a u P m s a f e +** - - - - - - - - - - +** +** Star proper motion: update star catalog data for space motion, with +** special handling to handle the zero parallax case. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ra1 double right ascension (radians), before +** dec1 double declination (radians), before +** pmr1 double RA proper motion (radians/year), before +** pmd1 double Dec proper motion (radians/year), before +** px1 double parallax (arcseconds), before +** rv1 double radial velocity (km/s, +ve = receding), before +** ep1a double "before" epoch, part A (Note 1) +** ep1b double "before" epoch, part B (Note 1) +** ep2a double "after" epoch, part A (Note 1) +** ep2b double "after" epoch, part B (Note 1) +** +** Returned: +** ra2 double right ascension (radians), after +** dec2 double declination (radians), after +** pmr2 double RA proper motion (radians/year), after +** pmd2 double Dec proper motion (radians/year), after +** px2 double parallax (arcseconds), after +** rv2 double radial velocity (km/s, +ve = receding), after +** +** Returned (function value): +** int status: +** -1 = system error (should not occur) +** 0 = no warnings or errors +** 1 = distance overridden (Note 6) +** 2 = excessive velocity (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above warnings +** +** Notes: +** +** 1) The starting and ending TDB epochs ep1a+ep1b and ep2a+ep2b are +** Julian Dates, apportioned in any convenient way between the two +** parts (A and B). For example, JD(TDB)=2450123.7 could be +** expressed in any of these ways, among others: +** +** epNa epNb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. +** +** 2) In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per TDB +** Julian year. +** +** The parallax and radial velocity are in the same frame. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, is +** assumed. +** +** 6) An extremely small (or zero or negative) parallax is overridden +** to ensure that the object is at a finite but very large distance, +** but not so large that the proper motion is equivalent to a large +** but safe speed (about 0.1c using the chosen constant). A warning +** status of 1 is added to the status if this action has been taken. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX in the function iauStarpv), it is arbitrarily set +** to zero. When this action occurs, 2 is added to the status. +** +** 8) The relativistic adjustment carried out in the iauStarpv function +** involves an iterative calculation. If the process fails to +** converge within a set number of iterations, 4 is added to the +** status. +** +** Called: +** iauSeps angle between two points +** iauStarpm update star catalog data for space motion +** +*/ + + + +void iauPn(double p[3], double *r, double u[3]) +/* +** - - - - - - +** i a u P n +** - - - - - - +** +** Convert a p-vector into modulus and unit vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** r double modulus +** u double[3] unit vector +** +** Notes: +** +** 1) If p is null, the result is null. Otherwise the result is a unit +** vector. +** +** 2) It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPm modulus of p-vector +** iauZp zero p-vector +** iauSxp multiply p-vector by scalar +** +*/ + + + +void iauPn00(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - +** i a u P n 0 0 +** - - - - - - - - +** +** Precession-nutation, IAU 2000 model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Note 8) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The returned mean obliquity is consistent with the IAU 2000 +** precession-nutation models. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox of +** date to true equator and equinox of date by applying the nutation +** (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauBp00 frame bias and precession matrices, IAU 2000 +** iauCr copy r-matrix +** iauNumat form nutation matrix +** iauRxr product of two r-matrices +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +*/ + + + +void iauPn00a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 0 a +** - - - - - - - - - +** +** Precession-nutation, IAU 2000A model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000A) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. Free core nutation is omitted; +** for the utmost accuracy, use the iauPn00 function, where the +** nutation components are caller-specified. For faster but +** slightly less accurate results, use the iauPn00b function. +** +** 3) The mean obliquity is consistent with the IAU 2000 precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2000A Celestial Intermediate +** Pole are elements (3,1-3) of the GCRS-to-true matrix, +** i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauNut00a nutation, IAU 2000A +** iauPn00 bias/precession/nutation results, IAU 2000 +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +*/ + + + +void iauPn00b(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 0 b +** - - - - - - - - - +** +** Precession-nutation, IAU 2000B model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000B) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. For more accurate results, but +** at the cost of increased computation, use the iauPn00a function. +** For the utmost accuracy, use the iauPn00 function, where the +** nutation components are caller-specified. +** +** 3) The mean obliquity is consistent with the IAU 2000 precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate +** Pole are elements (3,1-3) of the GCRS-to-true matrix, +** i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauNut00b nutation, IAU 2000B +** iauPn00 bias/precession/nutation results, IAU 2000 +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003). +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +*/ + + + +void iauPn06(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - +** i a u P n 0 6 +** - - - - - - - - +** +** Precession-nutation, IAU 2006 model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based use +** indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Note 8) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The returned mean obliquity is consistent with the IAU 2006 +** precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the Celestial Intermediate Pole are +** elements (3,1-3) of the GCRS-to-true matrix, i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** iauCr copy r-matrix +** iauTr transpose r-matrix +** iauRxr product of two r-matrices +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauPn06a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 6 a +** - - - - - - - - - +** +** Precession-nutation, IAU 2006/2000A models: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based use +** indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000A) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. Free core nutation is omitted; +** for the utmost accuracy, use the iauPn06 function, where the +** nutation components are caller-specified. +** +** 3) The mean obliquity is consistent with the IAU 2006 precession. +** +** 4) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 5) The matrix rp transforms vectors from mean J2000.0 to mean of +** date by applying precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean of date by +** applying frame bias then precession. It is the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean of date to true of +** date by applying the nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true of date +** (CIP/equinox). It is the product rn x rbp, applying frame bias, +** precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2006/2000A Celestial +** Intermediate Pole are elements (3,1-3) of the GCRS-to-true +** matrix, i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauNut06a nutation, IAU 2006/2000A +** iauPn06 bias/precession/nutation results, IAU 2006 +** +** Reference: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +*/ + + + +void iauPnm00a(double date1, double date2, double rbpn[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 0 a +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), equinox-based, IAU 2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbpn double[3][3] classical NPB matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauPnm00b function. +** +** Called: +** iauPn00a bias/precession/nutation, IAU 2000A +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +*/ + + + +void iauPnm00b(double date1, double date2, double rbpn[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 0 b +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), equinox-based, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbpn double[3][3] bias-precession-nutation matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauPnm00a function. +** +** Called: +** iauPn00b bias/precession/nutation, IAU 2000B +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +*/ + + + +void iauPnm06a(double date1, double date2, double rnpb[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 6 a +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), IAU 2006 precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rnpb double[3][3] bias-precession-nutation matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rnpb * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauNut06a nutation, IAU 2006/2000A +** iauFw2m F-W angles to r-matrix +** +** Reference: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855. +** +*/ + + + +void iauPnm80(double date1, double date2, double rmatpn[3][3]) +/* +** - - - - - - - - - +** i a u P n m 8 0 +** - - - - - - - - - +** +** Form the matrix of precession/nutation for a given date, IAU 1976 +** precession model, IAU 1980 nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** rmatpn double[3][3] combined precession/nutation matrix +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rmatpn * V(J2000), +** where the p-vector V(date) is with respect to the true equatorial +** triad of date date1+date2 and the p-vector V(J2000) is with +** respect to the mean equatorial triad of epoch J2000.0. +** +** Called: +** iauPmat76 precession matrix, IAU 1976 +** iauNutm80 nutation matrix, IAU 1980 +** iauRxr product of two r-matrices +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.3 (p145). +** +*/ + + + +void iauPom00(double xp, double yp, double sp, double rpom[3][3]) +/* +** - - - - - - - - - - +** i a u P o m 0 0 +** - - - - - - - - - - +** +** Form the matrix of polar motion for a given date, IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xp,yp double coordinates of the pole (radians, Note 1) +** sp double the TIO locator s' (radians, Note 2) +** +** Returned: +** rpom double[3][3] polar-motion matrix (Note 3) +** +** Notes: +** +** 1) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 2) The argument sp is the TIO locator s', in radians, which +** positions the Terrestrial Intermediate Origin on the equator. It +** is obtained from polar motion observations by numerical +** integration, and so is in essence unpredictable. However, it is +** dominated by a secular drift of about 47 microarcseconds per +** century, and so can be taken into account by using s' = -47*t, +** where t is centuries since J2000.0. The function iauSp00 +** implements this approximation. +** +** 3) The matrix operates in the sense V(TRS) = rpom * V(CIP), meaning +** that it is the final rotation when computing the pointing +** direction to a celestial source. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** iauRx rotate around X-axis +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauPpp(double a[3], double b[3], double apb[3]) +/* +** - - - - - - - +** i a u P p p +** - - - - - - - +** +** P-vector addition. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** apb double[3] a + b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +*/ + + + +void iauPpsp(double a[3], double s, double b[3], double apsb[3]) +/* +** - - - - - - - - +** i a u P p s p +** - - - - - - - - +** +** P-vector plus scaled p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** s double scalar (multiplier for b) +** b double[3] second p-vector +** +** Returned: +** apsb double[3] a + s*b +** +** Note: +** It is permissible for any of a, b and apsb to be the same array. +** +** Called: +** iauSxp multiply p-vector by scalar +** iauPpp p-vector plus p-vector +** +*/ + + + +void iauPr00(double date1, double date2, double *dpsipr, double *depspr) +/* +** - - - - - - - - +** i a u P r 0 0 +** - - - - - - - - +** +** Precession-rate part of the IAU 2000 precession-nutation models +** (part of MHB2000). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsipr,depspr double precession corrections (Notes 2,3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The precession adjustments are expressed as "nutation +** components", corrections in longitude and obliquity with respect +** to the J2000.0 equinox and ecliptic. +** +** 3) Although the precession adjustments are stated to be with respect +** to Lieske et al. (1977), the MHB2000 model does not specify which +** set of Euler angles are to be used and how the adjustments are to +** be applied. The most literal and straightforward procedure is to +** adopt the 4-rotation epsilon_0, psi_A, omega_A, xi_A option, and +** to add dpsipr to psi_A and depspr to both omega_A and eps_A. +** +** 4) This is an implementation of one aspect of the IAU 2000A nutation +** model, formally adopted by the IAU General Assembly in 2000, +** namely MHB2000 (Mathews et al. 2002). +** +** References: +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B., "Expressions +** for the precession quantities based upon the IAU (1976) System of +** Astronomical Constants", Astron.Astrophys., 58, 1-16 (1977) +** +** Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation +** and precession New nutation series for nonrigid Earth and +** insights into the Earth's interior", J.Geophys.Res., 107, B4, +** 2002. The MHB2000 code itself was obtained on 9th September 2002 +** from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002). +** +*/ + + + +void iauPrec76(double date01, double date02, double date11, double date12, + double *zeta, double *z, double *theta) +/* +** - - - - - - - - - - +** i a u P r e c 7 6 +** - - - - - - - - - - +** +** IAU 1976 precession model. +** +** This function forms the three Euler angles which implement general +** precession between two dates, using the IAU 1976 model (as for the +** FK5 catalog). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date01,date02 double TDB starting date (Note 1) +** date11,date12 double TDB ending date (Note 1) +** +** Returned: +** zeta double 1st rotation: radians cw around z +** z double 3rd rotation: radians cw around z +** theta double 2nd rotation: radians ccw around y +** +** Notes: +** +** 1) The dates date01+date02 and date11+date12 are Julian Dates, +** apportioned in any convenient way between the arguments daten1 +** and daten2. For example, JD(TDB)=2450123.7 could be expressed in +** any of these ways, among others: +** +** daten1 daten2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** The two dates may be expressed using different methods, but at +** the risk of losing some resolution. +** +** 2) The accumulated precession angles zeta, z, theta are expressed +** through canonical polynomials which are valid only for a limited +** time span. In addition, the IAU 1976 precession rate is known to +** be imperfect. The absolute accuracy of the present formulation +** is better than 0.1 arcsec from 1960AD to 2040AD, better than +** 1 arcsec from 1640AD to 2360AD, and remains below 3 arcsec for +** the whole of the period 500BC to 3000AD. The errors exceed +** 10 arcsec outside the range 1200BC to 3900AD, exceed 100 arcsec +** outside 4200BC to 5600AD and exceed 1000 arcsec outside 6800BC to +** 8200AD. +** +** 3) The three angles are returned in the conventional order, which +** is not the same as the order of the corresponding Euler +** rotations. The precession matrix is +** R_3(-z) x R_2(+theta) x R_3(-zeta). +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282, equations +** (6) & (7), p283. +** +*/ + + + +void iauPv2p(double pv[2][3], double p[3]) +/* +** - - - - - - - - +** i a u P v 2 p +** - - - - - - - - +** +** Discard velocity component of a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** p double[3] p-vector +** +** Called: +** iauCp copy p-vector +** +*/ + + + +void iauPv2s(double pv[2][3], + double *theta, double *phi, double *r, + double *td, double *pd, double *rd) +/* +** - - - - - - - - +** i a u P v 2 s +** - - - - - - - - +** +** Convert position/velocity from Cartesian to spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** td double rate of change of theta +** pd double rate of change of phi +** rd double rate of change of r +** +** Notes: +** +** 1) If the position part of pv is null, theta, phi, td and pd +** are indeterminate. This is handled by extrapolating the +** position through unit time by using the velocity part of +** pv. This moves the origin without changing the direction +** of the velocity component. If the position and velocity +** components of pv are both null, zeroes are returned for all +** six results. +** +** 2) If the position is a pole, theta, td and pd are indeterminate. +** In such cases zeroes are returned for all three. +** +*/ + + + +void iauPvdpv(double a[2][3], double b[2][3], double adb[2]) +/* +** - - - - - - - - - +** i a u P v d p v +** - - - - - - - - - +** +** Inner (=scalar=dot) product of two pv-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** adb double[2] a . b (see note) +** +** Note: +** +** If the position and velocity components of the two pv-vectors are +** ( ap, av ) and ( bp, bv ), the result, a . b, is the pair of +** numbers ( ap . bp , ap . bv + av . bp ). The two numbers are the +** dot-product of the two p-vectors and its derivative. +** +** Called: +** iauPdp scalar product of two p-vectors +** +*/ + + + +void iauPvm(double pv[2][3], double *r, double *s) +/* +** - - - - - - - +** i a u P v m +** - - - - - - - +** +** Modulus of pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** r double modulus of position component +** s double modulus of velocity component +** +** Called: +** iauPm modulus of p-vector +** +*/ + + + +void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3]) +/* +** - - - - - - - - - +** i a u P v m p v +** - - - - - - - - - +** +** Subtract one pv-vector from another. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** amb double[2][3] a - b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPmp p-vector minus p-vector +** +*/ + + + +void iauPvppv(double a[2][3], double b[2][3], double apb[2][3]) +/* +** - - - - - - - - - +** i a u P v p p v +** - - - - - - - - - +** +** Add one pv-vector to another. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** apb double[2][3] a + b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPpp p-vector plus p-vector +** +*/ + + + +int iauPvstar(double pv[2][3], double *ra, double *dec, + double *pmr, double *pmd, double *px, double *rv) +/* +** - - - - - - - - - - +** i a u P v s t a r +** - - - - - - - - - - +** +** Convert star position+velocity vector to catalog coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (Note 1): +** pv double[2][3] pv-vector (au, au/day) +** +** Returned (Note 2): +** ra double right ascension (radians) +** dec double declination (radians) +** pmr double RA proper motion (radians/year) +** pmd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, positive = receding) +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = superluminal speed (Note 5) +** -2 = null position vector +** +** Notes: +** +** 1) The specified pv-vector is the coordinate direction (and its rate +** of change) for the date at which the light leaving the star +** reached the solar-system barycenter. +** +** 2) The star data returned by this function are "observables" for an +** imaginary observer at the solar-system barycenter. Proper motion +** and radial velocity are, strictly, in terms of barycentric +** coordinate time, TCB. For most practical applications, it is +** permissible to neglect the distinction between TCB and ordinary +** "proper" time on Earth (TT/TAI). The result will, as a rule, be +** limited by the intrinsic accuracy of the proper-motion and +** radial-velocity data; moreover, the supplied pv-vector is likely +** to be merely an intermediate result (for example generated by the +** function iauStarpv), so that a change of time unit will cancel +** out overall. +** +** In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** Summarizing, the specified pv-vector is for most stars almost +** identical to the result of applying the standard geometrical +** "space motion" transformation to the catalog data. The +** differences, which are the subject of the Stumpff paper cited +** below, are: +** +** (i) In stars with significant radial velocity and proper motion, +** the constantly changing light-time distorts the apparent proper +** motion. Note that this is a classical, not a relativistic, +** effect. +** +** (ii) The transformation complies with special relativity. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds; the radial velocity is in km/s, but +** the pv-vector result is in au and au/day. +** +** 4) The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per Julian +** year. The RA proper motion is in terms of coordinate angle, not +** true angle, and will thus be numerically larger at high +** declinations. +** +** 5) Straight-line motion at constant speed in the inertial frame is +** assumed. If the speed is greater than or equal to the speed of +** light, the function aborts with an error status. +** +** 6) The inverse transformation is performed by the function iauStarpv. +** +** Called: +** iauPn decompose p-vector into modulus and direction +** iauPdp scalar product of two p-vectors +** iauSxp multiply p-vector by scalar +** iauPmp p-vector minus p-vector +** iauPm modulus of p-vector +** iauPpp p-vector plus p-vector +** iauPv2s pv-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** Stumpff, P., 1985, Astron.Astrophys. 144, 232-240. +** +*/ + + + +void iauPvtob(double elong, double phi, double hm, + double xp, double yp, double sp, double theta, + double pv[2][3]) +/* +** - - - - - - - - - +** i a u P v t o b +** - - - - - - - - - +** +** Position and velocity of a terrestrial observing station. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** elong double longitude (radians, east +ve, Note 1) +** phi double latitude (geodetic, radians, Note 1) +** hm double height above ref. ellipsoid (geodetic, m) +** xp,yp double coordinates of the pole (radians, Note 2) +** sp double the TIO locator s' (radians, Note 2) +** theta double Earth rotation angle (radians, Note 3) +** +** Returned: +** pv double[2][3] position/velocity vector (m, m/s, CIRS) +** +** Notes: +** +** 1) The terrestrial coordinates are with respect to the WGS84 +** reference ellipsoid. +** +** 2) xp and yp are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions), measured along the +** meridians 0 and 90 deg west respectively. sp is the TIO locator +** s', in radians, which positions the Terrestrial Intermediate +** Origin on the equator. For many applications, xp, yp and +** (especially) sp can be set to zero. +** +** 3) If theta is Greenwich apparent sidereal time instead of Earth +** rotation angle, the result is with respect to the true equator +** and equinox of date, i.e. with the x-axis at the equinox rather +** than the celestial intermediate origin. +** +** 4) The velocity units are meters per UT1 second, not per SI second. +** This is unlikely to have any practical consequences in the modern +** era. +** +** 5) No validation is performed on the arguments. Error cases that +** could lead to arithmetic exceptions are trapped by the iauGd2gc +** function, and the result set to zeros. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.4.3.3. +** +** Called: +** iauGd2gc geodetic to geocentric transformation +** iauPom00 polar motion matrix +** iauTrxp product of transpose of r-matrix and p-vector +** +*/ + + + +void iauPvu(double dt, double pv[2][3], double upv[2][3]) +/* +** - - - - - - - +** i a u P v u +** - - - - - - - +** +** Update a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** dt double time interval +** pv double[2][3] pv-vector +** +** Returned: +** upv double[2][3] p updated, v unchanged +** +** Notes: +** +** 1) "Update" means "refer the position component of the vector +** to a new date dt time units from the existing date". +** +** 2) The time units of dt must match those of the velocity. +** +** 3) It is permissible for pv and upv to be the same array. +** +** Called: +** iauPpsp p-vector plus scaled p-vector +** iauCp copy p-vector +** +*/ + + + +void iauPvup(double dt, double pv[2][3], double p[3]) +/* +** - - - - - - - - +** i a u P v u p +** - - - - - - - - +** +** Update a pv-vector, discarding the velocity component. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** dt double time interval +** pv double[2][3] pv-vector +** +** Returned: +** p double[3] p-vector +** +** Notes: +** +** 1) "Update" means "refer the position component of the vector to a +** new date dt time units from the existing date". +** +** 2) The time units of dt must match those of the velocity. +** +*/ + + + +void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3]) +/* +** - - - - - - - - - +** i a u P v x p v +** - - - - - - - - - +** +** Outer (=vector=cross) product of two pv-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** axb double[2][3] a x b +** +** Notes: +** +** 1) If the position and velocity components of the two pv-vectors are +** ( ap, av ) and ( bp, bv ), the result, a x b, is the pair of +** vectors ( ap x bp, ap x bv + av x bp ). The two vectors are the +** cross-product of the two p-vectors and its derivative. +** +** 2) It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauCpv copy pv-vector +** iauPxp vector product of two p-vectors +** iauPpp p-vector plus p-vector +** +*/ + + + +void iauPxp(double a[3], double b[3], double axb[3]) +/* +** - - - - - - - +** i a u P x p +** - - - - - - - +** +** p-vector outer (=vector=cross) product. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** axb double[3] a x b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +*/ + + + +void iauRefco(double phpa, double tc, double rh, double wl, + double *refa, double *refb) +/* +** - - - - - - - - - +** i a u R e f c o +** - - - - - - - - - +** +** Determine the constants A and B in the atmospheric refraction model +** dZ = A tan Z + B tan^3 Z. +** +** Z is the "observed" zenith distance (i.e. affected by refraction) +** and dZ is what to add to Z to give the "topocentric" (i.e. in vacuo) +** zenith distance. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** phpa double pressure at the observer (hPa = millibar) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers) +** +** Returned: +** refa double* tan Z coefficient (radians) +** refb double* tan^3 Z coefficient (radians) +** +** Notes: +** +** 1) The model balances speed and accuracy to give good results in +** applications where performance at low altitudes is not paramount. +** Performance is maintained across a range of conditions, and +** applies to both optical/IR and radio. +** +** 2) The model omits the effects of (i) height above sea level (apart +** from the reduced pressure itself), (ii) latitude (i.e. the +** flattening of the Earth), (iii) variations in tropospheric lapse +** rate and (iv) dispersive effects in the radio. +** +** The model was tested using the following range of conditions: +** +** lapse rates 0.0055, 0.0065, 0.0075 deg/meter +** latitudes 0, 25, 50, 75 degrees +** heights 0, 2500, 5000 meters ASL +** pressures mean for height -10% to +5% in steps of 5% +** temperatures -10 deg to +20 deg with respect to 280 deg at SL +** relative humidity 0, 0.5, 1 +** wavelengths 0.4, 0.6, ... 2 micron, + radio +** zenith distances 15, 45, 75 degrees +** +** The accuracy with respect to raytracing through a model +** atmosphere was as follows: +** +** worst RMS +** +** optical/IR 62 mas 8 mas +** radio 319 mas 49 mas +** +** For this particular set of conditions: +** +** lapse rate 0.0065 K/meter +** latitude 50 degrees +** sea level +** pressure 1005 mb +** temperature 280.15 K +** humidity 80% +** wavelength 5740 Angstroms +** +** the results were as follows: +** +** ZD raytrace iauRefco Saastamoinen +** +** 10 10.27 10.27 10.27 +** 20 21.19 21.20 21.19 +** 30 33.61 33.61 33.60 +** 40 48.82 48.83 48.81 +** 45 58.16 58.18 58.16 +** 50 69.28 69.30 69.27 +** 55 82.97 82.99 82.95 +** 60 100.51 100.54 100.50 +** 65 124.23 124.26 124.20 +** 70 158.63 158.68 158.61 +** 72 177.32 177.37 177.31 +** 74 200.35 200.38 200.32 +** 76 229.45 229.43 229.42 +** 78 267.44 267.29 267.41 +** 80 319.13 318.55 319.10 +** +** deg arcsec arcsec arcsec +** +** The values for Saastamoinen's formula (which includes terms +** up to tan^5) are taken from Hohenkerk and Sinclair (1985). +** +** 3) A wl value in the range 0-100 selects the optical/IR case and is +** wavelength in micrometers. Any value outside this range selects +** the radio case. +** +** 4) Outlandish input parameters are silently limited to +** mathematically safe values. Zero pressure is permissible, and +** causes zeroes to be returned. +** +** 5) The algorithm draws on several sources, as follows: +** +** a) The formula for the saturation vapour pressure of water as +** a function of temperature and temperature is taken from +** Equations (A4.5-A4.7) of Gill (1982). +** +** b) The formula for the water vapour pressure, given the +** saturation pressure and the relative humidity, is from +** Crane (1976), Equation (2.5.5). +** +** c) The refractivity of air is a function of temperature, +** total pressure, water-vapour pressure and, in the case +** of optical/IR, wavelength. The formulae for the two cases are +** developed from Hohenkerk & Sinclair (1985) and Rueger (2002). +** +** d) The formula for beta, the ratio of the scale height of the +** atmosphere to the geocentric distance of the observer, is +** an adaption of Equation (9) from Stone (1996). The +** adaptations, arrived at empirically, consist of (i) a small +** adjustment to the coefficient and (ii) a humidity term for the +** radio case only. +** +** e) The formulae for the refraction constants as a function of +** n-1 and beta are from Green (1987), Equation (4.31). +** +** References: +** +** Crane, R.K., Meeks, M.L. (ed), "Refraction Effects in the Neutral +** Atmosphere", Methods of Experimental Physics: Astrophysics 12B, +** Academic Press, 1976. +** +** Gill, Adrian E., "Atmosphere-Ocean Dynamics", Academic Press, +** 1982. +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987. +** +** Hohenkerk, C.Y., & Sinclair, A.T., NAO Technical Note No. 63, +** 1985. +** +** Rueger, J.M., "Refractive Index Formulae for Electronic Distance +** Measurement with Radio and Millimetre Waves", in Unisurv Report +** S-68, School of Surveying and Spatial Information Systems, +** University of New South Wales, Sydney, Australia, 2002. +** +** Stone, Ronald C., P.A.S.P. 108, 1051-1058, 1996. +** +*/ + + + +void iauRm2v(double r[3][3], double w[3]) +/* +** - - - - - - - - +** i a u R m 2 v +** - - - - - - - - +** +** Express an r-matrix as an r-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] rotation matrix +** +** Returned: +** w double[3] rotation vector (Note 1) +** +** Notes: +** +** 1) A rotation matrix describes a rotation through some angle about +** some arbitrary axis called the Euler axis. The "rotation vector" +** returned by this function has the same direction as the Euler axis, +** and its magnitude is the angle in radians. (The magnitude and +** direction can be separated by means of the function iauPn.) +** +** 2) If r is null, so is the result. If r is not a rotation matrix +** the result is undefined; r must be proper (i.e. have a positive +** determinant) and real orthogonal (inverse = transpose). +** +** 3) The reference frame rotates clockwise as seen looking along +** the rotation vector from the origin. +** +*/ + + + +void iauRv2m(double w[3], double r[3][3]) +/* +** - - - - - - - - +** i a u R v 2 m +** - - - - - - - - +** +** Form the r-matrix corresponding to a given r-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** w double[3] rotation vector (Note 1) +** +** Returned: +** r double[3][3] rotation matrix +** +** Notes: +** +** 1) A rotation matrix describes a rotation through some angle about +** some arbitrary axis called the Euler axis. The "rotation vector" +** supplied to This function has the same direction as the Euler +** axis, and its magnitude is the angle in radians. +** +** 2) If w is null, the unit matrix is returned. +** +** 3) The reference frame rotates clockwise as seen looking along the +** rotation vector from the origin. +** +*/ + + + +void iauRx(double phi, double r[3][3]) +/* +** - - - - - - +** i a u R x +** - - - - - - +** +** Rotate an r-matrix about the x-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** phi double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive phi incorporates in the +** supplied r-matrix r an additional rotation, about the x-axis, +** anticlockwise as seen looking towards the origin from positive x. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( 1 0 0 ) +** ( ) +** ( 0 + cos(phi) + sin(phi) ) +** ( ) +** ( 0 - sin(phi) + cos(phi) ) +** +*/ + + + +void iauRxp(double r[3][3], double p[3], double rp[3]) +/* +** - - - - - - - +** i a u R x p +** - - - - - - - +** +** Multiply a p-vector by an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** p double[3] p-vector +** +** Returned: +** rp double[3] r * p +** +** Note: +** It is permissible for p and rp to be the same array. +** +** Called: +** iauCp copy p-vector +** +*/ + + + +void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3]) +/* +** - - - - - - - - +** i a u R x p v +** - - - - - - - - +** +** Multiply a pv-vector by an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** pv double[2][3] pv-vector +** +** Returned: +** rpv double[2][3] r * pv +** +** Note: +** It is permissible for pv and rpv to be the same array. +** +** Called: +** iauRxp product of r-matrix and p-vector +** +*/ + + + +void iauRxr(double a[3][3], double b[3][3], double atb[3][3]) +/* +** - - - - - - - +** i a u R x r +** - - - - - - - +** +** Multiply two r-matrices. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3][3] first r-matrix +** b double[3][3] second r-matrix +** +** Returned: +** atb double[3][3] a * b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauCr copy r-matrix +** +*/ + + + +void iauRy(double theta, double r[3][3]) +/* +** - - - - - - +** i a u R y +** - - - - - - +** +** Rotate an r-matrix about the y-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive theta incorporates in the +** supplied r-matrix r an additional rotation, about the y-axis, +** anticlockwise as seen looking towards the origin from positive y. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( + cos(theta) 0 - sin(theta) ) +** ( ) +** ( 0 1 0 ) +** ( ) +** ( + sin(theta) 0 + cos(theta) ) +** +*/ + + + +void iauRz(double psi, double r[3][3]) +/* +** - - - - - - +** i a u R z +** - - - - - - +** +** Rotate an r-matrix about the z-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** psi double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive psi incorporates in the +** supplied r-matrix r an additional rotation, about the z-axis, +** anticlockwise as seen looking towards the origin from positive z. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( + cos(psi) + sin(psi) 0 ) +** ( ) +** ( - sin(psi) + cos(psi) 0 ) +** ( ) +** ( 0 0 1 ) +** +*/ + + + +double iauS00(double date1, double date2, double x, double y) +/* +** - - - - - - - +** i a u S 0 0 +** - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, given the CIP's X,Y +** coordinates. Compatible with IAU 2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double CIP coordinates (Note 3) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems: the two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The quantity s remains below 0.1 arcsecond +** throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. This +** function requires X,Y to be supplied by the caller, who is +** responsible for providing values that are consistent with the +** supplied date. +** +** 4) The model is consistent with the IAU 2000A precession-nutation. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauS00a(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 0 a +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2000A +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. The present +** function uses the full IAU 2000A nutation model when predicting +** the CIP position. Faster results, with no significant loss of +** accuracy, can be obtained via the function iauS00b, which uses +** instead the IAU 2000B truncated model. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauBnp2xy extract CIP X,Y from the BPN matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauS00b(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 0 b +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2000B +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. The present +** function uses the IAU 2000B truncated nutation model when +** predicting the CIP position. The function iauS00a uses instead +** the full IAU 2000A model, but with no significant increase in +** accuracy and at some cost in speed. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauBnp2xy extract CIP X,Y from the BPN matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +double iauS06(double date1, double date2, double x, double y) +/* +** - - - - - - - +** i a u S 0 6 +** - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, given the CIP's X,Y +** coordinates. Compatible with IAU 2006/2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double CIP coordinates (Note 3) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems: the two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The quantity s remains below 0.1 arcsecond +** throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. This +** function requires X,Y to be supplied by the caller, who is +** responsible for providing values that are consistent with the +** supplied date. +** +** 4) The model is consistent with the "P03" precession (Capitaine et +** al. 2003), adopted by IAU 2006 Resolution 1, 2006, and the +** IAU 2000A nutation (with P03 adjustments). +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, Astron. +** Astrophys. 432, 355 +** +** McCarthy, D.D., Petit, G. (eds.) 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +*/ + + + +double iauS06a(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 6 a +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2006 +** precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series is +** more compact than a direct series for s would be. The present +** function uses the full IAU 2000A nutation model when predicting +** the CIP position. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauS2c(double theta, double phi, double c[3]) +/* +** - - - - - - - +** i a u S 2 c +** - - - - - - - +** +** Convert spherical coordinates to Cartesian. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** +** Returned: +** c double[3] direction cosines +** +*/ + + + +void iauS2p(double theta, double phi, double r, double p[3]) +/* +** - - - - - - - +** i a u S 2 p +** - - - - - - - +** +** Convert spherical polar coordinates to p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** +** Returned: +** p double[3] Cartesian coordinates +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauSxp multiply p-vector by scalar +** +*/ + + + +void iauS2pv(double theta, double phi, double r, + double td, double pd, double rd, + double pv[2][3]) +/* +** - - - - - - - - +** i a u S 2 p v +** - - - - - - - - +** +** Convert position/velocity from spherical to Cartesian coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** td double rate of change of theta +** pd double rate of change of phi +** rd double rate of change of r +** +** Returned: +** pv double[2][3] pv-vector +** +*/ + + + +void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]) +/* +** - - - - - - - - - +** i a u S 2 x p v +** - - - - - - - - - +** +** Multiply a pv-vector by two scalars. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s1 double scalar to multiply position component by +** s2 double scalar to multiply velocity component by +** pv double[2][3] pv-vector +** +** Returned: +** spv double[2][3] pv-vector: p scaled by s1, v scaled by s2 +** +** Note: +** It is permissible for pv and spv to be the same array. +** +** Called: +** iauSxp multiply p-vector by scalar +** +*/ + + + +double iauSepp(double a[3], double b[3]) +/* +** - - - - - - - - +** i a u S e p p +** - - - - - - - - +** +** Angular separation between two p-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector (not necessarily unit length) +** b double[3] second p-vector (not necessarily unit length) +** +** Returned (function value): +** double angular separation (radians, always positive) +** +** Notes: +** +** 1) If either vector is null, a zero result is returned. +** +** 2) The angular separation is most simply formulated in terms of +** scalar product. However, this gives poor accuracy for angles +** near zero and pi. The present algorithm uses both cross product +** and dot product, to deliver full accuracy whatever the size of +** the angle. +** +** Called: +** iauPxp vector product of two p-vectors +** iauPm modulus of p-vector +** iauPdp scalar product of two p-vectors +** +*/ + + + +double iauSeps(double al, double ap, double bl, double bp) +/* +** - - - - - - - - +** i a u S e p s +** - - - - - - - - +** +** Angular separation between two sets of spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** al double first longitude (radians) +** ap double first latitude (radians) +** bl double second longitude (radians) +** bp double second latitude (radians) +** +** Returned (function value): +** double angular separation (radians) +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauSepp angular separation between two p-vectors +** +*/ + + + +double iauSp00(double date1, double date2) +/* +** - - - - - - - - +** i a u S p 0 0 +** - - - - - - - - +** +** The TIO locator s', positioning the Terrestrial Intermediate Origin +** on the equator of the Celestial Intermediate Pole. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the TIO locator s' in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The TIO locator s' is obtained from polar motion observations by +** numerical integration, and so is in essence unpredictable. +** However, it is dominated by a secular drift of about +** 47 microarcseconds per century, which is the approximation +** evaluated by the present function. +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +int iauStarpm(double ra1, double dec1, + double pmr1, double pmd1, double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, + double *pmr2, double *pmd2, double *px2, double *rv2) +/* +** - - - - - - - - - - +** i a u S t a r p m +** - - - - - - - - - - +** +** Star proper motion: update star catalog data for space motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ra1 double right ascension (radians), before +** dec1 double declination (radians), before +** pmr1 double RA proper motion (radians/year), before +** pmd1 double Dec proper motion (radians/year), before +** px1 double parallax (arcseconds), before +** rv1 double radial velocity (km/s, +ve = receding), before +** ep1a double "before" epoch, part A (Note 1) +** ep1b double "before" epoch, part B (Note 1) +** ep2a double "after" epoch, part A (Note 1) +** ep2b double "after" epoch, part B (Note 1) +** +** Returned: +** ra2 double right ascension (radians), after +** dec2 double declination (radians), after +** pmr2 double RA proper motion (radians/year), after +** pmd2 double Dec proper motion (radians/year), after +** px2 double parallax (arcseconds), after +** rv2 double radial velocity (km/s, +ve = receding), after +** +** Returned (function value): +** int status: +** -1 = system error (should not occur) +** 0 = no warnings or errors +** 1 = distance overridden (Note 6) +** 2 = excessive velocity (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above warnings +** +** Notes: +** +** 1) The starting and ending TDB dates ep1a+ep1b and ep2a+ep2b are +** Julian Dates, apportioned in any convenient way between the two +** parts (A and B). For example, JD(TDB)=2450123.7 could be +** expressed in any of these ways, among others: +** +** epna epnb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per TDB +** Julian year. +** +** The parallax and radial velocity are in the same frame. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, +** is assumed. +** +** 6) An extremely small (or zero or negative) parallax is interpreted +** to mean that the object is on the "celestial sphere", the radius +** of which is an arbitrary (large) value (see the iauStarpv +** function for the value used). When the distance is overridden in +** this way, the status, initially zero, has 1 added to it. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX in the function iauStarpv), it is arbitrarily set +** to zero. When this action occurs, 2 is added to the status. +** +** 8) The relativistic adjustment carried out in the iauStarpv function +** involves an iterative calculation. If the process fails to +** converge within a set number of iterations, 4 is added to the +** status. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauPvu update a pv-vector +** iauPdp scalar product of two p-vectors +** iauPvstar space motion pv-vector to star catalog data +** +*/ + + + +int iauStarpv(double ra, double dec, + double pmr, double pmd, double px, double rv, + double pv[2][3]) +/* +** - - - - - - - - - - +** i a u S t a r p v +** - - - - - - - - - - +** +** Convert star catalog coordinates to position+velocity vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (Note 1): +** ra double right ascension (radians) +** dec double declination (radians) +** pmr double RA proper motion (radians/year) +** pmd double Dec proper motion (radians/year) +** px double parallax (arcseconds) +** rv double radial velocity (km/s, positive = receding) +** +** Returned (Note 2): +** pv double[2][3] pv-vector (au, au/day) +** +** Returned (function value): +** int status: +** 0 = no warnings +** 1 = distance overridden (Note 6) +** 2 = excessive speed (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above +** +** Notes: +** +** 1) The star data accepted by this function are "observables" for an +** imaginary observer at the solar-system barycenter. Proper motion +** and radial velocity are, strictly, in terms of barycentric +** coordinate time, TCB. For most practical applications, it is +** permissible to neglect the distinction between TCB and ordinary +** "proper" time on Earth (TT/TAI). The result will, as a rule, be +** limited by the intrinsic accuracy of the proper-motion and +** radial-velocity data; moreover, the pv-vector is likely to be +** merely an intermediate result, so that a change of time unit +** would cancel out overall. +** +** In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** 2) The resulting position and velocity pv-vector is with respect to +** the same frame and, like the catalog coordinates, is freed from +** the effects of secular aberration. Should the "coordinate +** direction", where the object was located at the catalog epoch, be +** required, it may be obtained by calculating the magnitude of the +** position vector pv[0][0-2] dividing by the speed of light in +** au/day to give the light-time, and then multiplying the space +** velocity pv[1][0-2] by this light-time and adding the result to +** pv[0][0-2]. +** +** Summarizing, the pv-vector returned is for most stars almost +** identical to the result of applying the standard geometrical +** "space motion" transformation. The differences, which are the +** subject of the Stumpff paper referenced below, are: +** +** (i) In stars with significant radial velocity and proper motion, +** the constantly changing light-time distorts the apparent proper +** motion. Note that this is a classical, not a relativistic, +** effect. +** +** (ii) The transformation complies with special relativity. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds; the radial velocity is in km/s, but +** the pv-vector result is in au and au/day. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, +** is assumed. +** +** 6) An extremely small (or zero or negative) parallax is interpreted +** to mean that the object is on the "celestial sphere", the radius +** of which is an arbitrary (large) value (see the constant PXMIN). +** When the distance is overridden in this way, the status, +** initially zero, has 1 added to it. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX), it is arbitrarily set to zero. When this action +** occurs, 2 is added to the status. +** +** 8) The relativistic adjustment involves an iterative calculation. +** If the process fails to converge within a set number (IMAX) of +** iterations, 4 is added to the status. +** +** 9) The inverse transformation is performed by the function +** iauPvstar. +** +** Called: +** iauS2pv spherical coordinates to pv-vector +** iauPm modulus of p-vector +** iauZp zero p-vector +** iauPn decompose p-vector into modulus and direction +** iauPdp scalar product of two p-vectors +** iauSxp multiply p-vector by scalar +** iauPmp p-vector minus p-vector +** iauPpp p-vector plus p-vector +** +** Reference: +** +** Stumpff, P., 1985, Astron.Astrophys. 144, 232-240. +** +*/ + + + +void iauSxp(double s, double p[3], double sp[3]) +/* +** - - - - - - - +** i a u S x p +** - - - - - - - +** +** Multiply a p-vector by a scalar. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s double scalar +** p double[3] p-vector +** +** Returned: +** sp double[3] s * p +** +** Note: +** It is permissible for p and sp to be the same array. +** +*/ + + + +void iauSxpv(double s, double pv[2][3], double spv[2][3]) +/* +** - - - - - - - - +** i a u S x p v +** - - - - - - - - +** +** Multiply a pv-vector by a scalar. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s double scalar +** pv double[2][3] pv-vector +** +** Returned: +** spv double[2][3] s * pv +** +** Note: +** It is permissible for pv and spv to be the same array +** +** Called: +** iauS2xpv multiply pv-vector by two scalars +** +*/ + + + +int iauTaitt(double tai1, double tai2, double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u T a i t t +** - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauTaiut1(double tai1, double tai2, double dta, + double *ut11, double *ut12) +/* +** - - - - - - - - - - +** i a u T a i u t 1 +** - - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Universal Time, UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date +** dta double UT1-TAI in seconds +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned +** UT11,UT12 follow suit. +** +** 2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is +** available from IERS tabulations. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2) +/* +** - - - - - - - - - - +** i a u T a i u t c +** - - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Coordinated Universal Time, UTC. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date (Note 1) +** +** Returned: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-3) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned utc1 +** and utc2 form an analogous pair, except that a special convention +** is used, to deal with the problem of leap seconds - see the next +** note. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. In the 1960-1972 era +** there were smaller jumps (in either direction) each time the +** linear UTC(TAI) expression was changed, and these "mini-leaps" +** are also included in the SOFA convention. +** +** 3) The function iauD2dtf can be used to transform the UTC quasi-JD +** into calendar date and clock time, including UTC leap second +** handling. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** Called: +** iauUtctai UTC to TAI +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2) +/* +** - - - - - - - - - - +** i a u T c b t d b +** - - - - - - - - - - +** +** Time scale transformation: Barycentric Coordinate Time, TCB, to +** Barycentric Dynamical Time, TDB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tcb1,tcb2 double TCB as a 2-part Julian Date +** +** Returned: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tcb1+tcb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tcb1 is the Julian +** Day Number and tcb2 is the fraction of a day. The returned +** tdb1,tdb2 follow suit. +** +** 2) The 2006 IAU General Assembly introduced a conventional linear +** transformation between TDB and TCB. This transformation +** compensates for the drift between TCB and terrestrial time TT, +** and keeps TDB approximately centered on TT. Because the +** relationship between TT and TCB depends on the adopted solar +** system ephemeris, the degree of alignment between TDB and TT over +** long intervals will vary according to which ephemeris is used. +** Former definitions of TDB attempted to avoid this problem by +** stipulating that TDB and TT should differ only by periodic +** effects. This is a good description of the nature of the +** relationship but eluded precise mathematical formulation. The +** conventional linear relationship adopted in 2006 sidestepped +** these difficulties whilst delivering a TDB that in practice was +** consistent with values before that date. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** Reference: +** +** IAU 2006 Resolution B3 +** +*/ + + + +int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u T c g t t +** - - - - - - - - - +** +** Time scale transformation: Geocentric Coordinate Time, TCG, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tcg1,tcg2 double TCG as a 2-part Julian Date +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tcg1+tcg2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tcg1 is the Julian +** Day Number and tcg22 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),. +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2000 Resolution B1.9 +** +*/ + + + +int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2) +/* +** - - - - - - - - - - +** i a u T d b t c b +** - - - - - - - - - - +** +** Time scale transformation: Barycentric Dynamical Time, TDB, to +** Barycentric Coordinate Time, TCB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned: +** tcb1,tcb2 double TCB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tdb1+tdb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tdb1 is the Julian +** Day Number and tdb2 is the fraction of a day. The returned +** tcb1,tcb2 follow suit. +** +** 2) The 2006 IAU General Assembly introduced a conventional linear +** transformation between TDB and TCB. This transformation +** compensates for the drift between TCB and terrestrial time TT, +** and keeps TDB approximately centered on TT. Because the +** relationship between TT and TCB depends on the adopted solar +** system ephemeris, the degree of alignment between TDB and TT over +** long intervals will vary according to which ephemeris is used. +** Former definitions of TDB attempted to avoid this problem by +** stipulating that TDB and TT should differ only by periodic +** effects. This is a good description of the nature of the +** relationship but eluded precise mathematical formulation. The +** conventional linear relationship adopted in 2006 sidestepped +** these difficulties whilst delivering a TDB that in practice was +** consistent with values before that date. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** Reference: +** +** IAU 2006 Resolution B3 +** +*/ + + + +int iauTdbtt(double tdb1, double tdb2, double dtr, + double *tt1, double *tt2 ) +/* +** - - - - - - - - - +** i a u T d b t t +** - - - - - - - - - +** +** Time scale transformation: Barycentric Dynamical Time, TDB, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** dtr double TDB-TT in seconds +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tdb1+tdb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tdb1 is the Julian +** Day Number and tdb2 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** 2) The argument dtr represents the quasi-periodic component of the +** GR transformation between TT and TCB. It is dependent upon the +** adopted solar-system ephemeris, and can be obtained by numerical +** integration, by interrogating a precomputed time ephemeris or by +** evaluating a model such as that implemented in the SOFA function +** iauDtdb. The quantity is dominated by an annual term of 1.7 ms +** amplitude. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2006 Resolution 3 +** +*/ + + + +int iauTf2a(char s, int ihour, int imin, double sec, double *rad) +/* +** - - - - - - - - +** i a u T f 2 a +** - - - - - - - - +** +** Convert hours, minutes, seconds to radians. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ihour int hours +** imin int minutes +** sec double seconds +** +** Returned: +** rad double angle in radians +** +** Returned (function value): +** int status: 0 = OK +** 1 = ihour outside range 0-23 +** 2 = imin outside range 0-59 +** 3 = sec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ihour, imin and/or sec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +*/ + + + +int iauTf2d(char s, int ihour, int imin, double sec, double *days) +/* +** - - - - - - - - +** i a u T f 2 d +** - - - - - - - - +** +** Convert hours, minutes, seconds to days. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ihour int hours +** imin int minutes +** sec double seconds +** +** Returned: +** days double interval in days +** +** Returned (function value): +** int status: 0 = OK +** 1 = ihour outside range 0-23 +** 2 = imin outside range 0-59 +** 3 = sec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ihour, imin and/or sec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +*/ + + + +int iauTpors(double xi, double eta, double a, double b, + double *a01, double *b01, double *a02, double *b02) +/* +** - - - - - - - - - +** i a u T p o r s +** - - - - - - - - - +** +** In the tangent plane projection, given the rectangular coordinates +** of a star and its spherical coordinates, determine the spherical +** coordinates of the tangent point. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** a,b double star's spherical coordinates (Note 3) +** +** Returned: +** *a01,*b01 double tangent point's spherical coordinates, Soln. 1 +** *a02,*b02 double tangent point's spherical coordinates, Soln. 2 +** +** Returned (function value): +** int number of solutions: +** 0 = no solutions returned (Note 5) +** 1 = only the first solution is useful (Note 6) +** 2 = both solutions are useful (Note 6) +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the spherical coordinates are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) All angular arguments are in radians. +** +** 4) The angles a01 and a02 are returned in the range 0-2pi. The +** angles b01 and b02 are returned in the range +/-pi, but in the +** usual, non-pole-crossing, case, the range is +/-pi/2. +** +** 5) Cases where there is no solution can arise only near the poles. +** For example, it is clearly impossible for a star at the pole +** itself to have a non-zero xi value, and hence it is meaningless +** to ask where the tangent point would have to be to bring about +** this combination of xi and dec. +** +** 6) Also near the poles, cases can arise where there are two useful +** solutions. The return value indicates whether the second of the +** two solutions returned is useful; 1 indicates only one useful +** solution, the usual case. +** +** 7) The basis of the algorithm is to solve the spherical triangle PSC, +** where P is the north celestial pole, S is the star and C is the +** tangent point. The spherical coordinates of the tangent point are +** [a0,b0]; writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), side c +** is then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be +** found) is (pi/2-b0). Angle C is given by sin(C) = xi/rho and +** cos(C) = eta/rho. Angle P (to be found) is the longitude +** difference between star and tangent point (a-a0). +** +** 8) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts iauTpstv star +** > iauTpors < iauTporv origin +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +int iauTporv(double xi, double eta, double v[3], + double v01[3], double v02[3]) +/* +** - - - - - - - - - +** i a u T p o r v +** - - - - - - - - - +** +** In the tangent plane projection, given the rectangular coordinates +** of a star and its direction cosines, determine the direction +** cosines of the tangent point. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** v double[3] star's direction cosines (Note 3) +** +** Returned: +** v01 double[3] tangent point's direction cosines, Solution 1 +** v02 double[3] tangent point's direction cosines, Solution 2 +** +** Returned (function value): +** int number of solutions: +** 0 = no solutions returned (Note 4) +** 1 = only the first solution is useful (Note 5) +** 2 = both solutions are useful (Note 5) +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The vector v must be of unit length or the result will be wrong. +** +** 4) Cases where there is no solution can arise only near the poles. +** For example, it is clearly impossible for a star at the pole +** itself to have a non-zero xi value, and hence it is meaningless +** to ask where the tangent point would have to be. +** +** 5) Also near the poles, cases can arise where there are two useful +** solutions. The return value indicates whether the second of the +** two solutions returned is useful; 1 indicates only one useful +** solution, the usual case. +** +** 6) The basis of the algorithm is to solve the spherical triangle +** PSC, where P is the north celestial pole, S is the star and C is +** the tangent point. Calling the celestial spherical coordinates +** of the star and tangent point (a,b) and (a0,b0) respectively, and +** writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), and +** transforming the vector v into (a,b) in the normal way, side c is +** then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be +** found) is (pi/2-b0), while angle C is given by sin(C) = xi/rho +** and cos(C) = eta/rho; angle P (to be found) is (a-a0). After +** solving the spherical triangle, the result (a0,b0) can be +** expressed in vector form as v0. +** +** 7) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts iauTpstv star +** iauTpors > iauTporv < origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +void iauTpsts(double xi, double eta, double a0, double b0, + double *a, double *b) +/* +** - - - - - - - - - +** i a u T p s t s +** - - - - - - - - - +** +** In the tangent plane projection, given the star's rectangular +** coordinates and the spherical coordinates of the tangent point, +** solve for the spherical coordinates of the star. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** a0,b0 double tangent point's spherical coordinates +** +** Returned: +** *a,*b double star's spherical coordinates +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the spherical coordinates are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) All angular arguments are in radians. +** +** 4) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** > iauTpsts < iauTpstv star +** iauTpors iauTporv origin +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +void iauTpstv(double xi, double eta, double v0[3], double v[3]) +/* +** - - - - - - - - - +** i a u T p s t v +** - - - - - - - - - +** +** In the tangent plane projection, given the star's rectangular +** coordinates and the direction cosines of the tangent point, solve +** for the direction cosines of the star. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** v0 double[3] tangent point's direction cosines +** +** Returned: +** v double[3] star's direction cosines +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The method used is to complete the star vector in the (xi,eta) +** based triad and normalize it, then rotate the triad to put the +** tangent point at the pole with the x-axis aligned to zero +** longitude. Writing (a0,b0) for the celestial spherical +** coordinates of the tangent point, the sequence of rotations is +** (b-pi/2) around the x-axis followed by (-a-pi/2) around the +** z-axis. +** +** 4) If vector v0 is not of unit length, the returned vector v will +** be wrong. +** +** 5) If vector v0 points at a pole, the returned vector v will be +** based on the arbitrary assumption that the longitude coordinate +** of the tangent point is zero. +** +** 6) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts > iauTpstv < star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +int iauTpxes(double a, double b, double a0, double b0, + double *xi, double *eta) +/* +** - - - - - - - - - +** i a u T p x e s +** - - - - - - - - - +** +** In the tangent plane projection, given celestial spherical +** coordinates for a star and the tangent point, solve for the star's +** rectangular coordinates in the tangent plane. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a,b double star's spherical coordinates +** a0,b0 double tangent point's spherical coordinates +** +** Returned: +** *xi,*eta double rectangular coordinates of star image (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** 1 = star too far from axis +** 2 = antistar on tangent plane +** 3 = antistar too far from axis +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". For right-handed spherical coordinates, +** (xi,eta) are also right-handed. The units of (xi,eta) are, +** effectively, radians at the tangent point. +** +** 3) All angular arguments are in radians. +** +** 4) This function is a member of the following set: +** +** spherical vector solve for +** +** > iauTpxes < iauTpxev xi,eta +** iauTpsts iauTpstv star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +int iauTpxev(double v[3], double v0[3], double *xi, double *eta) +/* +** - - - - - - - - - +** i a u T p x e v +** - - - - - - - - - +** +** In the tangent plane projection, given celestial direction cosines +** for a star and the tangent point, solve for the star's rectangular +** coordinates in the tangent plane. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** v double[3] direction cosines of star (Note 4) +** v0 double[3] direction cosines of tangent point (Note 4) +** +** Returned: +** *xi,*eta double tangent plane coordinates of star +** +** Returned (function value): +** int status: 0 = OK +** 1 = star too far from axis +** 2 = antistar on tangent plane +** 3 = antistar too far from axis +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The method used is to extend the star vector to the tangent +** plane and then rotate the triad so that (x,y) becomes (xi,eta). +** Writing (a,b) for the celestial spherical coordinates of the +** star, the sequence of rotations is (a+pi/2) around the z-axis +** followed by (pi/2-b) around the x-axis. +** +** 4) If vector v0 is not of unit length, or if vector v is of zero +** length, the results will be wrong. +** +** 5) If v0 points at a pole, the returned (xi,eta) will be based on +** the arbitrary assumption that the longitude coordinate of the +** tangent point is zero. +** +** 6) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes > iauTpxev < xi,eta +** iauTpsts iauTpstv star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +*/ + + + +void iauTr(double r[3][3], double rt[3][3]) +/* +** - - - - - - +** i a u T r +** - - - - - - +** +** Transpose an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** +** Returned: +** rt double[3][3] transpose +** +** Note: +** It is permissible for r and rt to be the same array. +** +** Called: +** iauCr copy r-matrix +** +*/ + + + +void iauTrxp(double r[3][3], double p[3], double trp[3]) +/* +** - - - - - - - - +** i a u T r x p +** - - - - - - - - +** +** Multiply a p-vector by the transpose of an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** p double[3] p-vector +** +** Returned: +** trp double[3] r^T * p +** +** Note: +** It is permissible for p and trp to be the same array. +** +** Called: +** iauTr transpose r-matrix +** iauRxp product of r-matrix and p-vector +** +*/ + + + +void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]) +/* +** - - - - - - - - - +** i a u T r x p v +** - - - - - - - - - +** +** Multiply a pv-vector by the transpose of an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** pv double[2][3] pv-vector +** +** Returned: +** trpv double[2][3] r * pv +** +** Note: +** It is permissible for pv and trpv to be the same array. +** +** Called: +** iauTr transpose r-matrix +** iauRxpv product of r-matrix and pv-vector +** +*/ + + + +int iauTttai(double tt1, double tt2, double *tai1, double *tai2) +/* +** - - - - - - - - - +** i a u T t t a i +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to International +** Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tai1,tai2 follow +** suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2) +/* +** - - - - - - - - - +** i a u T t t c g +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Geocentric +** Coordinate Time, TCG. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned: +** tcg1,tcg2 double TCG as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tcg1,tcg2 follow +** suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2000 Resolution B1.9 +** +*/ + + + +int iauTttdb(double tt1, double tt2, double dtr, + double *tdb1, double *tdb2) +/* +** - - - - - - - - - +** i a u T t t d b +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Barycentric +** Dynamical Time, TDB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** dtr double TDB-TT in seconds +** +** Returned: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tdb1,tdb2 follow +** suit. +** +** 2) The argument dtr represents the quasi-periodic component of the +** GR transformation between TT and TCB. It is dependent upon the +** adopted solar-system ephemeris, and can be obtained by numerical +** integration, by interrogating a precomputed time ephemeris or by +** evaluating a model such as that implemented in the SOFA function +** iauDtdb. The quantity is dominated by an annual term of 1.7 ms +** amplitude. +** +** 3) TDB is essentially the same as Teph, the time argument for the JPL +** solar system ephemerides. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2006 Resolution 3 +** +*/ + + + +int iauTtut1(double tt1, double tt2, double dt, + double *ut11, double *ut12) +/* +** - - - - - - - - - +** i a u T t u t 1 +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Universal Time, +** UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** dt double TT-UT1 in seconds +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned ut11,ut12 follow +** suit. +** +** 2) The argument dt is classical Delta T. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauUt1tai(double ut11, double ut12, double dta, + double *tai1, double *tai2) +/* +** - - - - - - - - - - +** i a u U t 1 t a i +** - - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to International +** Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date +** dta double UT1-TAI in seconds +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned +** tai1,tai2 follow suit. +** +** 2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is +** available from IERS tabulations. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauUt1tt(double ut11, double ut12, double dt, + double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u U t 1 t t +** - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to Terrestrial +** Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date +** dt double TT-UT1 in seconds +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** 2) The argument dt is classical Delta T. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauUt1utc(double ut11, double ut12, double dut1, + double *utc1, double *utc2) +/* +** - - - - - - - - - - +** i a u U t 1 u t c +** - - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to Coordinated +** Universal Time, UTC. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date (Note 1) +** dut1 double Delta UT1: UT1-UTC in seconds (Note 2) +** +** Returned: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 3,4) +** +** Returned (function value): +** int status: +1 = dubious year (Note 5) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned utc1 +** and utc2 form an analogous pair, except that a special convention +** is used, to deal with the problem of leap seconds - see Note 3. +** +** 2) Delta UT1 can be obtained from tabulations provided by the +** International Earth Rotation and Reference Systems Service. The +** value changes abruptly by 1s at a leap second; however, close to +** a leap second the algorithm used here is tolerant of the "wrong" +** choice of value being made. +** +** 3) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the returned quasi JD day UTC1+UTC2 represents +** UTC days whether the length is 86399, 86400 or 86401 SI seconds. +** +** 4) The function iauD2dtf can be used to transform the UTC quasi-JD +** into calendar date and clock time, including UTC leap second +** handling. +** +** 5) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauCal2jd Gregorian calendar to JD +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauUtctai(double utc1, double utc2, double *tai1, double *tai2) +/* +** - - - - - - - - - - +** i a u U t c t a i +** - - - - - - - - - - +** +** Time scale transformation: Coordinated Universal Time, UTC, to +** International Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4) +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date (Note 5) +** +** Returned (function value): +** int status: +1 = dubious year (Note 3) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. In the 1960-1972 era +** there were smaller jumps (in either direction) each time the +** linear UTC(TAI) expression was changed, and these "mini-leaps" +** are also included in the SOFA convention. +** +** 3) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 4) The function iauDtf2d converts from calendar date and time of day +** into 2-part Julian Date, and in the case of UTC implements the +** leap-second-ambiguity convention described above. +** +** 5) The returned TAI1,TAI2 are such that their sum is the TAI Julian +** Date. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauCal2jd Gregorian calendar to JD +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +*/ + + + +int iauUtcut1(double utc1, double utc2, double dut1, + double *ut11, double *ut12) +/* +** - - - - - - - - - - +** i a u U t c u t 1 +** - - - - - - - - - - +** +** Time scale transformation: Coordinated Universal Time, UTC, to +** Universal Time, UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4) +** dut1 double Delta UT1 = UT1-UTC in seconds (Note 5) +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date (Note 6) +** +** Returned (function value): +** int status: +1 = dubious year (Note 3) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. +** +** 3) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 4) The function iauDtf2d converts from calendar date and time of +** day into 2-part Julian Date, and in the case of UTC implements +** the leap-second-ambiguity convention described above. +** +** 5) Delta UT1 can be obtained from tabulations provided by the +** International Earth Rotation and Reference Systems Service. +** It is the caller's responsibility to supply a dut1 argument +** containing the UT1-UTC value that matches the given UTC. +** +** 6) The returned ut11,ut12 are such that their sum is the UT1 Julian +** Date. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauUtctai UTC to TAI +** iauTaiut1 TAI to UT1 +** +*/ + + + +void iauXy06(double date1, double date2, double *x, double *y) +/* +** - - - - - - - - +** i a u X y 0 6 +** - - - - - - - - +** +** X,Y coordinates of celestial intermediate pole from series based +** on IAU 2006 precession and IAU 2000A nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double CIP X,Y coordinates (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The X,Y coordinates are those of the unit vector towards the +** celestial intermediate pole. They represent the combined effects +** of frame bias, precession and nutation. +** +** 3) The fundamental arguments used are as adopted in IERS Conventions +** (2003) and are from Simon et al. (1994) and Souchay et al. +** (1999). +** +** 4) This is an alternative to the angles-based method, via the SOFA +** function iauFw2xy and as used in iauXys06a for example. The two +** methods agree at the 1 microarcsecond level (at present), a +** negligible amount compared with the intrinsic accuracy of the +** models. However, it would be unwise to mix the two methods +** (angles-based and series-based) in a single application. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFame03 mean longitude of Mercury +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFama03 mean longitude of Mars +** iauFaju03 mean longitude of Jupiter +** iauFasa03 mean longitude of Saturn +** iauFaur03 mean longitude of Uranus +** iauFane03 mean longitude of Neptune +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, +** Astron.Astrophys., 412, 567 +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G. & Laskar, J., Astron.Astrophys., 1994, 282, 663 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M., 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauXys00a(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 0 a +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2000A +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) A faster, but slightly less accurate result (about 1 mas for +** X,Y), can be obtained by using instead the iauXys00b function. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauXys00b(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 0 b +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2000B +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) The present function is faster, but slightly less accurate (about +** 1 mas in X,Y), than the iauXys00a function. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +*/ + + + +void iauXys06a(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 6 a +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2006 +** precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y components +** of the unit vector in the Geocentric Celestial Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) Series-based solutions for generating X and Y are also available: +** see Capitaine & Wallace (2006) and iauXy06. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +*/ + + + +void iauZp(double p[3]) +/* +** - - - - - - +** i a u Z p +** - - - - - - +** +** Zero a p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** p double[3] p-vector +** +*/ + + + +void iauZpv(double pv[2][3]) +/* +** - - - - - - - +** i a u Z p v +** - - - - - - - +** +** Zero a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** pv double[2][3] pv-vector +** +** Called: +** iauZp zero p-vector +** +*/ + + + +void iauZr(double r[3][3]) +/* +** - - - - - - +** i a u Z r +** - - - - - - +** +** Initialize an r-matrix to the null matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** r double[3][3] r-matrix +** +*/ + +copyr.lis 2020 June 2 + + +COPYRIGHT NOTICE + +Text equivalent to that below appears at the end of every SOFA routine +(with one exception). There are small formatting differences between +the Fortran and C versions. + +The one exception is the "leap second" routine DAT. This uniquely is +classified as "user replaceable", and has a mitigated license statement +that permits the distribution of local variants under the same name. +This measure allows other SOFA routines to call the local variant, which +may be file or network based, or otherwise equipped to pick up IERS leap +second updates with no need to download new SOFA code. + +*+---------------------------------------------------------------------- +* +* Copyright (C) 2020 +* Standards Of Fundamental Astronomy Board +* of the International Astronomical Union. +* +* ===================== +* SOFA Software License +* ===================== +* +* NOTICE TO USER: +* +* BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +* CONDITIONS WHICH APPLY TO ITS USE. +* +* 1. The Software is owned by the IAU SOFA Board ("SOFA"). +* +* 2. Permission is granted to anyone to use the SOFA software for any +* purpose, including commercial applications, free of charge and +* without payment of royalties, subject to the conditions and +* restrictions listed below. +* +* 3. You (the user) may copy and distribute SOFA source code to others, +* and use and adapt its code and algorithms in your own software, +* on a world-wide, royalty-free basis. That portion of your +* distribution that does not consist of intact and unchanged copies +* of SOFA source code files is a "derived work" that must comply +* with the following requirements: +* +* a) Your work shall be marked or carry a statement that it +* (i) uses routines and computations derived by you from +* software provided by SOFA under license to you; and +* (ii) does not itself constitute software provided by and/or +* endorsed by SOFA. +* +* b) The source code of your derived work must contain descriptions +* of how the derived work is based upon, contains and/or differs +* from the original SOFA software. +* +* c) The names of all routines in your derived work shall not +* include the prefix "iau" or "sofa" or trivial modifications +* thereof such as changes of case. +* +* d) The origin of the SOFA components of your derived work must +* not be misrepresented; you must not claim that you wrote the +* original software, nor file a patent application for SOFA +* software or algorithms embedded in the SOFA software. +* +* e) These requirements must be reproduced intact in any source +* distribution and shall apply to anyone to whom you have +* granted a further right to modify the source code of your +* derived work. +* +* Note that, as originally distributed, the SOFA software is +* intended to be a definitive implementation of the IAU standards, +* and consequently third-party modifications are discouraged. All +* variations, no matter how minor, must be explicitly marked as +* such, as explained above. +* +* 4. You shall not cause the SOFA software to be brought into +* disrepute, either by misuse, or use for inappropriate tasks, or +* by inappropriate modification. +* +* 5. The SOFA software is provided "as is" and SOFA makes no warranty +* as to its use or performance. SOFA does not and cannot warrant +* the performance or results which the user may obtain by using the +* SOFA software. SOFA makes no warranties, express or implied, as +* to non-infringement of third party rights, merchantability, or +* fitness for any particular purpose. In no event will SOFA be +* liable to the user for any consequential, incidental, or special +* damages, including any lost profits or lost savings, even if a +* SOFA representative has been advised of such damages, or for any +* claim by any third party. +* +* 6. The provision of any version of the SOFA software under the terms +* and conditions specified herein does not imply that future +* versions will also be made available under the same terms and +* conditions. +* +* In any published work or commercial product which uses the SOFA +* software directly, acknowledgement (see www.iausofa.org) is +* appreciated. +* +* Correspondence concerning SOFA software should be addressed as +* follows: +* +* By email: sofa@ukho.gov.uk +* By post: IAU SOFA Center +* HM Nautical Almanac Office +* UK Hydrographic Office +* Admiralty Way, Taunton +* Somerset, TA1 2DN +* United Kingdom +* +*----------------------------------------------------------------------- + +consts.lis 2008 September 30 + + +SOFA Fortran constants +---------------------- + +These must be used exactly as presented below. + +* Pi + DOUBLE PRECISION DPI + PARAMETER ( DPI = 3.141592653589793238462643D0 ) + +* 2Pi + DOUBLE PRECISION D2PI + PARAMETER ( D2PI = 6.283185307179586476925287D0 ) + +* Radians to hours + DOUBLE PRECISION DR2H + PARAMETER ( DR2H = 3.819718634205488058453210D0 ) + +* Radians to seconds + DOUBLE PRECISION DR2S + PARAMETER ( DR2S = 13750.98708313975701043156D0 ) + +* Radians to degrees + DOUBLE PRECISION DR2D + PARAMETER ( DR2D = 57.29577951308232087679815D0 ) + +* Radians to arc seconds + DOUBLE PRECISION DR2AS + PARAMETER ( DR2AS = 206264.8062470963551564734D0 ) + +* Hours to radians + DOUBLE PRECISION DH2R + PARAMETER ( DH2R = 0.2617993877991494365385536D0 ) + +* Seconds to radians + DOUBLE PRECISION DS2R + PARAMETER ( DS2R = 7.272205216643039903848712D-5 ) + +* Degrees to radians + DOUBLE PRECISION DD2R + PARAMETER ( DD2R = 1.745329251994329576923691D-2 ) + +* Arc seconds to radians + DOUBLE PRECISION DAS2R + PARAMETER ( DAS2R = 4.848136811095359935899141D-6 ) + + +SOFA C constants +---------------- + +The constants used by the C version of SOFA are defined in the header +file sofam.h. + +#ifndef SOFAHDEF +#define SOFAHDEF + +/* +** - - - - - - - +** s o f a . h +** - - - - - - - +** +** Prototype function declarations for SOFA library. +** +** This file is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** This revision: 2018 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +#include "sofam.h" +#include "math.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Astronomy/Calendars */ +int iauCal2jd(int iy, int im, int id, double *djm0, double *djm); +double iauEpb(double dj1, double dj2); +void iauEpb2jd(double epb, double *djm0, double *djm); +double iauEpj(double dj1, double dj2); +void iauEpj2jd(double epj, double *djm0, double *djm); +int iauJd2cal(double dj1, double dj2, + int *iy, int *im, int *id, double *fd); +int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4]); + +/* Astronomy/Astrometry */ +void iauAb(double pnat[3], double v[3], double s, double bm1, + double ppr[3]); +void iauApcg(double date1, double date2, + double ebpv[2][3], double ehp[3], + iauASTROM *astrom); +void iauApcg13(double date1, double date2, iauASTROM *astrom); +void iauApci(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, + iauASTROM *astrom); +void iauApci13(double date1, double date2, + iauASTROM *astrom, double *eo); +void iauApco(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, double theta, + double elong, double phi, double hm, + double xp, double yp, double sp, + double refa, double refb, + iauASTROM *astrom); +int iauApco13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom, double *eo); +void iauApcs(double date1, double date2, double pv[2][3], + double ebpv[2][3], double ehp[3], + iauASTROM *astrom); +void iauApcs13(double date1, double date2, double pv[2][3], + iauASTROM *astrom); +void iauAper(double theta, iauASTROM *astrom); +void iauAper13(double ut11, double ut12, iauASTROM *astrom); +void iauApio(double sp, double theta, + double elong, double phi, double hm, double xp, double yp, + double refa, double refb, + iauASTROM *astrom); +int iauApio13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom); +void iauAtci13(double rc, double dc, + double pr, double pd, double px, double rv, + double date1, double date2, + double *ri, double *di, double *eo); +void iauAtciq(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + double *ri, double *di); +void iauAtciqn(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + int n, iauLDBODY b[], double *ri, double *di); +void iauAtciqz(double rc, double dc, iauASTROM *astrom, + double *ri, double *di); +int iauAtco13(double rc, double dc, + double pr, double pd, double px, double rv, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob, double *eo); +void iauAtic13(double ri, double di, + double date1, double date2, + double *rc, double *dc, double *eo); +void iauAticq(double ri, double di, iauASTROM *astrom, + double *rc, double *dc); +void iauAticqn(double ri, double di, iauASTROM *astrom, + int n, iauLDBODY b[], double *rc, double *dc); +int iauAtio13(double ri, double di, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob); +void iauAtioq(double ri, double di, iauASTROM *astrom, + double *aob, double *zob, + double *hob, double *dob, double *rob); +int iauAtoc13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *rc, double *dc); +int iauAtoi13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *ri, double *di); +void iauAtoiq(const char *type, + double ob1, double ob2, iauASTROM *astrom, + double *ri, double *di); +void iauLd(double bm, double p[3], double q[3], double e[3], + double em, double dlim, double p1[3]); +void iauLdn(int n, iauLDBODY b[], double ob[3], double sc[3], + double sn[3]); +void iauLdsun(double p[3], double e[3], double em, double p1[3]); +void iauPmpx(double rc, double dc, double pr, double pd, + double px, double rv, double pmt, double pob[3], + double pco[3]); +int iauPmsafe(double ra1, double dec1, double pmr1, double pmd1, + double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, double *pmr2, double *pmd2, + double *px2, double *rv2); +void iauPvtob(double elong, double phi, double height, double xp, + double yp, double sp, double theta, double pv[2][3]); +void iauRefco(double phpa, double tc, double rh, double wl, + double *refa, double *refb); + +/* Astronomy/Ephemerides */ +int iauEpv00(double date1, double date2, + double pvh[2][3], double pvb[2][3]); +int iauPlan94(double date1, double date2, int np, double pv[2][3]); + +/* Astronomy/FundamentalArgs */ +double iauFad03(double t); +double iauFae03(double t); +double iauFaf03(double t); +double iauFaju03(double t); +double iauFal03(double t); +double iauFalp03(double t); +double iauFama03(double t); +double iauFame03(double t); +double iauFane03(double t); +double iauFaom03(double t); +double iauFapa03(double t); +double iauFasa03(double t); +double iauFaur03(double t); +double iauFave03(double t); + +/* Astronomy/PrecNutPolar */ +void iauBi00(double *dpsibi, double *depsbi, double *dra); +void iauBp00(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]); +void iauBp06(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]); +void iauBpn2xy(double rbpn[3][3], double *x, double *y); +void iauC2i00a(double date1, double date2, double rc2i[3][3]); +void iauC2i00b(double date1, double date2, double rc2i[3][3]); +void iauC2i06a(double date1, double date2, double rc2i[3][3]); +void iauC2ibpn(double date1, double date2, double rbpn[3][3], + double rc2i[3][3]); +void iauC2ixy(double date1, double date2, double x, double y, + double rc2i[3][3]); +void iauC2ixys(double x, double y, double s, double rc2i[3][3]); +void iauC2t00a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2t00b(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2t06a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3], + double rc2t[3][3]); +void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3], + double rc2t[3][3]); +void iauC2tpe(double tta, double ttb, double uta, double utb, + double dpsi, double deps, double xp, double yp, + double rc2t[3][3]); +void iauC2txy(double tta, double ttb, double uta, double utb, + double x, double y, double xp, double yp, + double rc2t[3][3]); +double iauEo06a(double date1, double date2); +double iauEors(double rnpb[3][3], double s); +void iauFw2m(double gamb, double phib, double psi, double eps, + double r[3][3]); +void iauFw2xy(double gamb, double phib, double psi, double eps, + double *x, double *y); +void iauLtp(double epj, double rp[3][3]); +void iauLtpb(double epj, double rpb[3][3]); +void iauLtpecl(double epj, double vec[3]); +void iauLtpequ(double epj, double veq[3]); +void iauNum00a(double date1, double date2, double rmatn[3][3]); +void iauNum00b(double date1, double date2, double rmatn[3][3]); +void iauNum06a(double date1, double date2, double rmatn[3][3]); +void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3]); +void iauNut00a(double date1, double date2, double *dpsi, double *deps); +void iauNut00b(double date1, double date2, double *dpsi, double *deps); +void iauNut06a(double date1, double date2, double *dpsi, double *deps); +void iauNut80(double date1, double date2, double *dpsi, double *deps); +void iauNutm80(double date1, double date2, double rmatn[3][3]); +double iauObl06(double date1, double date2); +double iauObl80(double date1, double date2); +void iauP06e(double date1, double date2, + double *eps0, double *psia, double *oma, double *bpa, + double *bqa, double *pia, double *bpia, + double *epsa, double *chia, double *za, double *zetaa, + double *thetaa, double *pa, + double *gam, double *phi, double *psi); +void iauPb06(double date1, double date2, + double *bzeta, double *bz, double *btheta); +void iauPfw06(double date1, double date2, + double *gamb, double *phib, double *psib, double *epsa); +void iauPmat00(double date1, double date2, double rbp[3][3]); +void iauPmat06(double date1, double date2, double rbp[3][3]); +void iauPmat76(double date1, double date2, double rmatp[3][3]); +void iauPn00(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn00a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn00b(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn06(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn06a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPnm00a(double date1, double date2, double rbpn[3][3]); +void iauPnm00b(double date1, double date2, double rbpn[3][3]); +void iauPnm06a(double date1, double date2, double rnpb[3][3]); +void iauPnm80(double date1, double date2, double rmatpn[3][3]); +void iauPom00(double xp, double yp, double sp, double rpom[3][3]); +void iauPr00(double date1, double date2, + double *dpsipr, double *depspr); +void iauPrec76(double date01, double date02, + double date11, double date12, + double *zeta, double *z, double *theta); +double iauS00(double date1, double date2, double x, double y); +double iauS00a(double date1, double date2); +double iauS00b(double date1, double date2); +double iauS06(double date1, double date2, double x, double y); +double iauS06a(double date1, double date2); +double iauSp00(double date1, double date2); +void iauXy06(double date1, double date2, double *x, double *y); +void iauXys00a(double date1, double date2, + double *x, double *y, double *s); +void iauXys00b(double date1, double date2, + double *x, double *y, double *s); +void iauXys06a(double date1, double date2, + double *x, double *y, double *s); + +/* Astronomy/RotationAndTime */ +double iauEe00(double date1, double date2, double epsa, double dpsi); +double iauEe00a(double date1, double date2); +double iauEe00b(double date1, double date2); +double iauEe06a(double date1, double date2); +double iauEect00(double date1, double date2); +double iauEqeq94(double date1, double date2); +double iauEra00(double dj1, double dj2); +double iauGmst00(double uta, double utb, double tta, double ttb); +double iauGmst06(double uta, double utb, double tta, double ttb); +double iauGmst82(double dj1, double dj2); +double iauGst00a(double uta, double utb, double tta, double ttb); +double iauGst00b(double uta, double utb); +double iauGst06(double uta, double utb, double tta, double ttb, + double rnpb[3][3]); +double iauGst06a(double uta, double utb, double tta, double ttb); +double iauGst94(double uta, double utb); + +/* Astronomy/SpaceMotion */ +int iauPvstar(double pv[2][3], double *ra, double *dec, + double *pmr, double *pmd, double *px, double *rv); +int iauStarpv(double ra, double dec, + double pmr, double pmd, double px, double rv, + double pv[2][3]); + +/* Astronomy/StarCatalogs */ + +void iauFk425(double r1950, double d1950, + double dr1950, double dd1950, + double p1950, double v1950, + double *r2000, double *d2000, + double *dr2000, double *dd2000, + double *p2000, double *v2000); +void iauFk45z(double r1950, double d1950, double bepoch, + double *r2000, double *d2000); +void iauFk524(double r2000, double d2000, + double dr2000, double dd2000, + double p2000, double v2000, + double *r1950, double *d1950, + double *dr1950, double *dd1950, + double *p1950, double *v1950); +void iauFk52h(double r5, double d5, + double dr5, double dd5, double px5, double rv5, + double *rh, double *dh, + double *drh, double *ddh, double *pxh, double *rvh); +void iauFk54z(double r2000, double d2000, double bepoch, + double *r1950, double *d1950, + double *dr1950, double *dd1950); +void iauFk5hip(double r5h[3][3], double s5h[3]); +void iauFk5hz(double r5, double d5, double date1, double date2, + double *rh, double *dh); +void iauH2fk5(double rh, double dh, + double drh, double ddh, double pxh, double rvh, + double *r5, double *d5, + double *dr5, double *dd5, double *px5, double *rv5); +void iauHfk5z(double rh, double dh, double date1, double date2, + double *r5, double *d5, double *dr5, double *dd5); +int iauStarpm(double ra1, double dec1, + double pmr1, double pmd1, double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, + double *pmr2, double *pmd2, double *px2, double *rv2); + +/* Astronomy/EclipticCoordinates */ +void iauEceq06(double date1, double date2, double dl, double db, + double *dr, double *dd); +void iauEcm06(double date1, double date2, double rm[3][3]); +void iauEqec06(double date1, double date2, double dr, double dd, + double *dl, double *db); +void iauLteceq(double epj, double dl, double db, double *dr, double *dd); +void iauLtecm(double epj, double rm[3][3]); +void iauLteqec(double epj, double dr, double dd, double *dl, double *db); + +/* Astronomy/GalacticCoordinates */ +void iauG2icrs(double dl, double db, double *dr, double *dd); +void iauIcrs2g(double dr, double dd, double *dl, double *db); + +/* Astronomy/GeodeticGeocentric */ +int iauEform(int n, double *a, double *f); +int iauGc2gd(int n, double xyz[3], + double *elong, double *phi, double *height); +int iauGc2gde(double a, double f, double xyz[3], + double *elong, double *phi, double *height); +int iauGd2gc(int n, double elong, double phi, double height, + double xyz[3]); +int iauGd2gce(double a, double f, + double elong, double phi, double height, double xyz[3]); + +/* Astronomy/Timescales */ +int iauD2dtf(const char *scale, int ndp, double d1, double d2, + int *iy, int *im, int *id, int ihmsf[4]); +int iauDat(int iy, int im, int id, double fd, double *deltat); +double iauDtdb(double date1, double date2, + double ut, double elong, double u, double v); +int iauDtf2d(const char *scale, int iy, int im, int id, + int ihr, int imn, double sec, double *d1, double *d2); +int iauTaitt(double tai1, double tai2, double *tt1, double *tt2); +int iauTaiut1(double tai1, double tai2, double dta, + double *ut11, double *ut12); +int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2); +int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2); +int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2); +int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2); +int iauTdbtt(double tdb1, double tdb2, double dtr, + double *tt1, double *tt2); +int iauTttai(double tt1, double tt2, double *tai1, double *tai2); +int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2); +int iauTttdb(double tt1, double tt2, double dtr, + double *tdb1, double *tdb2); +int iauTtut1(double tt1, double tt2, double dt, + double *ut11, double *ut12); +int iauUt1tai(double ut11, double ut12, double dta, + double *tai1, double *tai2); +int iauUt1tt(double ut11, double ut12, double dt, + double *tt1, double *tt2); +int iauUt1utc(double ut11, double ut12, double dut1, + double *utc1, double *utc2); +int iauUtctai(double utc1, double utc2, double *tai1, double *tai2); +int iauUtcut1(double utc1, double utc2, double dut1, + double *ut11, double *ut12); + +/* Astronomy/HorizonEquatorial */ +void iauAe2hd(double az, double el, double phi, + double *ha, double *dec); +void iauHd2ae(double ha, double dec, double phi, + double *az, double *el); +double iauHd2pa(double ha, double dec, double phi); + +/* Astronomy/Gnomonic */ +int iauTpors(double xi, double eta, double a, double b, + double *a01, double *b01, double *a02, double *b02); +int iauTporv(double xi, double eta, double v[3], + double v01[3], double v02[3]); +void iauTpsts(double xi, double eta, double a0, double b0, + double *a, double *b); +void iauTpstv(double xi, double eta, double v0[3], double v[3]); +int iauTpxes(double a, double b, double a0, double b0, + double *xi, double *eta); +int iauTpxev(double v[3], double v0[3], double *xi, double *eta); + +/* VectorMatrix/AngleOps */ +void iauA2af(int ndp, double angle, char *sign, int idmsf[4]); +void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4]); +int iauAf2a(char s, int ideg, int iamin, double asec, double *rad); +double iauAnp(double a); +double iauAnpm(double a); +void iauD2tf(int ndp, double days, char *sign, int ihmsf[4]); +int iauTf2a(char s, int ihour, int imin, double sec, double *rad); +int iauTf2d(char s, int ihour, int imin, double sec, double *days); + +/* VectorMatrix/BuildRotations */ +void iauRx(double phi, double r[3][3]); +void iauRy(double theta, double r[3][3]); +void iauRz(double psi, double r[3][3]); + +/* VectorMatrix/CopyExtendExtract */ +void iauCp(double p[3], double c[3]); +void iauCpv(double pv[2][3], double c[2][3]); +void iauCr(double r[3][3], double c[3][3]); +void iauP2pv(double p[3], double pv[2][3]); +void iauPv2p(double pv[2][3], double p[3]); + +/* VectorMatrix/Initialization */ +void iauIr(double r[3][3]); +void iauZp(double p[3]); +void iauZpv(double pv[2][3]); +void iauZr(double r[3][3]); + +/* VectorMatrix/MatrixOps */ +void iauRxr(double a[3][3], double b[3][3], double atb[3][3]); +void iauTr(double r[3][3], double rt[3][3]); + +/* VectorMatrix/MatrixVectorProducts */ +void iauRxp(double r[3][3], double p[3], double rp[3]); +void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3]); +void iauTrxp(double r[3][3], double p[3], double trp[3]); +void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]); + +/* VectorMatrix/RotationVectors */ +void iauRm2v(double r[3][3], double w[3]); +void iauRv2m(double w[3], double r[3][3]); + +/* VectorMatrix/SeparationAndAngle */ +double iauPap(double a[3], double b[3]); +double iauPas(double al, double ap, double bl, double bp); +double iauSepp(double a[3], double b[3]); +double iauSeps(double al, double ap, double bl, double bp); + +/* VectorMatrix/SphericalCartesian */ +void iauC2s(double p[3], double *theta, double *phi); +void iauP2s(double p[3], double *theta, double *phi, double *r); +void iauPv2s(double pv[2][3], + double *theta, double *phi, double *r, + double *td, double *pd, double *rd); +void iauS2c(double theta, double phi, double c[3]); +void iauS2p(double theta, double phi, double r, double p[3]); +void iauS2pv(double theta, double phi, double r, + double td, double pd, double rd, + double pv[2][3]); + +/* VectorMatrix/VectorOps */ +double iauPdp(double a[3], double b[3]); +double iauPm(double p[3]); +void iauPmp(double a[3], double b[3], double amb[3]); +void iauPn(double p[3], double *r, double u[3]); +void iauPpp(double a[3], double b[3], double apb[3]); +void iauPpsp(double a[3], double s, double b[3], double apsb[3]); +void iauPvdpv(double a[2][3], double b[2][3], double adb[2]); +void iauPvm(double pv[2][3], double *r, double *s); +void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3]); +void iauPvppv(double a[2][3], double b[2][3], double apb[2][3]); +void iauPvu(double dt, double pv[2][3], double upv[2][3]); +void iauPvup(double dt, double pv[2][3], double p[3]); +void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3]); +void iauPxp(double a[3], double b[3], double axb[3]); +void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]); +void iauSxp(double s, double p[3], double sp[3]); +void iauSxpv(double s, double pv[2][3], double spv[2][3]); + +#ifdef __cplusplus +} +#endif + +#endif + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ + +#ifndef SOFAMHDEF +#define SOFAMHDEF + +/* +** - - - - - - - - +** s o f a m . h +** - - - - - - - - +** +** Macros used by SOFA library. +** +** This file is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Please note that the constants defined below are to be used only in +** the context of the SOFA software, and have no other official IAU +** status. In addition, self consistency is not guaranteed. +** +** This revision: 2020 June 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +/* Star-independent astrometry parameters */ +typedef struct { + double pmt; /* PM time interval (SSB, Julian years) */ + double eb[3]; /* SSB to observer (vector, au) */ + double eh[3]; /* Sun to observer (unit vector) */ + double em; /* distance from Sun to observer (au) */ + double v[3]; /* barycentric observer velocity (vector, c) */ + double bm1; /* sqrt(1-|v|^2): reciprocal of Lorenz factor */ + double bpn[3][3]; /* bias-precession-nutation matrix */ + double along; /* longitude + s' + dERA(DUT) (radians) */ + double phi; /* geodetic latitude (radians) */ + double xpl; /* polar motion xp wrt local meridian (radians) */ + double ypl; /* polar motion yp wrt local meridian (radians) */ + double sphi; /* sine of geodetic latitude */ + double cphi; /* cosine of geodetic latitude */ + double diurab; /* magnitude of diurnal aberration vector */ + double eral; /* "local" Earth rotation angle (radians) */ + double refa; /* refraction constant A (radians) */ + double refb; /* refraction constant B (radians) */ +} iauASTROM; +/* (Vectors eb, eh, em and v are all with respect to BCRS axes.) */ + +/* Body parameters for light deflection */ +typedef struct { + double bm; /* mass of the body (solar masses) */ + double dl; /* deflection limiter (radians^2/2) */ + double pv[2][3]; /* barycentric PV of the body (au, au/day) */ +} iauLDBODY; + +/* Pi */ +#define DPI (3.141592653589793238462643) + +/* 2Pi */ +#define D2PI (6.283185307179586476925287) + +/* Radians to degrees */ +#define DR2D (57.29577951308232087679815) + +/* Degrees to radians */ +#define DD2R (1.745329251994329576923691e-2) + +/* Radians to arcseconds */ +#define DR2AS (206264.8062470963551564734) + +/* Arcseconds to radians */ +#define DAS2R (4.848136811095359935899141e-6) + +/* Seconds of time to radians */ +#define DS2R (7.272205216643039903848712e-5) + +/* Arcseconds in a full circle */ +#define TURNAS (1296000.0) + +/* Milliarcseconds to radians */ +#define DMAS2R (DAS2R / 1e3) + +/* Length of tropical year B1900 (days) */ +#define DTY (365.242198781) + +/* Seconds per day. */ +#define DAYSEC (86400.0) + +/* Days per Julian year */ +#define DJY (365.25) + +/* Days per Julian century */ +#define DJC (36525.0) + +/* Days per Julian millennium */ +#define DJM (365250.0) + +/* Reference epoch (J2000.0), Julian Date */ +#define DJ00 (2451545.0) + +/* Julian Date of Modified Julian Date zero */ +#define DJM0 (2400000.5) + +/* Reference epoch (J2000.0), Modified Julian Date */ +#define DJM00 (51544.5) + +/* 1977 Jan 1.0 as MJD */ +#define DJM77 (43144.0) + +/* TT minus TAI (s) */ +#define TTMTAI (32.184) + +/* Astronomical unit (m, IAU 2012) */ +#define DAU (149597870.7e3) + +/* Speed of light (m/s) */ +#define CMPS 299792458.0 + +/* Light time for 1 au (s) */ +#define AULT (DAU/CMPS) + +/* Speed of light (au per day) */ +#define DC (DAYSEC/AULT) + +/* L_G = 1 - d(TT)/d(TCG) */ +#define ELG (6.969290134e-10) + +/* L_B = 1 - d(TDB)/d(TCB), and TDB (s) at TAI 1977/1/1.0 */ +#define ELB (1.550519768e-8) +#define TDB0 (-6.55e-5) + +/* Schwarzschild radius of the Sun (au) */ +/* = 2 * 1.32712440041e20 / (2.99792458e8)^2 / 1.49597870700e11 */ +#define SRS 1.97412574336e-8 + +/* dint(A) - truncate to nearest whole number towards zero (double) */ +#define dint(A) ((A)<0.0?ceil(A):floor(A)) + +/* dnint(A) - round to nearest whole number (double) */ +#define dnint(A) (fabs(A)<0.5?0.0\ + :((A)<0.0?ceil((A)-0.5):floor((A)+0.5))) + +/* dsign(A,B) - magnitude of A with sign of B (double) */ +#define dsign(A,B) ((B)<0.0?-fabs(A):fabs(A)) + +/* max(A,B) - larger (most +ve) of two numbers (generic) */ +#define gmax(A,B) (((A)>(B))?(A):(B)) + +/* min(A,B) - smaller (least +ve) of two numbers (generic) */ +#define gmin(A,B) (((A)<(B))?(A):(B)) + +/* Reference ellipsoids */ +#define WGS84 1 +#define GRS80 2 +#define WGS72 3 + +#endif + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ + +board.lis 2020 June 2 + + + +IAU STANDARDS OF FUNDAMENTAL ASTRONOMY BOARD + + +Current Membership + + John Bangert - United States Naval Observatory, retired + Steven Bell - Her Majesty's Nautical Almanac Office (HMNAO) + Nicole Capitaine - Paris Observatory + Mickael Gastineau - Paris Observatory, IMCCE + Catherine Hohenkerk - HMNAO (Chair, retired) + Li Jinling - Shanghai Astronomical Observatory + Brian Luzum - United States Naval Observatory (IERS) + Zinovy Malkin - Pulkovo Observatory, St Petersburg + Jeffrey Percival - University of Wisconsin + Wendy Puatua - United States Naval Observatory + Scott Ransom - National Radio Astronomy Observatory + Nick Stamatakos - United States Naval Observatory + Patrick Wallace - RAL Space, retired + Toni Wilmot - Her Majesty's Nautical Almanac Office (Trainee) + + +Past Members + + Wim Brouw University of Groningen + Mark Calabretta Australia Telescope National Facility + William Folkner Jet Propulsion Laboratory + Anne-Marie Gontier Paris Observatory + George Hobbs Australia Telescope National Facility + George Kaplan United States Naval Observatory + Dennis McCarthy United States Naval Observatory + Skip Newhall Jet Propulsion Laboratory + Jin Wen-Jing Shanghai Astronomical Observatory + + +The email address for the Board chair is catherine.hohenkerk@gmail.com + diff --git a/20200721/c/doc/manual.pdf b/20200721/c/doc/manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..896564931898d22ece9b561502d6fdd6ab1b6478 GIT binary patch literal 468983 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 AaR2}S literal 0 HcmV?d00001 diff --git a/20200721/c/doc/sofa_ast_c.pdf b/20200721/c/doc/sofa_ast_c.pdf new file mode 100644 index 0000000000000000000000000000000000000000..25c8cbfd18efd2ac292a34255746bb68b0496d1b GIT binary patch literal 302023 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

n$gFYB3&oUj4v(+GKk|hlINfV~ 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

*m=^?ozeGwNNx9x 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 GCRS, geocentric, special + APCG13 prepare for ICRS <-> GCRS, geocentric + APCI prepare for ICRS <-> CIRS, terrestrial, special + APCI13 prepare for ICRS <-> CIRS, terrestrial + APCO prepare for ICRS <-> observed, terrestrial, special + APCO13 prepare for ICRS <-> observed, terrestrial + APCS prepare for ICRS <-> CIRS, space, special + APCS13 prepare for ICRS <-> CIRS, space + APER insert ERA into context + APER13 update context for Earth rotation + APIO prepare for CIRS <-> observed, terrestrial, special + APIO13 prepare for CIRS <-> observed, terrestrial + ATCI13 catalog -> CIRS + ATCIQ quick ICRS -> CIRS + ATCIQN quick ICRS -> CIRS, multiple deflections + ATCIQZ quick astrometric ICRS -> CIRS + ATCO13 ICRS -> observed + ATIC13 CIRS -> ICRS + ATICQ quick CIRS -> ICRS + ATCIQN quick CIRS -> ICRS, multiple deflections + ATIO13 CIRS -> observed + ATIOQ quick CIRS -> observed + ATOC13 observed -> astrometric ICRS + ATOI13 observed -> CIRS + ATOIQ quick observed -> CIRS + LD light deflection by a single solar-system body + LDN light deflection by multiple solar-system bodies + LDSUN light deflection by the Sun + PMPX apply proper motion and parallax + PMSAFE apply proper motion, with zero-parallax precautions + PVTOB observatory position and velocity + PVSTAR space motion pv-vector to star catalog data + REFCO refraction constants + STARPM apply proper motion + STARPV star catalog data to space motion pv-vector + + Time scales + + D2DTF format 2-part JD for output + DAT Delta(AT) (=TAI-UTC) for a given UTC date + DTDB TDB-TT + DTF2D encode time and date fields into 2-part JD + TAITT TAI to TT + TAIUT1 TAI to UT1 + TAIUTC TAI to UTC + TCBTDB TCB to TDB + TCGTT TCG to TT + TDBTCB TDB to TCB + TDBTT TDB to TT + TTTAI TT to TAI + TTTCG TT to TCG + TTTDB TT to TDB + TTUT1 TT to UT1 + UT1TAI UT1 to TAI + UT1TT UT1 to TT + UT1UTC UT1 to UTC + UTCTAI UTC to TAI + UTCUT1 UTC to UT1 + + Earth rotation angle and sidereal time + + EE00 equation of the equinoxes, IAU 2000 + EE00A equation of the equinoxes, IAU 2000A + EE00B equation of the equinoxes, IAU 2000B + EE06A equation of the equinoxes, IAU 2006/2000A + EECT00 equation of the equinoxes complementary terms, IAU 2000 + EQEQ94 equation of the equinoxes, IAU 1994 + ERA00 Earth rotation angle, IAU 2000 + GMST00 Greenwich mean sidereal time, IAU 2000 + GMST06 Greenwich mean sidereal time, IAU 2006 + GMST82 Greenwich mean sidereal time, IAU 1982 + GST00A Greenwich apparent sidereal time, IAU 2000A + GST00B Greenwich apparent sidereal time, IAU 2000B + GST06 Greenwich apparent ST, IAU 2006, given NPB matrix + GST06A Greenwich apparent sidereal time, IAU 2006/2000A + GST94 Greenwich apparent sidereal time, IAU 1994 + + Ephemerides (limited precision) + + EPV00 Earth position and velocity + PLAN94 major-planet position and velocity + + Precession, nutation, polar motion + + BI00 frame bias components, IAU 2000 + BP00 frame bias and precession matrices, IAU 2000 + BP06 frame bias and precession matrices, IAU 2006 + BPN2XY extract CIP X,Y coordinates from NPB matrix + C2I00A celestial-to-intermediate matrix, IAU 2000A + C2I00B celestial-to-intermediate matrix, IAU 2000B + C2I06A celestial-to-intermediate matrix, IAU 2006/2000A + C2IBPN celestial-to-intermediate matrix, given NPB matrix, IAU 2000 + C2IXY celestial-to-intermediate matrix, given X,Y, IAU 2000 + C2IXYS celestial-to-intermediate matrix, given X,Y and s + C2T00A celestial-to-terrestrial matrix, IAU 2000A + C2T00B celestial-to-terrestrial matrix, IAU 2000B + C2T06A celestial-to-terrestrial matrix, IAU 2006/2000A + C2TCIO form CIO-based celestial-to-terrestrial matrix + C2TEQX form equinox-based celestial-to-terrestrial matrix + C2TPE celestial-to-terrestrial matrix given nutation, IAU 2000 + C2TXY celestial-to-terrestrial matrix given CIP, IAU 2000 + EO06A equation of the origins, IAU 2006/2000A + EORS equation of the origins, given NPB matrix and s + FW2M Fukushima-Williams angles to r-matrix + FW2XY Fukushima-Williams angles to X,Y + LTP long-term precession matrix + LTPB long-term precession matrix, including ICRS frame bias + LTPECL long-term precession of the ecliptic + LTPEQU long-term precession of the equator + NUM00A nutation matrix, IAU 2000A + NUM00B nutation matrix, IAU 2000B + NUM06A nutation matrix, IAU 2006/2000A + NUMAT form nutation matrix + NUT00A nutation, IAU 2000A + NUT00B nutation, IAU 2000B + NUT06A nutation, IAU 2006/2000A + NUT80 nutation, IAU 1980 + NUTM80 nutation matrix, IAU 1980 + OBL06 mean obliquity, IAU 2006 + OBL80 mean obliquity, IAU 1980 + PB06 zeta,z,theta precession angles, IAU 2006, including bias + PFW06 bias-precession Fukushima-Williams angles, IAU 2006 + PMAT00 precession matrix (including frame bias), IAU 2000 + PMAT06 PB matrix, IAU 2006 + PMAT76 precession matrix, IAU 1976 + PN00 bias/precession/nutation results, IAU 2000 + PN00A bias/precession/nutation, IAU 2000A + PN00B bias/precession/nutation, IAU 2000B + PN06 bias/precession/nutation results, IAU 2006 + PN06A bias/precession/nutation results, IAU 2006/2000A + PNM00A classical NPB matrix, IAU 2000A + PNM00B classical NPB matrix, IAU 2000B + PNM06A classical NPB matrix, IAU 2006/2000A + PNM80 precession/nutation matrix, IAU 1976/1980 + P06E precession angles, IAU 2006, equinox based + POM00 polar motion matrix + PR00 IAU 2000 precession adjustments + PREC76 accumulated precession angles, IAU 1976 + S00 the CIO locator s, given X,Y, IAU 2000A + S00A the CIO locator s, IAU 2000A + S00B the CIO locator s, IAU 2000B + S06 the CIO locator s, given X,Y, IAU 2006 + S06A the CIO locator s, IAU 2006/2000A + SP00 the TIO locator s', IERS 2003 + XY06 CIP, IAU 2006/2000A, from series + XYS00A CIP and s, IAU 2000A + XYS00B CIP and s, IAU 2000B + XYS06A CIP and s, IAU 2006/2000A + + Fundamental arguments for nutation etc. + + FAD03 mean elongation of the Moon from the Sun + FAE03 mean longitude of Earth + FAF03 mean argument of the latitude of the Moon + FAJU03 mean longitude of Jupiter + FAL03 mean anomaly of the Moon + FALP03 mean anomaly of the Sun + FAMA03 mean longitude of Mars + FAME03 mean longitude of Mercury + FANE03 mean longitude of Neptune + FAOM03 mean longitude of the Moon's ascending node + FAPA03 general accumulated precession in longitude + FASA03 mean longitude of Saturn + FAUR03 mean longitude of Uranus + FAVE03 mean longitude of Venus + + Star catalog conversions + + FK52H transform FK5 star data into the Hipparcos system + FK5HIP FK5 to Hipparcos rotation and spin + FK5HZ FK5 to Hipparcos assuming zero Hipparcos proper motion + H2FK5 transform Hipparcos star data into the FK5 system + HFK5Z Hipparcos to FK5 assuming zero Hipparcos proper motion + FK425 transform FK4 star data into FK5 + FK45Z FK4 to FK5 assuming zero FK5 proper motion + FK524 transform FK5 star data into FK4 + FK54Z FK5 to FK4 assuming zero FK5 proper motion + + Ecliptic coordinates + + ECEQ06 ecliptic to ICRS, IAU 2006 + ECM06 rotation matrix, ICRS to ecliptic, IAU 2006 + EQEC06 ICRS to ecliptic, IAU 2006 + LTECEQ ecliptic to ICRS, long term + LTECM rotation matrix, ICRS to ecliptic, long-term + LTEQEC ICRS to ecliptic, long term + + Galactic coordinates + + G2ICRS transform IAU 1958 galactic coordinates to ICRS + ICRS2G transform ICRS coordinates to IAU 1958 Galactic + + Geodetic/geocentric + + EFORM a,f for a nominated Earth reference ellipsoid + GC2GD geocentric to geodetic for a nominated ellipsoid + GC2GDE geocentric to geodetic given ellipsoid a,f + GD2GC geodetic to geocentric for a nominated ellipsoid + GD2GCE geodetic to geocentric given ellipsoid a,f + + Gnomonic projection + + TPORS solve for tangent point, spherical + TPORV solve for tangent point, vector + TPSTS deproject tangent plane to celestial, spherical + TPSTV deproject tangent plane to celestial, vector + TPXES project celestial to tangent plane, spherical + TPXEV project celestial to tangent plane, vector + + Horizon/equatorial + + AE2HD (azimuth, altitude) to (hour angle, declination) + HD2AE (hour angle, declination) to (azimuth, altitude) + HD2PA parallactic angle + + Obsolete + + C2TCEO former name of C2TCIO + + +CALLS: FORTRAN VERSION + + CALL iau_AB ( PNAT, V, S, BM1, PPR ) + CALL iau_AE2HD ( AZ, EL, PHI, HA, DEC ) + CALL iau_APCG ( DATE1, DATE2, EB, EH, ASTROM ) + CALL iau_APCG13 ( DATE1, DATE2, ASTROM ) + CALL iau_APCI ( DATE1, DATE2, EB, EH, X, Y, S, ASTROM ) + CALL iau_APCI13 ( DATE1, DATE2, ASTROM, EO ) + CALL iau_APCO ( DATE1, DATE2, EB, EH, X, Y, S, + : THETA, ELONG, PHI, HM, XP, YP, SP, + : REFA, REFB, ASTROM ) + CALL iau_APCO13 ( UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + : PHPA, TC, RH, WL, ASTROM, EO, J ) + CALL iau_APCS ( DATE1, DATE2, PV, EB, EH, ASTROM ) + CALL iau_APCS13 ( DATE1, DATE2, PV, ASTROM ) + CALL iau_APER ( THETA, ASTROM ) + CALL iau_APER13 ( UT11, UT12, ASTROM ) + CALL iau_APIO ( SP, THETA, ELONG, PHI, HM, XP, YP, + : REFA, REFB, ASTROM ) + CALL iau_APIO13 ( UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + : PHPA, TC, RH, WL, ASTROM, J ) + CALL iau_ATCI13 ( RC, DC, PR, PD, PX, RV, DATE1, DATE2, RI, DI, EO ) + CALL iau_ATCIQ ( RC, DC, PR, PD, PX, RV, ASTROM, RI, DI ) + CALL iau_ATCIQN ( RC, DC, PR, PD, PX, RV, ASTROM, N, B, RI, DI ) + CALL iau_ATCIQZ ( RC, DC, ASTROM, RI, DI ) + CALL iau_ATCO13 ( RC, DC, PR, PD, PX, RV, UTC1, UTC2, DUT1, ELONG, + : PHI, HM, XP, YP, PHPA, TC, RH, WL, + : AOB, ZOB, HOB, DOB, ROB, EO, J ) + CALL iau_ATIC13 ( RI, DI, DATE1, DATE2, RC, DC, EO ) + CALL iau_ATICQ ( RI, DI, ASTROM, RC, DC ) + CALL iau_ATCIQN ( RI, DI, ASTROM, N, B, RC, DC ) + CALL iau_ATIO13 ( RI, DI, UTC1, UTC2, DUT1, ELONG, PHI, HM, XP, YP, + PHPA, TC, RH, WL, AOB, ZOB, HOB, DOB, ROB, J ) + CALL iau_ATIOQ ( RI, DI, ASTROM, AOB, ZOB, HOB, DOB, ROB ) + CALL iau_ATOC13 ( TYPE, OB1, OB2, UTC1, UTC2, DUT1, + : ELONG, PHI, HM, XP, YP, PHPA, TC, RH, WL, + : RC, DC, J ) + CALL iau_ATOI13 ( TYPE, OB1, OB2, UTC1, UTC2, DUT1, + : ELONG, PHI, HM, XP, YP, PHPA, TC, RH, WL, + : RI, DI, J ) + CALL iau_ATOIQ ( TYPE, OB1, OB2, ASTROM, RI, DI ) + CALL iau_BI00 ( DPSIBI, DEPSBI, DRA ) + CALL iau_BP00 ( DATE1, DATE2, RB, RP, RBP ) + CALL iau_BP06 ( DATE1, DATE2, RB, RP, RBP ) + CALL iau_BPN2XY ( RBPN, X, Y ) + CALL iau_C2I00A ( DATE1, DATE2, RC2I ) + CALL iau_C2I00B ( DATE1, DATE2, RC2I ) + CALL iau_C2I06A ( DATE1, DATE2, RC2I ) + CALL iau_C2IBPN ( DATE1, DATE2, RBPN, RC2I ) + CALL iau_C2IXY ( DATE1, DATE2, X, Y, RC2I ) + CALL iau_C2IXYS ( X, Y, S, RC2I ) + CALL iau_C2T00A ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2T00B ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2T06A ( TTA, TTB, UTA, UTB, XP, YP, RC2T ) + CALL iau_C2TCEO ( RC2I, ERA, RPOM, RC2T ) + CALL iau_C2TCIO ( RC2I, ERA, RPOM, RC2T ) + CALL iau_C2TEQX ( RBPN, GST, RPOM, RC2T ) + CALL iau_C2TPE ( TTA, TTB, UTA, UTB, DPSI, DEPS, XP, YP, RC2T ) + CALL iau_C2TXY ( TTA, TTB, UTA, UTB, X, Y, XP, YP, RC2T ) + CALL iau_CAL2JD ( IY, IM, ID, DJM0, DJM, J ) + CALL iau_D2DTF ( SCALE, NDP, D1, D2, IY, IM, ID, IHMSF, J ) + CALL iau_DAT ( IY, IM, ID, FD, DELTAT, J ) + D = iau_DTDB ( DATE1, DATE2, UT, ELONG, U, V ) + CALL iau_DTF2D ( SCALE, IY, IM, ID, IHR, IMN, SEC, D1, D2, J ) + CALL iau_ECEQ06 ( DATE1, DATE2, DL, DB, DR, DD ) + CALL iau_ECM06 ( DATE1, DATE2, RM ); + D = iau_EE00 ( DATE1, DATE2, EPSA, DPSI ) + D = iau_EE00A ( DATE1, DATE2 ) + D = iau_EE00B ( DATE1, DATE2 ) + D = iau_EE06A ( DATE1, DATE2 ) + D = iau_EECT00 ( DATE1, DATE2 ) + CALL iau_EFORM ( N, A, F, J ) + D = iau_EO06A ( DATE1, DATE2 ) + D = iau_EORS ( RNPB, S ) + D = iau_EPB ( DJ1, DJ2 ) + CALL iau_EPB2JD ( EPB, DJM0, DJM ) + D = iau_EPJ ( DJ1, DJ2 ) + CALL iau_EPJ2JD ( EPJ, DJM0, DJM ) + CALL iau_EPV00 ( DJ1, DJ2, PVH, PVB, J ) + CALL iau_EQEC06 ( DATE1, DATE2, DR, DD, DL, DB ) + D = iau_EQEQ94 ( DATE1, DATE2 ) + D = iau_ERA00 ( DJ1, DJ2 ) + D = iau_FAD03 ( T ) + D = iau_FAE03 ( T ) + D = iau_FAF03 ( T ) + D = iau_FAJU03 ( T ) + D = iau_FAL03 ( T ) + D = iau_FALP03 ( T ) + D = iau_FAMA03 ( T ) + D = iau_FAME03 ( T ) + D = iau_FANE03 ( T ) + D = iau_FAOM03 ( T ) + D = iau_FAPA03 ( T ) + D = iau_FASA03 ( T ) + D = iau_FAUR03 ( T ) + D = iau_FAVE03 ( T ) + CALL iau_FK425 ( R1950, D1950, DR1950, DD1950, P1950, V1950, + : R2000, D2000, DR2000, DD2000, P2000, V2000 ) + CALL iau_FK45Z ( R1950, D1950, BEPOCH, R2000, D2000 ) + CALL iau_FK524 ( R2000, D2000, DR2000, DD2000, P2000, V2000, + : R1950, D1950, DR1950, DD1950, P1950, V1950 ) + CALL iau_FK52H ( R5, D5, DR5, DD5, PX5, RV5, + : RH, DH, DRH, DDH, PXH, RVH ) + CALL iau_FK54Z ( R2000, D2000, BEPOCH, R1950, D1950, DR1950, DD1950 ) + CALL iau_FK5HIP ( R5H, S5H ) + CALL iau_FK5HZ ( R5, D5, DATE1, DATE2, RH, DH ) + CALL iau_FW2M ( GAMB, PHIB, PSI, EPS, R ) + CALL iau_FW2XY ( GAMB, PHIB, PSI, EPS, X, Y ) + CALL iau_G2ICRS ( DL, DB, DR, DD ) + CALL iau_GC2GD ( N, XYZ, ELONG, PHI, HEIGHT, J ) + CALL iau_GC2GDE ( A, F, XYZ, ELONG, PHI, HEIGHT, J ) + CALL iau_GD2GC ( N, ELONG, PHI, HEIGHT, XYZ, J ) + CALL iau_GD2GCE ( A, F, ELONG, PHI, HEIGHT, XYZ, J ) + D = iau_GMST00 ( UTA, UTB, TTA, TTB ) + D = iau_GMST06 ( UTA, UTB, TTA, TTB ) + D = iau_GMST82 ( UTA, UTB ) + D = iau_GST00A ( UTA, UTB, TTA, TTB ) + D = iau_GST00B ( UTA, UTB ) + D = iau_GST06 ( UTA, UTB, TTA, TTB, RNPB ) + D = iau_GST06A ( UTA, UTB, TTA, TTB ) + D = iau_GST94 ( UTA, UTB ) + CALL iau_H2FK5 ( RH, DH, DRH, DDH, PXH, RVH, + : R5, D5, DR5, DD5, PX5, RV5 ) + CALL iau_HD2AE ( HA, DEC, PHI, AZ, EL ) + D = iau_HD2PA ( HA, DEC, PHI ) + CALL iau_HFK5Z ( RH, DH, DATE1, DATE2, R5, D5, DR5, DD5 ) + CALL iau_ICRS2G ( DR, DD, DL, DB ) + CALL iau_JD2CAL ( DJ1, DJ2, IY, IM, ID, FD, J ) + CALL iau_JDCALF ( NDP, DJ1, DJ2, IYMDF, J ) + CALL iau_LD ( BM, P, Q, E, EM, DLIM, P1 ) + CALL iau_LDN ( N, B, OB, SC, SN ) + CALL iau_LDSUN ( P, E, EM, P1 ) + CALL iau_LTECEQ ( EPJ, DL, DB, DR, DD ) + CALL iau_LTECM ( EPJ, RM] ) + CALL iau_LTEQEC ( EPJ, DR, DD, DL, DB ) + CALL iau_LTP ( EPJ, RP ) + CALL iau_LTPB ( EPJ, RPB ) + CALL iau_LTPECL ( EPJ, VEC ) + CALL iau_LTPEQU ( EPJ, VEQ ) + CALL iau_NUM00A ( DATE1, DATE2, RMATN ) + CALL iau_NUM00B ( DATE1, DATE2, RMATN ) + CALL iau_NUM06A ( DATE1, DATE2, RMATN ) + CALL iau_NUMAT ( EPSA, DPSI, DEPS, RMATN ) + CALL iau_NUT00A ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT00B ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT06A ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUT80 ( DATE1, DATE2, DPSI, DEPS ) + CALL iau_NUTM80 ( DATE1, DATE2, RMATN ) + D = iau_OBL06 ( DATE1, DATE2 ) + D = iau_OBL80 ( DATE1, DATE2 ) + CALL iau_PB06 ( DATE1, DATE2, BZETA, BZ, BTHETA ) + CALL iau_PFW06 ( DATE1, DATE2, GAMB, PHIB, PSIB, EPSA ) + CALL iau_PLAN94 ( DATE1, DATE2, NP, PV, J ) + CALL iau_PMAT00 ( DATE1, DATE2, RBP ) + CALL iau_PMAT06 ( DATE1, DATE2, RBP ) + CALL iau_PMAT76 ( DATE1, DATE2, RMATP ) + CALL iau_PMPX ( RC, DC, PR, PD, PX, RV, PMT, POB, PCO ) + CALL iau_PMSAFE ( RA1, DEC1, PMR1, PMD1, PX1, RV1, + : EP1A, EP1B, EP2A, EP2B, + : RA2, DEC2, PMR2, PMD2, PX2, RV2, J ) + CALL iau_PN00 ( DATE1, DATE2, DPSI, DEPS, + : EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN00A ( DATE1, DATE2, + : DPSI, DEPS, EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN00B ( DATE1, DATE2, + : DPSI, DEPS, EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN06 ( DATE1, DATE2, DPSI, DEPS, + : EPSA, RB, RP, RBP, RN, RBPN ) + CALL iau_PN06A ( DATE1, DATE2, + : DPSI, DEPS, RB, RP, RBP, RN, RBPN ) + CALL iau_PNM00A ( DATE1, DATE2, RBPN ) + CALL iau_PNM00B ( DATE1, DATE2, RBPN ) + CALL iau_PNM06A ( DATE1, DATE2, RNPB ) + CALL iau_PNM80 ( DATE1, DATE2, RMATPN ) + CALL iau_P06E ( DATE1, DATE2, + : EPS0, PSIA, OMA, BPA, BQA, PIA, BPIA, + : EPSA, CHIA, ZA, ZETAA, THETAA, PA, GAM, PHI, PSI ) + CALL iau_POM00 ( XP, YP, SP, RPOM ) + CALL iau_PR00 ( DATE1, DATE2, DPSIPR, DEPSPR ) + CALL iau_PREC76 ( DATE01, DATE02, DATE11, DATE12, ZETA, Z, THETA ) + CALL iau_PVSTAR ( PV, RA, DEC, PMR, PMD, PX, RV, J ) + CALL iau_PVTOB ( ELONG, PHI, HM, XP, YP, SP, THETA, PV ) + CALL iau_REFCO ( PHPA, TC, RH, WL, REFA, REFB ) + D = iau_S00 ( DATE1, DATE2, X, Y ) + D = iau_S00A ( DATE1, DATE2 ) + D = iau_S00B ( DATE1, DATE2 ) + D = iau_S06 ( DATE1, DATE2, X, Y ) + D = iau_S06A ( DATE1, DATE2 ) + D = iau_SP00 ( DATE1, DATE2 ) + CALL iau_STARPM ( RA1, DEC1, PMR1, PMD1, PX1, RV1, + : EP1A, EP1B, EP2A, EP2B, + : RA2, DEC2, PMR2, PMD2, PX2, RV2, J ) + CALL iau_STARPV ( RA, DEC, PMR, PMD, PX, RV, PV, J ) + CALL iau_TAITT ( TAI1, TAI2, TT1, TT2, J ) + CALL iau_TAIUT1 ( TAI1, TAI2, DTA, UT11, UT12, J ) + CALL iau_TAIUTC ( TAI1, TAI2, UTC1, UTC2, J ) + CALL iau_TCBTDB ( TCB1, TCB2, TDB1, TDB2, J ) + CALL iau_TCGTT ( TCG1, TCG2, TT1, TT2, J ) + CALL iau_TDBTCB ( TDB1, TDB2, TCB1, TCB2, J ) + CALL iau_TDBTT ( TDB1, TDB2, DTR, TT1, TT2, J ) + CALL iau_TPORS ( XI, ETA, A, B, A01, B01, A02, B02, N ) + CALL iau_TPORV ( XI, ETA, V, V01, V02, N ) + CALL iau_TPSTS ( XI, ETA, A0, B0, A, B ) + CALL iau_TPSTV ( XI, ETA, V0, V ) + CALL iau_TPXES ( A, B, A0, B0, XI, ETA, J ) + CALL iau_TPXEV ( V, V0, XI, ETA, J ) + CALL iau_TTTAI ( TT1, TT2, TAI1, TAI2, J ) + CALL iau_TTTCG ( TT1, TT2, TCG1, TCG2, J ) + CALL iau_TTTDB ( TT1, TT2, DTR, TDB1, TDB2, J ) + CALL iau_TTUT1 ( TT1, TT2, DT, UT11, UT12, J ) + CALL iau_UT1TAI ( UT11, UT12, TAI1, TAI2, J ) + CALL iau_UT1TT ( UT11, UT12, DT, TT1, TT2, J ) + CALL iau_UT1UTC ( UT11, UT12, DUT, UTC1, UTC2, J ) + CALL iau_UTCTAI ( UTC1, UTC2, DTA, TAI1, TAI2, J ) + CALL iau_UTCUT1 ( UTC1, UTC2, DUT, UT11, UT12, J ) + CALL iau_XY06 ( DATE1, DATE2, X, Y ) + CALL iau_XYS00A ( DATE1, DATE2, X, Y, S ) + CALL iau_XYS00B ( DATE1, DATE2, X, Y, S ) + CALL iau_XYS06A ( DATE1, DATE2, X, Y, S ) + + +CALLS: C VERSION + + iauAb ( pnat, v, s, bm1, ppr ); + iauAe2hd ( az, el, phi, &ha, &dec ); + iauApcg ( date1, date2, eb, eh, &astrom ); + iauApcg13 ( date1, date2, &astrom ); + iauApci ( date1, date2, eb, eh, x, y, s, &astrom ); + iauApci13 ( date1, date2, &astrom, &eo ); + iauApco ( date1, date2, eb, eh, x, y, s, + theta, elong, phi, hm, xp, yp, sp, + refa, refb, &astrom ); + i = iauApco13 ( utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom, &eo ); + iauApcs ( date1, date2, pv, eb, eh, &astrom ); + iauApcs13 ( date1, date2, pv, &astrom ); + iauAper ( theta, &astrom ); + iauAper13 ( ut11, ut12, &astrom ); + iauApio ( sp, theta, elong, phi, hm, xp, yp, refa, refb, + &astrom ); + i = iauApio13 ( utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom ); + iauAtci13 ( rc, dc, pr, pd, px, rv, date1, date2, + &ri, &di, &eo ); + iauAtciq ( rc, dc, pr, pd, px, rv, &astrom, &ri, &di ); + iauAtciqn ( rc, dc, pr, pd, px, rv, astrom, n, b, &ri, &di ); + iauAtciqz ( rc, dc, &astrom, &ri, &di ); + i = iauAtco13 ( rc, dc, pr, pd, px, rv, utc1, utc2, dut1, + elong phi, hm, xp, yp, phpa, tc, rh, wl, + aob, zob, hob, dob, rob, eo ); + iauAtic13 ( ri, di, date1, date2, &rc, &dc, &eo ); + iauAticq ( ri, di, &astrom, &rc, &dc ); + iauAtciqn ( ri, di, astrom, n, b, &rc, &dc ); + i = iauAtio13 ( ri, di, utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, aob, zob, hob, dob, rob ); + iauAtioq ( ri, di, &astrom, &aob, &zob, &hob, &dob, &rob ); + i = iauAtoc13 ( type, ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &rc, &dc ); + i = iauAtoi13 ( type, ob1, ob2, utc1, utc2, dut1, elong, phi, hm, + xp, yp, phpa, tc, rh, wl, &ri, &di ); + iauAtoiq ( type, ob1, ob2, &astrom, &ri, &di ); + iauBi00 ( &dpsibi, &depsbi, &dra ); + iauBp00 ( date1, date2, rb, rp, rbp ); + iauBp06 ( date1, date2, rb, rp, rbp ); + iauBpn2xy ( rbpn, &x, &y ); + iauC2i00a ( date1, date2, rc2i ); + iauC2i00b ( date1, date2, rc2i ); + iauC2i06a ( date1, date2, rc2i ); + iauC2ibpn ( date1, date2, rbpn, rc2i ); + iauC2ixy ( date1, date2, x, y, rc2i ); + iauC2ixys ( x, y, s, rc2i ); + iauC2t00a ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2t00b ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2t06a ( tta, ttb, uta, utb, xp, yp, rc2t ); + iauC2tcio ( rc2i, era, rpom, rc2t ); + iauC2teqx ( rbpn, gst, rpom, rc2t ); + iauC2tpe ( tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t ); + iauC2txy ( tta, ttb, uta, utb, x, y, xp, yp, rc2t ); + i = iauCal2jd ( iy, im, id, &djm0, &djm ); + i = iauD2dtf ( scale, ndp, d1, d2, &iy, &im, &id, ihmsf ); + i = iauDat ( iy, im, id, fd, &deltat ); + d = iauDtdb ( date1, date2, ut, elong, u, v ); + i = iauDtf2d ( scale, iy, im, id, ihr, imn, sec, &d1, &d2 ); + iauEceq06 ( date1, date2, dl, db, &dr, &dd ); + iauEcm06 ( date1, date2, rm ); + d = iauEe00 ( date1, date2, epsa, dpsi ); + d = iauEe00a ( date1, date2 ); + d = iauEe00b ( date1, date2 ); + d = iauEe06 ( date1, date2 ); + d = iauEect00 ( date1, date2 ); + i = iauEform ( n, &a, &f ); + d = iauEo06 ( date1, date2 ); + d = iauEors ( rnpb, s ); + d = iauEpb ( dj1, dj2 ); + iauEpb2jd ( epb, &djm0, &djm ); + d = iauEpj ( dj1, dj2 ); + iauEpj2jd ( epj, &djm0, &djm ); + i = iauEpv00 ( dj1, dj2, pvh, pvb ); + iauEqec06 ( date1, date2, dr, dd, &dl, &db ); + d = iauEqeq94 ( date1, date2 ); + d = iauEra00 ( dj1, dj2 ); + d = iauFad03 ( t ); + d = iauFae03 ( t ); + d = iauFaf03 ( t ); + d = iauFaju03 ( t ); + d = iauFal03 ( t ); + d = iauFalp03 ( t ); + d = iauFama03 ( t ); + d = iauFame03 ( t ); + d = iauFane03 ( t ); + d = iauFaom03 ( t ); + d = iauFapa03 ( t ); + d = iauFasa03 ( t ); + d = iauFaur03 ( t ); + d = iauFave03 ( t ); + iauFk425 ( r1950, d1950, dr1950, dd1950, p1950, v1950, + &r2000, &d2000, &dr2000, &dd2000, &p2000, &v2000 ); + iauFk45z ( r1950, d1950, bepoch, &r2000, &d2000 ); + iauFk524 ( r2000, d2000, dr2000, dd2000, p2000, v2000, + &r1950, &d1950, &dr1950, &dd1950, &p1950, &v1950 ); + iauFk52h ( r5, d5, dr5, dd5, px5, rv5, + &rh, &dh, &drh, &ddh, &pxh, &rvh ); + iauFk54z ( r2000, d2000, bepoch, + &r1950, &d1950, &dr1950, &dd1950 ); + iauFk5hip ( r5h, s5h ); + iauFk5hz ( r5, d5, date1, date2, &rh, &dh ); + iauFw2m ( gamb, phib, psi, eps, r ); + iauFw2xy ( gamb, phib, psi, eps, &x, &y ); + iauG2icrs ( dl, db, &dr, &dd ); + i = iauGc2gd ( n, xyz, &elong, &phi, &height ); + i = iauGc2gde ( a, f, xyz, &elong, &phi, &height ); + i = iauGd2gc ( n, elong, phi, height, xyz ); + i = iauGd2gce ( a, f, elong, phi, height, xyz ); + d = iauGmst00 ( uta, utb, tta, ttb ); + d = iauGmst06 ( uta, utb, tta, ttb ); + d = iauGmst82 ( uta, utb ); + d = iauGst00a ( uta, utb, tta, ttb ); + d = iauGst00b ( uta, utb ); + d = iauGst06 ( uta, utb, tta, ttb, rnpb ); + d = iauGst06a ( uta, utb, tta, ttb ); + d = iauGst94 ( uta, utb ); + iauH2fk5 ( rh, dh, drh, ddh, pxh, rvh, + &r5, &d5, &dr5, &dd5, &px5, &rv5 ); + iauHd2ae ( ha, dec, phi, &az, &el ); + d = iauHd2pa ( ha, dec, phi ); + iauHfk5z ( rh, dh, date1, date2, + &r5, &d5, &dr5, &dd5 ); + iauIcrs2g ( dr, dd, &dl, &db ); + i = iauJd2cal ( dj1, dj2, &iy, &im, &id, &fd ); + i = iauJdcalf ( ndp, dj1, dj2, iymdf ); + iauLd ( bm, p, q, e, em, dlim, p1 ); + iauLdn ( n, b, ob, sc, sn ); + iauLdsun ( p, e, em, p1 ); + iauLteceq ( epj, dl, db, &dr, &dd ); + iauLtecm ( epj, rm ); + iauLteqec ( epj, dr, dd, &dl, &db ); + iauLtp ( epj, rp ); + iauLtpb ( epj, rpb ); + iauLtpecl ( epj, vec ); + iauLtpequ ( epj, veq ); + iauNum00a ( date1, date2, rmatn ); + iauNum00b ( date1, date2, rmatn ); + iauNum06a ( date1, date2, rmatn ); + iauNumat ( epsa, dpsi, deps, rmatn ); + iauNut00a ( date1, date2, &dpsi, &deps ); + iauNut00b ( date1, date2, &dpsi, &deps ); + iauNut06a ( date1, date2, &dpsi, &deps ); + iauNut80 ( date1, date2, &dpsi, &deps ); + iauNutm80 ( date1, date2, rmatn ); + d = iauObl06 ( date1, date2 ); + d = iauObl80 ( date1, date2 ); + iauPb06 ( date1, date2, &bzeta, &bz, &btheta ); + iauPfw06 ( date1, date2, &gamb, &phib, &psib, &epsa ); + i = iauPlan94 ( date1, date2, np, pv ); + iauPmat00 ( date1, date2, rbp ); + iauPmat06 ( date1, date2, rbp ); + iauPmat76 ( date1, date2, rmatp ); + iauPmpx ( rc, dc, pr, pd, px, rv, pmt, pob, pco ); + i = iauPmsafe ( ra1, dec1, pmr1, pmd1, px1, rv1, + ep1a, ep1b, ep2a, ep2b, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2); + iauPn00 ( date1, date2, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn ); + iauPn00a ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPn00b ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPn06 ( date1, date2, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn ); + iauPn06a ( date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn ); + iauPnm00a ( date1, date2, rbpn ); + iauPnm00b ( date1, date2, rbpn ); + iauPnm06a ( date1, date2, rnpb ); + iauPnm80 ( date1, date2, rmatpn ); + iauP06e ( date1, date2, + &eps0, &psia, &oma, &bpa, &bqa, &pia, &bpia, + &epsa, &chia, &za, &zetaa, &thetaa, &pa, + &gam, &phi, &psi ); + iauPom00 ( xp, yp, sp, rpom ); + iauPr00 ( date1, date2, &dpsipr, &depspr ); + iauPrec76 ( date01, date02, date11, date12, &zeta, &z, &theta ); + i = iauPvstar ( pv, &ra, &dec, &pmr, &pmd, &px, &rv ); + iauPvtob ( elong, phi, hm, xp, yp, sp, theta, pv ); + iauRefco ( phpa, tc, rh, wl, refa, refb ); + d = iauS00 ( date1, date2, x, y ); + d = iauS00a ( date1, date2 ); + d = iauS00b ( date1, date2 ); + d = iauS06 ( date1, date2, x, y ); + d = iauS06a ( date1, date2 ); + d = iauSp00 ( date1, date2 ); + i = iauStarpm ( ra1, dec1, pmr1, pmd1, px1, rv1, + ep1a, ep1b, ep2a, ep2b, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2 ); + i = iauStarpv ( ra, dec, pmr, pmd, px, rv, pv ); + i = iauTaitt ( tai1, tai2, &tt1, &tt2 ); + i = iauTaiut1 ( tai1, tai2, dta, &ut11, &ut12 ); + i = iauTaiutc ( tai1, tai2, &utc1, &utc2 ); + i = iauTcbtdb ( tcb1, tcb2, &tdb1, &tdb2 ); + i = iauTcgtt ( tcg1, tcg2, &tt1, &tt2 ); + i = iauTdbtcb ( tdb1, tdb2, &tcb1, &tcb2 ); + i = iauTdbtt ( tdb1, tdb2, dtr, &tt1, &tt2 ); + i = iauTpors ( xi, eta, a, b, &a01, &b01, &a02, &b02 ); + i = iauTporv ( xi, eta, v, v01, v02 ); + iauTpsts ( xi, eta, a0, b0, &a, &b ); + iauTpstv ( xi, eta, v0, v ); + i = iauTpxes ( a, b, a0, b0, &xi, &eta ); + i = iauTpxev ( v, v0, &xi, &eta ); + i = iauTttai ( tt1, tt2, &tai1, &tai2 ); + i = iauTttcg ( tt1, tt2, &tcg1, &tcg2 ); + i = iauTttdb ( tt1, tt2, dtr, &tdb1, &tdb2 ); + i = iauTtut1 ( tt1, tt2, dt, &ut11, &ut12 ); + i = iauUt1tai ( ut11, ut12, &tai1, &tai2 ); + i = iauUt1tt ( ut11, ut12, dt, &tt1, &tt2 ); + i = iauUt1utc ( ut11, ut12, dut, &utc1, &utc2 ); + i = iauUtctai ( utc1, utc2, dta, &tai1, &tai2 ); + i = iauUtcut1 ( utc1, utc2, dut, &ut11, &ut12 ); + iauXy06 ( date1, date2, &x, &y ); + iauXys00a ( date1, date2, &x, &y, &s ); + iauXys00b ( date1, date2, &x, &y, &s ); + iauXys06a ( date1, date2, &x, &y, &s ); + + + + + diff --git a/20200721/c/doc/sofa_lib.pdf b/20200721/c/doc/sofa_lib.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5cac32edbacd352b1d56578b1b1477f219a3c6f5 GIT binary patch literal 14775 zcmch8bwE^Y)3<=sBAwD*61yy2QWDbLN_Vq_3ep|Y4bt5m(v4CgUDAzo3Vgtw-n`HI z-v4~h{XQ|{wL>WO$EC8zR?GNbyHc}v|wVoM(mzP<}(8?HMLdt$i zQD7D|wSXAfkur-~=t2xd4E3!I4Egy1_7FQmT}yy-Qnc!{6#)mD>$vKZpF>mbjb)3Z zj#D%*W|OlW#4+$#Iou3C!_#gm%#P|w z%ve8Nc1~bXLp-WO=JNT~*II+dpv=`)QqR21>38q9lxa~rU+Vd>nkUD=_$@1id_ND* zU*(^ubRYH6z)!$mnvjy~9Vk?bHt4|DYespMSdPpYsz!U!XO_q*TGkcb<5ym}C@FNH zmk#5O?&W(>2F6=&h$q1o4h}b*~-l=SlD>Qq)QWTG5VK!3{N+L_FJgZa(Zgy_1Yt=oXzvo1dFwKCQjDZEoG9Im^wFYWF7J9trD!?d93j& z!jXS28*7@*%r!TjJG(jAvP}-;hDhPGL{5E2SkutSs+Fr7u?cglmkT61=lrN8Z6z8D zakaN)YpQLUN#7HdAjOrLhD)A@@oBlBzLpuT4V7?itjwBBlQT6MOZzd@o!A6NND&C9 zM0@@-n|RuHsHdV5dN)bU!ZLz-anS&vE?QXGy55mnN?)i$42wzFKpPLXctj4T-t&pE z>Bn>k^-2F{gGW0Y0n7`%ez;XHTlr7Emd!O!^VIckY2Hj02(n0B`Citt0!WcgNDj-Ac%TDWjn82sPdM~C|o=gp#Y)YLESf5cAL`1 zW}>aVO(kBkNh0;4naDuIEdvriArB$(r+Yjk|MUmDHY0L>K^(RM|IYB|GQq~Iwx7AC zIRg3~lyBTC)fLut=hGc`Hx_hoGo1uV6~CEfrI23@tKcXNZlPXMOOld*n~@?_Sq(U{ zM*Y#=iXuaf1O&vP>xys=VeJ0=TJwdY(Citt*5_E?iB`Pn`p+Vwm>i&jXx3$`b&4UZ z5kuhvjp%IEfu;k`1RwmTR@(J=vm_o>CUAuklFCmpsxn*72-frDZ{?S9*#& zua>-#0Yys_=yF1B!nA@lbrE2NZU}#sU7Er8G)-PvzhaIjGg9s=Ha6m?0{}M6pJuf2t6RZ0o~O(ZRPy>g6lFw<11b{Gl#2KW4V)C~r2TC#bi-NNRZJa|)~B5$~H?ztSg_Z|7%wLrUK=z|j;AP(ae5uRZzM ztM)ER2esiPOW!X~MP;>8BCk8HS7Ddwj0y@LkO(aWW+w%_`^fg}GK;qcWI*90pi=Ab zJn$(`u^ zw(D=!61(f|r(ZwLd{H0NxqC!|?=;mbL*wMtymv){5@%;?Xl3wwF}eNgt^nPYox5)k zI}i-`odyCvs7@fzzba2Emez}+Xx9TJan{n5sRA;wJb6V17M{U&9$x)<`3Hvj%-_eH zlaCX8uP+9g@Jd?4aJ<#tt-eW#pPY>4z&r8-%DuiM+2MwXTeKc|v-PA3cKdau7ii<> zr%!$*R}Bkm3q)ZK-KoCo_Tx8!CA&X zgI{uV`M`5+AMur#)MR{yQLk12?>DaC6bT`^?am!6bP>5oF9y=Rv#S^|be4XqLgV7T zLO&7qiNxb>SCTJP=K7TG()AsBO*Qk}ytN~xljQSYNl#6A?e|f?NnEZFwSv9P_D^hM z9#S!)Ouaw`#K!d|iB>g91ccE|tf9^FB3Lkw_QBv?+TPVnUi#MHQ?+Gjki zK9{JNpH#_4>4QurllD7NSvb1=^Qfb>NO74XG7eI*cwa8Jwif#5IN>&~Dao&1&Jlx` zFJk1xdHwUF1Ev9d>9LXU4Ns9&h~mu#1x2X0TB14@r+tnRUOk7<=6G@kj-3q*s6=er zu#8gWjG>A`4I9_+CFo`X==SBt8@}yF@$IYjK0)xyfE>Y`7h@#2yf zd1|S|2?LBvhBZ_b5OKRM)QgxbbV1huKhY5V!#;Idn+n*#3LQ~$scn0|TkV4m7ELC8 z-dE0!v(@+~LGnY`z~!Ejzs z>C~BrM9nwQ@&4Ma4^ZYFKJH-#2xk2gW>_D>%w1pne|Nz#+SZHQXudzrvF)9zF-SaA zpqN1E*cd*Q(y|Q-)-&HdPbonTUs4?1u4EPk7ImPpl+ohWj?D*ycVum*v~9ksUK5KT z!|(37jh}BPKa`1d;~-i!(K3`D82X6W1*jL>;Ea(blX?S71tYCfR z^M&Qh?3JR`nG6fg&7c>XNN`u!9#v$pZ>lo{3o;0&4MTV|0MpPeSn^0QhXOM*5jnax zqI)}3DnUyW)5~!I;c6Lo#G)1K_TNy{Q=1 zA_!S$Ceus|>yjc`k#-~I)|D{JLflswx5k_dd+9H7QOO~mUHAMfj8$)MAa9o$eJL=` zGCKa#1`c(Av4^5@Vk1;?oBJd_mhGwD4CBJ#+}2=Wb8}Rthv)t`uklscBj)9ZZYACK z{F(k1Rjj+xhp!OSdN4XoClt~3G*;`%Z2?rUG5~u*@>eH($&#XOAS?p1s>RnbM(`uT2KB+4{h*Z}{#T1G2j!-n0=y6i=0?ZhtD9NA=tt#7QN{H9uOhF zM`>T}6(`$l`(kDyk`lg@e5C1RVVO`D$^xF$@SU5Ud(|fsZ|2MH6J-`LX|%X~yBOKr zpvgT0D6q~}F>&ZaW;aen8~LY*G<-*4q?+xKYr2+fyBj>kOt+Xbug6detW;kcGPDwA zNp%IMV@VR}Z z7W0J>*#$*-{tFqVn$+Q(GSOI?$uUPPEaNphCii9Q>cCOv{lR9-`pKOOrK%8=q%3hX zV$21(ZD%OhS7K_q2>(r1GTLp=fiQJx73VYvsJdNjXZK;V_IAoy7ip z@vL7vGsI*zHA^zx!KwE7$0z4AE5<3E5jODeUhk(dboRdU+P<0!=krJiWVB;51(ddF z)e1DDi#vxMI>BESpkD?Vu;g^Kwy})3S2<`Sc)t)Z!5cx4$En|TKz~jiWiv{4yd}OZ z&a-W)zpu$)zZ*I-l8t!L0qUO(pW;wyrhzl%{Y!z|! zPh)OUH860DGxKijn^Ov7i z-;;ek-sOMCse>ZJa2O zFLY;R@TXV>Ga3?1;`F4E=43X61o>?@|ABFV9uM7g7a_`2LZL{ZPXGJ0=NDk%8|bt5 zIYMJ%N|;Yth2m9)3QFJHfDlOO7w4fld zX|t(@6J7Bj$HiPHBiW(Tvqb}d%0$to^Tr1q5L#kC_{$Vievgl20; znl$9zLX8ANsYW<<+^e_BXceZOS@Z#bhkataS)4$z;6|z|qe3O`!yjS&sq@PPL2a5w z8uQsR#2c7^w>M^f?ob)-K6w`}J^SiQHJ`^_3wTmli_k>aoG7pP2e&2+`Hr5!${0b( zY`zuRKP5SwZ;7z&wrv21lF>mEJw?nG!Nx=5boq=&qkNgsc1-{AL8Bv*;r z-1&HQ6?>jl*KE$$w&vFRqOtEGyxhUYZ~Y1j`ycSa!twxKSit`VUiwuut*3xk?*~gb zt)D4~NW`tL^w$XlliFg&4(ET38m=^iE-&Bv`nq|EQvk`)T{!{AfQEeSa$tog^a@av z4a>M+up3!7>`5GIyfj+c$00XMZEsU+OZ>V;xx&(+kbRFvIGv%=l%r&?BxvBpVZJ?- zi&YZT<8!-<80LYBab=C~_T1)sAAKDrw<~u_THxE@m=~u#RQdUmvaCnW^PNFt$=D-$ z$8mhDsXhChl1&;y_0B1V)VxNKlaO$n5tscT6BkgQyT(ZjXwPC%HCQ8cS(#I$3mKVW zWuycWKVY$M^ zl=vReN?PY@g>@L`4Ln%#7F|feMRNp7tIh`~uD~-;&Ul9-1|SX$v3Qi>DLG8)8MdNJ z?n>{$BOvA?LV;QjwI`HxkaVnMxepOehka@%5gcqDQ-^tX56i)HR8PQ+L761ylp#79 zW>-CV8{31CCpZkUqT0njVIn?D^4Ad6wbqt_up1$Cgai3lPa6C?Ci4dABh+W@aF^Pj zwjWy6WjW+K^g#Qf)CI|as;s?Et3YWbCn>po?V{bs0_hkc?&bpT8TeG9i>kC#yXc?k zk8ou0IcxqQia7?16_)jDoYYXQM;WO<^wIH=ZEa^9b-pW3gsfhA`GJ?g{m8~Haq~(Ejj7qT_6~J0P6EfaSGMM8EAktShq-PoO0uH){ z@nVm9U_ebJO;*NyqDR9`1g(XxYmieLPX{5aa+e+=+N@!wbV4=Hs9Ti1>spj*Szc2P zO3fkvnYdrw`4;hcunzya0!ENHQ=0zQ0uj}*>~BYCuumskW#!~pv+-CvUB|ajHCGC+ zQ{Gf}HypV8-Ykrh9}RiY)T3zb@}VR9N;nBG+AqPmxjmBNH*k88%=bxpm&}};z&~^O zkGaQR19%pWf0N76s?r~(fM|_ts%K-`bm;-=I;Nw-7(B0~TPUevE0vXtzU4=sl=@xY z3~-X6vGf{2b+dzi^anqkZhvNP#ALrWdo;)#(@t*ET%`J$4Py*4$oyq|tXr>htfH;~ zvL?2Mniy%9d(4iE12l7wz&dX z^n7u-EOl|~?w^QF1cpE6)+Y7fnd~{s?Uz4Uz#$iXp=OCdwaswoW6d+VS53R+L(dKv zYtDp3%`Yd5htpFLDe}w0(n~C(o9@QZ^v238NNP4kEjK6>?Tt4rR>bG)xtzhM*G59c z`%qsFOp4bvMK&C_M>#NlBKU}qHH0}ZLu;x)FP62C%R1}jESC_X2WIo_Z4Yc$HrO z{z^Jv7{WXlxYwPPd47t|R~b0K41&1(dWy`90 zMfn#p=bd`Me(I?twUlqOA5)<6Y zQbx@}t&wMf;&r68S7CTk9ZS{rdWQvBbG0z4Oyx?|$t0`QUbG!V6DZWpSO=Gz)tRb< z++Z=S%xltMZ;m^Z4KpA7sEYVDhB9{pWup%3{4iDTa_~M?SvmelRq(@UB=}!VBl}gf z&8LA_uBRnK(;5hQ+bB6i+k)kzl$|7jh4rR%!SWLmsi>|KH}j3ERta6I65t6n&tk*1 zq)VzT+Cd>1MY4S!Es~EIbgRH7nn8(|&Hf7qXOxw)12a-uGJ_+$e7M(|7;1Dn139sK zChUpQ6-Z|rbX@2{So!%KA4-~=l;#Sh$cSaU%f>O~x$&ri0lqk>IXTzHLRN;)ka zY#J80gU(PXg5P@$^Y&nk!hO>hVlZ*2fYkt{u4cz5kmV}PWn$JFpw*}}1uPufp8e#! z=|f#{0(`I5^z=z|B^(^v>kA2w6GDloHA4w!%H&K@g4vRrf4Q%Y)-)RZMNH6{G!i+| zV|3jn$)kzm)dH;V>z1UYSFW3fySQx+dt(X00b(lTccRcq z(b`kxg>LZ#MvN!NuOot6=_}b@roX6w){liCowRIXBZqfc}i!7SzPJBFpO35l?FchOB)-}?g&HFBS%_K`%$M?To51p zU93Fh0A$nt0?u-wkxO=qmx@*WF6&>QH7d3Fe7eA%``^D{i!=JX)^X$Oa108l^|`Uy zOC&Fd2Ulc_g}j5GoZGiy^F0)}lF@mu1%1wgSvn)xT8T2=KX!9tD)Q!pY;b)V`x0hh z^sC=Z3ed~0MF{VQ?Ir~jl>O3(woJeeQeN5K-3*)tC1;UB@-F&HW(ihZ-$Eh%2&#Tb zBE$aIFQ2V;B#f&bM|uPR2V)e$N=P(P-G%s5?yx?Xdsj&^8PhcRM#aCctqG@93P*%HiXJ>Co?D8_Mc^4Mj| zF_@v!h{eqb9pH&tI~lL2ej4npiV_989A$0ZnQ1u;|*Srq2lEw5$t{Y=NwMG$9Y6Rp}oTJz* zM;QwAg7PPJBBOgy^f^%23cun=Q)wnd|NLP@7oop0WSmR9Cz&*4?f^ZqS z5FlXA0#hT|D!C?6BP%mO71niJ2^#*I7%==>cqyRDj;!v z8J$Y^k>yk=wgISz@XQyekHFKVDcn$~FbPwg6^@u^ZNEUs1q$rX-s-7T=9T8|Qu!dX zBuOy+-ZIZDxeqy=Skx~>H$n{uVFJN4OXDnY29b14t{QPk;09)J zGI?Z{?$6H8af97om)c4`Il=gus@+^|?_Irz`Dud2j0E2e>^l>KTCp#LO+PkzP7{Ns`8NuK(zO3s>=a${Xm?>v^B`Z*F58QBe9My zpJD|(TLMG{3a&49sasnqY+flxwCvW*TTMtWhMr}(pPjL}YH{+bw^Z3V%A`_uKx_q@ z7?TIxvJKer;UjgVVgfScq1J=Nz|O46GGa&QB0lzF2)#Y35oK3SeOumPu{;W$7L2^* z3tuUC-GknC^vg_OP1t-eFqNlTUb+5!#o~k&E!%rA9?hrHjyxqyOO77bvSL?OEEu>a z3ur^mTn+cNQ9&~BMd>-M66<)|px!z};fGVYkdN6n-Bd$YQQ46gB1Vr+@y;FDQoR*b zExucCO}75X1zFWQ6@$P^80XP8`R8UCF?}E@;h!wx&_~>2Oj;XxQe; zicbkoV&hM^cjuk2=8Q|?QQx%0&XljAzY#ABV2E)duU;j}Bv3sr@1ib0Ys74rY)4kq zDCf9_IHcg6cE9Xah?kXmf*47r+XQd=(T2}k>ob%=tFO17KV>6PoL`vi3Ll?DF$F9+3(r#~tc*C=w>sTLC@jAH% zc+Yf&O^-ijcNSMJ#^-CFsvUOLO_Jk3@=cG|o;!+#@5cm_6(^uKFz3C}7fS7tM7E*) zFcjri>PI*MQoH3)(to35ZzEo0fx2e3Y_xdIEc#3`L4pXgR>8+n_Uoa;jH;vzW+Lo) zY#ZQ15B4)1zGzcl%jmphBv0S|$R;s{hdF6~a_JP%rLI9h$aT%4s#feHbJz`pIa%Y+3}1f$F@ zd2P*;$60*m{wEZc=9-YOlvxY(s*F>{%|nIp^qlG|;xA&K+(XK`ks^(sn;hV8>bVzo zldBvT_Ngm_vFvZi(ey;~MNvo9iik=Pym8oN;^i#pQV#cM^DBZkI<~qVA@p)11Q{YM zxe$ppOKK{S<+Hx#s13;S{m9jVp)9k>+zp$Q3`l{v zUUZHk98r`a`4eGb{si#mQ$#=)X!*f&4~Ygh*Fx@`RP{qfwB_hr??EdOKJ z#RdFx*2Vg8*2VfSXI+xk)4(T9YpUx}Rqo*u8)21rj!%Kx3KrUl`pgl9yn&qZ2A$HE zTVe`Ki(`-xEVVM;o{4k*CIf{j1THzD#fGu!b%}kBTbphuyh9CaBa+aiBWym_Ed*?&^M}vrayn0DfX`AL+8gt;eSE>38NV8xq=@tFClf(OlU6RX;OV?HkXnCp% z*AEg*6vJgR#j-_Fee&+@pa_h2JX7h9pDu#=ls@LOrDfvbuNaRv7bT~=02gzr!Lqc$ z%K)P|YKpyeguOVJc2}HTr#wh2G)@ySwU=M(cPD{-0bKMBe7jS}euGz0Z#R3~MXd+u zmmf!P^(6}l)0=ZzH6^K*ijX4rkzEldFhQQ1yv0v`0sB6pPhv;T*KA_I4z|-Mrgpeo z`&z*o9)Zc3p35KmO6P*$YQ6d+({xBm-`qm4OB79Y-L>G3D2Z}IsCFhnza@FHi6g4I zEe}QNq^V?opL#4scVXwV<5*L>1vD*ORsdfw^2=s%CxON$Z&x0gbqd6|^jy=Vhk%{bF2x?yyBCMlgLpsb8U)pAjUS&utVw9#EeAUzTfTcQgaSS{aZuza-LPC}o@ zlx|t)`7S`8E0hhCgN|P$7|MqA%1TLr!T2O9A{pJ-kv40_T~{wmw=zgA@srvZl8qTN zvJ7!Ml^3_^&=F4+79dCBMx6G#3{kA(2{y15>_qvBg^ChkUl7D~ zI@-L>-HIhVu?>8hE%)hJS{R?{r?m{;!KG#267DM4a}6-oN4}6pevDFs^LfYi$nC4Zq`=!GfaG=l+%JU#$bW^UW{%{Nca<|N5}pIsTva`O|~H z+lS?D^!4Ad56hpn_$zwupMm||J}iG65&jGI`O_AE)8|hg{$Zd0UOa>Uhj_jpR{q^S z;QwAcga5R}U-r2l$NZwte=nX{|A%-6|LMcu{l)sA&mqSNPl_`)#oxy{{Jbq|B102KJhuf+F0{yK%{KG%DdvqbX7S_gpDDqo9`m3JY z-PG^+q`(2Vzs_Ha_a)#zul}t^dB}SYkN=VP9<2WJ>i??MeIoxy-utxrkE{1V{-0Ox z-1DDT|5vU4mZ(Cy_J()${LVjiriOOERq8tmfcb^h?T>^^t&B-o?>)?{=%5F=Ybx%7 z1@xEY?^l1<2EX;3m4~Y%HDlQt^S~a zS-Eaa`zwuwlkGOVex-p}IQ~hy-2nQhJRpdj^MO1tnElo=zsdsx@AB(c8i@5SAAg|% zK^(w;$^)`+-t`{8>;r*;53d1YW531KU-sSd-p$y5rGdFXw*m1B?N%Pw1D$Vm`R8?k zV6MBc{)HFF2E4=WUuYmO=&m35l?LLx!?j;%x4dls)CI^6yn8A5mwmVL*dEH`dZ6c}f^ z^M8m_mb?1%4|%M2Q1%NA$jJqK;9o9I&IhpuX5n}!kB$9-Ke)Jn4|su`58?_01_K|; z<9Kjyx5@p$1|Sg2!+ZmS@1XXVdjo-4{~l`)J6%%?L%ZAVpOjhA^sV7-?vvggfvj(f z(p_^*$}C}JWKDW2QKCf3fbmx-Yt`YrHj{ z(I8h86{lxrV22?;zQ1{gVP+;`B62XchT-L96t}W5G#6E!n&Fg0V8HM6&H zwIpI^Vd3Y8adCAvGqQv6-11YIw%=w#>UpDml_U^-qK@t@wZm&kCyLvWNd&c-js}vE zwxkjN>62l0zbS!-GYKQMNMk)7B8A$2M>QnhSZbUatdiJ=`Mn9aBK55@YD6Ofa~YGY z;3Pt`D5Wh#sxnr#tXS`#SP!BRGDd|U>~^}>(Wa`N9AyZ1!uqmLMHcag>yW*>bfBUY zDpIAEOQNqaUc;eMOqJoP-W3<9@hjL$d_nlotmo8(r<93)M6G+BMY3?xmAzRyU3v7f zch(w)?=qZHgLo~#PyTC!sNbk8h?r$lmcm7%)8Qw#&@*Hfl1QD21qlX?ZjF!Sq6kxB z-qu9I)r0~s^|!Jyf@5>>B?%^ea6hP%h`lu}w&hQF?Dp{=nI>!z{hnvyU5o4B!+5N2 zKy7xwr!cN@+rwLq#QCbwo~e@aSV9Wk7_955T*&^66Q>U0kG4s>oRBM8i1 z34|#V?JC`UvifC>#vFx9b~^ zEI;qr1Il6Tec`U}JLulcQxlAtz3KliivP6!UllR4|2J|1aIyZMa_UvvcHZVd@|)MV zr{9;IK-&LSa`%nW*^DcRwa`8TE;2+$24^C&6bslJ6|3b-TxwyRwPXXs7|7cRX^z>K z2@C=A2T(~VVz}w93N?cdqyJl{>^BH*7Q26CfptV#mx>D+H3?*nw@HFPu9M2qAk(b* z5nPVB*c`Pb5Vy)I>Xv!a(>2Ht3g1-_RxU~~7hb?iW0qeSk(f@lbVWP z`q$C{&44i&K^R?0<|I``L;^N0mAU=L-jp_Ho|R@z*6IqSTr3AI9IpASct5N5Z(V0u z7QDT$jGUr^Q6A}5C*Up(RK;)-X;t~Aw)uP?9>OVab?uCA&s&pR;>g?s?|rg{ncWdT z3FZbr+SfH!kD3}FN-uvTTe$@&aM@ZcHP&7xl}vV8h<4BU z?yb6|PbL8w{***|!cbjTzLhzYQ2EY<59+%^5b3a`KIDXy z>Mo(XlMUHOE7s132pA9D?*l8FVeHnI-;>Ll)&M)2ineAUznm$_Z3hkywT$yK~GXh}# zu8eNx_JiQH44AdGIhD~!vVM2CVU$S%NU>b~MoYE6f}L?Z=WNXy8*Q(QB(w zuY1gjLy?{q1f|)s3xc<))zRA{c$p)YW?!9T;M_L%Gc`OvK6YJfTv|atlyuH2#b&{N_iPIUl zx$QRy0z+Q0qR+PKreCfcL?gtXqs+~&c-j?0ND26JWHf#R@;;>Ha1xgOcvt+i`@!z2 zuj_>nEGQV1b1$S%Xo7(BntT7F;L(*4G05A4{f+*^a947go1!d;oz_ovC!18#MGcj^ zz61Oxgo-G|gbzqU5UL7dqm(rGFNu1@-xOfrM^MI+bExQF4KQTO``jJS7Rff9;eI5fhsJJP z*$U#pokor(*y^$$$2A>8*n$fx(Hu@EWs#iOR4R=p{F8^Rv$`X~;b#5xUtF>R?`W+# z0pWv^jJu;xz!tj8wZ)UlkFig>DEQ@Os+*Xp)s1o}aGN4Y_gXdKrJsW|WU`tjwZr1~ zg`u6>*R&aGMGZbw2`hTz*#O2Q%VKp`41p1?oI1D1jNfd`hu4YKIA{=lV>|Lb!mVwtx*YotQ(Y>4-<)wY7upWBbVoPdq1c8!%Xf zM~p6jN&n zJbxz`f!H?$i zwupCnuWY2St|8wk{6mqE z2ObVakZV2CX56@EI!KR<_Xh-;FpW^tAIiIs1Ml$GJ{gYrq4$J8q;l}rE5A^5#S4$j zTPXD8P)L@PBmyb5ep{9;rR+gvutV|et4Er>8nbe%cAv`cFJ5=7lh#^Oy!75=j7nNc zEaX6M%MsQ=;6oP5H%jTSOu2zJ3xa1y@fN3!QJODYsuSZ0y9pAJC_CXR9O2KQ4Lx}f zP+F&mOnp7#cv5sB?QN;3c@EHARN2scsdGg)z3%|k-L;SJqd1l2=ibAE75u9ygS_Y$ zbDtaKC`x4^m$}7h!^~Sy4GoQv?n#42yEiGXW@X%+8dGP^tbz7vOPT3)?z_MdU`Wtm z#7nw+(iwY((ZYeQl^N_HgjgTn;P;X6IWn)||6);G|CL2CvHzbAr9!33q{;*&ECTLA z3hu%x!v`x9cC1?v$b(dVR04~hBaHUEBZ~$H|4au@2ahhigcb`2_e?hvi|!gnFZU8F z8)Qtqh$F=n<+YjBH8wVe10HoznbkT7h z1nTY8U-JK<$JzF+AXWEon6t2TQ-0!A#J#ZeZ?FJmBH*`{~cz z-S^#e)OrN0s7vf=o8?>H53Nz$MMpH4?g2J_8XcO{uLxO zzzW4nfUGba$UICWy;Fw1S~Tc&%3x!6(ai6M<7ow=3&&1?>5ay`u2?$LtGDFI1>(oi zpfgp44$km-TVi$4aJQzW*XJ#=)kt@*iKX>pN_p;FL9sPy(vVy}Cf{6Da~K@n!vK@n zUR8JAt&bCAl1G*|Phv3x!U)4kdhVP8VPC65KXb4lhk`T6pF?(gJpIj1ueY#ZdupR6 zV6DXATBH}1)~4FYK(-M_lT|uVOX!PnHU$K1QBO&l*Rf}%fR@mzep6) z4mU0ykdKxSy9)v&#`G|9Wr-(_H^Z==tzNJb$B9$!e~n{AZx2~eS~96UJ=WC5Q^lrp za0@qhOM3k-)j-L&;e-xuy*d%juZ4%2?ziJzr86_geT3h_4Ro6Q;>`vzwhz%+(AwEb z3)O)u1_-|`Qwy{9!9}#ER#od+dPThr+_w3yM5|S2L@Zte#2@7X>X*Ttw-gTb3c~!) z=fsMgvly(4<@+|h1C62IVq+Ya+(Z2;_L~WP-{Tss=45szSTkI}>a10lt1c5?i3Dfg z_i0qQpGiH4bqZlZK{*G^h6cD8kAVvIBjwfpj1g0-g^^OyI~7%hc`L`jj~Rje^Wh(` zL%jh2qsJoPed|P)DIxV2>f+&{j(U@yLQrgy*mr0K%B2x%k8~HrAaT+rw7Dpu@p#~s zlX|l`$w@`Z{Sb)$WrXUur;a+OtGCQjHE4%+@Tsp%GODepEGY-c zB;(#%S}3C9jN1#~L+|adxEWMwnrzi>k6t?M7!X8|k~4#SOngRUa-~-LB|Y;nXrVR$ z!w|gMY-ixi6LS=CZ^vzK-)@J;0>;E@k`eAncKv$Fw*3@7AZ8cF1RYbRBicSMM$;RO z^lRwXT6ES~mSmY(31oG=Yh-%@+}W2^wm#TOHb(l;ZS5wu!98a|?1^xAXlz#!-12*Z z@JZtZXX2TXS`RRCZ~9*^mnC90*ydy0hCmr+sDeR!)+B{SQ6bf93>i{OQ#A>{ArW_| zFYOlMzxj7;cZ_H*Pf)>9C$3S*H)B2a7D{9G?m-vO&1qH2BSIc7gySLh!l-(JcbZSAVDB?kQob{ zk$PC)gBPZg921^nyBf~W$v8(QqE~dFZ9)qQkvyJ`OPo8wYa_QOBObDcm(Nb|wG2K4H zn($#XFA}V zSkul|QY;s`Q--*klok{xkqi3FbpPoq_xsD*B)H-TC}9O6pP~-Ffl^-iU8 z7*x6?E)xM?u-iqO^?~V7Z*3DL-6X7=Kj$dhgnAI*2xMnbzPPqPeculPa9kNi{}+G# zuV{dk>3`a5lAg^l5nA}&8||D~&w^Mo#Y5W;BzAFW?dI%;*xCjOTX+`JdH-JJq#@}n z798@+ecl-#K^Uqdl#`<*cuACLW~g3VkVFn7U{H7PMg)%6lqCgkh2Th)EH(yC^#up& zu`Ew9$v<7xX-t?bOn(SERT<(#*)CEtcvY`a@x%H8^$xuzzzx+OmhC`xYU7D%^Q2li)+VyE=5APSQ4zW7t4KXwTs29{Of!wGo+C~2omB1IeXN3z@hE;(BWC1 z$Ijyi3w+yU`@(xm{(Dh2Q(Hkfnl@!93z0+_tW^N3uS)oV*_NXL!(^j~7)>j#I(9T$ z9aEauidpS+`iYmY8FHi(5)aqs+{Twt$B#|@P5<4LYS`SwBU{^}g7CYb-p%g`n&YaQ z373kLC5# z>C>r0Nrp&>C^~x~FmM%$F9AkLCm&9vM_p|xt&Z7suQ%d)%L)EoyQOO|rB&J2QhIbe z3Q97JaV5YRSM(P2KeW(r?x;AiTwU>5&zIrx%b2_{>)&qMqzi&8cJ>O6GB&iKB^9+N z;fpp81Q*5*g(BUEm}|?wf0>{`tsHRcQDGO|#@N*jpH|DN*r)V4;8P6l>+Z81@O-WT} zjFF7SySTO~;fI#D6QMblUUCAXr7x<|yW>Ad`+F8&K1Cqb3fo3ZVLCp(ySu+8;Po&u zLv6P@%WEl7)u-;*y|YyZYD&ANIyRF{XN&b0gcA`E8`5S3rP>6S;lUpj-a-Tp;Uy@F zi6>!dS0aFa2aib@vz0rCzE3h8UV96+@ct3pVrOz|othLT9~2E$`E~qLY1OSCsC<#D;2f4jIyf)OlbzO1)^g(SJo!#uOFAw*!xrJE0gxwfw+4( zY?e6+Jf;vCR^zot;shR*y+rk(3o6hrewPw8e0^DP1)x5#WG45}K}V_uND{q}84`r} zTKvsoQL>EnWLHc9v%?1!0IXDP9OAK-VZWtP7^R#!JFn+(JxM`eNS{WEqWdYa`*3L9 z!)sNz`O`!3+7g`s(D4}PVMeH8Ipawn;gm$qWujo)!terLcOKFe=J9Le3k&VF^zK7O4&TyD1t<4&9omYxG(SaSp7a0N>jHeZyW zlYAm76T)+D7nSruf?%S~7MD{3H8v597PKe4xTT6MRpKUo_hG|-SeSYUvPJXC6U5barF?1*S6$*!hh@Yl3l%r2j}mr`9S*H zd8Rb91tHmaJs@W;=Ts*lvf|#LiIHYGfQR~0*0>;$&K#mUht@RHnynden|P$4-KXDx z6ZomkDcuHEo2sicG_qKFmb-$RdXC3iprOLQ^N_M8xgoM1}2!VCc|Kj&S9??^f4 zR?=T}Of9oc?eY+~oy2kDUoJ?CZMmZpilD!3>n7~b| zw>K}nSxCY4{M9I;YFPSL0r!y`)(ALA`6Aw84n-oK@Y!=3B> zinR?;a%)85`!-=mvVcj_=@31qP+h#kLtV0X6)38{0n44Az;f1#&TjfOjJ8{SA`3fV z^e?Pi)+NdfVrk2}b?L`H+f%E`va|cLYeqj}5}D9o(uAh_eB`prTsbtbF3ouzQr2KC zuh7YthmpbJ?#dVZJKgrxhHTL57qJS%BbYH~d9?U^xUUfODaOZLW8sw!w~8dJ$J4z2 zRNT(}Sv>gf_>b0?kUdGX(eriLYaG_+$dX(x0yekV%<04C+HfeteaP{LltzIb5&v$r z<)w}M|HzZGlV;&0>84{ok{ z-q`7omN2+~tLyW-!*TX~F!>th?J5?t#HPf-@pP()mtE)}-H5rr*{ycG0z}wyR!ApAqW{s;r!9pgNN$e^l zfiFUkkEa?%7jJ7S3JMheS>AImC}&<7vrGk+n$4niO=zQLYnWSFUQ@abwg+r{NNm{d z=h#~xSBhsJsFkdK+9IkjhV$XY8i!CUYO5yQ;_F@|lF)`?@v6(&5&fqJP4pE%8tETa zS6FP4R;;ulSx$9c`UJXZrb4cx)lhIer_EKz^|&1ew`S`hux0CM(Ayh!8_Q_C)h0Cb zd*3`2n(i@jn@zV0chJg^UYH!?8h^G)4$=qQRmmzcLxmUQxZ4G+Q6!SFGC`by!jvRd3J)Uw!aRZ)3TSIR!#6#PC-7kXQ^VbV%`@f2@Q zIY$-sM}|iC*?_`8@b2wHSt;te4}(lc-kf06{Q_o1A{V#Oe)8d*QgG0T zq>Aw(-vHRehDQDOp9e_#ybuMlfQ_z*=6@`aCCKpeU3NcT(}X{uf!xWW{~P=PEdLGo zv$C@Nk1N7BZ5fxp94LKv^%*)9H1Hz9`?Oq}`rFlHsj9YSjMaRCWF-gTBJt2mO|RfvIY)$vUC1V04->8^M1*y~^J2Ea^L z#Co(NGWBU_VO1M@=={)m2y^%P4dUb#MGO)`VHPW&^J>Djn=y;XwV?m@JaROi`!$B)qKit zsI`eKEh4mGY|Y)-U1T}N0H9U=AngvR+qvLmM~^ypZB>(;>-fxmR|({4^Kk5tzFB3H z1%+(QcgXF@`~D?U5?W?X?6hF;6faTRWbXl*=Ue8R0a{9Gt{{s&%9tA}ih0~;+nC}W z4~`661^sPWC}_;VnUs=d($1V*tS$6Qz~y`T*Hd$GTLj3p)tCfw0745)8o2B0fl`Kh zo3+%w#rt|Vl>I2xR2dUjIm!~P-Y+EFXILWmByB&JoW%BYC1?h7+#M1^)rpf`neZMK zsJnS^SNPivOQHmdWP+3Cm6wQf&Z278wOptUw{c!Yhq+}LcikWxv*SgZ_FnuxV{QJD{QYC$5C5hn0B-G5YIPEi1H2axPH1VhU3g8zLoL z?5jsWxEhLo-mn(erKJGMAS_FIzbDj$=bBd6muZKzcD!Xv{IAS)RnE|WWl(0 z_e;Ve&yrE|qgzY-iuI*wLrz~6VB?7-y1k04;gV|Q^i}cP9vf8rZ_QPgl^393;9#Y>1` zI?7BH+dbQ-azHed4=S^tfPyz>2wHPV#uO?l{y+^gvyzja4@Lt5Ea3|)wNt?@5ltkT zZ9jbn#=Ltuazet2ka>8>A|)Opvoj^bCozZ%}vlza*O% zdFSB_4g_tobA7YosNDCPC92zG2U@Uj0QpAsHVYk$81xq=eD8UGcgb~|NfhmBY9WGN z5{X4UKc26voS0pVy!j;k=VtJBO%tqPU>Z4CUV`^TV+s4l%A zW)Z;&<t?#y%>F7{*zXPtXe$wj>x-qS^FOl^6PCV3+ zWLRciyYl9mx>m+1KN%ZI^#vJ3576vj2ZY$FXSTYjk$PVL$X0$Db%z0y#>|Y5wdKsf zaD4E<5jrR1wPB^k#Blc*5~LB#5j)aigzCSdCLsicuit{S6mY=KBb>F8X&YJ6m?IAY{Hiv5L7yw_R<+vp?+Cq(lghhRmMq9Pc>6e4XwJ>{p*t&O1<->ZVZnCajqS) zpv}azphp8DKfz#~k9#pV`3?Zv9zzK$%%|5X4%I@;sO_8Oc66rk>PrRWeo|_sZwtEH zpA!0Jb^@6D0|Kv$6J_oU?I@2NsG3J{?7@nK)SD0Hx%)GC%R+b^H~gz|P*yk{rKbd` zjyS%HVD=j`Psnh8ME1b|wk=&7g^T@IOPqr8Hzrx+$@9K1awE{e8Ex!Z#?cKAgM@e# zbLeXkM0`AmTtj>qU6}Oy71Rz;_Y#N zEKUTGIeq}D$&K&{YbHNM|FPUSSD+9Syg0mK0-Z3d00fR|CuGk=0T67(-+}%Es_7u} zDu|vH!#vF%iQCn1Z#FaJ7D}aKjSZcq_WsS4IW@@DP!n`b#Em|CPo_cEie5q#0{!hq z5k-1|VkzM@pcP&!3|D_tW39JTNG7YNZEx6;`~4xJVq5I1`%5||*+&FcTpf(`OcfGj zFf3pxncwl421K*%ZXjc*&I+ts)l{y8;r7CXnJ;;CI4!C@?1n9+%=PZwGRiWTl*nk| zbQ3X9ed2}0S|IrLZz8aoP9{VEkDOQ;_(?Y&Md?9x>~D_hNJ*U=P^msGXcIssJkHi< z4KBCY+!9Lb_hb4B*Iuayp})M+?U}-`cKmc=Jn#V<1g&uxXhVBqlwOKf0RwIO6K7VG z7zC2TWtJg*3W@$~Gqg1A%1m6$5S~+6)aeBkJ8T3q6D7L+i}aj!wBVeVnPzmn(v~lZ zb?rVW$z=A<`iiixRuHZ{FpMWsuMoMJX6&H7R_)qheys^dWXkC%rYq<84^L>x>Fg8_ z$ZABYhivmc=?7ijAx+eg*&)#Rqn4rqIv+TW^hz{i&O;ghCy0Eir&LpGaSrrMUuFMg z2^!VhR)lbRjE<&fQS>%z!rJUq9@Ss)=9<_hI+_?`?uGaWe{ZxlP6vKpQ+YMUN|^lV z2Pz&j)vGoO4}ynXrsvzU6iELeB9>T=xqueci$!E>Rj~_A;S-m-pHJr&#Hf5z&{OL-Uq!ERJPBsV|>o0)jf1^M05;5Cl146pv~5 zqDUu+e|pXE&s~re|AOCHc>7^gr+?C^N8I8GnM8zeRcWTGjuExh%Oy}J!4#`I zdxHj7P5GS^k1fp(BH4W%983^<@_fpwKBFZ3j{$n}#SDw!BQ~z7QyLQ-u4<`^zL|i1 zm(j1*d=~3q6)NO}|s8n||XVwFz0hW&yPEin9RLK)T~ZGMr^32@#^ZiWwpy zyu@Bii#kqv<&>tkfftgL+98lG1hmLGutw>xEiks-d68S9(@9J^!=PeG!idkofb)lR zmCRRLmQRjQ(`RYP-A1ixK4&-o2XsRzBm;s@r=KUWv#hM&PEfUljTe)s>lnlfF0#_b z^gS^a4x!7(_a?*1hIzQ4-|ugSU(h2Bxq|;ov;zD$(TatY^M6FEQLX<(t1;xhGmQdY z=(ZU#rn}5z({8f#8xi9uPL+rgl;ff%T}2@El*g;5mzn)mSUNFsHHOq^!8>2p9Rqnj890Sl_e{6RSLERQhhO54jDMcF|88ofH1j(DHXeTxJhHE2A8~Z{eUYAI zYSwDyon2%r(AqCq2iQ(uHfX~RE??&TM7!!-$CS}?`go^W>HWoYbK1Z-SU;6n#z>gG z9Db?Sl!;$YS~BNSo%+_ELiBRU{kKco@%(0z1Z|=Am;*?Ku1#iV%#IdcAU zo&1*J6s)Ly;Bm%c&W_Xz2DM2#xBhI(oL4b}T|5cIlq@v~+{(==?#)9G0}quXTOJ@< zoQY)wn73spn&sp|{nf1HI(n|?en@5)9m|Y963`9H-20)Z|F_T1>4?F$02KPt$er^< z4oAmNFfAe$JP+CniY=beYrDtx+8ymhFbrY z1YVBFaNWz_;W&8nR~P|8!X9(Vd}hO}9aY?Gra+s~yLG!WdEt8gzU#BUq+AgKz-exR zMDJ;B*!#9J@TnZ^d{(Rfq-!CqCEX@3ip74WC!h1kT!u++1csSexW!`Vy+}>rsUpt; zN&^kbW)o)c!DxwKuDbIO8BA~sBNFsukXRMWP5KB0O3J0}{mZDp>>aVR zsn?vv>z@Z{;! zhZ&+QELMrEQhym)$(SOuvv+YRg&dO)*s$y~7L#b0_Pf+rN-G2Y>n%mdTNqbG~_6X7wF!b2jTE;;)$rRvFf3x6B>Q$_6e!T737@iJ6yFd3gN1CC-Se$1$ zIJi?#M!Y=Y!M^Lzr(-+<1ewMu3cLDXBUYOkp*i5J`q;K1c!;KFx;^gPSCZXj`@?iGL_qFwaM$FhUvt=C10V2q`%KXo#mZ3DL9-(&AQpJ!45|Lb zEOM2!WaIp(Q+M+sJ!lbU&fT!cFc=YCx_HKaIZpJHR8}zbI$z}kKQukX!K8=Tg1^aD z36^u(oKl*-d0h?g38r2>HFOb_YMXLmq7E!ao;tfMkRw+LP{UpNH4Y}1G@|6$A{rrf z8kiu!HwgduATuR3%LH96EKPdoYSoqVsz( za~JlkdE0IfaWh}%2pXy;K!b@dI)`o{O`Avno5Xq(3)hxHiLI^%^>;sN5;CX?5o&T) zqA!k*34vyOx zzK|zWe0;Zj3zlM1;mcuiyvir*QE7ZK>v5-Otc=&aYe zGQB!*k!ypr#exUYtPz;sPBMzskXa3@5Lhg>(dm_}{LX)VGR>I$+DIBUF^wbs0&kQu zbLOmm|!OyxzJgAgACJc;oK!O~bX@}9D+I=|I9L>UfeQ6pbw43mX*wkCD<0;(N zZG6pEY^J7!s+Y9$!^Wf~-ES`IE`TSTB*);>F4LdT%2a>W@!D<`b;2B$cWM4UE_c73 zt#kG&St7HqKX^+)LsCN8{ivm*<1iGu{2mBdt_0~JgPjD~=WO9P|Lf(kKbl1yd(WmE z3T>qOCXc0W_+Fx_XI?rePXxw#v3F$+TYvj8kFHsuu-lST1#5A14VJsGf)UBL`Yeji z;=^}%Giw$BBuz3!@h40!lz6*1TNiE3_IVflLGP4Ikn{3{N?0v~66rxl0;9c0;+I=i z@C!X7z192|%aa4flwq7B^t*TqIK}<$nTU9QP4?h)_MbJ^NVJ=GI*`NtdF3utM-}1H zzM4%Fza0uZYl>4a!!6H}T>-<1v4fsH=72(`*>;?Y$=_QLm9j1p2m8F0l-v{iz`o>m zR}j{2IU&Z0_De3r(#+QPkz@WjJ-u;w>}I0NlFXt_BdFqt>~+I};llyr!iSO!TpoI$ z?&`Jgoo0GZoB2TT5BQyLryYBIj;LlDq$0R?w~elFQT^zH5!ghdPt1uzaUk>XC&8yE zYBvcHdH#{{jPd|||8_wdamX{}Y+Bi#&3$pNz8i8`j&R*I01;XS2)$jf4)~5OE> z^U4%&*&FAt{8ZWw?TNfZu28~T$Zn-0MjYOnyP;R1mT`@g(y$+D zqa_t-B7oPGX{)gvn4yX*=KZio8~5#7aTs(6-@onI^)nk3{VWz$Otta3x9@yCD%Mng zxvB79`@+L`908L;!d>L{`VN188T`PCmdU^TZy@9Pul`4}09gOW^P*90yM&`Q-#iQhjJ;jPz7Kf@&9ttW#?f!mW7;~Ev71Bx zCzYb~{=WeU#O8odophE9rj+pelV~%ow4VNtgVWoe*B!*^R3s9w--n~}{=J{0ou$X) zpVPT{7nlC`MxB3KdyFxvfNBgzSaYjk7@irffeyM^ym6p1 zm2oVlUaDkjm9k;a6KsQu73^Xu)>Bn$xF9cSlnRfppJhEZ5Y*zr%C$u>0Snn4y*j{u z=qvp%xr5G(rFX71HR-v5N^_lNRSC8n4|9S{DLO11ySqCLMMgd|!jq2y+jwb{RG&UgI@)yVG54lMc@wv+^(H-q?G!j}Eu-cXWy`Tv znl#-h^OA#B6kABX_9U9HP1IhgjL_+~AV}z`efU~Q$sbcyXn&it)PJuqja&+wc=g{` zE&b>UwNAr)?n%vj`Z&U7lH8;sV3Tehw8_q#?wmxyvt8LzSb=nfg=LBQv->w$J-K&j zv_034d#8GK`x;!@+9AH)!SnH7rkBJ^B5VX1w`3|%gVfMki8Pdc5H@0gmIvmn8FH-i z7NGp3x{`xET&t^nfYlQmTXXIYtEq>i@(CCXU4c|0u(5XN{qzg4fq#F3XnN0OQ)NPc zO@ae>V#F5R8Ukt3rpT@spflK# zGw{9Wlc)lSFwor!7ON+NS<|#_B6v#u02Guap)O)rdFE>)M94F*MUx#MA{seKMYd03 zNWjCj{^SPxfu)5E>@=FkpeHd`*FhNAF2BS+D|9{uWWy;U_}q(`2#V5AHlS3ba;BzvV*5Tt@7AbzbJOoocnUtVQO-sHlOekeds4wvG)K_{( zDqPf5fFclYx1uYo5)*PNUh(CHrLzqGB?MM&i^$HF=*B({pbaADI8JFHj*mxOf~vhD zt)9fJU=VXu(ebRJ8JVGjZ8oTq)q{@}2{bbREGqbEPyhGEtT}~wv(ZjdF#m@2-xVXsxJ*s}{h(N@w~CNnj@Pwg>Ckl@=$xLs`l*@9GHL)!dE^XQ5` zD5*-JaGy5~&5A#-7G^}Lp_C6t1(^WB6E{qVDa$T^RS1KwyU zsgu-e*K;wAn(gf>RtJY_+Si-n(aV&Ok6|E?a9DO!LHshzTq6pXIE)l#d>OwGX$v*n z52(*!nabX;9wHb1w zpW)@Y3^`hmGt^c-k!nDWmAY=bbizfgGdQcZM1|6ty_iOVKqB@Y^KC?tZIeu~$yyf> zG6}|~c9gs`bf61wu+r1z{DwSOq<3oo^A?JBVHZ4q-)}UMvL2MvDrfI9F_}vBjxXQP zV)s-cLhiY21gyxSn-C;)T6EFX&p^nF|DD)?CXd04a~{nC|; zBp;i{3z_KRHj+uW(G&U4VyXsh){tewL1dcjcsJ^feDMmc1|?dsD7xwzv8Md$VzYIV zW}kcFkg~;Qq>^!-(vu$($(~A~MipjUYF7(B5rqorw%DSY@L;>)1=S<;QPT&%W}yV+ zcKPV5urE88O1|{t}Rj@(2LB*wT5&4ULy{SNXf|s>N{H8FU$s;#;rJ$gOg>6gv=! zfI5REwmu1rQ`rmzAr24X8I7m7mz~IMni6r43{0Le{>N~wUY!huT85ib8;h?Z>ye8a zSjdjp$aTQ7>u*c1B}{RT(m9%P-@~0~3Vm+wNz?-umL=ZNL0_@AW%Q>8w_o%u9IK)l z_0bRJjG&-r98Z|{Vy193WP}o}UIk-@4d4%fv6o z-}>=w;$5?fx*e?F%8d_^ip?}MUv)A>{?BMs@V%IJ7LdeCVA10`OL_8Ksi7%T{KJ+i z&J$t*^x5pd1m?dv>g{)y@d0&;xn}A4)I9Kdmu%|~sFlKkDi88L-L!}{%5hm^cD_`I zGC63Q)g9Tv8W zp#LcQX^a$(bIZ3ppjNwsC-WZ5ZN_@E(C4?&It0b`Z7d8Pc1Lt+rpr|Tv8)EjzWYJ5 z_7!Reju!#--^Tn+7+&i3)ngOtn*C--`}=ukl_^W`v{M(!sy<)--k{rf%*-pmDb}TH zMHaE`_yD&#oz&tm1Q%hA7;)>~KW=w3RW5?;;Z!xWcQ;vX#j!$-5!0e@oy(Knlk)#C zc1}&2g=S_M_sw) zIui|8VB-(Y|HDMV`_E*@>gHLhBsM(Wi+AOPdS7e2cxoTIZ6;qJvep%$YB=DWjI(DZ z9NK<{s7dc%&e|B~X7Ryx9?EwGh4M#qXySe0SBPKV2I^(wTh@hs9vnH=g_vK}=O8{XfRavnYDW!5Q9xGxZ3ulcDA5GGFSwQ`wDjzBD!s$0OPpYjL4h>6M< zaVbGT+DmyEON4Gq##%urp;w;UFS(gPB4b{i5ZMZUXw^zd^7_M}BMv`;X;}Y;0KLth zM)-qlGw9j)wC!yHQj}?{=YDRjzkUnD@h~-2>Uy`b-xLiR(AOB9Li>4`OLeClDv-!= zC6W=z?g?U17}M%uOVzZI6`s_xeI%pw4w0w}Y4v$LxaHl~;wiXH5mAt8<;)cXZ1TA= z)j@;LooJjbA>Huw3M+Z}a6cQQ_wf5w3-2I2!0cDQln49Fh>g%dnG~5%3?w&SZ^^m<>^6@10u2XA>&@zj0HMe-FnP zt!hERME9ZVBBk*uE69*a#M>oIcrtT$lu}E|usqoP8BH5IIy7{2oX-n}PDHxGZW(l| zrVO(&_Da;1DG;~!ZtDI;&fh+FQyWjjF$2WZ`$J#&kI7?$t5)bQoqC`sB@-&RA_{iC zO%o~!r2QXiQjPFF`4}je(sPt>)CKqx&-x!nwlDnp8%`b888!n@da-UBtc_jmdY>%g z_tGVqL;rH+iAWXvP?7iweTLRFEz9M6jUD>rM5~BCRT*#m^Ix_is66w)M>7yZCu=1OWs?}iC^3=RN6wAC|FKvPnL?Y z!uBNCDP6tzHX-11i@~LObZYtx>8{!siDRLuFG3nr*QfEbnwhSj$7h>AB7Zf62PU+v zfo++@S$q^%g&a%h;>Q*z5a4(DeA5Rd(rF>v_dzrLE2dL@^wf+){9%`{6C05T0AA0I z@4EamZcqQv%=Y^G*JF!QJ;uS`9G9pC-+AGHJ3)tkQBQYw88*V$v zhNH&k@^Ey#m2OMPYH*&Q%pET`zUZkk!^mOxRTAA;-r+gY^ z;u9NN3{lb9){;u3=V7TX*p0THpQ4lWRu4^LBie4^l9Xv` zb3{I_V&h)>ftB4@7>+SqF|~&Tt2;ESn-e=a_iQlixA#BXdH!w`8;wxe@PmG&oy(>F|p^?NU5?b1x1)M z^@wNXvBVGTD9iMOyeB}rk?o_@yU^^*6!8v(i(!$5mViy_%LpR3(&MNaffjdRbSWWqzm0$C+!4h z>ww7Z;eiG@BAbzF9}p91*21IknSmxJH_&DnczP@u>mVM4f2J$dijo5XHC_iJdfUv) zA*(Ao%P}5^@C#jN%_)J-4>EfN+A$^y6Whh(hwgrsX5nIXemrgge$LvG$;0=Hwo`DQy3B{_LrEe*&M7G~EpQ1Tlq=Ku%;w zflIr{!&18W*`5u4$UTHG(cMVoHjDL)WAa`*{ZzP;`DF4RwjgFb(tk7AfVf9$M=j>B(Zg|-L1HDYt78CaCV;WL##C<@gTEhPl!3L9 zJ!`4f2%HTN<^Ikbl0B4MRK0cA8UH#hj*KCZmg)AZ$jT9-^KCL=*f4>m;;V7xM1le7 zXt-sr*m(VMvps?EBz_xtfS7#ws6V;%1ZRT*Xr*Jx8Yv@tXA%Z1ddDYIIyI-GekOSX z%V=lsc`O6C{b$iChzWX%|N8Ia;ufVWQ7#7pvZEJlqsb5H!hXAgpV8xqt%6;(m|C>3 zC|eRm}U&>b;_ zC>C&p_6qr~y)Qz?>T0W<)EaUPi+It!>Kbcqc%v@7Kt4P;_a%i869z|3CY>QO>QF?) zGi+0M7JSfDL8@&3D~B<&QIBH2!w2_2rTtDw3dAu|km;y}{Q^U;F^7O(gAMO2#AMYb ziP`xpzi%i=0dsAtnrq@d0!%zp$=KSp2Qgx}y7qlH!Qaor)T+p+YPqa@7wsJOUT7XE1sUK>=J`K*)1z}8oZ0@@jY)s%SNsxX(@F( zb~QqmicM(7YCD8_b2U-J)+042m-L3(`aAQ}at)2!K8$BF0l#hPZcpN-Uf0_3QjHU9 zZSaOBQ%fl6*y|gW9k!BaGd&D=F6od97&oT9ea+h-fGU}d5_04m<-5X*4F&Li1Cf%e zT9sk!5vvr5`(BhF_2hpFFR0#s=xQoZl?MuRIO$!9A1dTUSMvN~VJQQ_SMY@Xnn$rQ zOY>ZU6{8b=;2_)^wgFd#eV)hzqW|$dHwh#WGmg#h+N02Hb&h~*XXs&cLlACDL`d@D zn=L|1mHG%`w{rcEVs@l9w;J-3qiQ0)&sw6aF-0b~aU&aJdYvr){2PvP0~mFj&rUYU z=CeMt-Z0L*uu1B<2hx~Vcx<=`z7OT0BpRg(oDHtpZ3nVyF9pp!_%%X2zN9H)|+^vN*2g{RcYZj zdKz7X4+lhBO)jh_!-5zhsT`*R^WaoeCnFj8DnXR`nQW0l8@39W9SohNA@b;;m4k=_ zNxBvH@zC{b{$~quEYx}4v{21;FC>@D@VS}S)hgcbEY6h5 z2la|d!ecUrno}gVY|#g%r9!RYFI(1w9NKod=T|AkpaP|CUCj%KdKsOl{-HaR4XDd7 zC&$WW+aIs!00MX=R%d?*3S*#S5e{6nVW=Bhl_29pIL(_U6IeOa9}oP93Ixh__@>dw zZJGRS6Y}-$Q?jwNQkR#*Wt^0Fi->!(se<`j?zZV+D9_&9@s@eA$U@F(tTC^eT^hql zvO}YcW}TBbfL-2gyM;{Lyba%!@g;H?7!={g)cvcqZUOVN1x?TuqGh^xr5s+wFYu># z@k?MxD#5$B^Zssd!vuGvpXN-%0@x2OH;53r0-AgaJ6+$6aeZyX)0gwYuvCiW{hkcx z0ahveKD0`i8}PjX{F}dpV|vkIeQt(TJi+A~B)wjl@wpW|4#Fo!q)Z2Mw%yaCuqgAp zvS?teObMGWF*!rhsFXdO1L3OcVj47k{%2zQo)(T>A%9J)WNl-^#Q#$zBT{^$#rciD zvB_%QgnECs+oSr=oB8H4(A!hdg#SuzZLfPtnLVFnW%{tuyPTKbO~=tP&s_@y&W$1!zqpSRk~jiTE>qTR`aiPkpoy^w3qv6%#Z zq}hpSv}#<_{-_d@E~SG2SY5qOH+yf#xAT!J`iO$vr=_J0U)}GEB{t^%sUg<8_O`Xp z$Kt7KRd;-p6Ys{YbQbgV-x?U*7k>7b;Jp*^PE0@Z*l1?uxM%3oB+4+)ShJ);2hdI1 zq||asQrc|w5i+D;?tBWtj(pT|4O2G6U#8ZL;=%DdQd*S@7?qH*$jKnBKMR4OYzv&4 ztLwY5?Qp+?PuxFDaa#&SnzxGV>f+MQSd@m-rs&7~tcA3nRyYHvVYAqE+y25l`t!I^ ze~@_o_I2U_^dmqxl?vtXwig`7d$K1vH?p$5_Bkz$H2CZ`tH@Z|UGt3nsKp>^ZGTw6 zf2V!Ab0h2frwflqdxgVvI80&oOThhl1*s0;Lf>Z8})CfIXpC!Uo#+0q6Z#p zcsV&#j(%$d_9M%1_aN@axGQ6B_We3V=wfm*#?q#BJKmB9Tr})}T#2o9mr=i( zPT|KlQ%hBucWR+fDQJ%HZ3d{&*E7{4CHQO=yp0-4ArJR2)NdAM;%RuGGv{isz$8O- zPSSZ$+Wy9CUtaQ5)~pKTR*bk%IHyQjYtK+CDG#9#=oV9i?+Fo{yVBW8mWjq0xm0|_ z!-6C4*eA{8nJ14fap;m3C`%B57#Jv@C14j1`+p)h1oQ62Oi^G-n zw142nuJGL}eoxQVKJH@7gzrJ0ejB>?0+Wf-!{MdUtlDQk-YYjs*It|-+1sraM=bOg zhG{u#QKki)-ic=6iz;6cEHjEI?Q%!V)4}s7QDAkP{qa#CG$%?FM@NI5CMc(#!)<@$ z?RcEpTh6`UlYOQLusZ3OVG9&8{QzMwK;7AUF#a2BWhS{^6Kb|#^kY}PxH&O#`wk)w z<=#(`ax$EvEfgIj$D6a^SAkVc+P8XMt?(&WLH_&f9qc+|jKdv%nj0;^dtsiJzqEMy zN+&d3UyKRCd#*84gsL67FC633g?%)p_)>}e3ff^%%x4hRIpGqdmakJdO=lWzLr~H= zTj)hX;{hUSypac=%Q%=s9*Wmf&c*xbOZ5Wa1|HJL)ka`hNBNG5W1w&oJ*{%?FR1~$ za)HJ#sd8Bf@ji!LD!&#V!m%djkdf(4Kj7`}BTW+4!P+b7U_$c1+1fyj{dIj)$zzKA z^J|S9#%EBdDDY-^6^oL?$b(h?52*c{QxI+YxF<#+nqwwI)!PNOkv6~DSwiOAxH-d> zZKXDB*hTEf8Sy;;%z(k9fl?Q=79h2TI0_FKTEeLannwal1SU))@0mqDi1WtDjWPpJ zMpn3+L!|Rn#{CgGBUM&N<7v#7H3Ps^8U{JjjbRWzr028J-jGwndvI+Z7^!e^q81Bt z&=7)*+Ive00AoCBlZ$2(W-P=TM@ch5AhQuy=XKI@q~IC5q9gQ`sY1IgZtj<<8=>fR zR}>7n!ZbsWAaz3-fRh^+W%$R&m~o`o1Nd1SIKT9FcB#$x*;y$s*B-OpbNK3ciJ>q{sYq5q zt#h-#0%XAZb@kgB#$5&?hRo`@IdC;f zGvb3*PM--QyVHQv@g=JaUJlW`O!aw2Jvfa`fK!e0!AN(>&p~<5#IfK$ z9t~-Q=?2=1sP^H`-Z~1D45t#~YHQ!2Sei{02GURq39`tzn&Uc?854`W!S^!A4d`zg z)#$BfD-Zo)7LYl?25!DbmN$qj#UVWgeF65q(yuB zO_rOQfHl%Ek&2^PL1q!)W|Z@2eE3&6)FfCt6*I2CR|68NqI|LIVFqXQ?Q2Bz=D{s1muVK3>24x*Zx2AEI zBLs$!!B=o7eJq%&rZ3nG_y>9wN>jrSO7Xz*7o?N%$-Pjx#TG9y_<62+%vCwantLRe z-i)Adk_TcxYE{gl!#9~T(2z7<-D5EChfCbtLr@zEQVvN8)I83fiS0C0O!xcqd@qIn-xBiHNuY;SdQ{g9K0U{9* zMLD#TW#D9Jh#TG$$Jl5G@*l^@QQq#M{a4kQ=f0FrzOsZ*Kea-#BD#!M(f^EIlw9vZ zJ}1(zl&Q}toK(@CZ?;Js97!8-0NGX}H6yvcvO^4}noW-ac`$6wW|KI`wYs3ZVkuEh z%@2US=ov#*hzB zo_0Nv#x=Hp1PqFv17O8xoktal^V+s8M2wk-ONi3-l}UV6S^7QZ(|DHP0of0&BMysJ`r(>T)~*-aj^1i!6h>DTPBLl&DCkcPjoW@d zD+Oe#oFd}%4X{N2aaNdp0DXr$$5pS`2`5|F=M0(qa&X^cIrxSAbgC}K^!$+l14EIr z8@&uuEYrjQQG64yzVdr%Ro%+IevWh%0s-djmsflFO*+FpwqQiB!eenypo}~SL@Qqb z5K$QHFb0C~u9dmvk{J2RUnr(&Ull{c9t!<1rq>}Np!gQ5Rgi&( z6SVn0%$aDG#N4mrVnRWROp5n4W>71r^0THnKt%p%jMCDv2l}|_w^p(OFXvx|{@f9EQ}K#G~ag7=a5qdD>-Vsn#F<;Y(0N0abga^Q#{dC8@@KP#puVHwN!}xc~GWfB3__fMI>F z?tBmYbVo z@CF1#Sgp^1y{;kMnqNK*V+!c&e^G3yIYAS}`KRLEz^^U%z=+pRZ252VJtTK<{M@6GWg>#*6fcl*hiO-dyH#i_H7Y#$NXjG9 z#uJQ20{#5*$xbU|Z}>;{ey6;!Os8_&SAI0o$;m9Bs11Vln=R<+q+kcy0OlVHD5!Ny z=ql;UFZDJJh=bFj7i`00r0+4TxdXs?x}3&wAw4_8%FZuRaA57wY5}5JYxTsNF9n#Fft5N>gGnLG{&{Y+x9!bslR>gX-e2}c1xfymx>|B+hTkZH-YX0aYsm^shuS0O=| zjz|yV3TQaF97Ls}Mgj`bgEE#Gj1`&a&9QFkRTg52X(S@we|PpAvBg;S^Yow`lKJvS zcygPOBcvvn5nF55%83*8TR~y=&52alb@RqLhQYPk!+?3I77)(YYq@P8=-751y@zyy zSt%qt8(Zx=%mfM2DA3!zQ0%Y=i<{dPd@L0ar3DI|DbmvRbM24kUg^MJ0LFjXz=`dn zfnu@8Jzn>ajwJ2|_mT|01M>=r)p#%i9o>9?zZ<6@k}$u-R*!sGHSh>6M;J(Lzz8d^ zirqpl)@voL7L!B(#5ra?tOxFn~D zkoOt@4k-(3K9do?sey8`KrXpl<}l#}E+m749wCX!w@)J-mFSPrIX(@Ydd3qsX|HoK z^sEWGq-@!pN3_wTWYt^;G!N8*V6>e}vTtk@QB!bOTdfv5M!r#yNX4AhT_Bbbnpz1q z_fgtNe(?rS3{aIV=8AsQ(CMLjixcqS-Eb>Mo+C$1bS!sRQYDfST(CAvA;o5(eK;(7 zyME*PJTji9(QB*wI5b=ltQtXWW_?`aB>|c~pcN8?sWO2oOKr(6(6RL-f1!b_u|5lL z*}u#~@*OU_P|*u+vDaNDK&>Y^g5;t+ZPavd$9ed z8zqNOP+D#;?DJm%MEyM1kYo5z+~D#*J(-qxtzk&^$Ac8}h3`h=7pG77n*+@_?B#^I z9932c9PmBlZGyAlx%&G37CtAR6!-DO9Rkl`eyF|-0GJed)YAv5S;-r(oI!q*6}kA< zKQv4f*uDB-!ky`y`sy+OIUZ!tXtO>j!pvgnXbFiDwNJ`=P2v!Px4qiSOv&!NI^8~d zd6S>uS=u)I^A~5OSly^$Ng7aERQ=FN`C%A*h?V^h9XIH~^Ia&%q2E)A$7(!wScG0& zMGs3RBzknGFxI=u-V-SLm%Ood$V49s0mj7b5~O1duppxP#r<>2g)l76clbbT3xaL= zr8j`7QoA4)Z6yMAKW2Lg}_kKR&A=0xG+`L7A&ce;0)nxd+K_;C16Po0pvEUSiA6F zB!xSb!i+nvptbcEh}cqGS87(yr1|P;>n`w~5$YuNS$+edzw}6=d92C=S>4oH2UCy; zjBAS#z1Sf!U)QE&a4haciBzfhyL0eAu2O2J29?QnMbL*0>7vgbAKr(`p;7!!mkcL2 zDY5pi!R=no=}P7Pp>{PtPeC~AL4&iQGpI@cu;ZB1rAkW73eWNLKrZS@5Oa%h+-|xj zWkPPYELLAR4xALu6?XcMuqw5LwVfyRJ(>Q?c0s%069I6hxt1&P3jPZ`j~%X;$Oxxm zSa0zP>PG%EC~>hoOu)mUak*T&byYXA-czh7_uCT8(TSP>hPwxq3+wABMmQ>bZVs#&&vLkBpt7AdCjbuBA2Hp;^es4-pX1Gj@z+X45WX52R(rLvg^tA7sIl3 zUqdyk0Xo^_eb?+k0&Z$Ko|G*I&{iGi;M^?e#kvCf!nkG(C18C zgd#&&Q(bH83&85Zj^aHmmXs-O%LYtqZ0GVVTj$Kpc7OWQyQ-P;dV@vM_|8)L_*Iu z#23s?P)!Q2fv#EI%CDg8roE{+)!PK~DL**2mh@p^Au6qWcl5KJMqOW6c?@f9lW|`v z6fj`g zI)dIWy2Z7T^fdcdxyh_7POZAGG`iN=JM3?r8NTTp2GgCcdFFnNei%lrs(fF1Iuxc{ zI@MmYfZVV8SES)Krzn;LwDEp*+`{SO0LPqe-;Z-?sCb>Msbs~qiAYzo_HlIn*$WXj zjV_JP=P#-Ax3{Yo244??W#9I+FRsgTW7h(45ts>O15-yDb%j&HAH`vv7}fB`hq)fS zMA>Na-pCUamt*xkH%v9aROFgApwfzmI2zkRlDYKolH-)=VrBopK(Vr{LW=%qQ8C1# z{DaXf58tSvqWEN@;moGaqOs(9yr#nS!{dap%|kM^t2mSUtOdc$!sQ9Yw75j02B-J8yp-;M2JdqRL3Fe^psVK^c`x4ink zMK1P(b|O`K->X&xE$}Sl;X&dKeRy0>D?i?8o%wdbM$NLzW(qQTUX7~ql*hf`o!6Gi zak!rI%WS=m5NW^Ko4^!cITp&NX9)8CL!6B8{9vO`GK_JC&hv%zrt}@Jk{KO_4!TzR z=8kgtt|_RJQ^&QC1N#VZl$NjKq0W~mW%k!$6_u8m=V-n6mf*3O0Z#ZYNsfX)<2s!+ znbzyB2S$H(;viHZ)q&A5mQD5yn4iTD4l|$y(NkhsWtm*#a;}TTG~r66tU+sSN1b}s z-c`^*1Ow@nBKyr6Fq?nxwh`HBHWlt^G?&a66Pa%!kdJGux_-9`G#bu_fyvt3vCO?Y z!qv%_@i>D7UA9ld1n91ILK6yjPsl*q)WKHxuQ>EF;OqnQ?Scfy^&e5G*$;tX6lyP>yl!`AzT0`D zII89rAwmC6Q1uWuk1LundbT`+Ijt&xf%BMuv#8S^(Jv8T6eI9f&J!oYI*BLdWs;w7 zPxNo#m@qlcgdi@;N8A&ELgI!;I>qzH<`02tl5>!PLehxJk1;#yfMJB5Vrk#wCS$kU ziK?$M!ytm%G>{aS1#CQIuvmsp`@Cs7iW`&4Z1f2q2 zL!gWR5M(fC@)GTXe>A0U_@k%Ce)J7tfCv|^_kGVT0Q_ipHQHIXl4^~1&qP0OCeceA zzqG5US#kL?79of=a-XBT?IlJX(q&5#ZZutVI+4sTe$EBN&T^jrE6vDZPcxRKAwQ`Z zR`d@_>FL>%w0TKWay`0=fJ+<0aHvx!N){N2;F7^@Vmg-mlcrgohybqH zG(lzh^aKS|6hTZ>^bz5rtg#p{6G>)u9t@zfq#wO}24uboA`*3K4r9$ETuq@Y&-0n5D-tP!Y6tQr zPs6LkX>w{xT54I-QT;twg4@{KALX}{j4~?V^j#3=H=Ld{Y1C=M-ov${qe|aQU&B_Z z#lE;bbTQ}&uD+4dx_$T`QN;9L@ESm_V@LH_#|x}oSYeBAhg>OGRQqAQB{UAxA7t;? zkJF}gL2r^K2uCd!6IZFBGP|%KiE~fnsIGa~`bv!AM12v4!jm;$)9gSYbKJGFJA8?? zaMy_(72w}>e3vO(jFgkB3WPNwylO{#7`LqK;k3g5MoO+@S!dda#9gV#!@B&o397eu zWxmNyu^ym2CVNs(D?$!vG{d_^0dZ4Ec5o)Vtj+vHsl2BI#~3;ZpDT}Eh(Gi;b?Sq1 zkEle&yN!j#q{MwG9f%CK?NvlF5S2tU3FuO#lo*NNe7^Js-_}2GkfW7*+mQTUktyCj zP>4&}J9PIT;q^QjGvuWTB~V0CTZNRYh{=&YLJhw)Ej6xBrHttx74@7=nqjW7`9xg7 ziGXZzHt&MeD8Ver6l)I??WiC{jv#55OqF4$Dtb9+4J_DI2uU*!;`?*rP6E55cr z#CF#PNFczE$1)T{YCxr&i0ortXz_(l$CW#5i4p6(aCBS~kxSSssMMSxW+MG z+Z)X9E^j&d>_rn04#$W_{&O5hjCA9tAmq`!@NzK@u*)EVfnjdenJAhg5!xM)17#HtHK+~hkF9}Nux}kDO!-xy?Hi`6BwEse!OUWV6?;hZdU_iLHzGo;Vf)=jp zukExbpgD0t$wlhCbmD0a2G8r}&ch5KveC&XioLFN%DIwK#ztLQ()%JyqKCTKqrn39 zq@2&AsV2_*Ih;m^fXzZ#PtA%vJ694nb-yuL@S#k@z8heu83EqE?l^!JOZoj=N()2- zuj0P?Zh54JBuZ;zmxZW`=8!1w{JR=={11+;6${!-h7DOA#*;%NI?UjtA9GtrUBnS0 ziLcSDq^ZMGb6zmXTIh(?cU;=kN7|BzU~5CUq-qa%cJ=AdjUh>U>rENO=WU!UE~QMA zHV~&;R8&0Ib|bezR5DDk{b#&on+eyqC@UD2PW~_fS86H0cQiGkOn!U{<QOLP(O9PM+?_p>io~+gMyZQ4Eft!~;d%k&)+A4!+RG zGUVyEXUjyn2gX5%c#1k25j|!9+q-FKBv{mB(IR$My%2)l$W%eJ)@R~utx zheF`zVZ)pK%#%`Gc7zr5xj6zUTs%k!c+^h|Q8_b)dEQRr8MbYH@WP$wQ2oa-WL^aR znv#%?P|z4S=bIm%`wRYW1j)BH$^WLU|EEJVOpKiWQGsdx#}?Tb{l9FHTd4mlOCd}h z8(J@u97auPB&%Bsa0QT)>ZCxJfHarC-<{+T!ho3<$E%98>EVy(7HVq=3WrXD)$Lv> z(A%{Sm+J@U*dWthVLpA;y>z>JwY**!^`NG4T@CG91K*OHq(}cfzSK(6v}?dlcs>mD zp1r%NUM7+issE%f&BXlXT(oZdeA&|TkBS*Hr%PAC9wove`piLajm({9zChLY>*V0HX@{@SLo!J+lO$0*#1in+2P3X=?|+v6iGN{uYB{$TH61ikQ{h;2 ztpD84*Qqg%x32X5`7$BW_Uf*a=4@1lE>^e6GTYbv<#YEM<(|%*Uio&`ITDf9>m3UF zov4mdv-`Kjj7f~V7vUYi9OBk5OccoY5A)J`Ab(r521_H1#MWS&ymDAo_pa$)xM1N< z_PW>E3LQnO!Hbgiz(iJ$G->Ww{TJM=lCCD1gUefE|HU?Gb@x?z{|Sdo7rIn~-mwqv zHbgzB*wr&AlS=j#Kz~uOx5~+ARJJBG&1~;jdz2!(B5Ed}PM6Cw&Ee5Ghn0z@yWdb#p z)MBtB;t;c^ze##e>Xep3;=toczTtf3|5#aUO6?kEDbMHs{#L)8ClFgko0$BXm`eqT z0e>{Rq-Wu*^e&OPW%d*!sso;JR&n)}&{EZXO{3{mmQg_yYAKa_QQVX#Acub0T$>r1 z#7uRawnXeguD_3P04`3KO;kxlq3h*)BdvVF8yYqx4=&0iotZ~=V4*5S(l9eJsx}%K zG4`bo6H4d2;1e8{(^Man#bkKE_i?-DPk>gNB!kp^tGDzT_|O> zdBl{Pm;y1>#10wFe+?ZeZO;gd8Md@YXor>fZ^7V#Yy0*2RiGJ^X)j@X#f1boTUlQW zRM1yv;Rv-f^lj%7ymx^m8v{n0o9i^VRt+rWU5eGDna#QT1l>Eu_hp9zN>n_gtOE{* ze|XP#cR~3_6~AAk3Lc#@smO0EFE?7yV7qw_`sx$p<=>WpXWds!M1HXJzYo`s^E64cxsLj1F4fmU*U!2&2+ z7_NSG1`OxOzW#;ue}}(d@Tk2N8dv}oFGn7FbB}KO#=o;3*^HZRAB>J_gY)J{vIe6M z+B=}xTc&D9{vl}7jw9S^ApJ^OfK@mIQ1ik#dU9)4c75!+MT~ammDH>&aYhyMjjEd zcR~SU#7KyIaSefp!v|c<{mP7n6kGa=Q152{D%KGq@D;5|PsE_`-@@>2Fvn z2GS#_11ri$uZ$X`29A{)3X@EacH*gz%!xZi=10RcJR|f1*Hy^_9q59ronA8PFX`D6#v`^!l`_q%Dn@0bA%8mlxAA8R?f)Y%8 z>gpvAjG|s0Z)C-zDyxr@FPlPdm3ip-wfJ)eL}XEWRFjEFb|2V?H>i$_gWg$u#p;~U2|6SCSi!u4jomZWs zX#Y7MgvQm0LB%^Fa`)$T-1UP5?l}lUyt4GvD@13u;DCgCtY-p1G>w_(g}^TRg{m#8 zFwn|f=frpdZTBl)%z3&r_50_p!YJ5O=tM1pgYOGzhnf<7oN@G&o#$?|NTr7GmZnob zD{>bMdM=y&fKDH@(zb!j_USTdZk5S?>_qCp?Gd z8|Y1lYvwfk`4qdB*H4_2g>ZC!f{m($@4=;O=)S%~ntAkqn?7BBMuB2g9y4gJPT-E5 zlJt68R6zKB_a+4Uf*|+S3^a3Bzo`AE|MZcL&6Qr6Xx%@{gg~@M#mPgHYboE2um<_g z^E{JC5nCQ}NrwmK;-Ob_7nTLJhEmrWHu;Fwl?gs=Q+KvxdIY_XUv0LMtd;Pd2M6-^ z^Oyk8n%1~de0mgBgan@|BE|vq2*2{38VSnG$bcbC_x5maA!UuwO%+Fzriz*xFI)R~ zkSswdFFvC32a>W~1UlO6c_=n2c1w9a4qY zDfK|Y^!Q%Ys0_cHl${LS)S15~d9+o&6t=T!h}O&Al~u0a?CZxu?l-8I+9%(CQ8!Hg z8>oYc?LRJ=S8MDz{sVRR-00FwTn~EB`XGkII<-CwJQ49}kqF;LJ$1K&O zELBuR5;YiPP*O7Yd;2J?DXcsqiibK|T`-xc^_2Ov3!6bxtp=kx@TOmBSUl~rU!#pC zt!1q*Fxtap4;56AG3(ZA$|f*ZQ53GuD5SseBT<=5HanCmxgb2?K*wuUHo8IMV<`Ofnr6gCi)=T2;)D!rSp<@DZdhsYX!>=?G*;Vqpsx{v3|_fsve zWe`0&M3e$(X{;Ptbue^PYCj?;^-IUEbq*B*n-!a7BPz>xho}$by$9)z4PC;{yn?dukt(#+0vSo_F(`@fT5LEuNz$ z00zRo(_WrK?tCS1bm>Uld=Xw6R;g|l2M~$=?^je?0|f=_0(Jb*nO%EA?AD>jWQq3^ zi>IV|HV-wLJ4U&LM+YNy2x{DUQuHkDo3)331k zNHb5+#^oF~!0H8%p0R#wAw-Ef^#}8m!j{Fp4t^8=rdVdJ5X|19??%hEkZk9Pr{y)r z?vi98*2Jq;H&f2nO(91ms-sX=6aHED2l&OFw58*?2chQd{4i8Bd>TV0Q!f8rq{MgY zbKOUq=uHzyTGV@dz@5forHoy*SGyN6wD8_*JD6>Yhzc^of|?VH7l<3JMN%(Ac6;J8 zsPS;n@?j%+LqUBa)l`xS%5Zy_7pM_UWLF+8u68H`aJH*@wnuUT+1sGp+`$W7SMklr zAYs$~Ui;@&atMq+916W>;ofj#U~45tx6aVC&A;<((~Y*qD3HWkQdR{n zRt1E7_^ZNHhA1fY(C|=PsrA!u{?kXyl4llRiwDmKLur3L7f-qha_=JEMRo17Ox{g& z-;~VBJV~l4C$L;?MMmA8p@V|d-FFl0c?Dhz_2vVO5k<4W#CJJr4E+}8FM*Kz93kT# zuZDjI{3!ZNsb!i-Fu2NeV?Ut8YvhSEJ|ykrwBbFWE=tM$Vqb8@oa00oX`>xrq<4fG z*_K9|4ZgTaieo0#(02=k>SkWU&xbT_@QW(-!nb2tCvpFRw(~L76+SBGOd&&Tt& zxsjY*R40aiuQjExHfai$mdYQyt~w4|wB2c-qW<;iuW&#f?j6e9lrTdOYRY^qLF^bM zWk(h^ohMjB+A{?cyb#x1^5JM((vv9(Lk&+ZarXN$n_Vq*R$;mb3C=zOZoWf`X7ZgC4qfbxEX*zea_5GXHMu zT*;kHHD%dmlH?K7fgurp3|6#A2f~O}`23|iqPw!t*=Cq1pgCc9$eM$=M?-U)hRETb z$+Qt9+bM~$#1vDH={o^=0^g2MzK8e)9B>?mKP62rP~-_0sBfBV`k};#+WJ-8UvtlT zYK)u8sx3hPy9ERsy%M|R7hPuJSNeY#JE!o>qNUx&ww-kBj&0kvZQC8&$rsz`*tTuk zwod7G#I;KCw?+%XRj+Y^eZdVS|^7faBM4(pDj~xklgA2P!n{Qyv1a$vu9h3fKD0 z_w(xp5p6`x#ds2kKoRpTV$xTkQW?hp@{GU~g;4*dt&qIJJ{Yi6Y$WfZ1IhZyU%521 z5Ox0M$gg4;fz_Rq=X4neOg5?D(63a{;7z|J$&Jw5pk-&$Ul(+NWKHb|K)|pd6Ha|C zlu+7)F1m`}F?D%&!Zz8K1vL+mfI6G04U|EBk7LHPcs{7-vk6>E3$=$@vIstgG&`iz zO-p*8zeK;+a;ep2?3Ax9~4W)tK=LQNw$imTE??<2;Sa)9VhpxZcl9wvzeb6 z>j2ro)Tr_3euC= zb-$=X@hV!huCb@lIY|HwSp=5A?-$UW6HrDrLrE0LDn&fpa5o@YnJUVWf{DgkNKQ{) zv)`;u5}4VD?I8k8eNxY|(tXtI_J+_uy8yhC+d4CP-BV`KiCM=sZoaTL$~DjjW^P^Y z6v!eo%3@Tq7^3V|C*?@QXY2V`=gk@ax+U1UiF92lxyE=Rh_#G5mZ*!h561-xKm(7N zd1koIl+u($jx^1|Kk$ln$eHkRin*WJvG+4yPgPgdX0tEMOS^5U{dB9KmT$UEu3~!b zw#cUCuNY=qV%Fi6HS0O1(j&7N5h`{ zK(%!gVs&hJPA>7Rts3{DyY!OxOi1AlR7sUc1qv${Jzo89I$mmkdoE2?LbVeZiZ;B<+MTLlEV(QA|0XG(5bd5&c7FEG!WFm~9%*HTHBS~>DCZY8- zLyE#!N5Ob8pbRrh4@zJf4y1r&W$bTr7)KDB$R!X60}a@0Gm@O!>rrK<(x&bg1=`8I z?JUsblou4gIPX4}Ut5URsRMP+al#WWg8B6Vlf^!fSgAk9&UrG1_)3yE)bCUR(ivh7 zX~bW>SG2pfuC%5<8~!Ew0#JxitTPtS%9kQ=qbDmuVY9d2s&&=V0fGikY_}w=^n(FD z05M`W2w-5&`-N-f5$U8HaFSLg<5Tqv=u6s?k?zU(fWtLB-8Z|9gaj?k!Vy3mHV>l2 zPL^6L0w=>Z{99ICS#2qx1shc z{izBjKMLjK&DQ~Jx$&iJ$T$6LHBRaBUaI9F>AIl+g0dKn-<5Zn3Mjc)F7$uLS z#^(u;oNFiGDpi|^3DWXKggr_?tTQHB3H`je&7;X`@!x#SeLqPKGq%TYm*YqAn>#83 z6WM}X6@z;I<;a!rZw5=Fw61%Zs^aFxmPB5;lpiah9HE{yG-=5$ou_xuyQy#ZF(h#! zz)iv77TS9E;8uJ~#_#}*I3cn0`yglKon83#g5(RE{-}fv55p$b6S;KCbgU=@N~;Ht zwMos#L(2G-ClcG$7S&tiR2LbzVAGIzi(z{&Zr|mhMrNN!v~!?6u9#npU}-DTFUk+% zKNkM5fANU=_iHK**k;5EzuSHxd;0P@0LwAsN5AfxUCgJ_= ztPML6YYD*neN-Ha>l|!|fw%-pdS{Qir2+5Iq>*)DLmV75LGRj}j?1W;jFBYD8`u7~ zHqZq0#7KsdRv;MDD6*BeI7`8S%c_x0c%qO#+a#p zI>OkZ9QJKiU#>3)W|3*hE+;Cv6+@Rb^tLI%cl=-}Eu|5)ns`)>QwyE6e|p)vhvWt^ zld!A6{UNaxKKS@+YrMl1nBaW6Xm%X z3@te<7}ws|?A(b6qvI~&%y2=Z7%iddH~uJbBJ~b6Yn^2}GMQet=-v?GIvMmxlP5an zTvmu*e~`R3uKhSZk(-`{?Xbz|DCsT_R$+Xv7>duWx>-gSQ*drm63;fDrT>Qr;-Z5O zg^L|`NuGkVDZNY_Bm48%7sFOeb~eGw*6LE&g|l*Zs8CFf4|YlVh9TEnT=tfc*x5IV zN@D-Ml7jbffaTj1LsuJK(y<7oFI8FiM&Ud~r#zG^95ot)j?Nl(jPUxOiX&%wHJY^j z=VW5fmk-<*Gi^BCFAMuy&3i9qfxT93@j?B%1_)>Gp&^Q?rA*=%)yZ`eBC*}~fPxDsPL5`}1>H**x~ z<-T-QiO0@DkhNgSs8lG9fAYMmNAc5h@#X#lY@OY$^WTd8|CGn!0@r~L3JG!)#34eKFb!5p=VSz9^ z{()8AM6W2}0R#NVq)Za~v@#6_^+A7DZhx3wQ99GX<>gh0JksxEz#3pRa>qH)nBdJO zdeRk=dd%$u$g$@o=muz|0x&EK##9`p*WNl7B9MZ3b7cxCjVNaL<>teu{7TN8*)y`I z_`10AQ(A8HvOk@!Uvnpe5OGzwPes_!==K@LT^M3S(@n?6erW&gJP+M0lWa;-CRsGL zjdrZaP8@7raQ^+XoG73;dhqSk>lgLTS_DTRtTDphSg)53r{JqbQ3&HRSP z7r~>dv~#@D&&0x@+eK8BWLkTDb#r$x-BtJjuhb4+jOydOJhHf+{5Nllk*VL~qeayG zrd+n&E+a8a6S;TuALfKv+S*i>vXvqk+l?9=B%Q@nh~f41(4_K6CN`4U%d)VUM<`_DY4)7qp!K)TV${1aYHb5QTqUBr>6qN$gkAG?qb!K@Da`d7i zO+`I4^_1SRQ`!-)KB`9Ru_|PQQqy#Do;G*u;^V_URzZ_;|1d$_ycPF)I%0}*$K5p< zK{?^Q@&PVZt$Zq?e+VnfqUcm)fG(cEpJ=zhiq2OD#S-Kb96XyL5I|I9R+>a>q}w#9 z?m%gfvYageqH|?>vdm!(@WpEDh~>&pq8L#|)?S*{PAjpo2>e8Yxc=l8iVcI}N&xK- zz(Wd`TJIj!UKLXUC(K9`M*=mn2Xu|jGhFo~rIqpR_wF98eRTO8P$qXGj{5^ajroD# z4nco7=fZ{G*Ps8=I4qwe_8t;||Dt8C5{~Lk{ zj!g-^HUomroy`D>;ZzVy_#Ym+u{I_yrK=q0fdu;NpEvOM*bP3v^Uf{WOFamfRPE$l zcBNAI7ci^uvw<9*zASr4WA-TnhNC~L`~!-?r87Oc6uKvB50mM(D*g8dmJ9D3lCf>V zjC8}w%>3jZkac~pMC5{UiC!!qQ#4Kdq9A*`a{D}wPW1)>S&rAVz`4P(>XV3 z{bR*4!ALUiaFQvXWX6u5{`O$d!s zUj^(!JxOC>ZL)n)$TL^9?V4|_6V*;@+KKSj;VIdm?<{oLz8kFMzsR+mEdekDPTV9Z zWJL=_)ev6@w8#u;n{IfOcD%FPSJ#bT&9zsCDKZf&M(r;+O=#=jT=XQ;En<9HYQ+uv z(ChAIO-o&jKlETC#B%DhQWY^JQd>xGasaEfP*qH4|9Bd5E3R`r$X4IH54+0sB@=%dzuwO|~m`CX3oE z?@w8ngs=86(h%8zT>I9}g;D!FM=h5U8b!TmckIYRSZR&o#5vr;hUhi*RW*-Xxl#KQ ztjhLywG#(db>G!+xkU_2TBa0Y*fd!YR^U^g+A~>nI!)~vY?-GL#6DhKUuwlCjmRd+*`^q7~ z=Z$j9K=@`p-4FRyY>CmFzR=K&SSPv!dBFEdFAKmtdc7d8Ryl4io@;Y#qw4%AJ{G^c@<^6JFhvzNspU>0A?AiS~x`G8YhgBpGQc7Pi(3AuttLj}3 zh7)Ng<}^r645M%;&ZoStO2;eeVY5DXP(pd~@28e7kWZqsI^^a4jzeTr*$qvgf3v+9 zUQM-a?1I`6VMRH5>8`a^Uv%nZ#|%f3;r|(Xno`s9TIt24FIOvn8OpGb&@@30C&Ssa zaPqe)kZ9K0CAEWO?s(V(bu;16YFm>{;#F2PNmQNUy;e%06cjhk#<^#-#~fE(-S*4g zaP5d7XGW=;?IJY*^4oVBS<5vC$jc*z0nefp(!v`x%w=F=)1WIGatsT6G*waV@{k7s zsvu=2N!zxnj;AYd)M*Cs!~j6IF#OD)nkkizrkH>w;)lSy{;b7iM4%<@w zjO0z*ztpE1fZA)VA!3WkzR*s)ORMikCm`uYevG2&R6o+O0rJZ?#t zu#DfHp$kzy!>x@e;3=yB{Eh`eHix`w#Z_Fyo~=vpa!xQtiN%+r5-9E3afp_0rulfZ zB~&SM>rt5G*6Q)202)>3y#Xi*NgLG^Ray5x-82rAmem^|C*=h)L=}-v`UjahCIJ!% z7)B|=|KjuVi6Q+YxmfMyyV^q|j`^$|T(s3D+@?eE7p`MsC zSkg+kBjpi^yAa(E|ll!z+RJJ6p4UZ>NeXwoiIj z=@T43`UMzME5n!I9v#;$f}2Awc>|+ElnFdHA-j)psX!72S{XJLYQ0Qxi~5A3dTLm# z$LPhO7)1KBJ@M}Hf2U)L=FnN|bkMP*$NpW?MMlfx$n(S1KKg;^=3&Ar&)3Sri;i`J z5_{QB_$D_z3Ev~Qlb)kWGoDHfQmm10Y%lbgJ>@vu+P{(AqNTexikXm&h?;VL!dk}$ zb)So%cW<0CCrZp-^8z$wy4wuelOk@JQNiWtqDcs3J;BMNsp^13;E+-YAG8*i5r(nv zC6AGY`+)dKjS|L|b9%Bi<|7G6T_yCRXDlDy5qO|hb%~3^y4YVsIn30y(FLGA&~oI2 zZ8T}Eiz4g?zUAeH0BT2kOjC9Y>B9JA#&z9vIz3yCI;*HE3lrF(WtYZA-5ZfT$$0MT z#q}bZS(X0|$iK#nRxV>Utq`XNk4jt3dmwt+0o^Pz{4SshTa0%gGzMBD%B+ie@TWNf zQuP(+`{otsI0kX60j@++O80;$-}%*hvUfyP8hXap2}zVvDpb)5+gl#*)`Zw#H`-R~ z0Bu{FhoOWeQ!`_JIFLLeCXV|Xo>eK!%18VIPqxj+n|Vkv&TH3uW1zX3agujmIq&B0 zmqo> zBtwvX;4cl>920ZcY_D{l8$P*PAH%~Mx2bOmpO?Sw>cM?~&%FQyfH9{vl%~>65F+0- zVTz7^I{Z)ghE?7j!TIg_rxk8z>&h;EuC10NwH$p)&2zKGiK&J8-rTOFarhvL80u1+ zX9y90-xMltYe2W_1KyQ!m8FxDsB05NY+Uou^^U&oworjJ;Cu|7>v8;RFcx`T;&!t6V-yT|`NAvfDISHIZHt4U_ zf6M7fzppfRiw<tx;=nmyVtl&;${&l-|llIf@X#9I6iZBda zUhR0zL(49G^3lkYV}j}ExEr0vk85JHTeM$ut3c(IfJWboTDw_u1ZCk6WbI->GHjS)C{L4kuK^SY_9q z!$40tV$Mq*l>M)xDuz{i;zxD2*XgEm2oX%{$GA0G$j<0(9=qwK+0XOK_&m?9ng!-M zi`qM;(CizYKw=0tcMD>+zOQJOrdYG2GVB*$JRb9IH_|IhuFB@yK=%-9YuG1LM81Ce zcF;V(otGBSM)~Y0>FfDY+kQlfsl9Ed#wo}dr7NXtHlS0RLBBF)&{b8PM9&+7L>w+H zOG5QUD;d;SCcf93r)oHs6ag_~MMyEXL>sQx-ZzQOpgJ%+G~0LnnLCA5+TI|vTP`IR zeuBr+n{#XK=e|pORB-8_m?oanoMh$;c%frDvxlFc*5JZWT&S5{FUj-cJmbg9X^;;x2h_>t|=*b&pCH(Xo5$7yW}0?Ftp5sDeQCC_0 ziQoqBmkfm*Ay;9}z_e@QkXbrSc5e`v&Mc1uV)hi>sPZla@UlXOn5gEsx@Lv0Y#3;7 z1=?oaEW1HbO;9=z`vEcZW1g%5$sZC6tPO^836NMRS+04zwXQ3-9D_!ZNmz}RT>+Iw zj2vglSw?jhCB}LkM+8iVhrKBje-bA$95)SHO0MZFYzkyrY3MM2Cv~di+gQkB%O0D{ zzK$5DP`QTFh+`uSUCP>a;v0XzX!AahAlOt0bXe42WAwxE#{QCR!uM%T4BDUfttFn0 zNY?a}TjnpgeqxZzJ@SZe-iZPQ9@@@7t=(q~X!}9#+a+}}qvveHVWVu$8mMsy-srd= zPhqYYd0^wC5otE}P77&m%7KHn$ygTAJ*c!YXGq~-TqdKCF;VPwnJwxT5LV6DqZ!z! zph@`Z4&>Z=V;LxMbIB;b#7hpn2;E${A)O>x1Vo@aWnrQ?jT%sR+Ph+=a?24JOyr9{ zN}kDDm@t66UOXR8&BrR+L0;+0VMgdaKdZ0G6kfXH-6{U91#E-md%yb{Z!r!R5xJ=x zyk9BU98(1;A=L#&6z-?TZ&EP-F2Ix;SnPeJFy13QBj)g zxOELQ)}0L^1^GHZz5&mIAjH?Go|+E7y2x6@Vb-c3TKO|OAVMmTFQ&f83)x|M5)9RJ z%%#A`j=ZjcR$6}aV@#*_2-P+=$=BZlJIk6c&^e{-6tfiHJ8#_=bXEYSlg7#4F?OXL z7Ap`73&^Puwzlq93aBBmKgbytb{n{{+8NW`?5p2BDgm_ z25XA!4^lU*7GE%xhi@R10RxOlLSmV7=0|q=3{ku4;=+D3{k;1zZXwa7YHmCc@0)+Y z>6kxK8*l4;H#jqK^8X$cnK>CcFLt%e9=qci(aqECGLqSzzt2B3)Ar$7r}rtzPAs~Nr}lm`-aVhnNC?h}=YZ#sSg?Z-#}1KtGa3SVIDdo7;)HgEG- zit+QHDC2m2em2b}9{>rUQ4Gv+)ICPbw$z7}T5>j@{UcZ=vYd{rh!N?JZG$LYcwGH5 z#ijgUx#gZ}Z+I5z*PX>)0;==;Dz2lw#se|xRBdwI5wL7|W2{H^U&Es+tSKvnccid0t zwHR|CP-LEOQV;e%iJeZF4?S1^012O}dX~%@QIDHG_T9nD|L`^pEHDl&FfwLLOS0UI zWi8fE)IVP&ZZ0OU-)mlowL@~UaM2R0(d2_TCq3o?SCQWM2(x2p;A`wt8bNs$HA!V0 z@ECW0CRfF;%@9=`%E0k`jR2`JO}{}I@KyycqvvB|T%Vc((Qv(+&_vbSp-)4ej zO|8iV&4iKg-5m>F`m;L?JmKDsMNw%6e?sX%x?(GUvOBT;3TB2O(U&_wsjH|9gfH%N zZGf>?E9vJ-MOaaC`38t1X)h94_g*Y8qK&~PW zRPS8}yQ;I1G+#U1%0L9Q?2q21*a4T*Qy0&4T)R!hIMXKP9L9AgK6)^e0WszJM_bqN zf>M;a$iYYj8D_?l-!A5&X-#t>#2J%+|MnvZxR`l^zXl~<-+rG;FfvPWU5&)KGlJUF zC)n75-wO|Cidw$rMO3G}d;6Q8f-AvB#|kRI89>wA{8XF13$-qz>@}hem$!U3Af}J5 zn@4HDdd-N&gqB;&@(o|+9soze?z*rV?`SQT+Gd6zsr&vg3vBGM|DfKV>1FQ4=U@4t|r_XAGR7L0}23b1= zWoJ)`*D~_SGjUb{D+#^RubnJE;Q@@%fKH8__1Qz%G+$0Q(qR_s2=dUFvV)aitUGFr z1AD9jVQ{XYs!(7k$Rbk2{24mk1^f0SUD;8*#j$Il^K=kTxyJ=@82AcL1i=^+shFUF zr7di77-T&}@`Xf-m|nxE01%naE7>{+b;yK78Nvp3y&$e2wgy4T;EL@uHaXFCsQ z_Ly?P$OL19eM_;l<7?Vof@Zng@Z8N5O@D;Rs)3cz;qDIZ>iUcwx+E^jJ0e)RM z!N+8A?es3Ysm0sp8zmPGi@mth7m2XkO_fC|v#HnCE_*DuGZE*0pAtl%n+_t{tMEmV+augO0u zO!mHKhUU23XE79raOOWHCnNk{h=;;V>HlTQVB!2kP!TL(U z|1^<16Usf0vEmIxHA@pSVxJ)#^3GvmlGEc zaC3-nzs^-ez!_|yV9CD}0-D$ZRm!0({OnI2620+MzglzWv-yI}e_taUa`xp*b+`&T z%ifu)H=APe|IRE}oi38SnK+U$JHsjU%-q>Jf~Rk7EX-)uL6=QXcd4RbPv~XZf%rb* z^%r6+^xduPzP@+Db*VsefLtVSq}@|d{RQy2pWoBm2A%38BgyF}r&=hvz8_`uvAwUMBDC17c5Vz*Im2INm;M*= zx%M0d4xjpTTtnUdU0D{{OcUI;YoI=|B??LeG2aM;D%)+Fu=#DbC>zgLrJv>72~+iu zUZ1AL15FU_ri9W8r`aq^<5LyaT{lgL?E4 zP~&iyHCh+}Qg$$iqq@-VN26`vRRU5rzo(Q5M2S{Bdtu#n;-|p1g6`nFh>O2Vhf7hvNf+OeL~kxqMf)@ayNfjW17V2dOxgk^n*ZB#yUe z6z7W$3r8V__Xx0rl9Tm?BtozViy-9p2?Iq(B=HM@&j-R7vm_qA4dN2=_1Em-&r^Ej z13#SR&q3(3rz~SVT*6d`U9N?2SMzpX)_j*X_)OrNWsiuuA}TRsY$Cfw{glW!E5=3O;J5vY)VxDgX`&8(yaON+s~ZAUNZ_z)fI`w^ZTz!V9Xz zK+|zd4WgNTl#6Ki%~8yNo#Yg-_3(~ex(KA3fS)yQM$B7Hlx`~suFvR=zH~slkPg;J ztg?4Rs%T=5-^T4v$XUsV@$9Dgrzqk=7vFJ$^}q{GXC46hSsRHJ-O}Z*64&K4<|2Ai zyT%d4ecTxR*C$##L>BKMRvE-3)4MfwE!s}hL*7DE3W}7T^KzpD!9mafqB2LfyELN$ z0q*xhjh!6%6>xpXgpEa9Nj6KE5w-`*mG(0iwjuPCURAFOm-CsWbW-qTI39|v%%qGp z|Ge|s9`emE8a413%EQ-P>5f<_JVG9bm}$=tKAHT$fd~oEiada>=)ngo1nQ=r8#Xb* zw&He;cj+VcZ4+&C{dANH$eWjk|0w^h>%t-+;`6o0XWz^P+6UqH9)|I_3THuY|FF2I zKR6~EF(nq!caz1s&tDP7OiBD1o$3qSrUGsWeg>dpYN(^F?`H)RHpi#^Fr?t{@>_2| zKc<3Rq1E4+8qcPw*!*mShQ!G}yyUyad2NcUWqNQZ0kJY4f}E{=Ubh)w6ikc~X@P8v z@SqNo;aDnA2-0(I?(nL!OhPcA+?GJi;1{vMUpgMstvIR<>fnC{)E_}%)`20%lMrOC zbcoE;IcrE5W^b_=`8uiDejy5f3ci9GEUR?wii^|-PHNdih2EDUD~dD7_JNqat3ibh zD9sN>$C!&1lgdR)kL6Y63;?rTPayn_XNk2-AqR!r`h|>lys-g;J@PaPDrX;QC%Z>8 zh_>e+H(eYb@6I%cRn?upTF0YjxhKW#s-_6JQ@nIaw2>the(d zY)wKA%I5?$61c&){tX8(eScZg(MbDtW}?A5em2$9W-*=n+wA~8>clQ{nMT52J;!ty zXN&BeHt~Q&-iJL+&;RHLmm2p(_r!T<&BY5jM+{xYZ}fQq3g3zYCaM5MR9gI{;!==w z+;a)b`$~IeB3pWY^mls>j(e4IU5r$Sxwty|sxwGSkTP*PATtE4*^lpQZ{X!bUHQD9 zB#-eTG-tCLLJf!75eiCy@E|L?jO%Y3;?P^tz>g<9rW!-+sSPXxdo(fl5&K&9DWs8AdW?@eAP6uosOwXvZ0cbPSLrspdF;Xf+ z_aH%)xeJmygltu#nLg|u$1Woq=HVhuV=jy^3QQ=OB0uz7~?7Pt5_s$c-chy@hvJW>WcS7LEJ(VV9dz(HC0*-kwi zM`0>{fyCZY>9*;p`0k6@ArgrZtTGo?$~O+@bZ~yvLg3h$#F=UcF*|)j5@zTWx&P2z z((fR1c#j7DCK3d7bBQa!Il_507DOG)FCY|v5Gs+V(4*83oM29t#kQa< z`J|!r1SwUK&vJ79R&Y-#2`Q2zWwrB31!u)9} zcBJhS3na%JM-~KfsCcOT*fo`3Hdy;wqImrwk5qUmU4w;Ye@=aT|9oY?kRFZGpujG; zC-wBZ2}R(gwmxrQgoyMazm@3=08%zL_kO0UEY|AmEK~)}`Gk`wY4OXXAU*E7IcGl8 zSVt(=adqeojggCys5yi9I3J)?OSCKp5`b+THn=UPTV7X6O6DkWp}^~-l_i@9kOqbp zHW^_0HjLz*C}P^fmQ?(gIqT|poDq1vUw2{ettkouAM4CET9Gj=1L9vCspFM`kJnRQRs`vO< zz7zfh%C{5jWHZyt5f?H|4!xEyPaqsFPlGprv%lUG?I(Qt^4q%9zjaT}sno_SX8<&W zA1)a5Pj#Z?OY)>?CX%2cOjNn#AA#sQIf}6C9!VLye5+u)`L9M;`VB&|Qvy0N6Pt4QXo2viPF0!)zFYO{D2jhRJWT&v!>^8)1yYvO~ zeydPdyQg`_OX3pIZ4!w_k=KK?hCc{IG!6xzp(jS#KAvzlgh^1l*c4JK9qu}CaIZ|4 z?<)6#!1!zAdFH7K?UQP#2Y5jL)C9@*%}nebsv|QctXE|tB2fiXqepyW6bc; z`h()|7DY6YNTS&gQn1 z0na4O#1SG7hZqb(MyC=U5zH#YJ0oBg0!Q@fC*;944g?F;;tVBD1^%2N5f(F-L?Mt6 z*Gd!_?kk}1LyR>qvLI(OE!*t8*L8 znsj~j#xiMR;Vk;%_CW@uf^tFi>{Xx5)fBotrqIXr{n_Rk;celf-SVC_(iY!!D_4l5 ztV_hQ(Z0h4Pzw7-FEj z@tWIls2C(c5N9=-y&Yz)w4Lt1VIHVCxR$rYBXiDsB+IYyST_XVIg*NgK+B97Q~osI zi3oSq6CzC)=v9XUiwQK)uZ4AC7DD>{42USnNqMXic|8Zm$aH^2!PeE+07*K+X~_Bq zhccc{i@UoZ+l@tXT$ibdyJZw794 zk4Mv^$m%&B--4w=Iedj#VKt?7*rSNGQDNClMWsoC7{JqdLfW?TR%0dZ|aPij; zAIH};2RF<}4Eg{bfyAOeF@fDCPh8PM)n~XprBI}fNxCCTXVNF)C~;5-fd_RVESW1^ zB}s&juRiw2K;g68%~ zohhn3eK3sN@l+|RgE+3Yjz!QNCzag8wHR8VhGocbrl6SxQcWZC-!|`UuLD>8(^wN+ z<%EF|C%vYfb0HY3-^V==+ZO?QXIXgPpW*ae1`x4j`_F51hTc&4SocaZk^CIx4(onW zC;;gJlMnpUzfs0^{n665vq%h2<#YlVBVJcozfZzKUu{`d9sC%WSm|LfQX`eM{j}Zp zy*Q_=8!sH5#mWPiS|V5Wpy(Xj^iMy|=2x!g+G_ zo3=hDyls~|X&{O~8Y?Rq8(4q0BOedzhkG}Jj(5mT02Z~IFYHPA1Ew^Njz>dgY=9mJ zrfFNC)rswK&0r(Shs5*aGX9MB8pw&2v%ooB6zwmge3}p{Fg>ZfVl0Kr$jqCN;BZPd zV9zn|iK@K$xT-v^4R&YLj<5`V3~X@h#jUtGvz(o?iECrbo590j&Hz|w=54(haXYTc z3X&)T)tq8r%F~gtVJTyYP>*5O3T+%8pK=lXeFCAuyx0_m>#QmcmiOWY>rBXAoeR&3 zdr{kCq&R5JgB=+_=&ndr_I`uUB5Fr<4yScGlGa(@Jez6sx1cuzXBqTSTr|=~U8P*G z)osCr2-T-TJHvNMyqvVq6_*oghrUCnGaB)mJTlKBa~GuGIV-<7Gn2qtZFzc!fi}<> zK~a4yfG9P7pu>^Zp#>TqPZ)0Y4bxy>lP!J*7{d%1v^rFEefyN5M>{0E40GZc>@lAj zWIiQr&O)Wn5EmmX#BFs0;M%>@S`M!fE_3a>KOpmJyhHw5as8h>?Tic@tp7j3)TF*) zcff|^d!v3^9-o9h)lp=pP2}2ai?J%&qDTxGFhogg;m$ zk;BOxChQ1z4GbaiV~B)|6ah92t&!}t%l_pLdENJ$D*YP=INBfx1#Z5W05KvUeUNDC z2Z4h$35g^ms4@yVA_yQUK?UuA5UILUuL zE;F2$%qUtwu#KEWgrnY?uV{B7-`giTD4H1w29CA-51$RiFAAR5F;*zzaTFBP7mwr2 zi74y)6Yq(9l0h`5RE@`jUztP6MuPJB!gzvs#??w-iu)>=>!!4=l8zop(|BeCjStX| zW+fOK!tlH;qn*kggM?NuBtgW~M&Dd}Cvv70Wi(;Bi?Sq`$8D~l9b#?MOG7aiaJVZU z8fLby&Phk2YF(!_>NGPgyv^?E&f#Du#$9~biQF?ssGwMmXdxg<+lT~=3>ZY%&I8;B045pv>WlR+Z(q7aW_7tm)vbPKDo6MuCbw|GLmuGc(6?x zv2@<=gkK*;VeQQc71p1Qx`YiSkxH?jH&ZZQMjQZ0&#f)HLm#FUQ1hYjsqBst+KQZ! zxJD<&<6JJ$-@m`xzZtlPcglyt{Rq3*E%A6DbZ(xyCl>)jY{xm2zA6^qbS~48idn*& zC&HTx3)EDsAc(^}=_uJrHX;5;>mGEas_wlUMUpqQ-4Z3gZE5^WwYi`C{6Tj>!?C4$ z5iHy#MFdBUfJO0wQ5XuCk@vo4A#}9EyQG~MMpku30&!pOk^Al`a6h&Q62&UfH zY}JlRjKS|nV#H0V0h-GISzDL{-H(BXpuIc?tT!PWb?!mNqDfVRP%LNLsm=oiS&;tt zH-YQbX?#v|j=gviG)Fd{*l?Sz=Apy}%pQw4vg2UzxF@Md-PA`tCEgq9I+*SAOQK}R z9%&ND{C+A^E~ka@Eh{W_nw|1!Fk4g3igwX?PH&U$(x{Dc zV}(X*V08^cq*@x*`z*@zQz(m_kz(3L6_u85G>^L325bA|JdZ1l_AATGrI=xWE9VI3 zog_)?Y>Vi95y;T96F|X+W;Q&#LV#pjJr8XSM&&oJW}p?h)KpXBj9g{5j{@In)m@jD z<+{c1+p0LN7RUIHIi1w@SEU#}-75=mVmcjLbdAwY>&+_0G|!;yE$|kacUu#l=eh#* z)*V2fiJ`lu=YXfVbPvh-4CsInll&9K?Q%QaO{5jaA99hTqIRpiW7c*;TnAdpVl7WD zf8vd5<|fKxDCP|A05@AWye}VyKV!G#W$f8>ntNvtpGO_F^GuK<|K$u~`=2xp9RGO) zWvl7RZ!n%m4#^Em5s?9~+$d_D4iGdmF zzJKCA6<L{8^-?yzfzUpI(U_Q1fNn9`UR_-4TRJr+HNcS1 zU}%OKf5bc`&B@opyybX@e*W4#Ied)ks~7b5;0VPs<5Dhd`(Y@%V3PCN)QKRGdxq60Qa<@VI&M$f@?1W)sOr!^DtEFGI8F^p zZu9zV>Xw~E(02LNw~nq^Y49_F>yO=iX<4>|=Ia!3BeL6*#Pa7{RfgtK-=uLXLkRh2 z&NQHt#qmV|tz}Y8F;R&`)dsI2n~dX5EH72&VcVnV6_2ZpuA&7xcx<_%Mj6YOq7T9& z*;vPWvDDvx5luAXALxn9l0!H~1WA7(FCpdNbWI(q2iWt&BPSac=Bn4#mzizmkED}8bGpj6od9ozs$P<{qw~T!{k_XES z$1%Hpc5nPXkmNp~jo}}6T5y?bab0?G*lx~Z56g~Yd?X~cY>J6hdq-Zj^}~C)rs|24 zyvQlnOWRT}vVIFaY3rDgFh#i;1x3_b!N)1FRqZ`Ct!<>0J^({QE;Q=*4#iV}(Ds%q zq{L6pc^<9}4o2Mey_>WeC2XDDM-rX=I4fT5_Pb9(ovWT8!Zp+YLkkNl8I^m&|MfqZuoL;TDd5*7{o0)sV3${ttHxY9>_Eoy;nvpbq+}V%oGv9|} z&X%_c)9$1rU!70|S&pBs~K5`QkbkU{LC^L@5`)aT=+`A+=X z#9vK1-iT{;r5jIf8xG1pGY z(1B!wB6gZaLj%U>BSXq5Fg#0^{F^YUB%%zVY+wc!uJElRNrYDk1qKS#zc-~U(8Hqd z*Pk;|^t~2`1q-F2`v~dv@eo<40A((^q~=0noKzzvUlcX-Q0Lix$G~Za;=2cjG5LKZ z$azsQIHFlhc(qI--Mn}i93n)Rk|OR@YZUM-?g&b%M*MKxC#NBcB|Hf`mv*&rj#8yd zKm0?dL^X@zWy&6gw(W$nu|#0QSP8rIKWM4F#Mm4`$N4K+2~w1jG*pst4^c~#X8lP7 z89@<;PE4kyNb5}f0QBTlynpFUpEh#0Z4-nFdfx-Yzk5bVAjNgf65|lr>xP zhtMOP;;>erbX=sy#H)s5m$EXCO$(2}6tJrn?QsqIxmfJcEk%$vFOW9>sb&$qW`~G7 z$>Ed6wxsnt!~eOON4xScO}|^oD4{*+4_tZN+(jb3hx$tLrVbA0S4KMw(@DpE|4oXt7u8 z-n%cMyI^ChRDX2Y6h{6hnw*PzVy9-|Fo^l5@mewxHK@?7e?Y;sJ!216wA22Rz32Zft-0H^r9ck6XzYF7{b_7d;>&s{K|1tIsK)OTi)?lBu zZQHhOp0;hr^Y?yOmg; zem&P@Lz>VuvGcuJ=GjU?M9r!Iu}+l~B`brF>g9S8GMLeq{_a6n$>(HSILvuqS~gp( z%qINZ1%H*TACZTDf?ybotkFg-jD-%RR4y4Qgn^!Q9`rlFKJ$3xXehEGYznbhC7B24&c_l@4Ds?!fCZ?K{=K`b}j*OP3 zgx;5!XPT!1DfC+CBa^@dbne}Bn| z(-s|Q-p?%OAWQ=C5_Y{a<}fDgF+Ulx3}eh`+g@IF(0aOlu8p2ka&WNF@ELk=ced75 z>%`5;14SfC!8aqGy4iN~_D80dKORWTVL729Vo8Fjq;Ukj`vw(Z=flU(&J;>=X5lR3 zErX(K#rZ^i(*kXZ8+Ybc(#>5C{HS30di1H#oanJIGijol(!^c0nFdx98%{!fDPhe* zW2t7Kf4|-28R_9syMwCmpaV_6zukhVx?S776Q>3dFkt=gYTW|g9~^Rw8zBl&Qon&& zYWg!yUISxO3EQT{tL4Sgv@ z0=}{3Vc0z~f2^t9iC4s&L#gYsYMDVh$Pk$NB&HbH5?95!l(H+-%eI^YIR}%5O~9Tx zsZwG!%$LT{D_`WGrF*P;F=^2N3Y0(>@gFeoq>HtCyYa4Ug&ypOrqg6C$V!z!bBKv} ziB?6AS>#HlcTzkYn7OewM&L-GV^vXVAUFSe%)TULaSIr?z)|T`awae$>IO;qia@?xJB_-0#NMNu3)k!Ea_bfph+>npNTPwZNOy}G!92)*Mi z3eSsfn#GRl@SQ8t>7}0TaL0@jbDTcZRm4>0M!Rm8VbtqmK?+bvk}nMr1;^Zgz+@l0 z-ci#`hanh6X)`3Q+P+4Qf9IYVlwxzzlYVvhJx!EoiN#e6O8AkXl@8n83W`%jiH~;S z=ud!An1+89HO_t`;YzjQM^Quf*iUQ`MKBI#?LeAoLQ$)+^v^;{&_)r(UoCVe*9Y4o z3j2w}7zQE~JLg`zvxUTcY0EA!gI1AjKxu_|D&y0Wr-jXJ!W=Vzvf7so#h48(sKkD3 z@w$dMFr`^eMRN*rq|j-lVMP9?Lj}aJs&ZdygNPFA1(a$_hqAG$5){^{POAwIL;{^R z+KS814Ef^_<0}`n^(XP$Fg3&5F>3|dfyy@Uo$LC0Dngob^B&|_y7l{-a`hpkhx!gH z?kRB9p=cSh&H@YnvUwi=%QWZ9+Aj2TsTw30MIkffxc1lu1BvFHhfhn4)XfBHG^9+_C(BAsp-%x_6QZoN=xSgNr z1^tTyk}9}e^MEj;cX*U4Cr*)?MIj6Q;ZUJQ=MZk7p%0|-S`8O{RBvACbX9HnC0SKK zfEM^$?^S`WrYXP+57p^?g%#AN`+W10ZLMp+lvQgUUS0^Qjez%HETaR&uz8*m#h>N& zWZH=$NnKcv4t&w_CNDGOB4rP3k%|BZM>JL!u>t3B`3`E0L|`iZQ=Pw1QdSnE+UQ^x zd%GnirUwAW18X$VqT=B0?P^P1R(s-eAmY-{NT!ccY|2<#=y4Jtj&Q_%u_Bfa72mOD?JF|ZA&JFhe3-3%9Cn(Ek8bTEhU>3&% zTv74YUUdIQ!l|5>K|*Q&{zM|8z=E>IfJp?;g9$s6*=7gb4De@^7aSNJ*vD)}@E@|Y z-NZLuAF7tf?!F@ce4`LLA-r|!W`B3|Ewu2N>p+9{f*`!$!S(#0|J_t0HW*f_1ntb* zI>Tu5#Q6ANcO4SlioKM=TfJq&eH@)O(bz%rR6IMH?fyLjS=Af7w?6o$H*j^N_0AnS zVhjLR*R%|9H*D+33{7nul+Z1-o!&w39~D0y3 zL3olQ;WDAwn7?^$O*L?zqu|hZjE0GS6T&c0U9KrRLFt5XH6Y9;(}`PN=3?&y#^1>ky7b%QH_eQ*uyszuMZBr_Q;>OF0fyjOg91t zJY^ed;~7tF{2Pms3N=gR*r-qMPCW&rv>P%@$oGf8Pr%O*V;SZ!1X(^xfQ+I<)yBn; zLVnF)1Ag6M#k#l@1BtEZ3xszloS;OpLVMutfv_x-4D-AfhPj6%!bLvQcXx z@wZG8zQN?y>VuF(C1Ybr%>J9v?V3vbbEm3-s!6swzGkI|tTzYs7|O^oo5*C@mVTyf zY9+qQkdV?AiM{#pOZiD|A9oA#=^#L^(~!(%dolHVH=GA3oD4jcIE-_hGN4g+fBCpZ6i(|b53q8vbvkdZ$lbjy zv6?A!Hm96|j-mN?Cp4PmbI30F7qAKXlOX7W6*J|if_BB0-AE1kE|Lo^Dipi%Rcs6K zEu9jjXC$UCzLxH6Id4}JAziG$N#fF_4usBP z1#NhGSZ_XX)ce}8vGY-Wv?W!U6<8F}nhdVC<=i!|m*11?`+f2r=iJaDJYb!xxeIt6 zd_9QAATtF!0RFEqyQ2utyXLw(U!Z9m=s^EzjQAgw!7;F~{J&8R+uyS8?{3{Zxxme7 zX!ns76p&;P^M3{d>%$P?S#Mb7J(jb0S^9ixK^1cboNPA5R&TKhG`)&$K zhz*;KXUU73h}G!|K!y4^X5@5nem*Zt79!~noDz9{+;DoWNgy%uCqvfh^$E=Oe+3TU zWByOD0yq~)LA;pXRFIyYGmPg@LiRQWpK)dPvs(^{F~)rJEj9@|Ne$M6dwpBGGQVb!LF%X0YhFFcOskFbGKt9~`AH)GuCw z$P6rw;taNlB^=PW5UF%*@3c;lPBp62Th8I2*s^GrefmjNn3l{OWEj)@5{-1lme|a^ z7sFNDArJ+z3UFu-f1|m}a#}oCQqm0B<>0@tic^VL>G14bhs~C0_$Fh3e=sEUV1(k? z+EL)Vu5X4BE`Zv!wG0DBAshn(S~M8q#HF-VoTM{XO}|iud6|k`=or3ry*lK-emknB zZ~=GmVT|ZG9Hpoggsdq|JQNQo97vPk4MEqXmQwx9sO^B_S~>O1x+1H&l1T>U)+*>L zo$+#?`NZweMoqrDOa&xB;eOziD5`pxQBgEy>2Y`Ur3QoF7hnUOn)wE;nlj%kP@``0 z(-CKE?2`%NXB&FpjGE&i&TpN{^EC?&+(!>$zyy8_IW?1bpl!N?G$B*&zyK*^Q4HW~ zShxE>92Ska0+@>iu4+8ulwES;`;9Vs!9}lgk>zaT-%PiJ=ELd}bNSpx$xv9oXhmt` zd??i5;IFEA6-hC<@>fpD_Z4@OF8cs!=2uI9qKhb$XX{m4w1Qdm*FMV6S3k0H=R6?g zE9XEW3`lwNwO>h5xI#K%;}8#Wq-PL?0E1-Sa^qGGa`EgIQ6@S;V(~m&WinWFvzCPn z!7LfLGk?H3zcI45-%%b=lCv~CkB~^#p{b68({DCKY4-R+S^G7AOpKJmiZ@GsD(a|R zOE!M+;;&KC6M*!0pKsF9eC%mwjASKUgK-7HV6%k!&{_psT}yX*QMLhxb^H9I>&5-d znnl7enz45iq$O#aefO7aAd|0xPG-}T^G^mcg!uPSq%MV^1dfGy2-i-mlWBpz(!Hyx zqCN)vw1GRfRdBP`>jPZt>YhA5tns=yc)MJ*iINm)TE0O`GbvW^49p?WzipPhg+y?A z`vYAPh`(=dcK{;a@d`&RhQGQyurKilenYdQWUJS`9W2$LX}yTbTxC?9)|XEhV5$<_T+GST zC0X9ZS!`EmU{KDa7Y=;O?$AU_i?=8Hj`q&v{w0N}GbGT2&uYZg-rlHocbTgoyc7mA zubAX8aiT_w#f1)mH2QX18G)<#?30geU~`;_)fFw19lXUMFnAT^WOFTF#}ai*(BpEH zo6Zp_vm2kkhY*JoUY4i$+_0;=@@`D3v7xMvBo}KV=Pt2Dvn}B+tGZZxeQr13WR9ks z!s3>s6PSnO8I3KW*){4n5_t)+)2rBGM{-?}-__qY^O$-nz>TowMeHyiY#(j^uy?uN zCroR%z-Q&TqjV(W-oFDjSz%L7840NksiEXqK}x-v*)*@Ku9+WHMv^Un`^(;iq}e9h zks(e{S#l8&@s>^F%T9A%zxE=tHMHs(mE-$>b{~KK_di4z_Wzk^2=o8$$#SJGrHCa4 z|Le(eX>Z&x;Pk?sB}utz+;K}VoU1g1;_z?I;BX#Dsz3Jg{c(Cyvg01I0H2G)h$1)b zD(&oKrHa%uM}YJViZL>cMTb2{TiR`p!?$N@+cfrLZI3C#A6ds^^gX3hCl|qw_5$u_ zw28h8urTrMP9DzsTeAkgAG?S-^iv2IM+qvCkHbeDfzp>rEpedHtpQzT=lT1xXP3+C z0rpn*pOTlV^T-WY4U(c1Jn^4xvTP9!yrjs%Vht;BKyW0y^WKNXoUZjng%%fe|K$39 zi#(Lzs!%wOV9_MLj43jdqK8NaE!yOQzE-v52aW{C;)9AYzn@p+vj;EE$i*is?o_gn zH3#Ml(Rar-?wfFNK6Yrp0F+&PD!*4BylXrdo9xL8q=TC`kQi8%Lx;reXCG+O(W$Ev z-=>z7hrZ`65gNb@L605AK8Y4w>!Od564RlXk*|dYr?I<*g$8kZquDKH-ZYs)E2*zD z&a9U<($t$vjqwMsSDSkqa=2uxX^pyzwL{jfO>b?kbe$;M5M^vv&sSEKr*VcHR-6d~ zHtmLDv596*g7_U%z{JP35#`N%;=RTx(lkMe!l0*lb}lGQ!P$zbMN%4Ue)vjXkxxTFIHH~dV?w_j96=Jm(V9XOQHMB=VX>eNuy;NVWi{hPH)hq&{qTxg2KL2{ zy=$zy+cQ>NVX8byUYK*wkZ_GGl7*Pv2y=MlGaOts2h#@l5^3N*FvEkSbx_!vzJ^o{)^PcJ_K+B6|!f%_SvbUHuYW z<>>rPn5+%ZJB*hslK5=CR^HktV5v61Y}>cWRKqls1r8FXfF;}>hJ|u>z2oXaWtBsU z`A)RDL*%I;PJ^Xz-2_|8D@9s}YG)y4>FuzQT$rIU?XV94<;Mn7O{^nTp)~E$#Z%f* z%@Ig3Jb-o~3V3AEdcUcQF69l>i!Fy_A2!d{^6w=cttZCj6BOqu8vhAHFfe?c=Qrfq zjcHHQ5+JZI>W2Y2O-ad(%@)4wlP-S}r#WcF*3*6_elr%u*C8g(u|G2Mk~cU-&}?Rf zFDKb7;&EV3JMT>WHsl~7i9)y6o=^K0Vpb=abE5HEhV6^=#^`w@n|peze@grWBoi1& zVIEzEDDJs-!$I^8`~(a)b@o&!ReH%Kwl8=v&4QIwsKPCF#E&`wSmorW#OKl7cqr3p zz?2u1gcj@ud6<$O96aLKw}VJ4v_it=p9-i;?9DnW;r3`O)-9H3$C_HOmJR#`^m6_nH+-@QbpJ3{??P#PY-)SGj5+>4iylB*Ckc^&ERD}{JyrmTzi`f&1x;vcnG z`To#pKtsxm2S6_Yj%mt)$kxNmz~%j~H%I8Ip2mY+UX}y1FStCW;bVO|e8HIQa3K4O zY^1YNG6Q+bClhhEmxI^5V`9rU1mbAv0*%n3D&HrJ+{tSAe~J+QBS%~YdNzjt4pL01 zTHEgbpIOzq9Lm;(0 z!W$k>@w>0AFCfO&ubR3+5%8!AV?Ca{pt!9Y&#Up{gPp<+y6oIXR@T4?Prnj;WH){> z!veNQx`8Z<24NpKY0$Nb0`uA5L;nfV(%f-}%F^;U?ap(t`0(wQl30tt%dYm)EC5>a z5rx&{=8C=>*$9Mu+TB3t>8<{wC0m<&RV`x2o>p4a3Qe{y-k)7kk$AfJ{E1{Qid}xN zy5gd%dyB)u{UtB3)q+bq$QC7q=(0Q-LDai<52-|?jk227$N#}QcA>Ltdr@yl@gdK#zitkjREgy{Ce1} z<1sF)xz}9PF;8^xH@I44#xuSp22ZTzC>>t7QzA$1@tR|QY;3{WV{Uw+0_0optV>G% zsn5ZwF5D3>`s<6cl>Yf-jul(Gr}xU}_-CQ7fOE_xXwwft>p#7_s@=@Z^VLn*7`a5P zJ>zQpDi9>+=-9~-MZIe?Tx_2{4km9SOfEO>d_5oli*1woX}Tkh$0{uWY$D3cWuoRl z^B``UlBrK)ZmsuDaVD1O2%uECP;aNZzgaW<6maT2InR8-wDqCT$-BMLaard9DVj7K zU%!6p%x6Gfz92`@($xUTGndFf!rag+G1B%r+ZGPq2U8ftpy9%XMA{T0a}6n^xdJlA zzD;pIG z6ZluZ=@V~=2$^WS@ndFj><0=vX~5#m;Se`@@x+pseJft-&sBK?HAXPZKFV1PMSI2R zhX?a%J(9gKJu_Ho4YcO5#)cjDsaVLU_DC*wYhGN)z07$RBxmt1z>?&_LU8#tWOXH= zB3B;~Es*23scdxZB&A3t?>5Vh?*rY7W}3l&8g>3h+Odp`%>SEq?3CIsG%Akx%fs4T z@as>%>edCMuEpKipX5xa%SsD<3AM>@@CN5zcv-P#0LN{1eLNtPQE&fS03Zl<4xYWYVMo1$!LUsX-!k2OC|A#P4 zlM||}X@kT=mWU`jd8er+L@^{k%e+#rqYiJ-_brIP`g+|Zw3y>0(~w~- znJXSu{dmqj8Y}L|_P3F5aH5N3Lb8X5M!ao#r_)Da`1v~-{$O_??}`6SgAXW0v{~D^ zGYbP34h_BVrQ;T52;d-+?4|Q-pM-B-phE@!`-L+?Oq~nOG{&5iNEIyeNZy<)@Na%@ z7qy0<<4B39`oMV@juakkKO8MY204UVo*bxKV1K!eah!c0@-JW>@}}2|n}O}fgS?`s z{N4t_~@_(cC1z z$g|@`AxM3}8ka+r(qjDiL|Wk%AAiT^T_eiTvUgDmDP z29@H;DFO=$5u=3MWE2+ygAOJ-e*aQMATB(1n2TTt?ZT!13U}U3b>4O^vU=N)C>~a* zyGKG$t>Ga6?DV4hAuhTe$rz9_G+&4f8&SQwp7eK0|+0 zOXtbBkY=Cymp@#i0V~PShZxWwefbb)eUo}KOl{p%OQ8cD{*MT>EqII8IvB*!+1f`% zc;4C6#R64p!v5LP+1%LB#zWmzC0KCdBknXQ=DgVxOR~B3pIQy%fBGr5)bsmN-D-j} zTz-5IGJGjtn>94u)D@l6AI08{K;wi3wJ`LRml1@QHqHH%B-|B*XrQ_CkKpMi!n=)S z86q56;PD>4eUre~sx*2PXJ%r+$$b}~`*UC=7vm!4IWRHd?89M5$7!Q2Qyz+_fZG@q za41@9umYbSPSodiAA7u93F@ZDeynY&@&@d$jI;CgJ5 z`~Z=3W~eHQL(oV4I04ktYZi||)0v~`+Hot>$Anm(TlJ7~>}dGe-r0gc#$d`@XMCav zG0@G`zgzhLw;r?%!4qy04AwVxR&D5gLsHj}6m@ zsf($%(|F{q9&4&bDVzv_@l7g3kfuLJpGF|WMK1tE3d<_Zm#p7CR{Ksl!0rd6)0d{g zJRXi_tk&CRzngYa;%4T36k%fS%bL8=mMja`hqY1?X_=(6x@najje~jOX!+Ic@>&}y zJ09wXdNSnuIoF7XLwJdIvOQ*j;qvREy@M#xtP-CQ1%fY$=|`Z>kN)YvSv78~D=WsZ z-*XUo^(-^`+#}emo1(n4$f}7A22gf|7OTr4L11XJh!ux=VnU`!ZL9SANL^VZl6A0Ab27`Tr9$C4gs&pg$Q zViI&&7R+w+FufxWpZfLIukI^%0HAWyzqV;jdrv?ily<+k8ZXa~+G@^zHkR#((8}`) zo$Lj1R+eLMHBIp!v*S<2!-f^XR1R-5UB^I?A?rr9t_|C{O ztxGIHY0QL6yM`|Tj5NDnxSB5$O*i5u5SYBMcU4{p=A+%RbjLvJlCOSBbg2g?D9IA| z`zI6wdt*2IuYji~;1o976Hwuh;WTV(WW&Z7yC(k$+67&noZwzg(504aEKYzR(Z5X= zz}GNyuM=Tc-RJC7n+1bqf)12Y-Q;f@%T}|B&uz`AOyB@rA5alhr#7lb-l#2(DOagP zz$swc%v;7VFl^FOGs|y4x0S}u)za^-P<&*mm?Xg$_6ign>}A0U@~A5-n@7u z%*?<9%cadYW)m*g+!b%z|8$^{+L(DCvUqBHJ;!^iDxm*M_on+}AC*GPV%PZUEELr| zaD9GIo{90r%i_>GE5#>R~l1^15^v+nh6W9J*p_MBMyKfDNW z{LcV74*LHsM_i<)>A2DUYb#hYs|Y!zMr}_N-uZ?~#$hiTQ^gGDjE4@<%#kb}Tp0iU zIOB>2C7#>wWZ}#R+dFg(xcc=BDAO(TN*wI#6(1>)omNPnFoX%Ndiz5E#>$Z)_x&s? z%10;w0Aihhl0YG@>IF~ zYz&8_z?cZw-w#n`wW4|yA&!-3qw+k6<)r6CvA0=#3)&^#o3DO6lBrEMJ<;r&8Ij3T zz&NeLLDGQFdcf$ezRkvD^T_y?&l|??IP! zvEKz;ah}$p#(Ary%ESF!DpS-u$HsmTM3KoZ;(K)pw5)$qj3a`y;vR3jS#XBLIT^Um ziC+%f#Mh3blw8+VlI>C5(ri6uB}hQ{TTQ&nv9VpGwZ2_8y7pnRu?&tzLaedg$COFb zeVAm;8gxjzD^-iNu~tt)4=P;LmXk%n*OsX}hjC~L%Rw2C=EgAD8c^`ZC}u#N+Pi(N zk}@F|+pw4rAw1 zjT+s~G7c{?Sp1#v9v7E`1mB1t!XLg!uTa+p_X?A+tzc<~!G5t(7&perE88($NvBP9 ze2r@ov}pj3BIe}{;}09G*UNHWuLrdtyMHm;0=HodEC42mSe(Gv-RkQpj*pH_d3UA7 z1>w?V{LoT!c?PaIh;p)l>VjbO#uBTrP+n<0a_FyKHWZ`_`52%iHukC79ZeDJl0>>e zu>uZB)Z-970;EQEA|6D%nn#RIf*>v{gaWt~qJkCTX`};4Gj6owSUn)#h7I=#RT_HQ z58Fs#ASi$8W$hn$(Sjs<5(|KToKB&RNXBkGmR7FHZVi$D#zkVH`aU;Pi6(W!294g; z9>nH1ktu?}Lrd+m_DtV<)dVeDQWIL?IBE9-;Iw{72|;kBwOTv=1&UbUm(EyzK7ye?wZ~e1@fn@hq5g$Mfd53Lw6)2tn|b!3(#h5& zVUzH%N{bHio<*lDR45LVl#nvB)OyoW-Lc+~m&RbN@rfIA%R?d&%IbJZ=CaPFM575c zpG1IiISRM^dev-GPiji3<)NTZ4KIP#G=;?MvBhTYzQLvNU&Xsq3I)}~nq2tFk!zGy zaI~Txnos#zZ~V}~U=pt`ML=yMojfq=Y$Cn3-Kf9r3tyJ<6(8&06Ga#U>~q}p+gx&H~t zYnL(*Yi)Yd@@;(9yU#9}5|)j-ZW0*{H?N^7IOgg0CFn&pg+v=WO7xMJwx1a93?E;i|IyG2WR3PSUCRM}UmKc)DhaDb*a zVkpy-@Ws`fmq_3Hs#N9F+;YACeD#ou5$(U2epPiUsWW;>klt*q`M$eWBp=RNfDLU+ zmflsR0yj(CGYP=SA~78+qD$=!WgEx}7&i@ei`nD*XWzo@C*zo^8(pgn4yCH8ImV{u z>uQffy}fh)S5LB+9Y7iv;Gry7_*>yZJPzF53JXVSr(Lw-F&0f2l1KB})0Q%-1y^#y z#XQ_We=n)A+G1x$LVFeqitI$@YGS~GnKM|rkh8WTQZ}`U>U~1ZcVWE60e^ z^w7%m5DTq|jwMS)qPpHt22G+vZ2OxHkiA{@OD?C|a1CsY4i`%#zy329G=}@bbbR&! zH$(vT;UJf1>DGbU4{tpBkm~0-S7@;93hf{C0iN$0+z(u3)PD-u|Nq#9qO*aMyPYwe znv67^(tpj!7(3}3={xDuNgLakI+@|KGW>T%V`aGO@xDo!PDmmpzF{m9Rv{65qMVqLvMiP)z z;VG7cY8^IGH8pVG26&dS`}JO)2~A{AO8H&p&2<1re|y?ENoVIKjH-Y&v=A@F#cSSu zDUCVEG*PZT%T3zu`oD!)a`T)6ZRnWo=oZ(_9WLdkJ?Z}p-c@_W9R!bmL5Z69jNfO84KTk;}R7eQBd>qh4uH2QE)u!x-VK2 z)$2jw4?z+lf&1NX_th5S_f+U_QaQh*qUzyADp@ytR<|L~!3R!h@b1_?2zny-@_LQY znLN}x#NJkR@`QwpmD} zSj1U}N3KdCusQBWFs<pI#NBlA=zKGrb{Q7{(K0cZQoeU^jaZ+U zl|8Bau~NvV0;*Z-Q=3P2&cK?H5qI@Ql%oO{<|q_)*b+xo5j=h<;}Rt}v7GR1VZhxT zn1XI0KriD*ZDc{)JN9*;c=%90W@MbvbVDQILN1ceK2Bhaeed^v^E{_IkKT{W??h25;aF`nibHc6 zL2-y6e?calVA^55;n-i0y|Vj2FME~g?_chyURkPhJds4dSve!83wrjPHY02BhYl&# zrw^0nLgUa>&;uCCXEhc>yCb{UgXsLbUE{3}A?p*k`nx7e9&SX?L~}$PkbyTVW&>-h zbMnw;BWrb&T0wu(wfdqbsv~tkA3^2eD)%v+@HiuQdl@VHHLznvG9%G?$7u&f?ktIe zTg8!9rg0LzDcX77jSm6T%>}e)9g*5GwIgu_$Yw82V^67N1F{89)uS%%QtqZ+F&qLk zC#p_tj)Xp|K7~FNKSvk~F3ZYtos}4Sgl{!RiV9k*z$GI<6Pc;k76%Qd6E()y&iG{u2R`T56xagHz!l`=>-ukY zjq{q$e$;~D>2ruH68=3Lq|FRr(sQ=7N7@c~+10%5dR70#cMXo>v*c_HZ0P6o;eHG-SiPRWsXOPulb8abp=G%I&KUoPXyf5VS- z_}9rk+s3T~$=HJJ(uM@nXNn%3XWd(X(|gAy-~gKs?t%OT&I8xU=dS|@C304j)1pr{ zohQK@3~^ZkO|?ffmkq(V=HsG-Lcq=>^mc!|S?hyWip8!#C2?OSh|fhxH1i zhD4ZF7(^Y6vXmet4&}xA57vRCEe<rQp(Lt;I-gEIT19PUNU%^d?SjbVs2S zLUafw;)WboxwA5ia)CeF!p{S*9p0ud7Lf@&kf#{42-{hL0HvXzUpPB+Cpa zZ5Nkp=XGD_+WETUkTU4iVYw5ya`oYq;j!})gje7h^_@UM@Fsxg6LUp08~-C5W#$C+ zVdZ`%aA^(J$tSW?68R8c?-Rkr5J)2$X)foD<&JU6ul*J>1SJeczaZ0(DC~!yDmhUV)qOW9T5- z7m?YQ<*UXc;tRp(H>Or(;Hl3e=;eEj9d7f3VkgWOHnlEgJ5b^Ciy5}lEyp$t=HnmE z@uNKFPxIA>-NV?DapQu`rB`kW|Eos&32m_|hSlATUKM$+axpLg#NG({=x?HT3Ku{$ z-G4u*TQN4GBdx%Pd)GuA;)x#!bon*;3tB9b9vrJBMwwtl)&gC%unh0Vi(T~nq>b=2 zgI8`il%dJS2%$c_$TC(hVxlzb?xzZ~>s)$hx?(50i}3bfxBGCXHTV}r zxjY!Td?frsjO+vN;!H2>lmilG@K$=9t5*uUeVnUf27j7)Lq3N=T5ud#!aCNwJ#0B(tO${vpSv;`JT~XV> z69~pm#=AqU*e*3dUrFbTlk|8?2SRqFcmg1H3dxSY>|z48%<7`tf)~Lam47fik^&(0 zZ1e&cicNFDg(;rc8GFo&fl4g>W8J`TzpgiGBgB%u&g8xp6j9IctMwjh-gfVxyGG*p z5T6=r7P%iScJW`(Fk%_ER}l`^BG=wN^h)jR3`$y!g?4xO0l`rB4-SsU#$XMMOn^SR z9_cFwE*v=dJS-$@$%$r7sYv?=(xQF2E9NW~NeTohci4U81^vovlp$SJ`r8*8&D06W z+SY&PSS#{bs0EdeeyjfLlJdgQ3_}1KK9EugAefi~!$IocQA|w2P-q!G7aUU9{a322 z0ADALs!bTYlKWVow#})Js*dP438LF4m6waAC;3Ac zF#%Wrf@!MzgjN-TF!-raB4H5<7yrob5v#h3u+J&WQh+;VM>J2{eT^4KIAjdWWu_qv z8{o-E!2Agb7++=9cUM>ID@O1}Dp&eO~r!URYXd?xvV*Vp-sb z`jgtiZM9}U?2!i^m@%I2GGo(Z?@3wNMM!hK)}RTEr?$r2u_Ul?Y=RE-jwok*ku90} zF4a4TQX!lgt+la~=oz&P(s|r$OzC|3OT&dxkW^s|J3NK zc8s94pA82u?ssv?g|^Z-WO0bQ2P7;&Nyd~9dbME34iEnEr6i1OTwB6#h(L8>Y7!;$ zuR|*^034(C*PhpQBOMLI{|gpuYZr@5uoMS!Pn#;Eus&?v8UYy+G<~2jsTn)RMnX+S z(?zCb(#h7@pBPW{5j6o`#l!R)1K3eZWG0`U^(XR}w#<8oawQ_^B7HD|r;1^_+N`sb zxQQ;)JW^niO;XCiuP(9R^fl&w=2rVsLcc~YG`#KLc{G{ht#IUpHb19ug1u#^jsa%m%<>o?r zi8Wz+#TE%t)+!`_7|F68fDl_e)+ z3e(;Da4~paVP#X}+dr)J^q2_nU^SY&rp9AVmWUykRskE?&)P4qK|7FP20xaIeU+R|2Y|8|c9b>RKHKVR6c<@{a@IAhTUn;wz zXesjerH?Em{2qb^tUcQxc32F?4g~E;4*JQi^v0Ck`ph$=Zy4|zCbFLw2~~{%?>9^$ z2_1ihS(=mplMiX5JBqF-Z?BC1vq$el0Y_rjC-|>y{luT*7cV{h%>rIA0F4!)9e@{O zB`9~CLuY__koT`I-5@YsP+oSxDg3La- zohE~SzWr9Dud=m6y40cVzkOf08;p&LuLW9}W`f)3(T@AIQlT96X+PP3y(}MBdon_1 zuwL1IPG&j(SJTh5pZsGgV!q$;g&~)MfwXk&kXX=H{dlz{mJ(0!>pa%t|m{R8cbOTcfUJUq4<2pb`#A`%z{nj8@i2u@U&WV&PVCN$qx|SbBz$v0e8wB&>`(QPZ|uGVQT^mB zuyy^F_%2;!_skCl%>i$S&%Xz@T(@gf@*nJ?TUDu^lK2jQ?9fJdzLlGb?;m)R2MgNI z9;8tqa+H1iL5HxUhI2Guz!_M3a08IRqK0!QK91shjKZRW+^?OCH{16bm%+NA( zF&^PA`Ei9U`E_r?F8mR{aGofy;r=-wrxDljVqc_;OCpnsOJqm%VO!vP8q&wkkMS_5 zg;X9sp;L=t91fsY@*6T8kjt~Cpam+Qa;m#SFP~M`pA`EpL^~I+7}AS|w7wY73wU{{ zLm&U6+r|rYN5;#+3N#kS>Y)Ukh~w}Pf>y~L`aMG2(xVHsN?!eI6@wbtkHRN#RFpgH z@%#qoZ=dy6N6^UvUF*+F=#xY})~S6Cr70V@k$v3v>(@rL0rykS9?-u=>e&Xhi04gX z=jf9K&>MK@l>s8f4%_I|ce(*2-%_=Mz7WZ;bbW|FBx?ITz*3(ndf`8a|JCTs>06)H zXVLDWYY83F^dShn%-=QUstA27A5)Xlry-ef;|2}t;RS|XSrUKz;rP40`34Odb(MX@ zkRC^@KemATk;{<&c2*7@Tkh#ZvOa6!xJd%k->7kg6P?M&aEjOg{kiF-LN@W3?wwlDY%vhf|s z?MgAAzapI)+L2UJ1+Y0 zmzO`f6wFybClK^6-=KUW4orPIBRLF^^a5+?jWN3VtU|#1E>S*c=?3_h*c>>Ov%vPy zw}l$oxltxMv&ZPy4&+b#G}c?=-Ew7GYn<=j z6g*o|XoQr(4qT11>#W1!kt^iUOz@gzqb6&RRXA2%jf*gbwt?LPl_per&WzLHfBCxb zl=+d4Wa%zeX52bbpKc7$wauU=B{;Um6c|M3n5#$6#d1ULZS73J=qdx7V*ydRW*vcB zXTfJtm&Jse>YA7Vu2F}_&YYVVD9fas7%@*NSsR{Qeo_w45>g|16JiwnK2{?Z@?7aO z_j;jqz3r;ybz&wfU3n)J02m$gwagcx43`U($sJ8LF?&CMRHPQEr_INIkY(P)I9h9^ zj-(Nr|Jd-|23{Mod3hLGjt8|yL@&V^It$QAl!su@ot8SeF4KR`tzIr!ePu=IjGwvV zPqo!%OhsuDChT2Bam`zZn!1!`M6-`KCMSbo+??u8V+F?!M!GD!re~m-u}rEmT3#*C z1WHeE>LTUwzg%d2kF!TG`xJ~%q{)E8T$IrP9>L~dE=TeGLMtrq{ijR>2@)H@Xa^5 zp~9U?7B)rIzZF|g(kJv^MR@}C{`eHTTmLu}A(m{=?w1z|0M#jJBmpaG<3^b?7r9u8 zIuzNHlQv=fc*LHz@mVu^$oKG-HJnXO%UhuJX_Jm> z)URS^q@lXjb(sfpwogaLhMY?|m0LLHc6W^MZ{2E6YADTmRg;)19lIk^hldr>G=X zlB9IS=Gw?4vOlIJ8EnnNF{>;21Jp9KG5$;YJS~m=tp8x_q?TqFfKeqY+dm^IZRo=3 zHa+J5!M&K_P#ar2 zPTR(=7=^tT>BHw9k6Gtl)^8g7(`{77Cv4O-??2hQkNHo%pIG-aT^D?h3tF>vM!%=` zFoRj`0X9qbOu1{8giz}v?a&B}mN9cmNL05oS|rSo8O)1qiL{5o*p81dE$N$~VOp;* zmZi_n)eAFBuX6Tzaj{Ha;KVk@$1VTGeVn%G)HmvnapvN4bO1^I(gnV30*sDXC&1{x zu*Z`9?qn;NKDQQKWX0QH!~te;KHb}tyrJo{;sSrB&!Y=Gnr%}q?lr<}g|t`gv2}m? z$=UW#c64}V^&>GKYn174AESV_&pwy`s}eAMzAXc9iMH0EN+_)buc?96R6(7{{(5{J zcyd+X5mrDHQ5s;ZinXV)om$Jzp=E%#nw@dd7!8otLb;jQxJo3lGA*qD{8|``_N_oo zY>o;TZ56|8U}M)nZ8hW-F+AF%3~E+GnZiq%6_npEzbw{T0%KRP@hJUt{z?Yd&d^yIqqKzah>lFhEQ|S_4Xk!GOu%z{s#L_axxjI&ocB71y8rfda){NL*Hn4Ska@Ms>5-S*130v{1840Om(koFv zEuGRFb+agu=A(N%o0e&*7XO8gNTW=*ua52XKk|igy@c_E(zR-4=6^Oa=;n9Coa}k| zVq;I2SToQ+FuHxPODr209vm2M8|@wF&k{@e`oxCbjXk3yVnf$R*YH?ZXO^hbE$eC@ z?%F2S4R-Z6(mvH~+XuFeihTncdppFAfx+#=w2w%K&(0OSG+U4%HnjB(_K3^c`a1?X zHbd?5fu4SG+1AbxI#Xj$?}*qpdz|ipVX?Hgy|1^Utxt^22si^UsW>vQb-1GovhLAs zZNpvS*8a|}VR4kMqpDG??(OL6AL&{wj&ya2U0d3_Iy<{M#XhN4?Ccup815aU3uJS2 zc8#|6_KjpU_HOAK5o=+VhJh_@{dBH2adfz?vujJ+@MdwK`=9e^x^mGc$0!}>>lD*# zdOL;(D6PIVUBe@E-uYPt*$fv@8D{;eOp066I5R$DZ2558w%-1YVqJGPP%mbRt47=U z`?|IR8N$Jr8SS{NK2=-k>dD)#n^+j@FCdS>;7ytlujZ!2Zv=z!SSJ2D7c zCARf2$=4Rx7TG zY5fa6Mp0)M4A?8}!>8hj+j>WPX!R_K%7{r6rGC1(uNOp7nwyR_EZIGnVJqEly21=` z%RpyuH_f{kLk73Pf<}5Ws7k=l?OR8oa)egKqy$zNgoTfEfgyzv=w8RT^r@t>4s=RM zFJhc#L~QFB*zzydNF{yia6b?e)6oI2j*ON~T^*y-0(L=;LB2bCnQkqTM7*tiV61DF z@dh(QwSv(@^=R;dq{Ny=dfH%B?OhisXWOiW4%6vJz+#Q|!WMykO1k{77(n%HS%tW& zuCj4$NkfHLwMwjSs9RH2UQsTlm8^ntT86l`s&QG}>P8VT8cJ##o5i|Hv81+HTv1h9 zo*`B=)i+eES|!#sh*dT9)m0TxS5;e9y}G=rcBxnj{c7vrjHm)lgh3nYL^@$?sH%!p zbg-I=hO%W)EGez3u4-(~5G$)1Yw4JkFldQbU((Q6RR*@RL9AchP+zyI0;VsAVQZ^u zD;r>zikgbr#w?f>>comQP!LxwE2*w#QKhn+Wp(w<4OL5*HHypXs>>^&va|vy zD=Dq6kfwq~l~tEi)ntg}B{d~WD_E~O7^Q)s#i(1mtb$d+d?oO&tg))DmM){LuC}oO ziW#uVhQ^t$YpYgOWQZjVRjVjNDjVuxc*;)bQO5>>ezg_SD3sOWMLPm0w7hy%#RXc* zD@v+itW~u0Y~(E6XTG7JbsO1Tf!;zs3wso8#X5lA{!Gknb_@C}tV%ZT=x5<^*K?0^ z&u~vddT8!h^4zoJ|7)KmOK->Ko+tm$e4Z@r-rO_gxo66A&y?q$DSy(M&plVZ__^{l zcjlfg&plh7d$#<4-Lqw;o1gFQ*ZaBde$->6)@h9SV{jAv%pOabe>B3*piyRrKl?uT zHdw07=se8wHuU~1{55Rk&%#>9?B5u>lYTaKJ+phm%!W#q^0Rp}o0FfpO5V;F@r(H~ zem=jD5AjR*6@0;G&d~U|Z{92DYVkbg8GaTfwdI4r@6V(e8`0~W3re3YC6ag3R-#3X zd;+;0r64<>0H1h14iy3%H!e@Hixa$dT&vHac_hw~Gr?=d(?z?XMBq(m7es;#kQPJS z0Fh%UMj_r5ximL40okyW^-I|%DQnCPJqC!&QEv1&ZyL8)b7=LrTAQ2k|cYEqz`cL4Ee4FbFqZ!6@a%16eGOr2BGMLnJ9V=W(7R`{BT~Lj{hQZL9@F zN=swF{Dl%Q?$6A5wM5M$^d3aQBOZf8&w7ogXXU*AB$P2Xg$x+eTJGa9-W9gIIh;`2!Q_{5+Uw_$e{xq{nZ04 zhagh?_r~MQbok##3`W-P)kt=p1dI#TocfY@?q#6o$J{TF3)#8XAy0+;hmeEdanEu; z0#iuoym#CnsqK z(@|i)dq84nHm=j>94}FE_fQGp{tO)dGn?()xOZU=D)Dk(LfH@rF!c?9-k?8o;NAu3 zUD&2~VQb!nt$7!yco&2gac80BEZ_vWSI{8$650##E`WI$a(e_gc$5L|^qiyI<=hv6 z6T+jwI}Ei~jH~pNvM)wVaSZK?RKbfM=Uzm05D5@}ifZJ*qufnwDSOAQHrnBr5tSBL zcbT*o&~XRdgU7jD+*OPdS27NSpMWCBKX*0j939shb9Tb+H$rg$(wiZkg!mpr9?%+L z4UK36L=MpF$MuFB!=v0f*10O8&$U0!ErX>mW87L6NpLcnm&O3z5V57^JV61JiRpi< zsORO8pnc_|+zODNI<7X-X$RU@Mqpgpv37jnqMYnUxmw1H+KAmHRY&3y8BiHfNpe*- zt~OFi${AuHqSUkMKuje$|9HG5#}0D3h^?0WQixjs+qVF=W&!9)F58Tpalr)A-^t~$ z73H8-hzB5sA@Z=tIe?x6dz^z#vl;_8AC@~GMLGIokU>b_hX|&In}>=a-VE_ch^HaS zSZymr0`=K2Lo1|vArcrd2xS4%5X4r9yC5EbcpT#U5EbYImkIOGpNwQfx(i|$;;S6} z;m81&0d&xxc9}R4O)3$xqn%`bXc69tcH*66C%2Q|DcdRRG%7>+o{XH(CYof?Bps3k zt*SxQE)|!p3aRQ6J7Kh%6!!i;+0oldG8hOMCPlR?`3kK8r!0r1sm`H z-idF25x}c$=%HHb}q;jgDmi^nnBGj4VSG6Y3encpb<4>ujYUztU0bZ zsgZ@{$K@yGr{(XoPWQhjJyO)JpgGKB0;+#-OC_> zwH$}^BrES_W~F3_;O&BRFGPw*%PvT>X&Ismtov`EZV=MF z5DEEBDA}3q4!Mco7TpB7@%wIk(tX-Z!tUd4a=c^_ImM_v1yr75RGxyKr`X)5U|fJ8 zx`5gj8QzP4_aei45%4JVX?3lT4l*bNX+48nkY-beyclsUFqBxx9WdesNbiF9Dnt$i zAuWbDz)E(CLGFMwL~b8X%YXx)+#d0QjfBi8WvNn@%(C&sq?`>U25?aBg7_*#4$+bw zVlgd6kCXk8a*De@vP8-j<-S@{0H-J=Wj{Iyk)S$A?_y98(qaZ3WH^SIav0Ln3>t*= zz)Zgl45D~;h|~RfayxwX17sjOpms+{Ly*~w5HcB+rU`N^(rdC$ki(I50kUx^i_okj zj&Q(#9e$Uk-(%@rEd3fw*Rs?Q(ztYgcjdD^Zi>$PLx+v-EA2ZVKt$y0_fA zXWhDQxpnurb&ujVkP{jlp(Lm7cTU}ZI(3gYbq_jqw>Wj{ow}7yUA2=Al@30jj?kyK zI{XEeCWkDd?qgB+nyCAUsQZzqyIa&Xi@HT3pyNNonX1EgvUDFy^B>96+4FQMdAef+ zc!MvA7?A2wLhvO>$EhR!BKriVVi|EnYCMo7M`}tSvqfqeAWMqW3_}(dsky~oq9O)- z2pkqW(c?o(nrkEeE1_8l7Sw0e} zu|e}tq=t?#7^w+DHV~=Fhir4C=%_20FsoQCP&JP$NoBhZBEc?^m?e>ZENA2S^srExaSh&00ez2R3 z@I5bdi`XAXpCA}|ALy>O-{ue4_jxBM4POQ1-EfUH?^WS1`&1V#U!T(eHs(iMF72Rw_RYj~}S$BiI z5-5O%V%h){EC#vEfv#Ekk5V3iw^BC#Q~T-#j}bVD@h*tNp)AGYiYpZDibh2#oH=O< zkHVoyRm3YzNE7k%`30{a&t2>j}=>sO-06n z%JNT1T4QNNdEi2@1_BqAQo^^cSk)AMFr_)1LxE^Y^NO%Njl&J{*9rl^uN#vk1rYPZ>s2W zRkXS)x*)cOZyf8fhIh4#;-UUA+8~BGZ)y9!p00Xw;xBtu{wKwXV{z4kB&JEXgdPO`y`WNe|VASd;aN#SYss{6MTpfNG)*^SoEod*A{vA~kMhU8LHP3o;B1bokM&fqx8AEesC4 zhn(PKgk;Gw`d20tsPr(wPsqXo$ z%wtaO5BLH^o@#WqBd-FITBx*Rg5jbN67>3d!+_zSffEeakZ9FE0ltfpJd3Qvf?s7? za0YasrKPY&m~5eXP;4sr;Oxivg8*&`fZ!S9VXe6dj{Mx5`SbIQd0xtcG!MDMTv=nE zobO({Jjpaq%&juvzsPz%dg$_s438(hau<2>3qgnIKEredR&*zgyKa$irrN50E( zY1*%IM6FS4Fp}9!2h4}f#GFikCbdSHJb_z}n1YtDg;*xAGlES@DlQsbo^pb7AJ)sT zmYcxmLN+85WJLC|=>~K<0#ag&aG8hYNDK`j2171K+sn3%9TK%zt_B#s^!M zcTIg4d-_WJPPZ99jI;Lk-gvw2_(bcstFFD_=+wieKn2zJYS8zmm}I1(6CqVRhr7*V zW}=>m{w~n3GpTiDBJvefodQ3)Wa|BbY-NJl-~A}{^v$6|K+xq z@GVn6R_13pGP9PI1*+0zJ;_;LIk7)g75|@4UUz!O4On@{8GOUrll^-_d#0xHJe%*u z@xA5j?1CkGKqi=t2&`K^!jP$TSM^Mx)>&E(b~18{+kP0~ym} zy?TccJB)&XH@h50J>jv%WpKLFK}#?`BZLG42c|`>Rw)f;Y(9psLN1&Ya*681Z113V zm-m48r1!K}?h(AAH{`8{n!VnzS8?+e*s39+M?&E(k@WGyZf;8R?fM0I+y&HE8aV|DX1!@-a^T1T5aU9n;@ttXETo#^RHc8xFHB{^i3GPXnO;_nY{-q~ z;nkt9+-AY1F54Ix%l@|Yp^Rgx$1pgJ8d#LIA%Z8d4Ob&>1HHQ5i~A7=bA zahcNVNp`!_^kRz2=`@Hb@lIE^CzW%fEHQhYA9+&U;8CdJle0V? zRlGYZAt9dlvy@7e5{ZIH#8(o(Vd9f=-SZ4-_B4`~Y0xL;=z2+9(&NLJ0;Ew)2hHD{a8!S2B3oTbr7bt#diOq*hs1oj99Q3(1%%56}toIs|- zWwy!`7LU_w@yNXy9+z1RVkb=kimV`ZSlu*nL7gj8<`05`35C-t2I0ypsg_}C*g~cq z*>7hOZ$==yz}cK}UB<5!a@y1k3G5&>Qee7fEPcL%SuVMZ)@RS7R^8XqzTXrYUAJze5KrDYRg*J+!P4EUHtZ{;=f%qCYqGWAExB>ZQDlzp8ds_F zk|(5G9?Nx*hnfM7Dc^!C`d$;WhKw(H`K859fjMw2@Qts^NIPvCfP)Ydt^ zV>Ibyn^HLarUVt<5Hw4@|T&IPNRjL#!BDZ;UX0->&lOfSq^&X^3 zl6kPSnSQ#JxMc{n46(h%Mi)Jev%`Kg=lTAwHe6|&7!{)uP4I=1iVk*QzpAG~4fw$0zel@m|l z^~a0c!Cbl{SqSm>gZ^b;N2o@@tJE2sQ?pznlgs34FY$6--mCU%yxKahQeCI%R*$K# zQ|ov5_GUfIKdgS1e^&h_|EBu9?7Uj7XX=(BrX)C>-jx{{6C^#fDJ{ioP-5jut@bCX z6eTz}ij{=?M4qBZ6;s?!mr|kd5^bH1)M4+F9_&d9XW=Y_bq2j%PxM7821NhLS5aze zN@8YwLPolqq~mn0PUnu-rxef%4@&pANrEyn>oH8g;4i@n*t-CD1BGyy35DkhsTLNV zWd+Qx1j5-CYC8)H*(O5yP2o+36o5T^2MHgvd?F7}X9@OZ2pevF|?XLFjRtRQo8apq!ol3rs5n7`DgAK6lP4?i{e!u(xZCf9!d zvZ=P7yflv|LGQG7b6=$J)MYnZV>7@W`M^bZ7xu`G_JlGWp#{msYB7a4ok?Pf$?3F- zDPSEmVv5n}G8qZM$|Qr$ZX>oLjhfyit(C6g(`uZp4ygy#$JP7>NQgR7bkIhdEhX=? z0}ncmJ4m)8*smGvwXb z3no9Hut5Wi@LaS=3I6yRfMKOxI1O~LQV+U0G`}5h!RGFPVKG~^)s@&f z)VH@ch+m#^f6D3)^c3h-)%P9%4y1sE+y@+R;Gu}g1bg(ih^~NUp>5g%AvxI~B&Vbp zbc<4yZ09XbCs~xDaJr0Qin%)GrGO4Pgk%dgq@)xf91m)qVsj#+L632Y#i0bHL&RcM z8dR8iFgm;e?tz!ryRb_zrY9pCuD4-i8vs^a?qp&hoEvHxrg!NYsxiaTt(wXLbwx}C z(&0u=IqH4v<}ZH+L8VplG^n`j778zaX1DMRrp%;QMidQ)0&)4sAQ%>)VR6v0OWfu7 z3fgPfEADk1Mu#0bUgRBqK276{^C!uLiRdMfxO~X&55<}2Q+y#F3&LJ}AUQ0Ala=6S z2JlczfId2USWw2>iUso%A8bkqlorXVKYoNP z-4R$sz}<1xwSKgZ@BR3mtqmRzUf0Jx?w;=?9{P$IcK3Za|8yu7KNQOC5qjcoQ@?0> zG4WK=spJ<^es5AKtcp|%v1%cCW-TmZ#?GI%?R6U#WB7RY)BfLT>SIN~D3>Pu2MQ2V?btiTw zUn<+C9ZMWb*=IOnJ(BXG?R}+Yjb5LRICH*2Wzrw<5*@?L_n)$YivnD^Nk{kgfntyH?FJP8Nt3b|a&pAPzCjYlNE? z=skT>K<$AkUw~86g3IyO_x)(tCnal_joTlJ8RD|6>pKWy@t89#f8%C5V*k!vY7jt zYInsaSuKecB6r0*g4mt}i8BE_R?(75T~)dxe#t?l1$HbXT;zj_)CE<@IU~CV!ljz{ zY!&NgoX$Gzp1OB$+wUF59oJlQHR+zZp1PP9oXwMWUh|mKN^YAxLcVg_zAsS@)=%9e z`x9swc!l`Kp$cBplh~8I(ZicG26bGOp(<{-?nc86!VRVy<8~*g%W;{y$GOq7U$;-# zXWE}|zx6@!Uhi{;=i+o`szV}8v@sn^jpaftw^E%e2EfbIjV5rpP^r~gjZ7;S)F!pL zL|AUR&TxI4cAIvaaH)BlbIfz2dY|=K{H$8FQvZY+gK0VyvKowensi9+M{l5aG#t{n zY?gc@r=X7}JQ;b42|WKWH&31~o4{QmqsIOVq?E5U=@Zk^`yBn!&4j9?4!P*Pv?f03 zIJimdIkL`_mo6Q9Of3T~=c!sgG7INniejURNgK~LQ>V7@JUFv~; zD(ZZ#*8z%}=<#?(v&(~1wKfm33XphBP;@5PJ;3~A9b{TflELD^?l?$50N~~#6wbQ4 zfKN3IgWpT9FoI4n79>D4fR@HVM3N@9$kF5rHDo$&C9)z_0(6> zGxu#fHuci-^HVS2+wdY>fN!08YO4Qmd&6aG_T9GnvYJ-ywbv<^c#nkh@D41;+4z>J zzNw#2{cUQ8O!nwEre2x4_kpb=_u&<|@~abYB5#VG<{cnW1voQQV9j3Z+vecpdaN=i z0`hFD!4k+c1O%Tk=oAC)jQRfgfsMW!d^h;NlQ-c%mKRqrbM2@KC7^YN`S$r_{&(i3 zq@=DBQ|zK0+b8g)p~}>CC`m{nN#9BE1q@2BL1Qo^YmyE8m|@I!hv7cW!BlH?Ha4mXHz(KKSmchN-_k9~xehZBJTc@^~^n`pV$7xjok$y=U#a z50@4NciWOub#T!seDK7UrJ1f^mZNcNPtSD^evssjPxldY>Wv*Mv)8RGxn$QjH{5eZ z(3Xfx=)EU9dRlfbSlTSih3>W*5}m}VPILNQm$|;IzsYsb^;1{WrDE@cIROhq;0Ey^ z*=gQsIja9r`lXJL{Vv5!2^ov<3 z$mupxU(IE;STKyK-Q-q*uO;rZ;|=zxo!BqW&JJbQXAfo{$d+X*4GO!0D2jZ(dO!AG z9*p^5vFEtVDi29M*jdR1lU#DpO{XIrZmeFfNAJ;iltGl1u5$@slO3uwZ4eopkboVQ z^pHJ0fQ=dkH5`tk&a6DtNW5dYh=|P$D+~6o+D$m9p5`ee3#UMCGccriK`|j-}_}G82Zt7 z$ZcB-oS5!~Df*g%-f!j+d1(A*)!%%i%G#Uw9qWYkM~QDIzU@;KSg|6*0=I(ss4izi zPJQlX@Z@rY+)!?P?qKe&+`YL6a>Kc*r|^lKH_%^DG)Fd~8c7^YzgBg1;sNySgfMy< zsjP`UU`Q~x09A>V^M=tdRw2PA6z@Vh;0yCn2Q(x~I(arN{ex z=~|=_G(@Axv|8e=R*OolQmWIfi2x_c6^eA9ACUYOtwzlY=}Czyr9y6%uZFGn`F&8f zTD0J)Y37M`uy{nHRw`7v7E2N;QRByvhd?tzX_*$VIhr$h4cxcsbIJO%m9G9YqA3R%Y|oTyQN2n z5}>Eg5-&htve{Fuf~1QcEPl%4MXB&X%WgqgsHE3`LfjIN%*i8uQKich(=j;k&Ge4l z(lRuJhQZxRkb~4Iu#3JNqmH)&D!`85I4~7dDxsB@p(a;w?}*PM|X3ZKE9P-_3cWz z$3xOmyq8V(6S8-#4txx(RyYzYW0O~qigl&Qz96{oAQkJQf8k!?o<{RfAz2?vkPAWq zFA4=Yp~CXK8}n~b+>y@}(Q~(LMgEZje1+ov%IZi#p7$MZ=a`6At407Cnhi7paxz z`l8Xr+%hFeFeQ-1be4sdg7+5VoLnV{OdumYkl_hr_zH6$%6&AK<8znf*5qEE`{mrb za{nXu@!X%~{%7vlT+LuE&RqGVNWv1+I4Nfj?bMvzKS z5!D2KG$e$Ib`_COQEL$?dLRKO(D&w{^!oJTs14f!Xo0YREXa|CT%NoExK5F5Sx8nd zYnAb`#3c(?gUHXjmKn^UK+V~qb3=jew+Jmm=UQ5Z18}!*IZqG0VpBmN2nb+4&(UW? zljqI|(lIz3FwxW~U26-3A1j4IePJPemoY4f?P0Ao#Y#|1v-A*m;i6=hTHtsCctsA6 z##`Xkry5g{R#c^8r)v?nAQcJ8x>T%oLb8xwoEm#eBH7^BLtG3}&m?~+fT&mGq3=oH zQ1s+WujSY&3cj*bE4{ajS?dKB_EIIyD3`Eub4b-g*Vk{F!1fbl@^^imGSeKWr_&P3Fx^n)4ESHUHLLhpEw}H*JpftQPWH41Kkwvf&Y)v$}?Uo7r zZph~HUc)I;y&8>v*kBMe7K8*Rc7_y5CLev*wj$rhgn03iyn5eBAIbKGeD%IT-vM9P zcigA&>GjBvXip@GexoTQ;A|lz)CCv(c$AvG@k9r`^dBF$iY$*< z?DS1ub0M6V1wjF}KEP0Y5~?qT>YIgnK6cX)&QO;q!0ClTFjdkXCwX|C%;Wajl9J(K zs`82+5ARIFDcZzTq|@8g0K4SgG@PVMO+^l6YT8A6%%1Lof9|?mHmDjDce-y?ep`0G z@)2HnmGW8@*~#xz@3imq+$!7Wma~g%Gd9NFEJ|Ao-cp|Q0Kyn=iJj1S)Q`dk$G+71 zVC#a&`6M+^Tu=(@NnOo}An>uM>q@i8F{l zeyzP*wb4GN8dDFa?u+|w+;`(A$g%h%smEMDNIl^(BAgJ1IDPU-bQ)yjBtDG^kK^IS z>4;0PCR*P&V&fmJUX8-BjMo_SSRcT2BXSapF?$%PGUgdDK7hl}Bk7>$J+KvqWP376 z&QZkhXnrI;katpnDHu{|^?8a!_rjZ`H<~Tm{Q^ola}1p!Ix%e#SsOaL9n`FbQLflY)|#(QF))jOL+u;8%U{WRMI74+Kfj z?#12^)t68L?K-VxCk0+e%vyM*b;gWRo`Mbq&P%1U(!*f57|_>U0{d1$i=;9$N|WyN z>*CxVmxstr-t;tI8j#fgrX2D0b9(o52o^ML>rmOy~rRL-88q?eU*EoZRs z<00t*k});KBRxP$HrZ2AQoK18ry6ak*pdKA>;V#eP!OP-JcJ#RHcBTR-9QuUpCWHs zSrfRH$*5{wMO$I}LTB~F_LG~}Og?zi&);=<5?pzX#rT6`eXGjWn(w&sz?Dz_0VlkD z&)t{WO}Wi?xPTR<2yvxw%g@At(E3mi%j4{BVvr++T`nkie*j_ZGYUGb)&vGWAQ-f6 zyW$5Gx0!L3{AkAQuF$9a|~evJ-82 z)>NM}1i5psFZkP6GjZmx5%R^D?$@3)V8gFZf`$CGPG|CIW8YPwc_`@1$rH6FwFF!Y zZMJrocCYq;R!$%2wKDLe_I<5FnW~N$^o+oXWY=4A@GG5 z^rmn=aPIrCd-PfWtS)BP0=Qs;<)mhmzObg>5nwN_rIe~Tdn-a!YC(b{zlh`;UHQ5B zX?YinD7C24F(ps1B;+RGSL4MslfNm>kH7wU{KDbOwk=nF%dA)_Q#;;o=!dVVwSwic|;A(bF}%Dw;0$r7xNC<|LX-0b6=?h9Pe8 zly`BWF|7!Ep*L2Rb?!beb<5^_h1;!gBz57tM;AL5R7`39S9{kQ+{SgC@7={N9t&U> zi^XH{*afhQ1ql!UA%QQ65|@%pQV)x?EyS+Zq4;zvu#Nyd`wP>I!~Zqv|l62-3T ziR)(K*fWh})0UZ}9W#^Gi96|-P14v&W)e-KWE>|-o!HJeaY^>vyGu&6le&M}U%(;u z++AEOv1iXc-#O==3*4+0e5T3g;|PJ=#&s#tW2b~PsV3u zEOLlPlFmsGHS+=(PAWUFpd6JQ7*vUb4RHhB$#Vg;XbJ@)8NrbZVN=y+Q*b3jxNU%l z&I))^z)qg!gf2fKpOx9VJRncXGxB+vlS%(Zvq|{5YONWe0wM~&OhStj+>Q<&p;H#i z#W8hB3|rp*;L^pj-@J)jJY4-2g!m5t$`3JHZGD)*vaH(yt;Z*luLu~@qcCuWc--Bi znmV}7FFjqTntB^FY^5-0>itGRH1()q*d<&r_0lx+^0S7$8uys`YG~VKW1XoF8HTq| z?aq6#N9$j4(4!p;1Uz0e#P_dmD=E>yhz)Q(LL{?YD>Tu_BO_-=W=1?C06$?-)I~-t zr&KUoDzQ`9ir?g_o-IrRsCl7ptsYovbp|pChqHhp@Z6ZjhWg zl`S;)4W1ul9vM74I5WuBVKY0(4ywZ=)66wfd16#5TQ8LkP=CCCZjtZlr#Yx2q*8;X zporkF1W)p!Th7);ZUXtcWLv1qVAdPytPtY(PAg+IxSED}Z&pZYI2fw)D>R%AYL4Tu znB=4tQX97&vt>Q!^XDKm<8*(%gmQVG7t`b^a)L8+-^lq9h7X#-X3!q_p1_TAqrR>F zQDJ6;>t#my(ctfS55c@6M;&K#gw&B{si3E%*Z@Dh@YWOcz z3eLXhzAm}%15Wmz6fVs}QYVObuQA74eQ$$Eu-MHSc;BVKFI;)g*4@YRW1kwk@s4U~ z?R>T`Ei095WoI>#7@W_Ps-jX)x8>_y@R~;LCi~clZR@w~*gdxE-qZ6RzO4y%k}IWe z#P{F5AwMuMA20iIgZ+Zc&jQwOtqU|duf55eqLo)P-| zJg(9Vz~-*8D&_#Mi#+>%=6meFr`QU7R|vi<1m7hED+JU< zy?VCF)T`q#Yyi=#E}~NoC#kx~UUiYY>LPsAMR+O`5sPo>)z75X;y4!d3_)Z^H8WeL~juEJo8F+p0805B8)CCz_^g*kJ>dP4%s55^kGqmFA2w zYcR;LjeQ1ba<=g~gE5@K2zyq*f*Vay4yPvk90XB$5@4{yX9rDH*EoSz6zNaN~Belj>Iom9WcJg)~P zybz^}6Uj;M$s7S`;=`6ni_F>(h> z^P4=-5uExue!s2Cbsq`SP=o|(QiPAzA)F)88F3~AH$rngG&^lnPbIt&8N4yRXz2p) z4NL8~-AHR zTKR19LG8i9L*^Hh#|uxG=ahdiFlu{1*SF{i%YO<0z!Qhc#m9L6&~ zljt0p`vvuy@SitUZrpL`@txQG{Vi9nU(vJUrf#FzXW0h^_s)NQq?s%hnS5d&`$OVO zo*2p1Kl0O4pZLXzLhAF!`?me^H@jBfPc&dFXuu}WfGn!v_t}ap5BbCdO6mzI>CsSD zb`#K+k$qlI{&T^!g5Hi(9wC_si$^6X;uXb+uA{7!WwPanyp%YTM`Z^5R5{h@s6wZ! z3Y|-dv(DL0hRo42oq8K?v&q^OJ3!v*!?Ql@TTDp$)ViBHtGp|DM!g|YZi;B8xu52m zmnWNZ6^^X4u=2S=j^WD|Un~l3C1iwj4Tr@F2knyIEa6<()Ns4E;}0jB%j4X*FkT$5 zob8FHfKqdGE5c zS>S064&snNL$YkOlxJz3mRUe{Mz zYhHJgoiZQ3`%9l(_*i$(?QdUkeWHkq#Y}A&|0DkJ-yXK2>krMp^3t`dR}jy7GeYd2 zz+G?0B|9KkLZ6@nCC88g3=5>HFReE#uBQ+D<|G;8hZ3d0VNM9Z$)aJ!1PBcsD1{TG4=o*5*%vgyY5PX z3GBpl6T1mV)@ zE5k=g8-Sb8Y*mar5F*!O*>N+R9gbW8AqxS5E>j8-93kq2+E~UrXAmKjjIz* zHH((p+C$e(`7QI%B020(yQKY-c877ucyc(fi?KMc7}5vQ9#_kaijB$w=B`;67}X^p z3dg`PGPK#(f)D2v(`NSu$r*v0aA}vP?%SQPv>dwNK`Fe4+_9B9P;Ty3SzQh{tea{) zQ{iSjodB}xvFT71UQ4vxe46`0_2sfq2jmmHeuF%>kW`M(lHCnBF27c(mvyO+EfX%S zWgElt%JSR9KF_syl-WQhDkIP``N&Q->#*}O$o|0E z_c@*{)lWel+9(H0M)*};?5OObT{ibYg|cZa4(~t;h(!T|rGRG{dLSdJ&?Np7Ut)gX z$I^X=r^r9NKNo1HAS21S;G-*o&9?FP>6qzk%zQ3V5w%mSm-swvn1iUpNw#X!e~fSY zC9=-nl3-hmtQ75ic9_zO3H_o`5jIp3B(zZtWEJV9$M7>>zAAuKBTMJ)8Ci{X4=sn} zEfb*8g`#95IHu2xzz;Oc#XUd46k}(&jm#L1U;v8=@=t3n?Z4Y86TPcGoI0m;!lE}-It(j&EwQGZ@uqLd*#LY_kH@eC1mOSZIt$}QIb&b-Z93oRJRZ^0-ZkM`2vXf>~j&<60GHP8zs>em}FrCvy#0bebyGJ&U)=Nc8q30dGLE3s6!7oQZ6i$ z!HRlk^Ng4R;OSkRoJMa^P&B=x0|n63A;cwXd=O7!3^6i|K6UjeulaY=$>)cy&Yf*R z*LBhxaIZ_!!|Zh6}3VOP=3MU$55R3Rfr(($?-?w0$JSgwd${QT9eP+Og1Va38X z7*;%Z^|n545ZB(o_7`&uVLLDi2OlYwj4)wb0$O5X;`)S9P1TEg4+B1oFgRk7=fJR-HbMM&N5#)4%%IuUMl-g7iw2i^M)6`W8)u`r^dTV9NTOS&l}*)0!>KU`VoYHG@j0M9sY`KLh*U~zkMZ#Z53deh zgz0{=$dTuuWU7l4?(Vz(a_~vME6>nx9vtT*N*o-)f8dg5E#!BETE;U_?Lh76!4LJR zoxLgykZ-{$IiZjiYIn7f!`r!nzam~jWBa;CJ2MRJ65_Q-PHdR*Tx@gl4GH0Xxwm>4 z#7kkKi~CaWPfr|30PS6j2yse^(;3nw4|^GDjLce+#0tf5M^ENj+@`mYQKD&MstoVj zmcIvDwY~$rbx+2QKFu1LCN5IPy)EA52GGb6OHtSDU1nCXg<`j5IEBgsqIoFx6{9H; zBQZg{+l0{)#_H>8#_ro|4G#<&EGx27v$%hu#Po$V*?39j(#M2XJ(sZQo} zFd9Gasa1FW{r!Y~EN-t%r{hwZ4epmsCfYpZ4YrlFv3W&_tjY+p4cV@bR~mmpj`Uj9 zcBHI#jDIJ1AvE*Ax%CY(`3wYZ?Lm&NCMib9oGY0Vvrx5g^)S6oS)w@~Z1!ASJhv?w zw4P@vMtd#^nUgz%_Z{;jf8+a(Jc}$(U4qYIR)Pb$)aN-{eow<(HAD<$znTZoDeO>) zN#2-}Xw$)yD3_ot1{KUF*0VhWZ9peS7C}F~q+rH|B($wk5+yY^h>=XMRk>LddQ_$< z`2+6Y1qtzqd5TrbtcD2_n$%(f^du3rY$#=g+2|5rX*-*oQ4B-U@+8m`(5B9Z)7%J9 zE3aH&A(VOw)FuZ~fh`;f6eURn4Bz3C&J@?__TsD7dzFX{ zLjc(jI_Ud^%c$d;5=fepRdJ8|mHBRKi(a*_%etY$UcwaN9X`@Q*6quV^JV+$eB z@(&*?`sz8S%;&l<=$7K%D`@orw@}MnYbT3%aGU>xN^r|?%do5en+>3>Mpgx-;;#eO zgNy6V8vaYkjk8XN7v(|`KsdBA;=@PYLv^p%%#9)jg~9XK;8OZR^ph_3Oy{r&!ZxXZg;s16-F zZ8n60s+*3dc@L(0f(4-V6uV23M<&K}j4ku6%MFh>!iqpZK`KZP5K;qYo`Y;k@bV-Z zgZ5vVGj`~F!tZtF5%P8RA-b|AwG`gx_lf)oO5Xc(vEZ)nBTtZ%JFdtx)sEJ z_@*nqi}9(=Uqwy9>7)HUTxeU0{ax=To6UKj(5e5G&b`Qbo6mKELHMzS)4l8RzTJvO ze836r`5AuvVO@9yD*aDs=YR3(@ofz(Ai22cM9i(6j2-Aitn{6Xg^Uetjg0>%-<*lz ze?xY%v=i%P2KnHHJbi< z8riwHd8QYOce-j$zjSDy*`^0IdS+IcQ$N&rO4}`3pXrY$x6jjMzZI-uXTKlryOS_M zjJw`bf0S5kwJTY#tI2XhADW-qtG>U~E4&wrzS&ADrUrX+1spHgVqO<$B+5(rkzB+O zulP7gAy5xra3DERT&Zt1i2GZbHi`Rf%xT2yK(XY|m9W*Y|9kBq?ssWAgSvpZ*d~E+ z5zR~l&NP=y(1W6R05yi4!j5O9bTm2%1D9tYG!*h;yy%SIjb;$9i(g3uzN`!3QLL?B zh2IU*6QYk|i2fVX5J$Ym7g=61J~9rt}5~`z@R7RNd8lOng0*@eNz#*(h`mk1OXi`5Md>{Ov zKf`|H;7A!o&R4V1(wLzw?+;c;t591 zXTVnECNjV0uEB~oO|UgYx7FP4g;&Jp+`%8@MF7?+5N(g!E#^poEDNp|(B|yegaGgU zwV!p5>kB$V51dVm)YT9Dhsz7I$_`zIuQ(2y2WWF2O#55)a#qBNTTABbn%=l2~s7Z`8AZxFFo{U2I*5O>}$Y9;~J2|LcL;M{Rc zqgOsIFVG&y(tnCQ77Bc_@!GfDpxGc@$X`s;V?KnWK^pq7H z+#iiMu(*f?-e3)1te(iO8u<7tLYo^1AKItUJE1ph;s5^r2 z0f#W8c8(dGgF>?3xuaL-nScln34iub- zn6gt<9jMljTKrfu`urx=L7z4lQy)|wFu1)bI>K7C`Ytf4qAaCEjfP~W_|LJ@G1W0V zHqO`EtxzxO+Wp5j9v{EnK;Ot;J_^ls1P}Tri8e+rtc`@cY2~wVk)=j3mqB8wLFz64 zc^~8$Lv_AO?qCwX7cbmN*FE07Q#IOtx;^ay1dNL^!ge*tdL<;XbrF{YZ=)coM6hv2 zVzC^eU6NkH)OLlMtjZ%7JMArS*75gt5ZXQ(hgnCo_TBs>WiLkFY2O6j2w(qSfM3I( zQb6!c;M6@7lc3LFzq^dP96NRJaXym~1$@VGnJO=eCDaZQD;U*Ku))_5w7M@q>#Ud! zwf>L~rvlY&`lxuu@MA-@lQ|brxk9i#h9;cm9Y**dTZ5z?zn^d1E zCfH@V_%tyd3V}}>(rUGjd0DWrf8J4c8C-r&x&%hGnZ#B3NqCF4$jieQ2e3BIHqUmj zcG336E%zHh55lR*c_fjZWZOgA6WjgQ2cI8+AA%qKABG=$p0V81UNSp@J5ef~DePuMo2$1TL!@soFy2Y^@Pr~!MM--&WNyzpQfhXhYR zq7#`ie{2E_TD#-{b%T9}wo{Z}z5uz(xW{C#WQD-)#IITTDVySuFG#H~%{Jeiq3-2j zZh!WDM0f3apkmGaT#*dU{FE%{^Sz|1SS}pMnS{31KPpaC&sszx zTQhfwTaI_ScY0?)`!H@XpRQ}+>VwlRGq(1((*`B$Agb-?Te90}qNLd~IUO6*%*)Ej z{|xIAk`a-RI3VxtFI!nwnac^rGfd$a=jP=U|o3*kwFtMVKq5~r9X^Z#P3 z5_8E|GKc#nrA-*bK5Q?9-*!kHbJ5jI>^K8Ks4j=}MvVqA3>xj5#G&H=>e=TU^qhL! z^B`6=l`1i(qj8meaH%Vnz$*|S(Weq4hvX#D`!F&pQQ752@|66I92Fh$$G3!p!S7N` zR^{>@OLk65kQ2-4c>2q+tPKauWHAjF95nLX)Fo%}Xx(dkzhEJwE2bTIk#L z;c^?{I$Ynt+|}?*2%3uaNCOOx(qYy*+uyg1>~yZimfSr~i`0sBK0dle`XjME*WfYF zchthI_O)jf8|(FesQY48udUD!vfha4+WKMhrw}d&S&*EcGO#L6^;H|-Pi*PoX7@V( z@lNEz^Q&QBRB&i`w0eUPvq3%e^q4N;(~fALT~6vq`}3&nSelq+urLz;)g@dl^Y_Z2 ziWE?2vA52w12!Ea53bzEryD!79N0m6Uj}GIp=358h)4 zE6f5rZB<2{D;qCPy~)J>=hY8EPshiVXauEyjAmmO2*f}#VEtI8ofT`F&hlPW zs~o(rwU%mAL0Qb*CKgnG!29TKFGw{1HsqXW1GyU=qLS>LGe5n4UUsO9{5*kh`Ehz7 zD+n{N7BT1C38Rm&#DM+RGwKzsOjHC$Ipf{6+MT&we4Qt*SU@P1n(9(tADw1>XjZqu zf^_U|^Lg`>`QJcKsJmN&B28nG0!;>dc9OO5-bV! zOJKG!5s(l)Z`Zg#gA}Uvz+3z>1Lhd8wO)BVN)>|5YPXQw&dq%9u#XoXmx%+DZ%L)A zc(uNuK24J71Eo8^b0l3bgnS|L+=9f;P@Y#1%wjT zA?`ZL2kX3h6N;Cr%=;VM?%B0>==*Id~(mp+dgBmZ1X1J_tdbL#N0` z2LXakV)Uf+Lx${*=#d0|VqgbTfdp$3(fgaJn**QVtDMC4aXF3uC91275djrh&j+Ul ztGT8VAP)foV`Btc!4*I3%pY3`x@d_py-VS)o1j8v`W^;F#d;`98g64xDAB zpR;Y~7@g4AV!J2wz~+CioaorGc3Mwdfk-R!WPdru>U?l`!l%Ev0u|Be%%_{2nJ_N* zs72_`GiUekgOe|fRBAMNJ#ct92z_U_icHszU&2a_a`z`P9&mH}p$n2KpA%gB)% zH@j~rcAIS1au<&=(lH#RuOpySQIJt36gNCq-175!;we^-&bB;~M6EI$raj0+hHwT4 zb(9Lr92AXb%Um_E{~^DHSygCnhnm(7abBe&adOn_Cs}VY;5AFRa=r^Tna`g)M@ocO zhvL{yGM}Z|wHI@^?AJK|G9Jgz1=g6?YG!4n+kKi6OMmwu#QH8VlFWE~7rN=WevXWA z*{~d8p^j>^g(R<-XNO&zJ^B!WdAnUH4Rb?2v zxVlndf@tI!AGymY38FFW%#OfU=3ffQ%5 z#K_{FE#f<$*mR0MIF7WKfRqp9MGtcL2Fn$4yY9G#6~vAhIGdqa|0~&58|@m1w+Vqh z-~k!(Ci*7)qxtpdmU}#V{|n|}_d`5`Jz~$=LYOts2_}NE6+<<@{DnY?fVsYrSmi>n zGf6Hq6t({a7?gp&^UPYS6iXGYzZsl{kaZnuzVfJd$-e=l2KPPgp>MfA0ZA@Ij%Dg8zd?bWKH`b4ILHH$ zysx2DE54+6Gppd9)=j=m?U2#OPI$%V9+K{bOX^ILgH4r=(>;YaXhp*-a07m1;8?m| zp_4Q-xCd)xnttp>jar6UJvJF=%$q4){MhhrXcdA?M)=~zmUtm+Ubg&*u1nWAt7P=8 ze8Ddwcw8(`AE?G!!`|3m>SF>2*HUPu9e*zANf?RD+IWf{)4n=gkb{tZwa|4xmSIC$ zKh_o_#H5=X;*hS#MVui{dQbew)NJ~X5cDOIo~j*{dt{E;Ntp9Z+@X(}N_hE>p*qg# ztCOJ&QG#%2tS~pfA7*T_?(w-g-%jWtxe?olL+md5K--*-zAvoWjp|w{PmiQNK3T=w zZC_d&iCnQszG#5>8Voc^O$E|+Fw#aHHg=%*bT~HY-;8IjCG~eBGsGLKh(fLK`|~01 z-(NESx$1DipR)*TH$vmiX2^&8Etn$9$N3E~+?N-xD8H>FUOi zCCQ5;^jd1@^#|*Ud0aD*T4hB2>O&p3;GVa2Ms^yVe>48H8C(M=-RRu}yuEEbB4O18 zgN}6*g7tvvx!X!LdVeb)T$O?&WbKW3Qr+>=AoAfsCzYhAEurAcW13N%;B5_pq?no2)v9 zU5&-Q5v8z$YBuB%Xp%~xLyou!qI$rjiYk61m_y-Ge*7Zd zAmW%Lt9cDcHMeiQPVGKrc*U zXQ5MU?4D-`w5^aIkh_~7v80TM;)&=(9iQ0iXeUW*a~13Z$a$orO+(vQauKG&U(CAK z1>^d%wq>T>Rsb|T|M!~sXE7pbmV&$ms~!rvlkeYRDFwwfx3Z1p_P3f&PRid-1CL$X zcf_6Z`-Vr)=4Fo?zU{QHjKR)M4jC=mlo0Qz8Ys~1Y;@%qB8$N@15m~>u}#hQ6DGvA zbnyA4M7XWHz0~#IrL@$%d`ErP%7ytkI~ewFTbidAP^V$#)r` zb}zu_p;KF+1D6atZYefr7EY95V=6~oqpLgwjCXWr@e5O_NQqU|g;L#tvE-3oEd}U5ViP^ZTP)Jm68B1{%k!~ckIYKoftDpCX z&o;9(9X*R@=2>(?7EJCbEbXu{^5*B&ljah*A3b5=t~j#XwNxtA7B)co-U&ZRYP)-m zWQ+p14WRf$mb8dx=!=8&r-XFqi-dHiOEKt$g^IJC1z(I-Mee-@)=97Gp&t{p^>9U$G98imz8{l&@#< zzOV0U94|)=#ay0B&fp4o>A~egj09`^TgjbEpFRxj&pAFRGOzy`QMV1Ej)9Al8`azi zBbhPXqBYjjXMpO}VLoKdn=uQBXA}NvsR>SGVOHZfX;hJfwsSq zJo_h^p7+WScIE&4 z6jM}MV>^|SVIEg5Afc4z28@7S2bV9V6b;)7O5Tp~ed)X*#M=b&lqz|9c=$_`#z?@x zZyUyXF7X8F9bP^)k(?Y*t`;UKwTBF;Xzwl@el;}#7yXJ0(fvD!CXgCCO;+7ybh7y1 znz)A7D{Ufn?J9P8aI2$~@V2daq+(F^bM6|Rk|y|z`q6J2A=pbCGVS3wX_D|gSXuPz zm@irSL-ORHGg+cx@+k-POZkg3MxZ`3j?E>pE#bvMK;>y`p!y=$5_gqkZihu&;O8MG zCbfhW9a2=pwgtGp&d!2m%0y~xy6NBmy*?sD7$(mW^Eg66GBiwbj1JAr22whoPpk=O zI#-ELBxABykYH7Au&}9a&u=r6UJ~sgO4O6+K`a>$y zY)4WkE;Z4t%W#}SVzZ_E5;J){NtH@Rt1Glhy{g}~LbHeyLc2JutTK}CNtvE`LtD2f zjT)H=t$9KptfF366@Ss$Jb{)>H_}7?903_!*K9gd9vzcRWl%K_Iei+W*8brbwC2wN z^Ag7$g#Pq_c!A(;5FlVP)3i~=l9L8u+k6lrmo`Z?AsI2Be*e`!$1S5N>aCf(Ag~e1 z$@*M!VxFB(C7UQ~!^mP|bES|GJW}v7<1^S&`Sne;oiogalVe!w$9$n`ULq-cT#(o`L7@MXBPt3DdSWUmu8>ugM!aMpi82bmbTi?D58(- z)a=lZYNsX|Cc&vxK7J>|%3PXuX54-VjS4yDK*O1l6htu&J#`66nSbF-Y4s7-+cKw+ zr@S2FvsAjhFdHPEhk=TpR%N(r*{uApUAGJ~!8=BExwN^tyFP`6 zIc&RFJOIM*Kk-ltHGfp{S>^x~I4&MlKEW znpin9l*S*LdacoiiX_@<7a5zzlLvQ@IGRSauYYV~vh2!};U_9D0I@W5{fE zRX>b|luEIrMR0*jy|1LyWC;S{o%DO2Ca=}l9*&>8N!M#GyHlF)M^8;Cox7!*i{4`W z(r&Kg&g*@_d^jDhuYM~jvp6nP$Iaxyo>NlnF6H|zD!3k%6pY##N)FGvsjHfnSV_(s zZU01^QPbPiESRu9#!wO-f__T`L~2wnbpPNbJ1@Y|`;;Ize=zrmiG)9174Wquin}vP zy@hNA1YH3{l!x(B%n*oyiqpkR#S5bj9+nnyUbk2kq|f5C;}%c}x4A6NTLji!lWF^F zHI}Kk{7kd;Orr`}`ZWC%tHx{@v-GhDQerL75D?PHvbi)^h-jmsIXZ;DMUt;eHW%UJ z2d&B0w$xh+c7&DqzK+V710olZE=^L%4zo2(kFu|{QBK!CUpplYnL0Z5JSXH=YsuJ- zZH*^=vPD@#y~De)2v2d0RCL^QgR~q{0W?_b#l}XYrNbs=D8R9#>u~9o4-b4bBVE2C z_Dk@UGq4F)rhkJOwgtFyq@!ky3P_gZ>|)05g!_7iqKADGjevMK@Dmq#6Ls%;$_rn|Xyiy`qRSij4w6!>k(IkVYB!CV1~p zq=bk5^<;aQZ7Etg3#U5Lt8off=9Z&&UZ_JAvYXe6N6?X-NY^N^XJp>uPWzjcIVWaSIiVi%#bV?UzjK>=b z8kAnvw5(+u+?A3`INW78Q~##gQy=dmOS@=jRj|^~Y^YJkRUMc)YgxKjXtW5rlS~7& zv$v1hJI3CGVhI5ns zh#AFBCu`V#3!ZI<6dxL92S>LeEH@y73|yv(SL~aYwvcTgO(#ova}rz3AD_@YV|l7lRThT=z9i`#3xHCa8w(O6IWIdYA=n9Cu68&3+vOghHWrGB~h@di+N;? z1EM@AK=~!9s#)mAKL0&eA9ew$G*?=3AffIR+Z^dgiLn1XTUV@Pr+EK(g6{6#Ik7$?ugcw=*iB@{@j0u3IuzW| z-2VK1oa_Gi0TNcP@9lXjX|;Jen^G#T9JaDqJN^Br_s;CxA?^_5Bs67G$NXoWvzt-Z zn;kD77n2+t6GJ+Bz>KElFPu-$Y*><}R92}RtWaV*0zpd{3nuQ~C_|v%q&`PI+9d?# zf~e#JaS8i^jG%vdQGog+zAw-}9T`Z)`ZFCPrjmZ3=t!;0p4FksJ^Fb~==Gp02(1r_8l zowMJy-rX#S-MwsVSw~uIU;^!QJIm?0FQh}!RCG=+w~xt*y2w9R3p(lMeEY1$U3Th5 z_j!imNEG3HN!NAXjAgDgGg#&3*zA3nGxLfPUv+y5fAyWKKC}fwgblTLCs^N>i=FL! zs(#+_s3~$&6vhQNMpblBXi~_@3Dd@vh`0})0cPGB%?>d@T&{32GRati3|+R6$3jyW zIbaIsmwAbPIv7dJNOT@vDsVP>R9L4m<1SR3Mmr^DX8PGl!m7u`glI&{QCH2AnNWVR zzBAZ9PHtluhka(o)2$xefg4^+bN23;^q!gY=xRKSj$et-n>M6Jmw0&chq z{?}-kY39;fgyXmb6wSnRXl&xCH%gsWu_f>6d|9sLeHhMoSRvRBYd88y{9Z4o$lrzF zyn(^dz3A>HkFYfFzKrZwQ0$=b)|ITDCXIYQj-81=A4P0ELUWBc3CL-}j&6mNeR0k; zMwrM9huqyW$REPM!2+q5beJ>X+JEPMWFj_iYGQWY#$s2f!67a7u8gEJjqlHqg5)70 zCGA3{j(G@H18f3+ zR`a1oSiUaA`~{Wzhu4sq8-2i2x1iV2vo`#DBYF<=Kb-Pse3p#!;b;O$CzrAB^w$P0@~;LQl9I zC|kZbvB_W7OF0gVK7+k;$4@5aUeywDC|~zU)=Klw>lF!%>B|Y%B#XRW`pBx!-#;5$ zMd|-ZE5P=D(h4v!u>L>tJp(HX3o{Q7q@$CAvA#8=Th_HVgj>?`_AUD@rzUCoRKmCv zDZw}=$AEAE`v7Z@Al{1AN|0S%lMrHK@A`48O0F}z7 z#kL%8s_gv1g2on4QzWUQ?`hX9apIqqThE*B+3wlFtgP>>-}l^Km!DH3q9k|&{LFAM z3(E_~2k_so0)%m4>q!&;b5@=P4Vxf-iHvw%}42 zr<|-r7l(icU4Ti1?gA3iG8OL2?QFj>Ftfp~O&fm}AvLGCF^TqVjN`zXb~9 zBGh4yVh3W^qkj`QaIy>K5Yxr| z;^WClL@!CQE~=hEFk^7=cyX~&tzlk~DjV^XlVr|kiYc16*Qsey^APv&Je}?*_7nHn z;9rgxA2~E+U*UU>T^_+aprU|u&*4)e;}Jp_QL0O6@K5IgmVS=kj&~}FLYXlH?k6*f zP(op5;>yCyLfAs~;&|h*Ph^V9mY}RZbvHt&+YzfF6&<^!e|3K#dmwn{EF)InZuUb( z{HKS}kX;3c3_UY-607s~6&6UXlVv0L7&=vsRDy%UL65=NVf|XSqi-W)gZH9*!#=$w zu2KYmr6%GoigmogUvbaKBJ?HD)rWzR2CZQ{$G&=X>GMtXfwEtKP=$np=W*Cdoj0;Av~4`HGqmiGG=lzYT|_`}wSxA2Jho-{H~oFQpC zA8AHpU4qk;`7+o1LOMr&t9NacTsvi942M0R8|HVV{t&;5Y#4$Sq7*aUA591S)y zo@I;D=ZQHU%QvBlROwPWQf?2aVz9u%h(3TLkkTf0j8G`X`xFfx8EhGB;(+I!g%MfOf{Z{SKtOu@B`XNRW zMmGp6QylOH){&M|(i{M@M2X-duvM0MW`5L|=WomR05>mOB<8HJMLLDLBcO@)PVo)% z;uhotA$msFmr8hMNLO9lITU^*(Sf>@CP0f|LrR-3YR8|0mhfA^TU0-{W!smDtPdg| z4w@gG1)tIPj8-l@R-!5(qncRl1T|hH_=N5*(-tpP0B}EUizBGx@8g+qgJPP{{e-oA ztK5sGQVg;`jL#z^2NwI6VX#AKi911LYzX<>7?cg{1| zK|v7EAXiS>7UxGonf4^mAXHzPl1b4?NV`Ht3B~UaFWx+EB$;iOL+Q4{cWmN->L6WD zagM!93y1rQr5$=H9pbVDrGqK4OWgX&po0$u`J^nMKXMFrA7OcupEJ5Z=0O1-lf^48 zWg#g~Xcd&`98m0SIO8+)M$TGUyHKO_17N1aR*$)sgf*UX+}1wh3-MG1^NbB`Negmw zF`SVw^(bE8$_6tXwvq|TyZMN4ZP7$+9K{Gm9cuEE@d1B563GJg%%0(-8b39!8;)%0 z_(Ncy4VE$XZkEgq=?uaYI+BS8Rl4!w#C zLrY?$%er5+PJ=_-@0rdoMc^hd7g!hS$Kwp7uM@6qwn{RI1%a}e4g~=#K_e6m&sU8HtQonCsBGb^Qu@wipR> zKNd-4pyf->7A0m?z^xrI@8C|tyx9q2&*yk@kpdQ+vX|#G$}D_p>Cz&Ta|{L zC8|1%C!H7iZa|{Xm;pdfAj_AhH7n|$Sm5ntx`UR3EHf~{&Y0B{3^?^W6JF8m zRO?etB#ZpPU!7b>QzSF`Gu~)`ifjrUb-lWNORs2f(>@jQ6OpI&rkU6%wNg*)CL@oF?Q%Vl7<95%Dpm#XV z$g0brt#szdS4kE!{t-wVy`+Hz7%$mTFT%CQJXk_KL`qmY3C6*|J4uFM&$x(mMG|RB zDhl2FHhKy<@n2`lU1!zn+T<%X7OLi4WCqhRwse^mN|QhhC^3hD`6(bE2ycVsXmK#6 zD5K?pDwMp;+vHl|ES%#cb_9wq02Cjk*sT{hvv(aA^zIy4B25byk(t0EybUi&3@;4l zA~y&D^^--@7VF$5QNPoAEY$L7G%L0ho>NX}Xaf7Et8K=Qb{xQQ!%QV*l^w$h1N#Rx zkw7b2ne~xyn$Q<0B2_1n1b%+yN1^i>KA@)@*n+Y*?K5l9WLvVvM4yyUR7 zsy;%Xw$WWBpSd_o*TGX3WXo`O9w~xk^meSWja^wL)C*CuW7duZbqifQB1D4;cIuO~keeT~w z&nxwVbGVhA?$dJ-&>7V8o#}X_rOYAa z?Fg$q!jnHzveP7ihK?!w`9Q5q0=^cUdu(}cAjdHFXaS^IJ&|4|4pRlL$c%biPysY`t#Zi ze5KmgtrJciyo-VFx@VI+28`_5E0i+9@YGL(A0K;?`()s~ zPeB&AR_yn^Egjv*38=--_~s1k4R~FYeWX7IS|}gpKtMU3)L}qe6L3`%Q2P#0#)6sK z7X=hoRhXw7mXnF%5n@KU_}GA;5n@1jlzso?+|vVss4D4^mt4h-JP-FyNwNy`NgfqR z3=shPU>|f5#`{L|qKNyIVFWC@x6{wW?1!Rztg!)XL67rIac35~g$)L4tww;ba|uS? z9AK$wzpEjnT!g7Z`{mLPE>01O$C;@D@XGt=R(MYzMP2ltEFr8dM)H9)NKh;06`u9X zHiS1jTp1m7N@I#N`fk^A|J7su5EQo(nVJP4QYuCiiOUoP@Nk<@tQF?%=Fc^4s1}Wg zjc_&kzCr?=ttX0#?l8@`cb_lN3w!K8)$9N^UoTva7i2qTqffy4R1OzFq@CXp7%#{u z?QoQ`+PjO{o6rIQQx1w1mkED`FLhD`FEQNQDgLJGevAv;x-{$FjVsc5p7-7|fCIG3 zA?DdG@K$Dw|HUuiZJcggsr{@QEbG?f81oso#E(qM91Oaz{L!A!%8$`H{*8$h%ycv~Iz#Fbq?4M*q6}_h+CVR51R6?wsxcX-CFNzBQV4@pN3b z5)W~L*_#;Bon9_Z9@iqx%REutEKpriZsI09?`TP%O&H*Lm+QZ*+y}i(e3} zb+FHUPj|nn)92*5dAx+&MD04_umGT~5Un`Wzi3ZxP!0Niz*|5P)I^B#fpETjZYW!A znB7*%+D2&KRNoOkAm2K|a0`r2vr9xx{uV%UnGOf}Wb+TEAODV%_&h+ATfxmbp}Tiv z4_w_rFF=E*+6i zgkodBT17uj<+CqI^aupe1bMd%#OO>MQU<9^nbxBwWW#Pw%ygdjVbtNnZJr@=B;pFE zjSqs>2umRfF0jc&_SpL9Sbwr=xXrj>9n8?faO+~%w*QI*&MvI^rZPsu3Nr(K233_5 z9Ge~!Sbo?(AY9tza2e73X!8ijs-d`L{|--%A>`uhU%nS0XjG^v2LCpY7`z*>*CBzm zhKpoTj-J_^+2I{Y%krXB)iI5l;d#fr5OE2SI#k|KaI@q<5mXE&+#W6=*)QA@#s*($ zxdC(Gd9_;tN5=iZ_7V6IhuK1FkN%{rzYC;}YX!OEQ3{)iY{_Sh6lF1h`!ZZESagIEx3w$=Leh3baUE|nI9bZlQ#%vOqPY6^g7&k0u?cW9O&dpb|5 zA@*ICdhim8?27N=N)>pMG^a4-gW}Ers7a*kWT*BwC{`rDzPo|_?i6kj$xE6naK!Y0 zXG}(seRPL+s7vAFk92`71n?y{ELXQ*jo~A{axGwiSC6&;o+2_iOtY4TB=?d`sT@L< z8-x;hKZG3lEg~Wp&<^$f?(FoS`m|d&j8_|0e=Jr%OV&h`V?$LHP&M2>=>u|aqb^9f zdsZr}-VW}A>{txiv%%SW_1$Et-KV(;E3I0e(~CCN5mtVDc$<7(@Sv zWW_<1`nUcu_tOz?gJi_DFt!9}I<6vNsn0any`w|MH4a&SSSxQ-K}>rTt{N#bVe-FX zfO^k@j8ba|ix(hufgUxrDl%kyAiSTePuBgQwU;U%nA5O61U~@9n!^Tf$FhPwxPjDN z(J7Q4kPF-BzbxF;s9?Q$y~9=5z$1shMX6LPghqo#oGqc-PqPuH4?;H~+t}U9G0{_k z`lvzbxpL6HjCu^P3J4MTtU-6JL3eHcCJI#ulE^F)o< z*f|Af67+q0W82=?wl}u3v2B~1jcwcJ9ox2j$F`k!pZco4dJo=%r)sKay62#~`fPfB z|LdZoW1+?HDm8Ed53)2UVi`oC42WC9b>iO^M`v=3;c%k2>3Vz}S z-T-JO0B+aghD$KB9}MP+lH9uOF%m}gP&8JB2n*4@9zd(mdAn9;;4cCi+bm&AzkCm@g5F2P zdZ`dgk$LOojhBDC*-6-9yrCL8ZGC1!>D#B-hC3&z5w5crLU)CCs)ICS2Z>pE3ta z#3%eBg_+Rq>+~-sXS_z7jCW8Ahw@eoAIZE9=JBa6I!wFL9&{UFIy>a(1KUjq;BiaD zF)^Gy=*+inOV~|E`<{ACkALn;C6eda{@tvv&qvn>-3-q`cx;a?a+bFOi7Dlqe3rXh z+|z=IfNSqD*$u0L&>I6uVw@gK46cOU7@(EzDwqy}$&cB?iQGdGd{yh~s}&2-BE(ao zNNU%IX36^(S|ML;wD=rZYnLE3!F@NhTU1Z11EayX7{Ns#H7A`7vgNV%M2isC0wR&_ zjZ<>v0i_>Tnqf&-@Q1|@c358nIL+&^w6y(xIFnuB~{kO$&P zX$Zi90hBKztcJ@A{NXV-qSk#Mh{$`EPCzR1b`jBhi^Ew@z(bxv zfctChtrIT^ZCqx&0B!Jqv;bb4WAuzjO9TEW79l!A zGfnW1r4T23pz24|T?(r<2+wQOm%SsdQMYtJ`vO)wZUtuV%IS;uYU@Jozee&v`1CcV z$AkhD{-ErN54C+T_JU-)&gVZ^InWNGm>m>C{fF{+!As1F0sP!_jv_Jdn$CWt!SXvc z&8@6M^|nMu@q>!_j^7sXmmxyeiAxMUKyPlryyb3>>=pr{l;NKc+_>Zx^c*~EJhgi- zLsj!!d^&5$ec8#n4PbQ=ya5QG<)P$@B#_S~amxpNk10kk=uQ>@H@EmVDMo!ryap>^ zDy()EiAqj+w)C&muXx`%l2C1dUywKc@}+Yl!~>OvEA|u^t?Ek-zPfPNo#8HXqMPxx zBN1?8{{5ug7|!2>KCvHg{0n`3jE-lF0nM6*^)-J&w55pUd#(TQd*hfqFOSs`)2$*u z-vf-DZjeY*d<0uo@)bspo}h7bu=EBIJ{_1w-<1RK?)M6l4Zu?{FFsm={QcS9SnR4- zC4S|AWl9hBoaHM2#DY_Bda2^o(~O(~+-8iLi@~kXn#R8bYbQ6**hFOv!qifmBBcNH zsYq%vnHt3=7{l04asp4!d!jK7B$n63dF!TU*GQo;l_oLfNpASn$lQ_KAX${APi^{p z6`MUg!c&~uTGC~bR$5brA~tF+o=YZEIi@%5IjKPiK!3#gtAqx{T5L#vdcsP){-wIJ zYWI@YQ*&a&e`tb7&o3&K^p8bCnff>j!eN7~NE_XPB12{W@F-i-#Qz$Z_}7IL5&vNA ztU?+POxR6%f?$*gZjt~rq~0}z?;f$=JHd}*+Osff4-Ajo@sFEoYjgz8WRFh3*hGP{ zGTX>HX>bR}GVUM3>*b70Xm)l6CA%8FocAwBz*@(`ULN|92rW1na>6ND{W*e+n<3qr zU9!sxz%xwN{O1Ylq5?ERTxR=-a(IpBXX}oh&o-mpzZ=?X(*McIZa9x`zK@3tN-t|F zVE>Z|0JrYVtL~JFODY<=XqhX$TK_cwE{BI9na6q<8tTgl8u#%k%ftR^_ab?gk^8L zn}ppVfg|72pb}o&fY@d0(^J(9TE}T%$7rt^s&tv8GYd?r$bjV00#d4G{N`j zLR#U?deduuF`gUH<}+R1o{xZA8kjQ3pF8nFfD@Eea2A0az+@v@mcnGzR+2%0P*QdlF71JKpOR$>&T_Hc|X zw3~d|=fls|GlCe?FCX@^qh)Ty!@e?s8FLx^; zxX2HEL+f6zSI4g{GmBvM4JHx#;!q__?ob=Y77=d+dM~|FjTXdBA382 zBo2BQFX$2vrBjmrG%QOq#9O1&j~#el{kF;XAz_`E?LTF_=O&A`e)%9g>`YQWfmB_4 zs>X>=!esF}3NrX2Iv9cu)_U2-+2VP%q*ZCnZm9yZHIX9X4_$-J-eh=oTvK)66SP;V zA@V-^vvF$3W`v)@e1Ttx1jHk3na=jnvv_E;RXyUu!zlQCS&Oo2_ze$qhpttMHBhx) zjy`b@3r*j&a=-tr7PSawh&n$2{O)M&biKiRO^U0xJ8T^#eHRyxX(DGqaz>ANcBDVW z?ISK)F*ZGYS8;U-o@E%AiL7VgmkvkBimCh#^?_e=IjXNxqGEl*zocluVwFynk^IG7 zKB86Uyk@-S*K$t~G+n*NtkwyE+|f3~-GW5*UXc$lN)pJww@4D-K)^#H0`thI%H_+Ui@h|#Er+f5NJ^WF#Nu-AN6qMNl)pHO5_jZU zdwK<2MT?_p_x5i0)_&vdSTT_~)YVniJsyww5-4Yw#X8X?vY1JM4@nPL-tL7gFQKd} z37AUXXsGwr?O9yvY5>StonNi3P8>ibb6c7bxpLw{JK9Xu$Zy)A9nFZ)d*@ z&@0cqG*$~_YXQ*Ll`txjJVJmf8@O8Mb@9(KxQpHs7Yv7&&m~d4M;w3*YXna9ojYMyyw~Q>cB}k#e(p9UyVp? zC_SJNVJc|$(;Jwyv&q-ZKs&jntoc#mwdPXj@%hoP%T+r?6k9 zEro;FVq<75C3%7Qes*QsMhP2E7{5VR zp~eKXpjAFVsj)gexfv}zT_ISvw`=!fLCn*$RQ#lU+K4WWt2w_8sA_~-4y?72mB_0! z-;9BW9B#(g($(F((#{OvZsEw1iO^RQpEM=aGfe6%!m|KuK`leI|J=4eIh$vxWd2YS~)!WQO2N2JUuuy!Z zCi#ggo`hLbZ*$;pj|HEf(%pU4JdH^KdbwqLt`>Mg-(ckG7Qmth>G-e4+)K<QEh$tGlZ(`e74JmEM|#VX$iy&?Yo}{_N^$8iNkW z;qOD$K*$>pOS<$Am-BW%wx@b=G3mMie49?jAGFZWQ7f>?)8RC^y(vkL!uf0xMj{f= zXVMECeu@7xvHY^ymyK9O17hy1k1Wk3n7(khPGd0PVR#Z9ZXlg4H%$8)D zT-mXvDyk}y=Eu*K6ef}|r>xR60d+$CVeNOX2y)7DO{xMtQW>n)ex@a=OB&khzx5fH z7Nr13OVioEgPS$)X^$AHve^AY*a+^AR(gA9{!)Nih(r%!s{Wd)s4(w6`n~jfQnbnE zt*Q-xo550iripNmGimjMKGkaC9M|l3uiLUz6WsZ~bWdfS4|(r&E_+WqVx{U-Wd<-V z`u7~gZ{45>RY8Eyl}@+ntFVFo$Zcg=xot%zyRlgy8^FxY6a%+Z9RzT9>RfqHTvr~^ zb_h5!l}|Cx%Zgo17D!` z;KFDc@J}g<#mL4aCy+JI-L`wQ`Gg^nV~M-NMzs(N51Ia7Gd?IJJTx*W@mx%1dQaKZ+{A(-xDcb`0uj%xq%*Rh+)deX= zce`X=Pr^hWe>6(;Kp6uI6DQXv(`#g8e6{cdv?Avb?Vj4zgPgkMFdSPVC~)3x%XMx} zO>A}Q3{RL!rx$Y@TCyla(_x$sdbL`N?SVRS%vcZ6Bt&#Vx~9xvncw>4a0MPa&k=_D zAP#HB&0xM>%R~S~&GZt7(#rroAsSt^EZi-fP>+WvXmy0vwcv=!z2&H)M)Vsf?xful z+9{-4K`)>MqY}#XsQIAzI&>rOf(9>h`;-MI5>z5-6!Ic7s!`byi;O9E{3%AN)M_*k z)zTns=oi!w-qPV}bYe8&!DLu-u^N%9QDu->vXc|wdg&U(Dw8DCe-6=`QD~i{#u9_8 zFWgm!$PCZBi%k4IgB<=Wl5mhd{j|eGyin1OI#i1?Hg-m~MouNQ6Yj*jMG+;SPW1kW z7fx5CScYaVfSu3o?rCI;J$_9*@DVP^k{CM1neZNRiKEWmjHUuTbjiz#sSdFk3j-CU zjK&x90lC!`6~AFaCPf&O9DrP45{!IwhB`7=sB%(O?=hdk(YIT-* zGLJ;o>os;qCf(sw^gPS7Yh@X331#`V@ zp;386s@z2j*IKPpgFX*(nSAe-?@#e8(#i5%`D1u|Yf@*e;(*%otw7ZtgWEsr{Mm>a zM{(Q;3;U21??>=ffv#X;-P~X(O)|L8%5RAji;zL*P}G(d_(ej?E^?sn=UJi9#px@X zad`)FayIh&dKg{1Arwa1`k3lw>1H{~x}Gsbno_=nxm@}l5NTwHn>?l6jynN^B>{YD z&=ed~Acw0&_k3jNFo_j3NHB?-%Znb8J(^S%6~>ouQ^|6L`(Z&(<06A&ECMl-Hu&+w z(K4tM0LOB=#1ZmaM=9gs%j~nNip_JEkYU+F@T59%|paaf%&SlM}3`3=r#in<!Jvq ztBIG&kTN%rQS^+scM4{@ zN_~yR6O?^&O)ITT7EI`AZ88H|#?;j*Sxp51Ro~ZFde__Uv0mYO$QSEA%m4AQR>UOA z=o#qump@6uu`&z(oz7uml8yziZltfTBDkw_sV#xs>6a4qmx#I=%w!#l0kX*cBXlez zb`)jjZCNSG2yBJ=@4(kbB$5HNh;jgElp1P*R=HV^P%-(EH~YE}uIsNn(P|@z_!D+3 zbV3XP6amD$5gKZT)-57gBD23`v8D|;2$ zIMCnUMc75OkwJ?K{{xB{qGvM|JA25?1ia^=V_^xcAhA$4WvRUg1~Wl!VG%Nwcb$7F zf%~_uQYFHz%2?jbW+9qNi8!y5zh9b_B)%+>h|jj=!b+)>X8LL4X`|^lI>0m{om_?D zNX_Pf5wk%qhbwf;(0P!j3bDydSlCEdS=i~XbmGyi*E~NCVKN1aG!X_$apb&sIeWo~ zsr)S(^}m8@-waj3G3CRT@{N;+1#l=-1=W&V6F5mOQm#|hn_FG6h$JL>*zaFfAN5B? z*b?dNV>XPefWed`6KZD!$e!DGB}srh6R8vvu_Jc;YT?8tofKdlo{AWy8k>?rlVqad zLDHrw$-y5qnV ztbUgJ_@r$|aEl)P*Io@#5;~84hL;jBa&d6HCR3Vmy>a)o+%DAn<)B^!?~85eP%?ko z_#$o-Ov#r3^`NlLoBhJRS0DxXRHd>i2!5U%>QQOAoPnL1SC_-2d9_a=%e{Gr_iHjJ z>2Lb*L_w`w$FjHWoA37fe5@$JXc&{mLvw#w0sQZFUeYmhIhnime?^c{0x>;W@*7{K zI1S~UJoX{vc5lK&3aiNv`I#mtyjqD&0?Hb4ET_@LZEU{2A>rhxVMnJ6ro|=sDkTex zY-~#`&%|^?W)XEol6`uH5Tm<{T?VdMRwsT}}d3PhcENKj6my$oP!J@OR0t5LM65DAX>~ zs#+*Qgaoc3g-A(X?X`9MG-dMWuaywtF)KZR4@_&5Dpo$NqN$uNygOkriZDJJqzi8& zGc%riWL_!459dz1GdsvkQGjQTSFK)<#*H0FBPr$qQ_gfQbS`XRETwesIhP!^R=PeH zjB21;7P6Exi$ph;i;-&}UneNx3XCkmE>I@r_sYm5H8B?^oNwxeZ_-7xl}v{QbH47Y zDlfo}XOaZoZX}dyEm^9N!aH7DmL$Ndge1jh=8t;_dk}K2p=Sse1iceF%S}a>%*BLD zSfF%S4U*Akj&KP!+MJ*#ZZ9y&aF;45nWg_6X`o~6E;W;u{~a}E!J!pZKrxPNiOiN> z0WX+rq!aic8c(#ga2wy5cM#zq0ik<74?yiatYM;$^=mu@3(KdY!b(PE&{ z*)Yw&or~jhC}yPl(|d5db_iK=Nwy68I5U$uI3!t_uX}%up!2?$*rWA1SQOE)xmEj> zmrpfq#-TA^D!}fuxZ76RaeTEEkTO&(EDOwV_xC&(tlfH>op9F$db;-^W3?1d3g_G0%wY{%iZ4z z<(G7F8mOCQS{ST5{5o8%$DdTUgjISQrGUm~%+DHLMvZ`C&uL9+XP*`E%KIpC<$3^D z6J6n;x@nf-yx0L(5zKVZVo+2Nehc$J>4t?D-(fm_y;eqYyI#B6dV+VPORbCIyy+Rm zDn1u8n(bft%R)A#R9dk}JA0R$q?EL)`eIKPsc z*Znl?BK7wLfO7bn31-w0!IAM1))eJbZYKND%U?Eo)J}gi6oJqH=YyGTY)*^5VW=T>6qON6TJJ$6Rm4rmpSeesJ~=N1EAdlpFekeL0!9 z#O1Sx(z2s7EJqZ_ux;Ic{|?eInV=en4WXQ~W}*?~$R^lHW6k@Pmxre_w2UbI@V!Ca zLoTE2Cl)<{RR$>YlPx4^W>T9W&Rc#>CZTiY6DCfGpcaAWa~Qh!N5W8|2`DI1E~b;C z)mUcA@yh0As!~You7sAw3`R4VuW4D>T3S+9l*-5zPnKiTK*aWvVBaXi8r!{Dt%c7! z;={5}e3EXVIiIpvxs7|3D)Q@_!653Crdt~u5|7rV-6_ItiIIyx?t-V(KuAQzOYP14 z+HTFKwZLROs-iitI?IisMd8x?*D%w>;cjBh>6~aPs%kOTz?o+k?kc5BBkIKG8IHnJ=GL?c=YH{31c|+;r^9Qp60Q zA>Jv@5x7)y`?2lx&tDHY7p0WlJhy@2Jhj$}9;-yT8T+zwuH3qMGDcDSz6pu4(xpaz zs-j0lLSFMdX?oY>Z$72iIJ+hs6;K>BU1T)l)?21d6jqv{0g?#|NZq*EY$KXSRgMhq z+m}9ro{O(FD#uZb4fZpxRvP{-M|M+6QysX;!_3_KqbKFUzV{&l2c@u&^_=;zUO?X5twhjo#t(4^j@@R z@3tC3_strr;v6>rsIol)M}vHW1C*B(+1ZU099~d-fL~@0%DaJ)j%c*DrD{op7pQ zSCY`>lu0Q;p+1>b%%70a&}Ge5*k;exUgqZI6isC+7FTD~DOOG|$>od>a=vXDY3cA+ zw|bnhtsH2OT1zL;H7?&392OlqM@DGKV)lqNs!C|n4O^(&Sh3(4kuW66IQ*t;(;1Vh zS(IvXGVZ38K|BZ^9f&k*JkwvH4SCYx-VVVdpv!=;onLYMe6`TrhoSdvN5WDX|<$nx@B z23zj2jYLI-?xC~q;Bx~e)p-&E*tuF|CR#&(t9h+gSp=BE;>`UqHIE5B9dKVxsU`r@ z0=1A(&!4RW##5oYxpI{2hEx}20 z4jB_TxO4T_l%-pdc7v;nr775;)5jfIZZbqL&PtJbC8|B6v3JFM#9&NkGlooD&c43~ zs3)o48%+&XO_pPHzWSz&k`68h`~F^9`c3YPg+yR7Pq%qwUj_@`)jz?hMkg(6pGq5% zRtQdg{Wpp6ZxYtr`A4GuQfCEPjCIU;khjY_+q=u2)}>kXY>Dkk6J;1L+SL+tD&=)4 z6u6`C9r+k&K8=v%yyjl3Dz0&&aqy~@gpEzsfT`4sVRU@Dj58~%vy<-Wkz@@7xO=OW zuZv63wrR>`dw5ZXa`0ktgd^j)adb%kS$J@;Cz`G&xfrfjS`Hbi?fnQD&+m1Y+7-}1 z^!(I4psV6Yoj7U?F*OeM-zAi`+3XK%VZXxUQq^@>ABMO< z0)l67yAxz2Y0@PDAEs!J!_<~x!J2RXGi30{+q(!LNb@lfnb zx|nZ8rl7pCMJCZ1SM1QPk%`dRn_+b5@VUbgM}kCC<(h-yQ_M%wx}4NwjBd+_`A0NR zdGo;+!=@d@&la*DN@?h&7^Idwvcw6NhK|h>EU3rQsJwG3L?yO|1abHQ>F76^JA6-k zs#ol0$?f##BGHU|8Q>>s)Dc`#khlF0E?QjHXq-9=73B0e( zV5xh2Vh;!0%l;(?KD^G%y(oiev&T>i=gU-#RgX-J<}?yvRJe%LTd{+k72;NRfMEz1 z4d6iaO}Z=TVo%s9QkvmaCeKFPyP_K3o3)A0$1FGn_ep=h8F{t0DB6X?4jSAQ7^$cS z5za;3yH=efe%K=kbcn!;%s#MME}-B}Q}J3Y22tIXH4!@E8se&}C=*Pk&4z94YEEO9 zHD2?n8yr|a+}|>lQ=@%V$9g?t-NR@(09JW~k$HvLFoQCE1II824{jIj3C(Yb3+Z?1 z5$Ws03K?VjmMyCuh1J40*9*IMq1`YmCb!-2lxW!R?KtJpT`q^BtbBD-QdH!rE6*4{ zUk7tKLCPU!6N?;;GKRvAvS*I+5Fb{Ea@_!li{co{Lm~_ot5lt^w`SpNWE4Zn%)Gsu zfbZA>&C$Vzopm`A`8zz}ceS!qy_&U6)sjpY`f=Ux5cf+@Zv5T_)yA4&Axg0Zp7?4| zA(z}mBN699;^bK1!l_z3r1TJEvOx79jy}my5;hyTlDrfPb^+U#Bij`<6hqI(2jQJc zs9?+N?(-Wg{?{TKS-6xW{;g!x5vW9X&zek^#7V6I`=v`I&`z7`g;Jgxd6g?58tsF^ z8AJ!D|B7H$&YdzWVEX%WQLDgAUeu0w;t5NRdgphp&JYV96nKuYzzj&#pbUf$CP zrk%3AIvhBsv(P8FZ*I|o>e(RSM%xoT-fPX^sS4skx#>TNq8d)b`>Y|Z7ABFq))n79 z@j02}o#$8-nfvi{QigneKXQ-rc?}bR1Ry?}> zH@E%teRzV_hdcT(%WI+9>3o&+R?neF=up#I71{{Pz19tTSy?~X$yScrw-}K?0;Ez_ z+s`oaO1m|nKF@vXZVbXI;*bjshe9zCT&iELi(4MAK+CP@I2B!+uR`f4;+0RJ{uc5@jOd%e=rALmk~Eri>!+HsL@zvpaAOo3@n zbFD;XW(n?JOW`rnT>^T!`P6eh9%)vGrEXuaBLBPu)K5YCOwqn0n!|)PtHy}_jRELG zxiPHSuw8ppo_yhW&mjY7kFIO^=IMe_-YK4no++&(9JYnqSl1LGza8{1-1< zB~lmERL%#~lChR0WKUlSgWG{RqyTY3=L6EiJnm@&y3x?+jZhr{)m7qdo9esi`)U)!2w2K-~PLtnp-W`6=&WKgV>(Q71eDQOG3Ppslz&F?E*($E5!F`%%QqH z&Rtg#ZbM?&rHn53NjLj6UT?x*;N}N%L0WfoN1fPR;ri_eA^3nk1D1~7R&e$Ce+Fci zP+FKPv%eFUnPJ3G4bA||r=Lylr1uQ~%A+)zi;wod!Q@%qIJ09Kfp7Eq>Po2_S@&q+TsXm{fvEp&|cmkX@!Kq_~_9zs3G7f)LXLxHPxa*IqNyZ4E` zy7OyRFOf@Q9S~E*2Ap$;y>Rf zUYniItR5?a4|QnRAHOa?UlS23(X|4b5PzI&_AX~)9cZlnV2A(uX5c09I+L4ptad1v zH%uDx<^SNnk2c`Pl*84pwc4X8CuprBRi;>e;EZC873Za9M;4h%_jz6W>3>j20_9O* z^ziCK`mSG>dwll|EwiRC^7BFvX@tg@;5Z<@;=nv{_d;PzlRkO>%sII;rS4l>TX23m ztTl~}Sccm!=<26c!8;*s!%VAVZsJU!F>YBx!m4op7g&{_EbOfR8>6Bd&ullq1TW^E zEzDVWF{%azt}{9CqkYBRz<+N#U2W~rOX{_ zg(xCJbF3KPtqk(~H(a%sY_tfJg=wcCPaUF-=Aj7m>2H8)@6WJop=Zc7ygITI64mgX z*Xo3j!8h5tVejfJ^(j3-vh4Ase@`i$SP7kpA4qeNf8zhKh0OnrrHJ__8!Icv|F_sM zv$Alo{O>LON2bxx9%=fI#s(8v3t8AG(Iq$z85&?bX+#R&kKAj}%fUs_4BtQ6_XlLd z5p_g<-NwWkz-f8b__;ymrVLj{a8VSlpFttF&}pMPe`vk1?6^SDXsMr&nhJg@$f|BL zz3%r3yc3*y+2&?-KDq#mr9goHSad-4_;&<1LkpgAg|ufaG9wSHQ~iFj{Bfr?lf$g^ z>UU$kdPDnTNc}ye<=SR@ehn$F6Z)54r>}v2Zjk?6@sHs>zn_h*4;-ak+}tF4_x zcx(_E;y$AY?-b@QA9UI91<}>P>hAn((4l;J zKkaqeO0drbe~flGdsw*0_WS>mdJmQO7?7Bk*8*{~gHS9Uw*!x355UM}^TQ$o3G$De zIe&o3#`;opBVHBx+y&lNIy~6MOGqQO64{Z_tRkuZ!GhiW?nT-a#tw0HK&RQIzhl(^ z12wt~rn~8-!wyF}lcZj@16O$oU3K<*iQUxP*`amd{y=aWP{@bM0p;Eli}(qq)*EYJ z>cLAksuytRfU$}BMNSoD^n%%m`t_R&{P70CBUm-T?JLg)!zL(lSGhGOO_D=Xhyj9f z+yTW0OWwIXZ66tGst%JU53PBCIpC)PPGi5)9a=Xew`;#^QBW45AT){eVUVe!T#ED6 z4Rzfw4s;O+)xKm0+D#Zi(l!%v{hwLjXlDn3iJ~G=WZ8U#Uo;xboC9V_4_>VVhy#Ed zy7~k}hFBnt_s<6&3j=8KO{A4Rg`HZm6dN)u$Au4({EC~H8`T#neBB5it6jb%Z^6xg z^(`pM9kvg+^#cqeis}QzJ99%>H7;+@lcCv4L*tj)JTc7`5kdHVkXB6Jdv*^{KM?aB zeiCHza7qP-*G)!`=o|KQYWUqsOYmQWs)bDqe=B!!Cn+5VpTi|}io&AebDePIClDM` z9VJ>hU#(wZzMlJu`q_8i2Y@1(-zew?BNss&4`+T4>vAU@P`kVi_$9kgHUUF_i^MtK=e?r|cW937v`~n+ifp*U?%?UVmnC?Wn zPE=JEXCPHibaWzZi{6y?6WKnj*~>Zhn*vS?_Cmc9L5otMyN%W)cG2jU-UQnrZDH7n zUZTdiF%M7CH0Bc-JE9x!Ra%Tld0-PttbGv({OTafYsM-1+ZZ1?`Va2ogw~e&kyUx@ z<{+}kq~O77f6V%74PNOW>Y?-!d||ZaN^D+6n+3;aXT*$4qj)7hshx+^rW5tb(>S2y zf!_7VCVol8oB<3#io*-_Q;QchB26ER^yK&IO4Rw~QG@BySR%1OyaV3--UIqbKrBBhA2y$iDOEz_m8e^Cqv;@>Ebi!8aICx!tbT^5 zF~=8FADnyNvH^7bKuYF4y`a>cl^eWC^Ig}63q09U_Z^W%>hM)5kYO3>HQDBP0Tx*X zvsYLr%2(L7Oz^S&1GZPb?e zljT z6VglrEPUa%I^CDQHx-k?ZfD7taRmJzK|16>VnLeR1VLJVU1IfC^v4Lbp%#q92&U9Ac`+E$E5C%H>{#Wy1Mf{{CpgcTOms6Ygi{i%`(Ao9C#K=dT{?IA>z|b`k&-mi z`*?W)`*R_C0;PXLK#CD zgZ2l5SjUOJV5frvi{i6}xf`=LhCZcU;#LfUzEZxqho>~N-iHp{UIBIK&c=<^K_Ui0 zEDy)EhD0cBI;-INyR||J8$WRxf5BpCR@~ zgZ0=%m{ZXI!*BEHOnty0j~W*xy~km-Y0Xd8LeKmW z`68@E{3O!>YtrHJ0pw+T!fBafeeivd^~m199Q!(a1RisvwWR~8&*8u68}*+c>@Xh2 zzREOU-dk~Xh;v4|PN+;0dmN}O+-aMW3X5g?Qw3iBXhWG@(cdBJh}!k9#Rp`#?2J32 zHz&TMsE2r~U|fM-J4-k$*&Mm=^EiX%3|jP{uRMX*Ks~4X%|qf}p@ME8UG-bMR3iWJ z_3*L?zTUI*0w<2V&?ZLupsn%7b71&N&OORbx79SxGx3jHOvf&W@Zn;<{$haEO=3 zO@QZ+#_cz)*kS}uR}1x7*4FBapSuxpykN51AVjRHwxCl|*_m4GDa#@mJ!J=;#xwEX zr-@Rk2_H7#&sk#y&Md7DSvFYeQucE$u6GRXzz1gHe2_y{qBO5L{5g?3tNq7auRK9m zzC0y*wyPF%LaSKC^^O*F(?paVtUy*JMrT_Kr3|ygF#KVDm!ja1r&_4khwfd?nPyX4 zj0)}$&7^f4k_9Waa+8dSsvX ziYvoa)113H)_iY$R-xUw2SG!34lXk_5=8!<%5Spb4>v~JwRREs;Z^mG_Yrp+G5?|{ zsC?U8TNd&mXO<6|B9Ecl82Ju*jby9qyQLC2Y=cf)plXAJtlm0+&RiIaQPWwtF#3n% z+0Y;V?pPuCY~g6z`y(<{5^peZA;k+6r386inufpKAG8LY<`4yjXCz!StC4ol;Ko+X zG3Vo!yaYr^+%9g89|XTzHq5tm*7qVCM+w^9|NLd+I@*VOKiC( z)aWwNoX)Ylnt3wJ4ui-*(&Ba0Q1>KU-!v=K>#|!1+o(h3YpqeKh^(V`MdkCns`=TH z{FIe*E~TU3jX3={i3GG7x#5R=sEET>_xFs$7A)RieB^B2z+16BL+{$x zCT+I8&`?f%Q=fbm%QFy`qs$!_`^k`O-h~~Wc^q$9%*sH;brYK<=5*aC9G*X_6{dl; zXj`4Sty|Brag5JK;1?NVG}K=gme%L=JnuD>@P>N3H|&Y7;ouZakU2bJocge|+rTQI zXO49~+!FI%G62=GCYJ5{K}HB3xIeI6?M#@BnA^_4uHo*BMKh-`&aB0)!EZ>pQk8iV zXT8qpnzOij`kAb;}Wt_UrEggU{=Hj))Y${Y|uN zYAxP?$*l+uI?E=3WIi zqKkJnomc32KisE@8R6nO7N4x>SIF_(VTr>uB34{KWe;eE&(6CKd&vmqR;kw^g=S5* zPq6SGgVa0JvqAz6X|8clcn*RYO2tOee$NHj-)OVfB1U`4tJpcwfI8e@?y&uwuwFi! zoo@61h|%3{lmOGX!R+W>r_p0!6b%sXqf;v4+}fyKW{2b|YS79hsfN@vx}?R?Y5-yF&-iat9lNUN z(vlkmdt+e_8$VE5>tz#~ZcYC$`MXS=i9bxr1!G^rC%HyL54g-zs=?S7>VIA?on16y zz{eExnCYSfD2-Iv!mAl}5En$kZbXu{56*>+!~R?B9e`|&ZMA07iyahhXPjrsfS@?H zI;uD6>l|L*;BtbLso5M4$40|MWPk*Zg5_fyTK3i&$HwH6Q^H_fpnu0in)2NRT%2d^ znT0EPw+APHy8A%lo}~Lo%%{3>D;qU{I{O(XOX#%qoP=rKkryXxYJG%+$@bddhDH1s z4+Z!BO&9)=A#!TZ@esrH zPNjC$-btnQ%G$N^t$*)SkSAUQUK72C8{Xp1=SOx&o7~`xTShU?H%XA6Oneb&Md0s( z>Shpk{lXA+jUq5~QdUSI#%?9DgIiKZ{ZtU_VR!b+VkJ_wW89vwaq2nmt5NRa?`pe% z@kW4UdzRjl9@$NP;)Rh71K|vIBQpK7n zfVFdBl$bo;H;|uAJ~CpIrJ*%^d3YDRcKjDFn~ctM=i`RB4g{inlN`%&TQ%O^5IJY( zsJgY^Qw*}J<9L1VfKc&63!{tbrlSenL~8i&QZUiUqf4$;S!OuavI?lBVZdFZ;R;4#O`9SdLK*#3kQk#q6aV4@ge#Q$*B3gUNf`w+wgJV2L$eN|gb^|BxaYMDJ>0G5#yO&12j_ zQ2&Xa=GG}QuUK1e6RK2z!HnW2p)N+BG1eD@Ayu%>gx7+E6DGD4Df5W9{&~14NjdT* z&Q4F7I>U#3ypspwQKbEO=Gp5a-KoYYN?aq#C6#M2Zp>A4*tjO^c`(>Yaq2vTVJQhM zr)58#g(zHXr>~|jBCQ@-%zaAi_OX04%K?BgH<>fT3>0LZ8rp-ij4S6p^x$3PhafCF z6o~K!kMf{tWVN>{Of^gneIDgzD27o{$iE?Kuc`^bi5QE)&AAcRo`@fQYh`>&ekb9b z65hqf;>BL6Ab}GURZ=&CJR}-`gl=2Kp7;#zOm2z>9ZR31>b|xbZfh^rrezRAq?Ct0 zhJDeP0jgPw7`_>9)_VPO5V`xodSboZvCmg6$2AM=-GdW)K5v)_4wINHCa(@a z_-ZD_E$oiNJ#{t@>haX|+gp#xV0Oy|Tz$=#gVPUTL;)4N5y3oB8WZoN==_aA!x(zt zAwyCnNi6&=AugU#ouRIFP>Wj!b0SZd5*pjMS&M6zD&`z?;_}#8^DW-p?pmt!lt=*L z81*_Zn2&>wX4wc*|Bf2`^oJs@JKK~(75CIW~RUaJ8=$xen?pb zp<33vN~v*}$5#Mis~UyxKAtk>9)IKFq%3(e+Ye$I+`9OR@x7v5j(wW`7(chUcU8~r zppgx3h;%hKH=u!CCf%U~2XSLnD~DG!@O@_0m@f*xGNly#sr4$xy3CvU%aX zb*f>hgcDLOY7pty39mm=rE_G&)y`j>q+dlpH@39uoyF?OBQmcx;$Ea^532A->S|yU z=ip=&dJqzug|kFEWYMHl`o7CXrpB}gj`sG-Z^ATVrFU2K9_@4;NLRuoR+D zNM(s}Fu}6W0vS>5G%$TENScU&8zh4{&XOFj8Gn->u7y-0;WkVKiNfC_CRF{t^;cdP zhq#wa{rS3}`%m0U;l-l5Dc~G|hOIWy3_MwW7`Yr_zS?gNtuB^Xst1-WlgFATT#J}W zbz5zyX(EJ!PWgvkPg=0nEifz!w7||AXipCK`M>RiRLW+3J(ai77jgcu;Ubzls zaw8mWzt+%qWec4hJ%&#R1_&Cw2EFS~Ob=g8huBclGbd9i!^4DF`JKNTd7Y%S3SS? zz3X?_RGSnZ3RrU66#K}QZ?1ESvpd~EiVXM-IKBjl^e^~XefPuN^hMteVG|ry#Kr-0 z&+ZQ8+E`ZE^wVA7p522&3=}~@a5WUuyLj05Dj|8^T}PWO6Pv52mjK9o<(eg4FcT7b zArvES#|MLst}b&EQS}@zWu-8!l^~~AKzx!6HrDn1i_41$ElThU&x*7|@it5e7!?tg+Pd&{||pbDM^Au06S zptI-eCl87dv2WuTBI^(LLD?A6P0=bJTS;niD#|lVFwMo?IkHP$ufcr1m*Da)79jYY zi1WLFfhox9HMyt#G_5oR$JEHxu-L_ADj6LeE(!`?0A8QqRZ}kAfQOl_TE_8bEioQ-Aq!jZdkvu&Z5{{c2{Z^Vxe$&`Z9VCaPDQ^^O%=3_a7WGzcOd_X>5$e`+u zX3c;V4Td`<3l;MpdDN6M%BCp1QDB}O!F>;h{!YYnA@n!y_s*E}VkVZ|EuIr*Y+5+0 zz7ZzT$Q=XZEd38Jby+{pygWhfuXwP28#$TloHIu}X5J7G(~Pv@cA<^>9)<^9=>xUqkkkL>flmzce4}9Mo^6SESk^BaD_Orr|Ld=5@&ftG!aQz)q z0L-OGpvbGkQ9R%5sxwG$m)t5s=(l-ta2V*tjzJh|ehHDvtGw9qixI^{ct}ACg2!vH zvv*h&^Q;R9CYL^jo#QVRahy?bmx(29H|h@hZX4@AR;LAJr_)N%<1HN3Rx{|RT=!<$ zjkz6xBBpZ28_&F9qRY_!1(kwBU}a9V}| zt3sC$ha;INjoG<;U8#Ycz^B1Hc=|m=#d=561 z@2XcZJ5JAf5~q4QqxE!Pn0z1`g$Io$}eB;g!j*K-~nMQ9HL>Jm0=_Ry^6h5v|Fs;g^Sa+RrABib%;+ zYU6xOtcvz6IWr3EDv8=J+NS$Ah}j1TKHG9Wo~r4p!kp$00`V(7f~PA9{`1h&P|rj( zZr1oPE!Rla7F`x~lX;oc8_Lm>7{ayLfC+k*%5_Yhqrw%I=ZC)xI^Ng2xA(ZNw#658 zpAb#a3xQIXUK;V8&^lZMxZ&pSYhN>0Z+@jl{FOnTGql&)c6_>v=PiKW=Mfb#>vMUg zLqZ0Sd!}-7sLAf73=$>*6imsKIhYD&528nzV-n(=e{;4RZ2)Ja`8~Dwqi_$o+i9RN z-mOa4T57N4KA=)_G=C3O;0_%SjxnFKw4fn=aP1G%FzP07kY1t7bh*$^ZeW5FRf_Yx zPABOi^7g?_fyeclbDG6D#3y0;HCO#?ODHEeEEzCnwbda}DdV)W3iGoGfiJ-5Epc+F zu5&TRa%yq=_;j6O2exqN{iw5Cwmn`PI5$S@v9O)d+c2oE9kw&Jeb+&PVeGM*CR<@W zdpG6hFngX6JpunA%_soew%mt(YERA&&}3%EMVap|@nn+vw{mt{QmtIq13bi$A5aek0|C%J~X;*va)FqUZ4N8f(IV zsLT+N_20=-)uEs>*o7Brws~(MkGkAox`GR^#(1}*ZwL{A(n<>eb<-3T?c$<%`*2l2 zUi^#;>hF56tu_PAOmulQfJARQlnJeX^A;L0q`qLv*m5dQ&R|tk0!V^^f%ge{a zCRd|rQKFPdRuy|2+?=)fr~9-E_rh<;2b!FuCr3 zDfsjTfroo@r4=}ZP=+&rPB`svlm83*0e3(fN@<21g64m2Qy7ymb~eXC1n=0aJ!5)E z1|n`5aSA`r9Rh3u1VJ`g|B)YGUR(=`)CaVBS8~wj4M{wbYF$dn3RJxmYF@$zPCoRV zRBBrDRJC-JAb0?bl-e-BPxGFpj6+S#@u9zy?%jvrKBk}7+%*cl8oj@G^qVIF?{`d+)tv# z6IXkJoBWCQ=$`3zbn5!@Fqk?S^-g22_~q{28A@!2i@M1j*P;CT_gpiQl==_gAhV0% z>`SXds_r?;z$*2g|+uwqoaL9;m zvVUSBep>uQQ@ynHo^THr^56;}@cJ6*)*q+a@l6SA#cO~g!r1YEc={8m#F{fs_gzid z0_aw4N}(TVkr8j}?{yr(ond?eoFcJbJ3ovF{?V!D7_{Tj8Ub@iIr)^zb_k0 z{fcN|+=F=fG7B70$j0A&YUXYU`yQqh=9?=sQ+!3POrA)UNHGie6UbkpauSbel+LJJ zqBxr1AFJR$OONBduv@6}gK5~QJ{tOthF*2(>+3!L0}g8xIXfG?|8GyCrR7cz)f4M< z<-e=`RBMqv$&0s~WWQQ!!kHmt9{G0vFg#hed8PJOuA;=RsKjM=B4TnXlM&cQw;8AM z0S}pf&mpQ5&Sq8io=3P=wi6^IYN>2YFZ>+jRuWTsQMxvAYQVb%W4g7W$;Wz_i8Dgl z*jQe|;Qn#>2~C0U$AtxAsXjc7Q^x+aMWVfdtVP0XX2C6X-tM)-sy<_W!FeK2k54Pi z6n#EP+!V4~V1~XGp1vNMn3*a{gc*{C9Q>|pWU6e>E8It)=ZXw0-vIwEOW6L^XZv>> z8!?Ck8?ukR?H8~xpbqA+TykhR1zlVOA{WI_Ha_$YMksk$)MWh>we?*7(YwTh_Y_z2 zh&HwrUSd7CX7yc0{9_?2a2vM1iZrq!16f>kU8zouGO~4Bi5hMPRK=C-9+rR23z^VH zg>IpPqqw3XsH7CDp(1wEx^KtN-bitka|CG2ACs5)?Mqs8WVc)%pKg{E z^l_%1Pjy@ig~iyyJ6q6q;A-e^m%bWh=a$2o+yQ|0utFnt``++GCLb|d@9}ssGgGt9 zy#33>!@zdGRVo8nx`;Koy`gdJTncJF$}8+^HbZh`KFU@z9)R`!e>E7qa&W#X57 zsUC;969|>`39Np$iy%pH1ERqQ7YN*OuEFbi8en^Ffm0hby$czO7eH= zyB*)e?no9f&8f+^w--+*n?_S1VcjzB3Gh@E+Zrip`Rv=wg=@ieD5u~d+c;LKYb`tZ zdzUR>eGuKGe*>sW=LYFy#+S*4*6cEj*f~U8p)hDf>x_ng=O_aDF2Y97&cebk8~6>B6xE136MkziZP6`I+{uF21tl}2O`k@o^+JoJ%9gKkB&Pe60h*FTWlE*Ux& z`C#S@?}V%)dJKmnxrIeyXlXrL#aRLFDzI9SFxvs~aI|NTMVeyecg2Z%0c0iPTcLCg z5)9Lx#t-A_T1~H7F1L6TU)RmjjhI?f%2-;gSG?Eb#In-}mWMZfKIgAWiCg7n%P^a= z^;lDBP1=8R?>0+9bj$5AWkdxS$I~v&B|63;14%`{g+7Cy^L*gmj{{f8=4nbQe>eqfv)@5$u7P89im6Bx4#wZh&ye-NJ{H2wM57UNKwEO?KT6~q|9NN!l4kQ8`Lnb zgt~DWI%hGV?2wtlYf5T-Qu~I!myQ>{)gKIvdzz?e{LiAA$GHv}nOes^E5|n07d#<~ zx>MMTl$4LhZYX(ATC7WkGu)6JFA+*q=j|ILRa!p90xM&m7p0zZd-n^3+cVhbCz*mN z6Ps7e=o-Y{Q=~avmOA3l&MWLUwq`4_I2wV}9rV@@PWNCG6@k)Sx`X)KLN`VC)YLU1eQ|1B631t&n^6>IS z*R3mbJc~xGI!)5NN$H{jK1qd@O1!dS6DiGJhIf7<26>S2fNsAD14z4bIBz^hWF$w# zom(VW-|b58t_bm6Y&Gh1EW*KB>*{oki}?A8zf^ zgyrmnjHOZk!^8cc9Sxd@c3iTXy*0gsO^cr^{kj0H6aD2X3c8bPOLGH_^EK5R=iNxM=lBzQ z3%X(S=yIGRJKoTB5f#hAkfq?&aq0MCmOJ~kQaVLgJo|4vAU?_60Sii9e5t4*97pZ6 zZfW0|maD6n)x+WOnroxNf;*^Pvpv&q#_-RIA9{EEkN&?d zQNdru?G@qkv1AA`u-kJ=6}ZwQd7ivFg4&+;ayHMpYv2y7#_B_fV-Tf0A-030mb7->|1hlxOUr-X!N_BNdR zE>J&BaxkAbWh8#j-pJSpW8XeS|M_M%HWodJ3R9?GOK#kS`NRiVjbtvZ){$CkH?4cu?M&euR7S15np=bPKX)<_2NS)KFiN(P z?&M;?jF9$?Mg%E>6dFy<>DsUl`M`7TO+eC>>nt9Of(}?tN8oobhC1F;OSl|+6?}X! zO&5EHJuETaRBSNHFSPv4JyW5g#%!T4NTqa|)T9X}#KtQMQ83@FH?I(>5Jq~t z4?9g*Dyv#DhmR3lBlw7Zi{6R8$y^pJ6|@VU4`vRoZz3*+=61A`;idNWSRq=A-*&Bh zv;O$yV*}$ugK=mxwSOw+d$#9V@Mo}GvZf$aLGxM7ILUu_B5d!8*ulPV-E6Xc;FM2P z#_o7$m!{D%U?Q<{Agx@hh~>ypeRvA8I)4@R__$eMZ?!>)oO-wkSvw{(^K4X+vN_(6 z1V!56UjP&y>O;XjD3at5Kl*1vYd^FG&^+t(N8>AJ5PN|E`iMgv06Xa~*$6d{N!)Gh zk$TijLd0pG<`0Uh!Q@$8Sq5FZ_!hLE%SByedv`;sWZ`mo7qqRR2KI3=TGj%~@*q1x zlN8a_?wxZkB;c~d_t00wZTIyLReRNz(RjV7Qz)EMr{wX;hMKxfkVaPHcyeaV<5Ux|YKi}QXf`XnIkToqA4uSA8J983Si zU`oY$zQSdV&{Ob9xi{aoH)kv#>r>oBOwwK5Gl5a7s#JcE+`zCTJ3LaRWU zrRbpGrlf?@BS@QIOtGZj-YSw3AUYmY}B^hSuoH-cPeWP!ASb7?Plk_H~WYsAx&H zk>nbsdRD(Y_{y%+g>1ayg!I@wXG#|h{Ulb>F{WO4Y*SgYvE*Zvj(GCz>_DR^^g0p8 ztBjS0{%x;fJxNnue)( zL8)Z3(o9@5ufd>3)hHc}J+D=BEVSeLoX4IUgt@hwGn^pqQsR_4gExUaqRE^`g3ch` z2Mm;t(;63$4Q9$&UaJb1Bu48}Pd2R?Zc~q}pvIAKI$tWyex=m+kTg{UjS6rZTo+#p zhhi+0r_gv6wn$hLUZ_diY!phHXrjINqFe4|kH5RQ;bQI*bY%TGNAm<{? zN+n-b)S+L7$=VRBLew&E^?i?e#LF||W8scOU&HTtB?ZchM^)SuD=7Jm9!Rb23-;5} zRz7D94=P-V=1!3tC_4rcikE2c;kJ73e#MSo^OsvB%*hS*@UjI zqOdpX=S#36a)Vd$OJ0bAnM^jk>s~dBw(Z31(T`fQVlL9!R8fk_vs7OQk1Bq9VC2n64G%R3 zjkg5d2Evh%nbJ>>QfsJFiKhz_&VbWt6*A8T;r}>c)CWD4!!DMIrw<%s^u2A*JQ0`m z`Zd8z9C3X>HVdreMAv&@F2!N(T!ea%U&u9-Q`aD#Fgu0bubl3CPgqZM#zSh6C4h`G z#=S{}72-Cau$Vo0w%8F}b0^8k`_qaT2I6fb=h1JF&o}1H?6ZKo;!{nmf)FDPNTL&I z2R2vv(BH^4v%j_trpB6!iitTH_m|qnqfVI!SI(noO;UW=%l?&-IY`{Hw|8fhpk!3r z7DJIh!L<;B&O88Agy{`*gv~W?W$sYXbF2-?pFbR<2zfLk$TYk97ghtaf)W%Ru65)^ z&F$sFC;~qwRG#}GC{PI%u6CB#c$q!-*5|s!E49~up&Wkf-~>53X`!~BP6bXp z!-^=_IY^RIHMVgWEE)nP1_H{y4SZi+EyaR@(5Bt0;`XS%4ASa?O2C*C$RUlJ!MwEn zMFn^D{X9r9oY3LVcKc1ts`v6->qm#p+}t_LWE*dG)9vz!_;4y%WFmWIs{|G^29Q6yO}%vMX{2U4kGPg zSiwahkdFb%0>ezHH)#DT15H97zOHeuqFgjkI~}9;hgKB3BQhj46iS-0dm}?biQ1kv zv&Y1=$Fu$l`H6QsIp3z@O+TAV=>KK3a&0E7aY}B+BknGondVw&>f6`Fqy`_{&3@-4 zK?QQ>42!y8a#0-Ep9L@?S0vf{s2)e(vsRhYqiN3EO{1OCRUap%U{m4T#AFuIYJnAJ zU{$94XpMWx{uw^j*bHgB;-pQp!mE%^_VV~bVx1u7q|z|c!djI0#k`7<+w z7HJnWjG?&z$l~;p>*eldht2%=hJUoWHPv=epN;!kW94xMmYwwH8 z3=m$XDC8uu!^|Lw4TPL@Zlf|;bA>F=uPo!@979#dO_FTG4c0RYiTiixLqGUN#(oqXd~j(HPl(SZC<~|t@8qa zR5U#?@?lwe5=AWo$Bv8m8jzz+dRLel#^JrjDn0eh_AxysMRvxe?LdW1ISF3wF&o= z5mOBmP)(GWfe!y4^Qj#7mJ6xY`Ct(3@)D|!9Oiw6On4Hmen9q)rbn(l*v{22DOY`K zQ@(#<{#vg)19$hBY1 zWauU7frvs^qT;zj=f40PC4I0Cod>UY^dU(;l*#T%;D6sgjK9EcZ`!K3iiJR;;2psX zzuq%>CG`i&Sj{MR=1C_0@|oj!*HZ6vox)fNu3b4bfTudXbQl<)dGG2BIuUpvxaXza1S!Zw?%$Va*1th0yD z6A~U=S(EHEh3~}K{OIQxe2r=ma4ez@d+yZG_=@8Y)+^Y1=BqjsHkUGwm%l6EC#wc)gI z05zt&{8x`2K1y9#Xzfi(>yQdMG%3&dQ8&5E1&wQFqmNf^BidP`>;p9KLSLKzY61WJ zHx}@JLRM^yY;=-F)+Uao_-t&<|Bw1Ntf%5a%A>>q8FaqXcnoZzCDg#0akP58 z>fz7$Y>hJw3hworrW3%z!oQS?pu_lc(wDLX{sG0%2W3M-TA@DkB@Xf>G}7 z8#N>M0ymK-@`9oz>@w|SSb&qg#>b-wedJR8oRX&~_=q3%IE}ouF0C?WmpUfS)Rk{> z6#WLHj3bbb78l$~F3wulI8J_^j}{M_RX5K=469Kr{C5a=@G#E%uV8xeTgJEsa|Ws` z!hPttkNOAAt%ABAzz66u1AX>j1|N&1F2D80JaAm?nbOPH#$?m&55@5X3&p&MY*}pN z=dqr9U_x!#9)#$#r^uM+cg=lA4A>bxj>*Mp8u>sYlS1y>9}|I5R0Q|5m_@;|WJeZv z*i`lDBX5ESFcU@Q=6<}uV=-rWp4Y_&6ILR9R3S5riXqAPkAH&BGE8KzttbsB>gF`o zW5JA5v)JlV9n}vKs?X359>?bM7JD`nQYr4Ke$8(*pg&%5+J?}ou&0Kr`9|`JFA>;e zoXnLXuyQ}HKYrx%PHCPIl*qb^f3)8i?ZYnyn#dR#>jF!U;_l2|IH>%KC?%@9^mq+< zlQ8qOX2}YY{*@+vjmKO5cJ*Qp2C~j29Y2=;tuWA7fm}go3)33OpDi&c~__>}+H5K9rsHX1>y7!@~7Kl)QS2I`LB1(z&rz(C?^j@Cq zWM5vjRiIU>Rf~i2UDjQ&ab#{k<>u#&y<50v3U*@L4ga&WT3i?1r=+*oN5&hexd??U z_Nab=xE+N?yw+&(4aPoTA2238_DKC{O;deQ=e@?E_ug=hv`VUxWL0*~xLVN|Y&ivf zjmZGb1l-BQt1MGItFKV;iZ+R&QQQ`g6_CYDwUHAyNen9$l9d@`JlM zjw0j(RedB{HC{66`K?VV%F`Z1%bd&>*+<`x{!oHuEJlg0&c#GKXVr%*6Qwnv&C+A) zaXGpus^m3q9*@|ce;O-XX|M6zXyAf7?eNN`0_0p1)rcLB=u?G115OHqE+==mr{ zI0$z8hv#1&X%)lDf`CMxeMn2z5lbv3$|Bn~Es`Zlz)@9CMJ=)mSdeXf$PV6h&skPH zhTUp7Tzd^6SdQ1vLx3Mb*mkgK7u6#+O5G#>H`pqr$MzI~Vw3YU4=06gRx4$lIkqK3 zd5fo+)&W4gA@M2QG~01Dy#lWgfx5lNH3g=YnpH?F9EYNyc~?D2yhv~D3UMZ(D){7k zr-VqOhF4I3Ms%7x7?(=%5q72I`e6jf}D0gPzM)ZS%pZgF6EU_whgqZ@D?g z`n|Qmg0{2R`MxwYfvQyN-^bBWU1}fdU>A6zT3_96+4DB*=0KOs)MluBJ&qw9I0s$0 zVx=5TC=pTGF7CXc?yI7x>vuwfW3I@uSmoYO z_%3K><3rRRDMe>$`{ysTvf`X-k7M?npV@7C4Z|NBWaJR$DGgTAn2ui}X3*)8+E$%) zF&fz;2^)N(r(p1*6?IwhRaNn#s^Bzxc1)di+A$LKJpR1tBE$sgd@OAKQ_J0ijD@Ew{Q?0>IfgE~)dOvd)=o0xNN^f7IBqu>?I*`2+>2UIHMu*exa z>+w><0zHfQ45u7Hr@F+teDa^Jv#{G8L(uu~(0*U4D;UiF%q zyV`)s7*kYFjt6OS;wFchHWBYC&K% z5u%m4pigUa)ZDZCguL3B;#?Prq3>;jj#R-9n6QT0r>1_nOtKcmK2OvoOq*kxQB>4Bv zlU6i$soA{$1OP7WW`qu4bVyo9jDk|sGb~PA`{J)rZlUHFVFq^_8ccv3TJ%P6C52R$ z3>=1B_jgLgu$cEdhRQo8gbwyNkUl8~BEy($-*05dF#0GWj36$6+bb=(t-sNTZ-Ws#|E=`vw6qKO}uGr$SJ$5iDpu)&xmCN%1yc85tG^DY4ni<*O`?!9*@#K+8H4y`vf6Yj+9o@C zI>f-#1cd3#aHDot*1C>{$gAU{gZOh~!^qSujXhel=@hp1>Xg8M{d5``guCOY zM``!zw!F(>Qh(1G|GZ2z@44QPHzs0Q(#*qEEw4cN)&?w$VKV5&1i+qDnP<*mI+*q_ z0kFntm3FK9GelZyzzVjI0W5zZQ>3IwmW#BuSk&Yhrj#TYt0Mtx=r%SQgB;f|yWg zI;?Zn`$7dd4w%`V9c`b4;#JKTN0j&h2WjQY+QaN)(_X$AC^{~ll)rFqhW#{Vt3sjF zWA)y=G_T(v2GGDE@B77Xx=qCU<2YiDlAUNVJd4sQ%i@etW1m>~O-PHQPD>O(hp4WS zI6&&{tGPX!?{-Q*l3~(`v(w@mxzkgp*ofb5ZK#By6R9w7!1d?up2pKm&AIQ+DEp}n z{>$F0DoI->)hFp%NkaV#k7`hN<(7=~YGEDDysV@R*VSOKE>+r#THcX@azH=tp&h~# z=*a$siagO~&g26fbnopc;PKk(@qzu4@Pp-@;xzyDcsfh4OKn^qwJv#p+L$3+ZQR~k z@6kBwv%t!=YC!(sqh{ehx<6tAM7#|1|ACHxqevPW;5Vz3Zpqv zfE|~!BG%hvYmVHi2Gdneu4KRQtSi`9nB)C4=H!aa_>~hjG#b~3bzaK5!&|H*bWooxw@4&>h_2Y(-q1qWj-J-IUOYRU zQwXmZb0m^l=s`mD>%mTAn%ZgxU;RPPZ_ll#j0>^*-^n>&pqDPxLmUCFF$_@8b+841XQC~*z z{fq9ZbOg%>pM;p-0dZM?4(m5+0@O1gJVXWw3OzBrMLocTsTM1OuD=+wvEUOjEC98n z=dTn2>LLtSC?7X7_=b4h;O6WIe=1_aBLB>F5bAP&9x~#oh>#^~$h}?ZX7=@2h9x@(^94Z*o_^q}TJx(Z1>-Px(eq4_j?ewPU@-)gEe2 zwo<6O!JUh61qI?JB>M9ba)li1G)6Rrs*>1$Xnt!sjrkrI`w!FlT<4-g&^>s0C0W|c zgp6yOCuiLL;tE87?*s)DBlZ;m2p{B@kr6RD`o|H-xl(`Euxb&;?dX#dPRg=^#Wvl> zm5EH2^nmY#`lW0dkivf*L9s1bm?({;17>@>$Yh%U3L3Z!4x|#*6ti+^Ry`L5TD!L}khIjWcbG2Zna(8i24%S?CO-^%2+b*_G z-{xDk9j{9O5vPj5@S4+PM~$Q^Qa3nx8WlBW{(VyYcJp8HfL*EL#4Msb8Y)4pH^%pPl8#VKN#H1MH~(}+kzK%7NekO0$S|Y=mek6^Dbq-&6YaI z{9Zr#suw<)GHfT^A#ulD&fv^NAU$F`8Fbc?nJRI~T^fg3t9`&rS9ow|NDLRkcJYe* z$ly_Q`%jQ*2s6 z@K%t6-gZMQF_eRz^H3jf!#fro^JI>$1Qi;#FMrRRWml&?V0k)ozs74vuy+ct`L}k$ zmCtTwX+)UhTARTinNRkWC^!6yR2u^`-0*wXF`W9Hp%Q>rr|wyQw-cF|#Oaj)`$HrS z7_lNArL(dhaxcH>G)-S3@|-R@|H4b9uX^19pxRDQ!Rk2i;AUA3!fX;*>tLPatKcFA z80$?KzF|(g^w`t-KpT7XBj+MhVFebg6S`{?8LzGWVMx6b-zyNN(f^5=VKUr5D{7#ifxK0Ph+I|kN0=jk&M>YhNq(-3sH94!*N~0}T&w^&H{X1pP z{6<_H@wX*(cR z;SKe>n3%0Aa(G3?(jdZ6^gn{I5r3;GzXjnp_Y#dHl%^`-;$ZL;(?(Ly5v9{v5RZ9j z$KAnhYY+APzQBPu&UB}q8Uf=|t77^k8oJ_vJh{GAC1F~$b85wTXnzJB;!vcGMSEhxtf5x!ulzw(^neJjwU5Q?V z_F7(ex%#-G5Ag{(p5*Mzq}u;WVz;`!ArrzPQvD!_P-@%#%7#~}47tljD0;Ici{FXG zb4wqEy_XiWZ|?X7Xz&-31V4)9@a@vA2NsGLNiLsW#!r@+treah{-}tKF=Ci{AF0T- z%o*$OCB>*WS2h_>(hF~LtOz%RIGBx{F0V8)VrS8$D40l8Sc^3Yuw?Vc6n+17g1cP# zQCKjBe<;qP>cg!vi55-$oZXE7!<|c6`$5&+)G&qq9rA<|1hvyf{ zoL=S<9x58)X!VIvL5&-OiBUA>+>1_*I~3FYaldl7GbmL|L(H$89rVt%bp)A$GG7uK z6LEbS!1J?nJw|`{i-G4iPwwiNwk|L8mD)NgCQWE3SOkrE1$iToG#kz~z$tOlpHlbM zeSGKE5A_Ydl`^$eFOeTu9G#!NXf#qi<_{(tMd(8AwN(#FY;I3Vw-g1_iV8Z^t?ueQ z8eIoUrA4oQ|LJQzpU~#_=YjXebXVu#Y{r7kz~SbBDcdfnB5QK=kZ5XBzkgD1b>mC* z%s`mx3k75d{91H!b)w*!KZ(cr3XS*Z>_KK_cIOVpFH57FG|^W3>+&zaZtvygj0l?W(TV5);-6V?A=S32vgeQarQS*PE2 z*kf?I$axL}i##u&Wu6VmcvdOG;}^usYK5P_fbX~9wjOqE)?PAL`k9?Uk~?twSuZ;~ zHW#)S%!>}gOj?x(O6ro(BLr=G`}K(LH+H82Lx0=vM3qW*kAZtej!^g`V}n}II755T z`+>Vy*cZQ7-17JQ!6})5TJZ>Tp|ae_Z@6F5zmV5UX#a3$09$;a=>G1D>|69znXukd z`KQoVm+#Wo7;ZV5Je3?_+-Re>HHn`}b164m9I(S*442vA)eq&!bkVkyyVt*zZSBUB zZ((--?#5u)O+1X;^hUJIV)f2DiaNun1oZjxthuG2E0#G*@8`X7v)bBr%RxTeSUnK@(IwsFR`ZJx2t*tTu`#V>s6)ecOS_f#iT?K>>4=3+VDWDcL1ybJL{|HJCN9f7y4yc367I zKH+R?AC$gQ3jd7XP6A21QLY)DlK(v?H#d`<2KJQoKq%&A?sDAh;ic zD>Syf415TR&i@j411n)~DtOX}uGz`2A`4OuMyx~jdtK;E;V@Xz6 zGE{Mfo83B>FxPB>NAwl=fII7>_m+IpP41=iu>GeS>T`dtc?g|zgc1q5wjOIKS@#a?J6m_@Gxfy*k=C zyjx`{08-vjR{jpez~WlrswQz&&VAh%%dXPAfe^{Ag5M5}VOP%QM9Z+H41Wzdlu>|*v+Exx zk;}@ZX46I-*OX#RO=3(D->{-Va$9;)l}T9?jWefIt9p56(eK*Cj3PYKbEI%oNBk@% z?Q1%dvSE!gYMLbdGOFZq<1$j3qPoT_=rY5OL!w#tKduA)h`4Wv)_s@EO639~)Uo$y zEx%-QyZq$?3*W!T_{|q=;})q4M6r@P94i_lIAVnK zFmR|{M4RHaY4axyu1LG(QN)nDm#zz3RFS?8o>y-HmO^W3+0XQ*ah|Idmuqczl-Zj2^=X>OxcM44%v&&nT-_u)PN`^^hk=3Y9% zHqQ1?t=TDKcAM*qtIGB%?6y1vHyd_kd!7h9ZForutwN+b8pW_9cx^*t{E(j8TZ4}f*sJlwU^r$0Iw*?!3oVhJ|G=&317g_KitHkn zN0GI623HOIy!OsHx|)Yhy?St9*M4}h!*k>|?v6IP^U#n8Ag7((Gr~K+Td}rl9^5f> z2OPo;oQBBBmZEpHQtDW_YlY_k@Q0?u)j=>yNrEk!`jd;}3^={i;qDFISZw09@oJJ? zCvDQyYOL%#s-bO2T0L5kx)^-Id=m2X+q7+7Lu)rCf6ok?plpu#W=`N#y?uWHz}TVr zp-XinJ^1{P=)8X>lH`=38J`TM6bm+SY@ z+$3p+X{DVdkKDXnL)EAv7r35!_2%l@CVSV>*E{;sd!weG8B>o|^~h{!g5T!*d>0<4Y*e^|Ny$w&JIu{ zc@Rgv$$@|u9#9~*Y_*|WD>ED~Zukv}#FwgQZEcp@Y_%2GO_+i<=Cl_snpn)2c#<=b zJMT#%opUH8J4R+U#myJXFk@_YeHVys_s9uKdb~h6(i=)hzL?l3Sj7Zl=MBI7SscDK z9Lzz3=Esp{K$kK$!7y#tE{q9#&kQ;!^~0rbe$VM569HU0Xd) zBh({W-U;v()(!Foe?vR5nq3}ay^5y_p{aD1uCI2MrZ;z50YpUul)EDa=q<@$sj~Ii z%K52kQ!1OFPwAem>nP~QmGzZ$Ogu-YRk3l-IFui3g9YYSd{?5usP zh;1NrKgiM-E2vCWCdx$uq*At&4-@R#XdfUIlM+7k4s;Av>(dtjrmPhjla~L#=G(XR z;WswZuWzecoX>9?Q&^xS{;wRtai7e?PaRZE8qJ{L|dWhi$$mr|z*4ySMCY_sOZ|_})t?%&?pRXls#E!=H)C;Y! z@9Bl$jc-u!$z#I*j&NcB9}q4CjBE`51rd^CMCd1g+i(x^0g~Vr)%cNNt|-5R3}r+X zh9@#UxrQYfrMuz#g%^m+6+^lRa*;XoB+)mYNY)xR=gXD!&F?g4ez#JoOm6nq_2xOPbJq2~*C_ z?Q%f342fr2&T1B-{*~_5^G75F$J~QGPg6YqZ=z&k_#Z^cNWk$Umdx^hIUZ&)=VuDY%S(w;?sGXS}SGJ|GZ>7ZUHmOykB=dzi)57zuW6h zePudk-&-GZUibJi2#H6CBL8V*ecYlM0HNcCJzZ;}{qk*L+ou_AD4F5W2!{jTcAUN+wDyvJxzVencXDUTT}Z`TA1FKXs!o}XG=lG{z6 zczI;ZLfOx6@4>+)FL#zp+x#oD{Atej>_}^*1cmR#dt`yAiz5h(*<1bqsL2k5Tb2RW zVzsG%RV$I&^BJba=BSZhwiHAMqRsiA6v$qo=y@fx5)CMuG2sfdZQ!(G^m$_PBx})n z0w4}~Ob-MOM%+ZDAZaxqn|`{&DY=3VWa&bbr7)ie*aq1S3o(WYUlZ-Is(Dss(V)s0 zRDZsMWq0tjV>;w@1?OrZRkxTOQPSkcCSpu=gVvg7GdS!`aVmZ1v_^d6XJsGYjYTqM z?wNC#Ve(ZUfVx1sBXCN=b?6VEjF>ZK6`fE&LDU2-(AKKlR2)$sdrCcPp>r}hS?}3A zgnCLrP1|5}U@_!!6G#%0sSpT|N%JCREDu7qs`HosqUwqir5&Wjr*Y>#0zZ)N5pI`I z_4Ef&%|bX4w?UTP!f-`>`S;t?eX;R@P0QWjqgI31s+fc6AUHhQRc{A#U9PJkNj5YA-9iRhvgUVFXsEF2{=jNDBoT02ULLl?{^>w z)m&LFnw3Cx$k;2diGd6)d|&cSiP zo-5$5g*WA01F7YRPUrdz=ODuibdm5>v}oV%PD~1{lPH6_^7|4UQKB$~(Jxjv4sg~n$2|i<_y=F= z#eDHB_(0=hi^}_6C2LHOZeg0^N*fWh`21f&76+57``D)SIRDrzmWeoM38V_HEPn2+(GOZ z|0efmLRxv6RcaLh=}uDQoC1O-+}%9%Tm$CKd59U3j$f6C(Fs{>O2#a(6V%fui3h?b z$mee_ARK`eU=G**GcAELm)(q=R#5yQxm~kc#~0@hWY5rF*{Jbi;o_8K1lXf=ZnlK< z32GzUEZI%7Sx%_gUJn>vG6Mbt6BKnj8hI_cx4w7aD&dwvgLI-Q(L1}{nkbCChDO2S6o9qhNctl6<(60Y7*@b<&bda za!5SpnwV3OSg!d)fxs+It1w%#t5@Lnbj9Sq_E!9ZMx@LS8XuvYfn~l_yBM!+-QHu`&l&Rf)?D1FRGdxFz{QlgTY;W zS{dJUSq^%`uwT}@5bBTB`rkQ_6?#G6zD)+mEaxPW$m-MZLY(TwziYae`{$$6^IX{5 zG~AVMnUw=%prH32_+sz2bES4CUU>odAuzz*k0*G9xHZ3fnGkzI+e_34ptGwB&=~}| zfsRdbj~n}7YC4*yto?Ca`Y~1D&GsBiJ&)LwVLB=@T0M?D8VruI)1+oZmHF=pR<iT(uKaE69p76ST!Qbc=yTL_4cZ02KusHTl z(96Tk^h2Xs1}QzTtoeTdIcW*X$*W4ktLca-2%rLA z$yP8{!U0?D)IA~L>tRP5G^B6P&0mr8k@(g*5rZ`#qzMeFLHgY%^sRO378UFkI zLHUNc!RsC54d1nTJwtg@RouhxDW%zLJo~)zX z(m>!dy4SIhc>(ytXJ;zfMo!C0$~l^K;=m=+PD{9jWyY9cSWplN(MhL>jf_{UP>~4Z zhY~qAu7gHvNKi&fK+>uT7}0l5!N>Zz$I=8LVo}kC`h}#$k?KZR2o{^A=bLCOZh?Su zJ}9J|8b_DhKF||0rfrB+-Q9vb#-7}oKG1`yt2;RE>8=555&{YldU#aD#OSLva3?Uh zR8@PI%#>=&!vk1QSwl{aiyrFl%fmn@@*Q2|kCqu{phr@2@8uA*q$NNLbxcZvq^bJB zReamVKQH~(BCyBD0SIDBq8>mgO|6=sBPu8}?i^55hvQ(0MZjo!q8Fy^g3A&6r{u%7 zP-hBO5#;%si&x!+i~^rB*6;z4OSG`5bo@4adO@R6MN#d?&zh&|t*u(di?y|zhC4lj zQTLv>G&Yw0oFD@_vrMYMu-iZ+fO2#L+PaD|Mqk%nf1-8B^@NUg1T{`8i&YW`mMRpr z<(1;!`qCTfK#Ml6(gTAM!)C?u+N~T*GbavU;eaYKAB_(;7OaYOK8rY!@gQEz(|wNs z>7`q7ol>N{EWMM|^Li( z0^BzR+_{uCnDgiY?b%U?6dN8X98c(AAFf%iJAJ=>O8=ZLeS_B$CB$ncS2#tA})g1e9D095_I+Vu6TOM3suTPN9t}+EdN=s z%o2!So<}911soq(%S~V{F>|dmvv&-FJNyHyMK5LqcAndak;TVW*-}C3sr}Av7rv@4 zcU95p=u)7;w}PH+D&O@_-{>~3qF3&7fJEXUXz^1_qC@IzdyE1Ad!t^#sJXk2!^pGt zFe0g}iB}d%&>>SFD*1irGO;sPu!z>Qf;GpF`*_M1K>#1osso@-v{Xkdlv4X|29YQ()_7afT=;jvFsK?Cq0!YE0!$|GGcj$P z!#tK(?AOGxhu_AvOjq$UIqf@Hn&_3DzxB1 ze#451fRgA)s!?4Up(3j2Va0c{@Gs@;cx(xrp}0nK1FdcbXWX+nTV;z}^B1w5ABQEq z4I&ZwL4-UDHOzt6797?~;j&QtRfS`+A2S91S`utghS-;~ut*w26oFWjHAJE!=R#Sf z`zHSaYDX;?HEDs;8a9~X+QJzq*q0(bx93yRfpS14&{#jw#@3(eIg$Z8AH~*l^oF!r zVwa^8X5g0t&JP4Pr3VgsP4Ah6od>a%THgUW56mq48v)y}*65H4c)G#4|7TrP(Sb{# z9{7t0y~ZK*QU-2purR>>EK9Ru?y_TVBEd%sa59-~Q&x|8<;omMlW*Nl1h$~Upf89+?XM}1 zlpIR&%8ne(8kN}B;WGmo5K$HlP^udBtS9Oe!flHdu@NWTwo?isTq%)&zF=@QXmCVH1eLBzwNdn~n>jn%0 zctR=4m}+C;%6hnj5J6Zq8ShO0OZ$B*tK*6fQoqvjwrX|18q5hFh($%t;_+E7-Z$%) zgq$<_!;iCR4tkz@qlHhnm`AJJ}8o%p(B(U@$&~OD!+iopyokfOZ@XUUJ7AGi5|q|E>e_UT?(YI`{IX-2XQ&-%!FC28c>x< ztQx2^{Es9$@zIFb4`?0-yhcor+}|R%g5kRi5`8&?5AO^z3°*vzy-UvMe( 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%0A^46g-EcjaJ8~&Z%qnmJ!8LIm5IRqRHLI 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

OvzF4T{r}8<=`<7HokQ27twHPn)xzXcq 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 literal 0 HcmV?d00001 diff --git a/20200721/c/doc/sofa_ts_c.pdf b/20200721/c/doc/sofa_ts_c.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cfc24d5d2a39344195ba4ebf077124861907bcb9 GIT binary patch literal 150340 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 z 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

$X&R!N6_M|S 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

Vn^wB4Bg+j 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 bIvF@PxjC4a!ZI*((6cbXl97qXiNgLbnH-PW literal 0 HcmV?d00001 diff --git a/20200721/c/doc/sofa_vml.lis b/20200721/c/doc/sofa_vml.lis new file mode 100644 index 0000000..3f68239 --- /dev/null +++ b/20200721/c/doc/sofa_vml.lis @@ -0,0 +1,307 @@ +sofa_vml.lis 2013 October 8 + + -------------------------- + SOFA Vector/Matrix Library + -------------------------- + +PREFACE + +The routines described here comprise the SOFA vector/matrix library. +Their general appearance and coding style conforms to conventions +agreed by the SOFA Board, and their functions, names and algorithms have +been ratified by the Board. Procedures for soliciting and agreeing +additions to the library are still evolving. + + +PROGRAMMING LANGUAGES + +The SOFA routines are available in two programming languages at present: +Fortran 77 and ANSI C. + +There is a one-to-one relationship between the two language versions. +The naming convention is such that a SOFA routine referred to +generically as "EXAMPL" exists as a Fortran subprogram iau_EXAMPL and a +C function iauExampl. The calls for the two versions are very similar, +with the same arguments in the same order. In a few cases, the C +equivalent of a Fortran SUBROUTINE subprogram uses a return value rather +than an argument. + + +GENERAL PRINCIPLES + +The library consists mostly of routines which operate on ordinary +Cartesian vectors (x,y,z) and 3x3 rotation matrices. However, there is +also support for vectors which represent velocity as well as position +and vectors which represent rotation instead of position. The vectors +which represent both position and velocity may be considered still to +have dimensions (3), but to comprise elements each of which is two +numbers, representing the value itself and the time derivative. Thus: + +* "Position" or "p" vectors (or just plain 3-vectors) have dimension + (3) in Fortran and [3] in C. + +* "Position/velocity" or "pv" vectors have dimensions (3,2) in Fortran + and [2][3] in C. + +* "Rotation" or "r" matrices have dimensions (3,3) in Fortran and [3][3] + in C. When used for rotation, they are "orthogonal"; the inverse of + such a matrix is equal to the transpose. Most of the routines in + this library do not assume that r-matrices are necessarily orthogonal + and in fact work on any 3x3 matrix. + +* "Rotation" or "r" vectors have dimensions (3) in Fortran and [3] in C. + Such vectors are a combination of the Euler axis and angle and are + convertible to and from r-matrices. The direction is the axis of + rotation and the magnitude is the angle of rotation, in radians. + Because the amount of rotation can be scaled up and down simply by + multiplying the vector by a scalar, r-vectors are useful for + representing spins about an axis which is fixed. + +* The above rules mean that in terms of memory address, the three + velocity components of a pv-vector follow the three position + components. Application code is permitted to exploit this and all + other knowledge of the internal layouts: that x, y and z appear in + that order and are in a right-handed Cartesian coordinate system etc. + For example, the cp function (copy a p-vector) can be used to copy + the velocity component of a pv-vector (indeed, this is how the + CPV routine is coded). + +* The routines provided do not completely fill the range of operations + that link all the various vector and matrix options, but are confined + to functions that are required by other parts of the SOFA software or + which are likely to prove useful. + +In addition to the vector/matrix routines, the library contains some +routines related to spherical angles, including conversions to and +from sexagesimal format. + +Using the library requires knowledge of vector/matrix methods, spherical +trigonometry, and methods of attitude representation. These topics are +covered in many textbooks, including "Spacecraft Attitude Determination +and Control", James R. Wertz (ed.), Astrophysics and Space Science +Library, Vol. 73, D. Reidel Publishing Company, 1986. + + +OPERATIONS INVOLVING P-VECTORS AND R-MATRICES + + Initialize + + ZP zero p-vector + ZR initialize r-matrix to null + IR initialize r-matrix to identity + + Copy/extend/extract + + CP copy p-vector + CR copy r-matrix + + Build rotations + + RX rotate r-matrix about x + RY rotate r-matrix about y + RZ rotate r-matrix about z + + Spherical/Cartesian conversions + + S2C spherical to unit vector + C2S unit vector to spherical + S2P spherical to p-vector + P2S p-vector to spherical + + Operations on vectors + + PPP p-vector plus p-vector + PMP p-vector minus p-vector + PPSP p-vector plus scaled p-vector + PDP inner (=scalar=dot) product of two p-vectors + PXP outer (=vector=cross) product of two p-vectors + PM modulus of p-vector + PN normalize p-vector returning modulus + SXP multiply p-vector by scalar + + Operations on matrices + + RXR r-matrix multiply + TR transpose r-matrix + + Matrix-vector products + + RXP product of r-matrix and p-vector + TRXP product of transpose of r-matrix and p-vector + + Separation and position-angle + + SEPP angular separation from p-vectors + SEPS angular separation from spherical coordinates + PAP position-angle from p-vectors + PAS position-angle from spherical coordinates + + Rotation vectors + + RV2M r-vector to r-matrix + RM2V r-matrix to r-vector + + +OPERATIONS INVOLVING PV-VECTORS + + Initialize + + ZPV zero pv-vector + + Copy/extend/extract + + CPV copy pv-vector + P2PV append zero velocity to p-vector + PV2P discard velocity component of pv-vector + + Spherical/Cartesian conversions + + S2PV spherical to pv-vector + PV2S pv-vector to spherical + + Operations on vectors + + PVPPV pv-vector plus pv-vector + PVMPV pv-vector minus pv-vector + PVDPV inner (=scalar=dot) product of two pv-vectors + PVXPV outer (=vector=cross) product of two pv-vectors + PVM modulus of pv-vector + SXPV multiply pv-vector by scalar + S2XPV multiply pv-vector by two scalars + PVU update pv-vector + PVUP update pv-vector discarding velocity + + Matrix-vector products + + RXPV product of r-matrix and pv-vector + TRXPV product of transpose of r-matrix and pv-vector + + +OPERATIONS ON ANGLES + + ANP normalize radians to range 0 to 2pi + ANPM normalize radians to range -pi to +pi + A2TF decompose radians into hours, minutes, seconds + A2AF decompose radians into degrees, arcminutes, arcseconds + AF2A degrees, arcminutes, arcseconds to radians + D2TF decompose days into hours, minutes, seconds + TF2A hours, minutes, seconds to radians + TF2D hours, minutes, seconds to days + + +CALLS: FORTRAN VERSION + + CALL iau_A2AF ( NDP, ANGLE, SIGN, IDMSF ) + CALL iau_A2TF ( NDP, ANGLE, SIGN, IHMSF ) + CALL iau_AF2A ( S, IDEG, IAMIN, ASEC, RAD, J ) + D = iau_ANP ( A ) + D = iau_ANPM ( A ) + CALL iau_C2S ( P, THETA, PHI ) + CALL iau_CP ( P, C ) + CALL iau_CPV ( PV, C ) + CALL iau_CR ( R, C ) + CALL iau_D2TF ( NDP, DAYS, SIGN, IHMSF ) + CALL iau_IR ( R ) + CALL iau_P2PV ( P, PV ) + CALL iau_P2S ( P, THETA, PHI, R ) + CALL iau_PAP ( A, B, THETA ) + CALL iau_PAS ( AL, AP, BL, BP, THETA ) + CALL iau_PDP ( A, B, ADB ) + CALL iau_PM ( P, R ) + CALL iau_PMP ( A, B, AMB ) + CALL iau_PN ( P, R, U ) + CALL iau_PPP ( A, B, APB ) + CALL iau_PPSP ( A, S, B, APSB ) + CALL iau_PV2P ( PV, P ) + CALL iau_PV2S ( PV, THETA, PHI, R, TD, PD, RD ) + CALL iau_PVDPV ( A, B, ADB ) + CALL iau_PVM ( PV, R, S ) + CALL iau_PVMPV ( A, B, AMB ) + CALL iau_PVPPV ( A, B, APB ) + CALL iau_PVU ( DT, PV, UPV ) + CALL iau_PVUP ( DT, PV, P ) + CALL iau_PVXPV ( A, B, AXB ) + CALL iau_PXP ( A, B, AXB ) + CALL iau_RM2V ( R, P ) + CALL iau_RV2M ( P, R ) + CALL iau_RX ( PHI, R ) + CALL iau_RXP ( R, P, RP ) + CALL iau_RXPV ( R, PV, RPV ) + CALL iau_RXR ( A, B, ATB ) + CALL iau_RY ( THETA, R ) + CALL iau_RZ ( PSI, R ) + CALL iau_S2C ( THETA, PHI, C ) + CALL iau_S2P ( THETA, PHI, R, P ) + CALL iau_S2PV ( THETA, PHI, R, TD, PD, RD, PV ) + CALL iau_S2XPV ( S1, S2, PV ) + CALL iau_SEPP ( A, B, S ) + CALL iau_SEPS ( AL, AP, BL, BP, S ) + CALL iau_SXP ( S, P, SP ) + CALL iau_SXPV ( S, PV, SPV ) + CALL iau_TF2A ( S, IHOUR, IMIN, SEC, RAD, J ) + CALL iau_TF2D ( S, IHOUR, IMIN, SEC, DAYS, J ) + CALL iau_TR ( R, RT ) + CALL iau_TRXP ( R, P, TRP ) + CALL iau_TRXPV ( R, PV, TRPV ) + CALL iau_ZP ( P ) + CALL iau_ZPV ( PV ) + CALL iau_ZR ( R ) + + +CALLS: C VERSION + + iauA2af ( ndp, angle, &sign, idmsf ); + iauA2tf ( ndp, angle, &sign, ihmsf ); + i = iauAf2a ( s, ideg, iamin, asec, &rad ); + d = iauAnp ( a ); + d = iauAnpm ( a ); + iauC2s ( p, &theta, &phi ); + iauCp ( p, c ); + iauCpv ( pv, c ); + iauCr ( r, c ); + iauD2tf ( ndp, days, &sign, ihmsf ); + iauIr ( r ); + iauP2pv ( p, pv ); + iauP2s ( p, &theta, &phi, &r ); + d = iauPap ( a, b ); + d = iauPas ( al, ap, bl, bp ); + d = iauPdp ( a, b ); + d = iauPm ( p ); + iauPmp ( a, b, amb ); + iauPn ( p, &r, u ); + iauPpp ( a, b, apb ); + iauPpsp ( a, s, b, apsb ); + iauPv2p ( pv, p ); + iauPv2s ( pv, &theta, &phi, &r, &td, &pd, &rd ); + iauPvdpv ( a, b, adb ); + iauPvm ( pv, &r, &s ); + iauPvmpv ( a, b, amb ); + iauPvppv ( a, b, apb ); + iauPvu ( dt, pv, upv ); + iauPvup ( dt, pv, p ); + iauPvxpv ( a, b, axb ); + iauPxp ( a, b, axb ); + iauRm2v ( r, p ); + iauRv2m ( p, r ); + iauRx ( phi, r ); + iauRxp ( r, p, rp ); + iauRxpv ( r, pv, rpv ); + iauRxr ( a, b, atb ); + iauRy ( theta, r ); + iauRz ( psi, r ); + iauS2c ( theta, phi, c ); + iauS2p ( theta, phi, r, p ); + iauS2pv ( theta, phi, r, td, pd, rd, pV ); + iauS2xpv ( s1, s2, pv ); + d = iauSepp ( a, b ); + d = iauSeps ( al, ap, bl, bp ); + iauSxp ( s, p, sp ); + iauSxpv ( s, pv, spv ); + i = iauTf2a ( s, ihour, imin, sec, &rad ); + i = iauTf2d ( s, ihour, imin, sec, &days ); + iauTr ( r, rt ); + iauTrxp ( r, p, trp ); + iauTrxpv ( r, pv, trpv ); + iauZp ( p ); + iauZpv ( pv ); + iauZr ( r ); diff --git a/20200721/c/doc/sofa_vml.pdf b/20200721/c/doc/sofa_vml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79047d8e557a98196baa8daf258bf4d7d44b161c GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/20200721/c/doc/title.lis b/20200721/c/doc/title.lis new file mode 100644 index 0000000..cbccf59 --- /dev/null +++ b/20200721/c/doc/title.lis @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + T H E + + + SSSSS OOOOOO FFFFFFFFFFFFF AAAAAAA + SSSSSSSSSS OOOOOOOOOOOO FFFFFFFFFFFF AAAAAAAA + SSSSSSSSSSS OOOOOOOOOOOOOO FFFFFFFFFFFF AAAA AAAA + SSSS S OOOOOO OOOOO FFFF AAAA AAAA + SSSSS OOOOO OOOO FFFFF AAAA AAAA + SSSSSSSSSS OOOO OOOOO FFFFFFFFFFFF AAAA AAAA + SSSSSSSSS OOOOO OOOO FFFFFFFFFFFF AAAAAAAAAAAAA + SSSSS OOOO OOOO FFFF AAAAAAAAAAAAAA + S SSSS OOOOO OOOOO FFFF AAAAAAAAAAAAAAA + SSSSSSSSSSS OOOOOOOOOOOOO FFFF AAAA AAAAA + SSSSSSSSS OOOOOOOOOO FFFF AAAA AAAAA + SSSS OOOOO FFFF AAAA AAAAA + + + S O F T W A R E + + L I B R A R I E S + + + + + + + International Astronomical Union + + Division A: Fundamental Astronomy + + + Standards Of Fundamental Astronomy Board + + + + + + Release 16 + + 2020 July 21 diff --git a/20200721/c/doc/title.pdf b/20200721/c/doc/title.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a7b178b335e79b9fddbfa3828ee3f034d65a2bb GIT binary patch literal 1290 zcmY!laB%<0E{>WV%$Io@fugh%uo&R1K0XZ9I2fpsO*SGgQ}y?U0T zL#Y4Ht;hJ^RC##6^10gef#Yh&ni-1~`z{%nX3Su=y|8wl^m5x9@+*W-PQA=r+Pp~9 zbbTY=D$BzQrY$Rs5?HzB;TLaaCnH&p$3G4yPGjRt zm|om1!*H?1GsvxvZ_$21$E}O`I*Otu{A4Rzn!w8#cgO!jV)OLxjh&L^xs}&korG&ZoqtrPiEUWOQ=#3x>MDd7pIrC+qUr8O_=A|Ksx~>Y4@WKl}ye zY>u6BEYdS#`nFGwOKoLZb;T9lkx3`{2h zMfu6WsU^|+z?7t*ACg*80@UZ04^(UcRt!uh`p!TuPFUQ>>uxotaXs5X}X0Y!Fwh0?>p~poxY^S`Fb^p*o!tOA>SP(_uzHoQkjt8h{l=scBpW3YJ_3aG+pjYHDn%kfs0=GqVKx9Rw8e;9?fW zKrf?-nHgJRh?!u~YhVbBMl`)9=9qfT%`w%Pn*fs}Om9h1VrEWi5wNsT&=1b6N>#8_ z0H(NnU_66jM?v2+FD+jI6u7`7=joylZDV0!W@hMS;OcB|*F*YHV&` i;b?AbVqiyDMJy-@6_+Fym4JiJ(#(KMRn^tsjSB!;`K?$0 literal 0 HcmV?d00001 diff --git a/20200721/c/src/a2af.c b/20200721/c/src/a2af.c new file mode 100644 index 0000000..58f3a18 --- /dev/null +++ b/20200721/c/src/a2af.c @@ -0,0 +1,170 @@ +#include "sofa.h" + +void iauA2af(int ndp, double angle, char *sign, int idmsf[4]) +/* +** - - - - - - - - +** i a u A 2 a f +** - - - - - - - - +** +** Decompose radians into degrees, arcminutes, arcseconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** angle double angle in radians +** +** Returned: +** sign char* '+' or '-' +** idmsf int[4] degrees, arcminutes, arcseconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of angle, the format of doubles on the target platform, and +** the risk of overflowing idmsf[3]. On a typical platform, for +** angle up to 2pi, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of angle may exceed 2pi. In cases where it +** does not, it is up to the caller to test for and handle the +** case where angle is very nearly 2pi and rounds up to 360 degrees, +** by testing for idmsf[0]=360 and setting idmsf[0-3] to zero. +** +** Called: +** iauD2tf decompose days to hms +** +** This revision: 2020 April 1 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Hours to degrees * radians to turns */ + const double F = 15.0 / D2PI; + + +/* Scale then use days to h,m,s function. */ + iauD2tf(ndp, angle*F, sign, idmsf); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/a2tf.c b/20200721/c/src/a2tf.c new file mode 100644 index 0000000..a651a4e --- /dev/null +++ b/20200721/c/src/a2tf.c @@ -0,0 +1,166 @@ +#include "sofa.h" + +void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4]) +/* +** - - - - - - - - +** i a u A 2 t f +** - - - - - - - - +** +** Decompose radians into hours, minutes, seconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** angle double angle in radians +** +** Returned: +** sign char* '+' or '-' +** ihmsf int[4] hours, minutes, seconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of angle, the format of doubles on the target platform, and +** the risk of overflowing ihmsf[3]. On a typical platform, for +** angle up to 2pi, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of angle may exceed 2pi. In cases where it +** does not, it is up to the caller to test for and handle the +** case where angle is very nearly 2pi and rounds up to 24 hours, +** by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero. +** +** Called: +** iauD2tf decompose days to hms +** +** This revision: 2020 April 1 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Scale then use days to h,m,s function. */ + iauD2tf(ndp, angle/D2PI, sign, ihmsf); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ab.c b/20200721/c/src/ab.c new file mode 100644 index 0000000..cf6e506 --- /dev/null +++ b/20200721/c/src/ab.c @@ -0,0 +1,178 @@ +#include "sofa.h" + +void iauAb(double pnat[3], double v[3], double s, double bm1, + double ppr[3]) +/* +** - - - - - - +** i a u A b +** - - - - - - +** +** Apply aberration to transform natural direction into proper +** direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** pnat double[3] natural direction to the source (unit vector) +** v double[3] observer barycentric velocity in units of c +** s double distance between the Sun and the observer (au) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** +** Returned: +** ppr double[3] proper direction to source (unit vector) +** +** Notes: +** +** 1) The algorithm is based on Expr. (7.40) in the Explanatory +** Supplement (Urban & Seidelmann 2013), but with the following +** changes: +** +** o Rigorous rather than approximate normalization is applied. +** +** o The gravitational potential term from Expr. (7) in +** Klioner (2003) is added, taking into account only the Sun's +** contribution. This has a maximum effect of about +** 0.4 microarcsecond. +** +** 2) In almost all cases, the maximum accuracy will be limited by the +** supplied velocity. For example, if the SOFA iauEpv00 function is +** used, errors of up to 5 microarcseconds could occur. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauPdp scalar product of two p-vectors +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double pdv, w1, w2, r2, w, p[3], r; + + + pdv = iauPdp(pnat, v); + w1 = 1.0 + pdv/(1.0 + bm1); + w2 = SRS/s; + r2 = 0.0; + for (i = 0; i < 3; i++) { + w = pnat[i]*bm1 + w1*v[i] + w2*(v[i] - pdv*pnat[i]); + p[i] = w; + r2 = r2 + w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + ppr[i] = p[i]/r; + } + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ae2hd.c b/20200721/c/src/ae2hd.c new file mode 100644 index 0000000..9765972 --- /dev/null +++ b/20200721/c/src/ae2hd.c @@ -0,0 +1,185 @@ +#include "sofa.h" + +void iauAe2hd (double az, double el, double phi, + double *ha, double *dec) +/* +** - - - - - - - - - +** i a u A e 2 h d +** - - - - - - - - - +** +** Horizon to equatorial coordinates: transform azimuth and altitude +** to hour angle and declination. +** +** Given: +** az double azimuth +** el double altitude (informally, elevation) +** phi double site latitude +** +** Returned: +** ha double hour angle (local) +** dec double declination +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) The sign convention for azimuth is north zero, east +pi/2. +** +** 3) HA is returned in the range +/-pi. Declination is returned in +** the range +/-pi/2. +** +** 4) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 5) The azimuth az must be with respect to the rotational north pole, +** as opposed to the ITRS pole, and an azimuth with respect to north +** on a map of the Earth's surface will need to be adjusted for +** polar motion if sub-arcsecond accuracy is required. +** +** 6) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of ha will also be affected. +** +** 7) The transformation is the same as Ve = Ry(phi-pi/2)*Rz(pi)*Vh, +** where Ve and Vh are lefthanded unit vectors in the (ha,dec) and +** (az,el) systems respectively and Rz and Ry are rotations about +** first the z-axis and then the y-axis. (n.b. Rz(pi) simply +** reverses the signs of the x and y components.) For efficiency, +** the algorithm is written out rather than calling other utility +** functions. For applications that require even greater +** efficiency, additional savings are possible if constant terms +** such as functions of latitude are computed once and for all. +** +** 8) Again for efficiency, no range checking of arguments is carried +** out. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sa, ca, se, ce, sp, cp, x, y, z, r; + + +/* Useful trig functions. */ + sa = sin(az); + ca = cos(az); + se = sin(el); + ce = cos(el); + sp = sin(phi); + cp = cos(phi); + +/* HA,Dec unit vector. */ + x = - ca*ce*sp + se*cp; + y = - sa*ce; + z = ca*ce*cp + se*sp; + +/* To spherical. */ + r = sqrt(x*x + y*y); + *ha = (r != 0.0) ? atan2(y,x) : 0.0; + *dec = atan2(z,r); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/af2a.c b/20200721/c/src/af2a.c new file mode 100644 index 0000000..4a47009 --- /dev/null +++ b/20200721/c/src/af2a.c @@ -0,0 +1,157 @@ +#include "sofa.h" +#include + +int iauAf2a(char s, int ideg, int iamin, double asec, double *rad) +/* +** - - - - - - - - +** i a u A f 2 a +** - - - - - - - - +** +** Convert degrees, arcminutes, arcseconds to radians. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ideg int degrees +** iamin int arcminutes +** asec double arcseconds +** +** Returned: +** rad double angle in radians +** +** Returned (function value): +** int status: 0 = OK +** 1 = ideg outside range 0-359 +** 2 = iamin outside range 0-59 +** 3 = asec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ideg, iamin and/or asec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Compute the interval. */ + *rad = ( s == '-' ? -1.0 : 1.0 ) * + ( 60.0 * ( 60.0 * ( (double) abs(ideg) ) + + ( (double) abs(iamin) ) ) + + fabs(asec) ) * DAS2R; + +/* Validate arguments and return status. */ + if ( ideg < 0 || ideg > 359 ) return 1; + if ( iamin < 0 || iamin > 59 ) return 2; + if ( asec < 0.0 || asec >= 60.0 ) return 3; + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/anp.c b/20200721/c/src/anp.c new file mode 100644 index 0000000..0093b5b --- /dev/null +++ b/20200721/c/src/anp.c @@ -0,0 +1,132 @@ +#include "sofa.h" + +double iauAnp(double a) +/* +** - - - - - - - +** i a u A n p +** - - - - - - - +** +** Normalize angle into the range 0 <= a < 2pi. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double angle (radians) +** +** Returned (function value): +** double angle in range 0-2pi +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double w; + + + w = fmod(a, D2PI); + if (w < 0) w += D2PI; + + return w; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/anpm.c b/20200721/c/src/anpm.c new file mode 100644 index 0000000..96fa2f0 --- /dev/null +++ b/20200721/c/src/anpm.c @@ -0,0 +1,132 @@ +#include "sofa.h" + +double iauAnpm(double a) +/* +** - - - - - - - - +** i a u A n p m +** - - - - - - - - +** +** Normalize angle into the range -pi <= a < +pi. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double angle (radians) +** +** Returned (function value): +** double angle in range +/-pi +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double w; + + + w = fmod(a, D2PI); + if (fabs(w) >= DPI) w -= dsign(D2PI, a); + + return w; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apcg.c b/20200721/c/src/apcg.c new file mode 100644 index 0000000..1f0b0c0 --- /dev/null +++ b/20200721/c/src/apcg.c @@ -0,0 +1,222 @@ +#include "sofa.h" + +void iauApcg(double date1, double date2, + double ebpv[2][3], double ehp[3], + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c g +** - - - - - - - - +** +** For a geocentric observer, prepare star-independent astrometry +** parameters for transformations between ICRS and GCRS coordinates. +** The Earth ephemeris is supplied by the caller. +** +** The parameters produced by this function are required in the +** parallax, light deflection and aberration parts of the astrometric +** transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric pos/vel (au, au/day) +** ehp double[3] Earth heliocentric position (au) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 4) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Geocentric observer */ + double pv[2][3] = { { 0.0, 0.0, 0.0 }, + { 0.0, 0.0, 0.0 } }; + + +/* Compute the star-independent astrometry parameters. */ + iauApcs(date1, date2, pv, ebpv, ehp, astrom); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apcg13.c b/20200721/c/src/apcg13.c new file mode 100644 index 0000000..1a4c3ff --- /dev/null +++ b/20200721/c/src/apcg13.c @@ -0,0 +1,225 @@ +#include "sofa.h" + +void iauApcg13(double date1, double date2, iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p c g 1 3 +** - - - - - - - - - - +** +** For a geocentric observer, prepare star-independent astrometry +** parameters for transformations between ICRS and GCRS coordinates. +** The caller supplies the date, and SOFA models are used to predict +** the Earth ephemeris. +** +** The parameters produced by this function are required in the +** parallax, light deflection and aberration parts of the astrometric +** transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller wishes to supply his own Earth +** ephemeris, the function iauApcg can be used instead of the present +** function. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauApcg astrometry parameters, ICRS-GCRS, geocenter +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ehpv[2][3], ebpv[2][3]; + + +/* Earth barycentric & heliocentric position/velocity (au, au/d). */ + (void) iauEpv00(date1, date2, ehpv, ebpv); + +/* Compute the star-independent astrometry parameters. */ + iauApcg(date1, date2, ebpv, ehpv[0], astrom); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apci.c b/20200721/c/src/apci.c new file mode 100644 index 0000000..1862b21 --- /dev/null +++ b/20200721/c/src/apci.c @@ -0,0 +1,231 @@ +#include "sofa.h" + +void iauApci(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c i +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and geocentric CIRS +** coordinates. The Earth ephemeris and CIP/CIO are supplied by the +** caller. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric position/velocity (au, au/day) +** ehp double[3] Earth heliocentric position (au) +** x,y double CIP X,Y (components of unit vector) +** s double the CIO locator s (radians) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller does not wish to provide the Earth +** ephemeris and CIP/CIO, the function iauApci13 can be used instead +** of the present function. This computes the required quantities +** using other SOFA functions. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauApcg astrometry parameters, ICRS-GCRS, geocenter +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** +** This revision: 2013 September 25 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Star-independent astrometry parameters for geocenter. */ + iauApcg(date1, date2, ebpv, ehp, astrom); + +/* CIO based BPN matrix. */ + iauC2ixys(x, y, s, astrom->bpn); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apci13.c b/20200721/c/src/apci13.c new file mode 100644 index 0000000..97ae49f --- /dev/null +++ b/20200721/c/src/apci13.c @@ -0,0 +1,243 @@ +#include "sofa.h" + +void iauApci13(double date1, double date2, + iauASTROM *astrom, double *eo) +/* +** - - - - - - - - - - +** i a u A p c i 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and geocentric CIRS +** coordinates. The caller supplies the date, and SOFA models are used +** to predict the Earth ephemeris and CIP/CIO. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** eo double* equation of the origins (ERA-GST) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) In cases where the caller wishes to supply his own Earth +** ephemeris and CIP/CIO, the function iauApci can be used instead +** of the present function. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 5) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauApci astrometry parameters, ICRS-CIRS +** iauEors equation of the origins, given NPB matrix and s +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ehpv[2][3], ebpv[2][3], r[3][3], x, y, s; + + +/* Earth barycentric & heliocentric position/velocity (au, au/d). */ + (void) iauEpv00(date1, date2, ehpv, ebpv); + +/* Form the equinox based BPN matrix, IAU 2006/2000A. */ + iauPnm06a(date1, date2, r); + +/* Extract CIP X,Y. */ + iauBpn2xy(r, &x, &y); + +/* Obtain CIO locator s. */ + s = iauS06(date1, date2, x, y); + +/* Compute the star-independent astrometry parameters. */ + iauApci(date1, date2, ebpv, ehpv[0], x, y, s, astrom); + +/* Equation of the origins. */ + *eo = iauEors(r, s); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apco.c b/20200721/c/src/apco.c new file mode 100644 index 0000000..43a4dd3 --- /dev/null +++ b/20200721/c/src/apco.c @@ -0,0 +1,305 @@ +#include "sofa.h" + +void iauApco(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, double theta, + double elong, double phi, double hm, + double xp, double yp, double sp, + double refa, double refb, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c o +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and observed +** coordinates. The caller supplies the Earth ephemeris, the Earth +** rotation information and the refraction constants as well as the +** site coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** ebpv double[2][3] Earth barycentric PV (au, au/day, Note 2) +** ehp double[3] Earth heliocentric P (au, Note 2) +** x,y double CIP X,Y (components of unit vector) +** s double the CIO locator s (radians) +** theta double Earth rotation angle (radians) +** elong double longitude (radians, east +ve, Note 3) +** phi double latitude (geodetic, radians, Note 3) +** hm double height above ellipsoid (m, geodetic, Note 3) +** xp,yp double polar motion coordinates (radians, Note 4) +** sp double the TIO locator s' (radians, Note 4) +** refa double refraction constant A (radians, Note 5) +** refb double refraction constant B (radians, Note 5) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) The vectors eb, eh, and all the astrom vectors, are with respect +** to BCRS axes. +** +** 3) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN +** CONVENTION: the longitude required by the present function is +** right-handed, i.e. east-positive, in accordance with geographical +** convention. +** +** 4) xp and yp are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions), measured along the +** meridians 0 and 90 deg west respectively. sp is the TIO locator +** s', in radians, which positions the Terrestrial Intermediate +** Origin on the equator. For many applications, xp, yp and +** (especially) sp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto the +** local meridian. +** +** 5) The refraction constants refa and refb are for use in a +** dZ = A*tan(Z)+B*tan^3(Z) model, where Z is the observed +** (i.e. refracted) zenith distance and dZ is the amount of +** refraction. +** +** 6) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 7) In cases where the caller does not wish to provide the Earth +** Ephemeris, the Earth rotation information and refraction +** constants, the function iauApco13 can be used instead of the +** present function. This starts from UTC and weather readings etc. +** and computes suitable values using other SOFA functions. +** +** 8) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 9) The context structure astrom produced by this function is used by +** iauAtioq, iauAtoiq, iauAtciq* and iauAticq*. +** +** Called: +** iauAper astrometry parameters: update ERA +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** iauPvtob position/velocity of terrestrial station +** iauTrxpv product of transpose of r-matrix and pv-vector +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** iauCr copy r-matrix +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sl, cl, r[3][3], pvc[2][3], pv[2][3]; + + +/* Longitude with adjustment for TIO locator s'. */ + astrom->along = elong + sp; + +/* Polar motion, rotated onto the local meridian. */ + sl = sin(astrom->along); + cl = cos(astrom->along); + astrom->xpl = xp*cl - yp*sl; + astrom->ypl = xp*sl + yp*cl; + +/* Functions of latitude. */ + astrom->sphi = sin(phi); + astrom->cphi = cos(phi); + +/* Refraction constants. */ + astrom->refa = refa; + astrom->refb = refb; + +/* Local Earth rotation angle. */ + iauAper(theta, astrom); + +/* Disable the (redundant) diurnal aberration step. */ + astrom->diurab = 0.0; + +/* CIO based BPN matrix. */ + iauC2ixys(x, y, s, r); + +/* Observer's geocentric position and velocity (m, m/s, CIRS). */ + iauPvtob(elong, phi, hm, xp, yp, sp, theta, pvc); + +/* Rotate into GCRS. */ + iauTrxpv(r, pvc, pv); + +/* ICRS <-> GCRS parameters. */ + iauApcs(date1, date2, pv, ebpv, ehp, astrom); + +/* Store the CIO based BPN matrix. */ + iauCr(r, astrom->bpn ); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apco13.c b/20200721/c/src/apco13.c new file mode 100644 index 0000000..c017d18 --- /dev/null +++ b/20200721/c/src/apco13.c @@ -0,0 +1,328 @@ +#include "sofa.h" + +int iauApco13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom, double *eo) +/* +** - - - - - - - - - - +** i a u A p c o 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between ICRS and observed +** coordinates. The caller supplies UTC, site coordinates, ambient air +** conditions and observing wavelength, and SOFA models are used to +** obtain the Earth ephemeris, CIP/CIO and refraction constants. +** +** The parameters produced by this function are required in the +** parallax, light deflection, aberration, and bias-precession-nutation +** parts of the ICRS/CIRS transformations. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds, Note 3) +** elong double longitude (radians, east +ve, Note 4) +** phi double latitude (geodetic, radians, Note 4) +** hm double height above ellipsoid (m, geodetic, Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** eo double* equation of the origins (ERA-GST) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto +** the local meridian. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 9) In cases where the caller wishes to supply his own Earth +** ephemeris, Earth rotation information and refraction constants, +** the function iauApco can be used instead of the present function. +** +** 10) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 11) The context structure astrom produced by this function is used +** by iauAtioq, iauAtoiq, iauAtciq* and iauAticq*. +** +** Called: +** iauUtctai UTC to TAI +** iauTaitt TAI to TT +** iauUtcut1 UTC to UT1 +** iauEpv00 Earth position and velocity +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauRefco refraction constants for given ambient conditions +** iauApco astrometry parameters, ICRS-observed +** iauEors equation of the origins, given NPB matrix and s +** +** This revision: 2013 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + double tai1, tai2, tt1, tt2, ut11, ut12, ehpv[2][3], ebpv[2][3], + r[3][3], x, y, s, theta, sp, refa, refb; + + +/* UTC to other time scales. */ + j = iauUtctai(utc1, utc2, &tai1, &tai2); + if ( j < 0 ) return -1; + j = iauTaitt(tai1, tai2, &tt1, &tt2); + j = iauUtcut1(utc1, utc2, dut1, &ut11, &ut12); + if ( j < 0 ) return -1; + +/* Earth barycentric & heliocentric position/velocity (au, au/d). */ + (void) iauEpv00(tt1, tt2, ehpv, ebpv); + +/* Form the equinox based BPN matrix, IAU 2006/2000A. */ + iauPnm06a(tt1, tt2, r); + +/* Extract CIP X,Y. */ + iauBpn2xy(r, &x, &y); + +/* Obtain CIO locator s. */ + s = iauS06(tt1, tt2, x, y); + +/* Earth rotation angle. */ + theta = iauEra00(ut11, ut12); + +/* TIO locator s'. */ + sp = iauSp00(tt1, tt2); + +/* Refraction constants A and B. */ + iauRefco(phpa, tc, rh, wl, &refa, &refb); + +/* Compute the star-independent astrometry parameters. */ + iauApco(tt1, tt2, ebpv, ehpv[0], x, y, s, theta, + elong, phi, hm, xp, yp, sp, refa, refb, astrom); + +/* Equation of the origins. */ + *eo = iauEors(r, s); + +/* Return any warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apcs.c b/20200721/c/src/apcs.c new file mode 100644 index 0000000..3b743e5 --- /dev/null +++ b/20200721/c/src/apcs.c @@ -0,0 +1,274 @@ +#include "sofa.h" + +void iauApcs(double date1, double date2, double pv[2][3], + double ebpv[2][3], double ehp[3], + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p c s +** - - - - - - - - +** +** For an observer whose geocentric position and velocity are known, +** prepare star-independent astrometry parameters for transformations +** between ICRS and GCRS. The Earth ephemeris is supplied by the +** caller. +** +** The parameters produced by this function are required in the space +** motion, parallax, light deflection and aberration parts of the +** astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** pv double[2][3] observer's geocentric pos/vel (m, m/s) +** ebpv double[2][3] Earth barycentric PV (au, au/day) +** ehp double[3] Earth heliocentric P (au) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) Providing separate arguments for (i) the observer's geocentric +** position and velocity and (ii) the Earth ephemeris is done for +** convenience in the geocentric, terrestrial and Earth orbit cases. +** For deep space applications it maybe more convenient to specify +** zero geocentric position and velocity and to supply the +** observer's position and velocity information directly instead of +** with respect to the Earth. However, note the different units: +** m and m/s for the geocentric vectors, au and au/day for the +** heliocentric and barycentric vectors. +** +** 4) In cases where the caller does not wish to provide the Earth +** ephemeris, the function iauApcs13 can be used instead of the +** present function. This computes the Earth ephemeris using the +** SOFA function iauEpv00. +** +** 5) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 6) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauCp copy p-vector +** iauPm modulus of p-vector +** iauPn decompose p-vector into modulus and direction +** iauIr initialize r-matrix to identity +** +** This revision: 2017 March 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* au/d to m/s */ + const double AUDMS = DAU/DAYSEC; + +/* Light time for 1 au (day) */ + const double CR = AULT/DAYSEC; + + int i; + double dp, dv, pb[3], vb[3], ph[3], v2, w; + + +/* Time since reference epoch, years (for proper motion calculation). */ + astrom->pmt = ( (date1 - DJ00) + date2 ) / DJY; + +/* Adjust Earth ephemeris to observer. */ + for (i = 0; i < 3; i++) { + dp = pv[0][i] / DAU; + dv = pv[1][i] / AUDMS; + pb[i] = ebpv[0][i] + dp; + vb[i] = ebpv[1][i] + dv; + ph[i] = ehp[i] + dp; + } + +/* Barycentric position of observer (au). */ + iauCp(pb, astrom->eb); + +/* Heliocentric direction and distance (unit vector and au). */ + iauPn(ph, &astrom->em, astrom->eh); + +/* Barycentric vel. in units of c, and reciprocal of Lorenz factor. */ + v2 = 0.0; + for (i = 0; i < 3; i++) { + w = vb[i] * CR; + astrom->v[i] = w; + v2 += w*w; + } + astrom->bm1 = sqrt(1.0 - v2); + +/* Reset the NPB matrix. */ + iauIr(astrom->bpn); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apcs13.c b/20200721/c/src/apcs13.c new file mode 100644 index 0000000..d0d3695 --- /dev/null +++ b/20200721/c/src/apcs13.c @@ -0,0 +1,232 @@ +#include "sofa.h" + +void iauApcs13(double date1, double date2, double pv[2][3], + iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p c s 1 3 +** - - - - - - - - - - +** +** For an observer whose geocentric position and velocity are known, +** prepare star-independent astrometry parameters for transformations +** between ICRS and GCRS. The Earth ephemeris is from SOFA models. +** +** The parameters produced by this function are required in the space +** motion, parallax, light deflection and aberration parts of the +** astrometric transformation chain. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** pv double[2][3] observer's geocentric pos/vel (Note 3) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double unchanged +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) All the vectors are with respect to BCRS axes. +** +** 3) The observer's position and velocity pv are geocentric but with +** respect to BCRS axes, and in units of m and m/s. No assumptions +** are made about proximity to the Earth, and the function can be +** used for deep space applications as well as Earth orbit and +** terrestrial. +** +** 4) In cases where the caller wishes to supply his own Earth +** ephemeris, the function iauApcs can be used instead of the present +** function. +** +** 5) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 6) The context structure astrom produced by this function is used by +** iauAtciq* and iauAticq*. +** +** Called: +** iauEpv00 Earth position and velocity +** iauApcs astrometry parameters, ICRS-GCRS, space observer +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ehpv[2][3], ebpv[2][3]; + + +/* Earth barycentric & heliocentric position/velocity (au, au/d). */ + (void) iauEpv00(date1, date2, ehpv, ebpv); + +/* Compute the star-independent astrometry parameters. */ + iauApcs(date1, date2, pv, ebpv, ehpv[0], astrom); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/aper.c b/20200721/c/src/aper.c new file mode 100644 index 0000000..ed128c8 --- /dev/null +++ b/20200721/c/src/aper.c @@ -0,0 +1,203 @@ +#include "sofa.h" + +void iauAper(double theta, iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p e r +** - - - - - - - - +** +** In the star-independent astrometry parameters, update only the +** Earth rotation angle, supplied by the caller explicitly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** theta double Earth rotation angle (radians, Note 2) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double not used +** eb double[3] not used +** eh double[3] not used +** em double not used +** v double[3] not used +** bm1 double not used +** bpn double[3][3] not used +** along double longitude + s' (radians) +** xpl double not used +** ypl double not used +** sphi double not used +** cphi double not used +** diurab double not used +** eral double not used +** refa double not used +** refb double not used +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double "local" Earth rotation angle (radians) +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) This function exists to enable sidereal-tracking applications to +** avoid wasteful recomputation of the bulk of the astrometry +** parameters: only the Earth rotation is updated. +** +** 2) For targets expressed as equinox based positions, such as +** classical geocentric apparent (RA,Dec), the supplied theta can be +** Greenwich apparent sidereal time rather than Earth rotation +** angle. +** +** 3) The function iauAper13 can be used instead of the present +** function, and starts from UT1 rather than ERA itself. +** +** 4) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** This revision: 2013 September 25 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + astrom->eral = theta + astrom->along; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/aper13.c b/20200721/c/src/aper13.c new file mode 100644 index 0000000..e08e30c --- /dev/null +++ b/20200721/c/src/aper13.c @@ -0,0 +1,222 @@ +#include "sofa.h" + +void iauAper13(double ut11, double ut12, iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p e r 1 3 +** - - - - - - - - - - +** +** In the star-independent astrometry parameters, update only the +** Earth rotation angle. The caller provides UT1, (n.b. not UTC). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ut11 double UT1 as a 2-part... +** ut12 double ...Julian Date (Note 1) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double not used +** eb double[3] not used +** eh double[3] not used +** em double not used +** v double[3] not used +** bm1 double not used +** bpn double[3][3] not used +** along double longitude + s' (radians) +** xpl double not used +** ypl double not used +** sphi double not used +** cphi double not used +** diurab double not used +** eral double not used +** refa double not used +** refb double not used +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double unchanged +** xpl double unchanged +** ypl double unchanged +** sphi double unchanged +** cphi double unchanged +** diurab double unchanged +** eral double "local" Earth rotation angle (radians) +** refa double unchanged +** refb double unchanged +** +** Notes: +** +** 1) The UT1 date (n.b. not UTC) ut11+ut12 is a Julian Date, +** apportioned in any convenient way between the arguments ut11 and +** ut12. For example, JD(UT1)=2450123.7 could be expressed in any +** of these ways, among others: +** +** ut11 ut12 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum precision is +** delivered when the ut11 argument is for 0hrs UT1 on the day in +** question and the ut12 argument lies in the range 0 to 1, or vice +** versa. +** +** 2) If the caller wishes to provide the Earth rotation angle itself, +** the function iauAper can be used instead. One use of this +** technique is to substitute Greenwich apparent sidereal time and +** thereby to support equinox based transformations directly. +** +** 3) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** Called: +** iauAper astrometry parameters: update ERA +** iauEra00 Earth rotation angle, IAU 2000 +** +** This revision: 2013 September 25 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauAper(iauEra00(ut11,ut12), astrom); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apio.c b/20200721/c/src/apio.c new file mode 100644 index 0000000..e52711e --- /dev/null +++ b/20200721/c/src/apio.c @@ -0,0 +1,254 @@ +#include "sofa.h" + +void iauApio(double sp, double theta, + double elong, double phi, double hm, double xp, double yp, + double refa, double refb, + iauASTROM *astrom) +/* +** - - - - - - - - +** i a u A p i o +** - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between CIRS and observed +** coordinates. The caller supplies the Earth orientation information +** and the refraction constants as well as the site coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** sp double the TIO locator s' (radians, Note 1) +** theta double Earth rotation angle (radians) +** elong double longitude (radians, east +ve, Note 2) +** phi double geodetic latitude (radians, Note 2) +** hm double height above ellipsoid (m, geodetic Note 2) +** xp,yp double polar motion coordinates (radians, Note 3) +** refa double refraction constant A (radians, Note 4) +** refb double refraction constant B (radians, Note 4) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Notes: +** +** 1) sp, the TIO locator s', is a tiny quantity needed only by the +** most precise applications. It can either be set to zero or +** predicted using the SOFA function iauSp00. +** +** 2) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 3) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many applications, +** xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto the +** local meridian. +** +** 4) The refraction constants refa and refb are for use in a +** dZ = A*tan(Z)+B*tan^3(Z) model, where Z is the observed +** (i.e. refracted) zenith distance and dZ is the amount of +** refraction. +** +** 5) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 6) In cases where the caller does not wish to provide the Earth +** rotation information and refraction constants, the function +** iauApio13 can be used instead of the present function. This +** starts from UTC and weather readings etc. and computes suitable +** values using other SOFA functions. +** +** 7) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 8) The context structure astrom produced by this function is used by +** iauAtioq and iauAtoiq. +** +** Called: +** iauPvtob position/velocity of terrestrial station +** iauAper astrometry parameters: update ERA +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sl, cl, pv[2][3]; + + +/* Longitude with adjustment for TIO locator s'. */ + astrom->along = elong + sp; + +/* Polar motion, rotated onto the local meridian. */ + sl = sin(astrom->along); + cl = cos(astrom->along); + astrom->xpl = xp*cl - yp*sl; + astrom->ypl = xp*sl + yp*cl; + +/* Functions of latitude. */ + astrom->sphi = sin(phi); + astrom->cphi = cos(phi); + +/* Observer's geocentric position and velocity (m, m/s, CIRS). */ + iauPvtob(elong, phi, hm, xp, yp, sp, theta, pv); + +/* Magnitude of diurnal aberration vector. */ + astrom->diurab = sqrt(pv[1][0]*pv[1][0]+pv[1][1]*pv[1][1]) / CMPS; + +/* Refraction constants. */ + astrom->refa = refa; + astrom->refb = refb; + +/* Local Earth rotation angle. */ + iauAper(theta, astrom); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/apio13.c b/20200721/c/src/apio13.c new file mode 100644 index 0000000..f49d5dc --- /dev/null +++ b/20200721/c/src/apio13.c @@ -0,0 +1,300 @@ +#include "sofa.h" + +int iauApio13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom) +/* +** - - - - - - - - - - +** i a u A p i o 1 3 +** - - - - - - - - - - +** +** For a terrestrial observer, prepare star-independent astrometry +** parameters for transformations between CIRS and observed +** coordinates. The caller supplies UTC, site coordinates, ambient air +** conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds) +** elong double longitude (radians, east +ve, Note 3) +** phi double geodetic latitude (radians, Note 3) +** hm double height above ellipsoid (m, geodetic Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double unchanged +** eb double[3] unchanged +** eh double[3] unchanged +** em double unchanged +** v double[3] unchanged +** bm1 double unchanged +** bpn double[3][3] unchanged +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many applications, +** xp and yp can be set to zero. +** +** Internally, the polar motion is stored in a form rotated onto +** the local meridian. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to the +** pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 9) In cases where the caller wishes to supply his own Earth +** rotation information and refraction constants, the function +** iauApc can be used instead of the present function. +** +** 10) This is one of several functions that inserts into the astrom +** structure star-independent parameters needed for the chain of +** astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed. +** +** The various functions support different classes of observer and +** portions of the transformation chain: +** +** functions observer transformation +** +** iauApcg iauApcg13 geocentric ICRS <-> GCRS +** iauApci iauApci13 terrestrial ICRS <-> CIRS +** iauApco iauApco13 terrestrial ICRS <-> observed +** iauApcs iauApcs13 space ICRS <-> GCRS +** iauAper iauAper13 terrestrial update Earth rotation +** iauApio iauApio13 terrestrial CIRS <-> observed +** +** Those with names ending in "13" use contemporary SOFA models to +** compute the various ephemerides. The others accept ephemerides +** supplied by the caller. +** +** The transformation from ICRS to GCRS covers space motion, +** parallax, light deflection, and aberration. From GCRS to CIRS +** comprises frame bias and precession-nutation. From CIRS to +** observed takes account of Earth rotation, polar motion, diurnal +** aberration and parallax (unless subsumed into the ICRS <-> GCRS +** transformation), and atmospheric refraction. +** +** 11) The context structure astrom produced by this function is used +** by iauAtioq and iauAtoiq. +** +** Called: +** iauUtctai UTC to TAI +** iauTaitt TAI to TT +** iauUtcut1 UTC to UT1 +** iauSp00 the TIO locator s', IERS 2000 +** iauEra00 Earth rotation angle, IAU 2000 +** iauRefco refraction constants for given ambient conditions +** iauApio astrometry parameters, CIRS-observed +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + double tai1, tai2, tt1, tt2, ut11, ut12, sp, theta, refa, refb; + + +/* UTC to other time scales. */ + j = iauUtctai(utc1, utc2, &tai1, &tai2); + if ( j < 0 ) return -1; + j = iauTaitt(tai1, tai2, &tt1, &tt2); + j = iauUtcut1(utc1, utc2, dut1, &ut11, &ut12); + if ( j < 0 ) return -1; + +/* TIO locator s'. */ + sp = iauSp00(tt1, tt2); + +/* Earth rotation angle. */ + theta = iauEra00(ut11, ut12); + +/* Refraction constants A and B. */ + iauRefco(phpa, tc, rh, wl, &refa, &refb); + +/* CIRS <-> observed astrometry parameters. */ + iauApio(sp, theta, elong, phi, hm, xp, yp, refa, refb, astrom); + +/* Return any warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atci13.c b/20200721/c/src/atci13.c new file mode 100644 index 0000000..5e99c32 --- /dev/null +++ b/20200721/c/src/atci13.c @@ -0,0 +1,200 @@ +#include "sofa.h" + +void iauAtci13(double rc, double dc, + double pr, double pd, double px, double rv, + double date1, double date2, + double *ri, double *di, double *eo) +/* +** - - - - - - - - - - +** i a u A t c i 1 3 +** - - - - - - - - - - +** +** Transform ICRS star data, epoch J2000.0, to CIRS. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc double ICRS right ascension at J2000.0 (radians, Note 1) +** dc double ICRS declination at J2000.0 (radians, Note 1) +** pr double RA proper motion (radians/year; Note 2) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 3) +** +** Returned: +** ri,di double* CIRS geocentric RA,Dec (radians) +** eo double* equation of the origins (ERA-GST, Note 5) +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 4) The available accuracy is better than 1 milliarcsecond, limited +** mainly by the precession-nutation model that is used, namely +** IAU 2000A/2006. Very close to solar system bodies, additional +** errors of up to several milliarcseconds can occur because of +** unmodeled light deflection; however, the Sun's contribution is +** taken into account, to first order. The accuracy limitations of +** the SOFA function iauEpv00 (used to compute Earth position and +** velocity) can contribute aberration errors of up to +** 5 microarcseconds. Light deflection at the Sun's limb is +** uncertain at the 0.4 mas level. +** +** 5) Should the transformation to (equinox based) apparent place be +** required rather than (CIO based) intermediate place, subtract the +** equation of the origins from the returned right ascension: +** RA = RI - EO. (The iauAnp function can then be applied, as +** required, to keep the result in the conventional 0-2pi range.) +** +** Called: +** iauApci13 astrometry parameters, ICRS-CIRS, 2013 +** iauAtciq quick ICRS to CIRS +** +** This revision: 2017 March 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Star-independent astrometry parameters */ + iauASTROM astrom; + + +/* The transformation parameters. */ + iauApci13(date1, date2, &astrom, eo); + +/* ICRS (epoch J2000.0) to CIRS. */ + iauAtciq(rc, dc, pr, pd, px, rv, &astrom, ri, di); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atciq.c b/20200721/c/src/atciq.c new file mode 100644 index 0000000..2e254e0 --- /dev/null +++ b/20200721/c/src/atciq.c @@ -0,0 +1,195 @@ +#include "sofa.h" + +void iauAtciq(double rc, double dc, + double pr, double pd, double px, double rv, + iauASTROM *astrom, double *ri, double *di) +/* +** - - - - - - - - - +** i a u A t c i q +** - - - - - - - - - +** +** Quick ICRS, epoch J2000.0, to CIRS transformation, given precomputed +** star-independent astrometry parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** If the parallax and proper motions are zero the iauAtciqz function +** can be used instead. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at J2000.0 (radians) +** pr double RA proper motion (radians/year; Note 3) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Notes: +** +** 1) All the vectors are with respect to BCRS axes. +** +** 2) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 3) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** Called: +** iauPmpx proper motion and parallax +** iauLdsun light deflection by the Sun +** iauAb stellar aberration +** iauRxp product of r-matrix and pv-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double pco[3], pnat[3], ppr[3], pi[3], w; + + +/* Proper motion and parallax, giving BCRS coordinate direction. */ + iauPmpx(rc, dc, pr, pd, px, rv, astrom->pmt, astrom->eb, pco); + +/* Light deflection by the Sun, giving BCRS natural direction. */ + iauLdsun(pco, astrom->eh, astrom->em, pnat); + +/* Aberration, giving GCRS proper direction. */ + iauAb(pnat, astrom->v, astrom->em, astrom->bm1, ppr); + +/* Bias-precession-nutation, giving CIRS proper direction. */ + iauRxp(astrom->bpn, ppr, pi); + +/* CIRS RA,Dec. */ + iauC2s(pi, &w, di); + *ri = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atciqn.c b/20200721/c/src/atciqn.c new file mode 100644 index 0000000..d054b03 --- /dev/null +++ b/20200721/c/src/atciqn.c @@ -0,0 +1,232 @@ +#include "sofa.h" + +void iauAtciqn(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + int n, iauLDBODY b[], double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t c i q n +** - - - - - - - - - - +** +** Quick ICRS, epoch J2000.0, to CIRS transformation, given precomputed +** star-independent astrometry parameters plus a list of light- +** deflecting bodies. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** +** If the only light-deflecting body to be taken into account is the +** Sun, the iauAtciq function can be used instead. If in addition the +** parallax and proper motions are zero, the iauAtciqz function can be +** used. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at J2000.0 (radians) +** pr double RA proper motion (radians/year; Note 3) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** n int number of bodies (Note 3) +** b iauLDBODY[n] data for each of the n bodies (Notes 3,4): +** bm double mass of the body (solar masses, Note 5) +** dl double deflection limiter (Note 6) +** pv [2][3] barycentric PV of the body (au, au/day) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require a +** preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The struct b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 4) The struct b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 5) In the entry in the b struct for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 6) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 7) For efficiency, validation of the contents of the b array is +** omitted. The supplied masses must be greater than zero, the +** position and velocity vectors must be right, and the deflection +** limiter greater than zero. +** +** Called: +** iauPmpx proper motion and parallax +** iauLdn light deflection by n bodies +** iauAb stellar aberration +** iauRxp product of r-matrix and pv-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double pco[3], pnat[3], ppr[3], pi[3], w; + + +/* Proper motion and parallax, giving BCRS coordinate direction. */ + iauPmpx(rc, dc, pr, pd, px, rv, astrom->pmt, astrom->eb, pco); + +/* Light deflection, giving BCRS natural direction. */ + iauLdn(n, b, astrom->eb, pco, pnat); + +/* Aberration, giving GCRS proper direction. */ + iauAb(pnat, astrom->v, astrom->em, astrom->bm1, ppr); + +/* Bias-precession-nutation, giving CIRS proper direction. */ + iauRxp(astrom->bpn, ppr, pi); + +/* CIRS RA,Dec. */ + iauC2s(pi, &w, di); + *ri = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atciqz.c b/20200721/c/src/atciqz.c new file mode 100644 index 0000000..7a116ea --- /dev/null +++ b/20200721/c/src/atciqz.c @@ -0,0 +1,194 @@ +#include "sofa.h" + +void iauAtciqz(double rc, double dc, iauASTROM *astrom, + double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t c i q z +** - - - - - - - - - - +** +** Quick ICRS to CIRS transformation, given precomputed star- +** independent astrometry parameters, and assuming zero parallax and +** proper motion. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are to be transformed for one date. The +** star-independent parameters can be obtained by calling one of the +** functions iauApci[13], iauApcg[13], iauApco[13] or iauApcs[13]. +** +** The corresponding function for the case of non-zero parallax and +** proper motion is iauAtciq. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS astrometric RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri,di double CIRS RA,Dec (radians) +** +** Note: +** +** All the vectors are with respect to BCRS axes. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLdsun light deflection due to Sun +** iauAb stellar aberration +** iauRxp product of r-matrix and p-vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double pco[3], pnat[3], ppr[3], pi[3], w; + + +/* BCRS coordinate direction (unit vector). */ + iauS2c(rc, dc, pco); + +/* Light deflection by the Sun, giving BCRS natural direction. */ + iauLdsun(pco, astrom->eh, astrom->em, pnat); + +/* Aberration, giving GCRS proper direction. */ + iauAb(pnat, astrom->v, astrom->em, astrom->bm1, ppr); + +/* Bias-precession-nutation, giving CIRS proper direction. */ + iauRxp(astrom->bpn, ppr, pi); + +/* CIRS RA,Dec. */ + iauC2s(pi, &w, di); + *ri = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atco13.c b/20200721/c/src/atco13.c new file mode 100644 index 0000000..e1b401e --- /dev/null +++ b/20200721/c/src/atco13.c @@ -0,0 +1,284 @@ +#include "sofa.h" + +int iauAtco13(double rc, double dc, + double pr, double pd, double px, double rv, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob, double *eo) +/* +** - - - - - - - - - - +** i a u A t c o 1 3 +** - - - - - - - - - - +** +** ICRS RA,Dec to observed place. The caller supplies UTC, site +** coordinates, ambient air conditions and observing wavelength. +** +** SOFA models are used for the Earth ephemeris, bias-precession- +** nutation, Earth orientation and refraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS right ascension at J2000.0 (radians, Note 1) +** pr double RA proper motion (radians/year; Note 2) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3-4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double latitude (geodetic, radians, Note 6) +** hm double height above ellipsoid (m, geodetic, Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** eo double* equation of the origins (ERA-GST) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) Star data for an epoch other than J2000.0 (for example from the +** Hipparcos catalog, which has an epoch of J1991.25) will require +** a preliminary call to iauPmsafe before use. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), +** is available, an adequate estimate of hm can be obtained from +** the expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtco13 and +** iauAtoc13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 11) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 12) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApco13 astrometry parameters, ICRS-observed, 2013 +** iauAtciq quick ICRS to CIRS +** iauAtioq quick CIRS to observed +** +** This revision: 2016 February 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + iauASTROM astrom; + double ri, di; + + +/* Star-independent astrometry parameters. */ + j = iauApco13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom, eo); + +/* Abort if bad UTC. */ + if ( j < 0 ) return j; + +/* Transform ICRS to CIRS. */ + iauAtciq(rc, dc, pr, pd, px, rv, &astrom, &ri, &di); + +/* Transform CIRS to observed. */ + iauAtioq(ri, di, &astrom, aob, zob, hob, dob, rob); + +/* Return OK/warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atic13.c b/20200721/c/src/atic13.c new file mode 100644 index 0000000..aa74394 --- /dev/null +++ b/20200721/c/src/atic13.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +void iauAtic13(double ri, double di, double date1, double date2, + double *rc, double *dc, double *eo) +/* +** - - - - - - - - - - +** i a u A t i c 1 3 +** - - - - - - - - - - +** +** Transform star RA,Dec from geocentric CIRS to ICRS astrometric. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS geocentric RA,Dec (radians) +** date1 double TDB as a 2-part... +** date2 double ...Julian Date (Note 1) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** eo double equation of the origins (ERA-GST, Note 4) +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. For most +** applications of this function the choice will not be at all +** critical. +** +** TT can be used instead of TDB without any significant impact on +** accuracy. +** +** 2) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAtic13 (or +** iauAticq) and iauAtci13 (or iauAtciq) are accurate inverses; +** even at the edge of the Sun's disk the discrepancy is only about +** 1 nanoarcsecond. +** +** 3) The available accuracy is better than 1 milliarcsecond, limited +** mainly by the precession-nutation model that is used, namely +** IAU 2000A/2006. Very close to solar system bodies, additional +** errors of up to several milliarcseconds can occur because of +** unmodeled light deflection; however, the Sun's contribution is +** taken into account, to first order. The accuracy limitations of +** the SOFA function iauEpv00 (used to compute Earth position and +** velocity) can contribute aberration errors of up to +** 5 microarcseconds. Light deflection at the Sun's limb is +** uncertain at the 0.4 mas level. +** +** 4) Should the transformation to (equinox based) J2000.0 mean place +** be required rather than (CIO based) ICRS coordinates, subtract the +** equation of the origins from the returned right ascension: +** RA = RI - EO. (The iauAnp function can then be applied, as +** required, to keep the result in the conventional 0-2pi range.) +** +** Called: +** iauApci13 astrometry parameters, ICRS-CIRS, 2013 +** iauAticq quick CIRS to ICRS astrometric +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Star-independent astrometry parameters */ + iauASTROM astrom; + + +/* Star-independent astrometry parameters. */ + iauApci13(date1, date2, &astrom, eo); + +/* CIRS to ICRS astrometric. */ + iauAticq(ri, di, &astrom, rc, dc); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/aticq.c b/20200721/c/src/aticq.c new file mode 100644 index 0000000..08d1ee0 --- /dev/null +++ b/20200721/c/src/aticq.c @@ -0,0 +1,240 @@ +#include "sofa.h" + +void iauAticq(double ri, double di, iauASTROM *astrom, + double *rc, double *dc) +/* +** - - - - - - - - - +** i a u A t i c q +** - - - - - - - - - +** +** Quick CIRS RA,Dec to ICRS astrometric place, given the star- +** independent astrometry parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling one of the functions iauApci[13], iauApcg[13], iauApco[13] +** or iauApcs[13]. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Notes: +** +** 1) Only the Sun is taken into account in the light deflection +** correction. +** +** 2) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAtic13 (or +** iauAticq) and iauAtci13 (or iauAtciq) are accurate inverses; +** even at the edge of the Sun's disk the discrepancy is only about +** 1 nanoarcsecond. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauZp zero p-vector +** iauAb stellar aberration +** iauLdsun light deflection by the Sun +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j, i; + double pi[3], ppr[3], pnat[3], pco[3], w, d[3], before[3], r2, r, + after[3]; + + +/* CIRS RA,Dec to Cartesian. */ + iauS2c(ri, di, pi); + +/* Bias-precession-nutation, giving GCRS proper direction. */ + iauTrxp(astrom->bpn, pi, ppr); + +/* Aberration, giving GCRS natural direction. */ + iauZp(d); + for (j = 0; j < 2; j++) { + r2 = 0.0; + for (i = 0; i < 3; i++) { + w = ppr[i] - d[i]; + before[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + before[i] /= r; + } + iauAb(before, astrom->v, astrom->em, astrom->bm1, after); + r2 = 0.0; + for (i = 0; i < 3; i++) { + d[i] = after[i] - before[i]; + w = ppr[i] - d[i]; + pnat[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + pnat[i] /= r; + } + } + +/* Light deflection by the Sun, giving BCRS coordinate direction. */ + iauZp(d); + for (j = 0; j < 5; j++) { + r2 = 0.0; + for (i = 0; i < 3; i++) { + w = pnat[i] - d[i]; + before[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + before[i] /= r; + } + iauLdsun(before, astrom->eh, astrom->em, after); + r2 = 0.0; + for (i = 0; i < 3; i++) { + d[i] = after[i] - before[i]; + w = pnat[i] - d[i]; + pco[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + pco[i] /= r; + } + } + +/* ICRS astrometric RA,Dec. */ + iauC2s(pco, &w, dc); + *rc = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/aticqn.c b/20200721/c/src/aticqn.c new file mode 100644 index 0000000..46623af --- /dev/null +++ b/20200721/c/src/aticqn.c @@ -0,0 +1,278 @@ +#include "sofa.h" + +void iauAticqn(double ri, double di, iauASTROM *astrom, + int n, iauLDBODY b[], double *rc, double *dc) +/* +** - - - - - - - - - - +** i a u A t i c q n +** - - - - - - - - - - +** +** Quick CIRS to ICRS astrometric place transformation, given the star- +** independent astrometry parameters plus a list of light-deflecting +** bodies. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling one of the functions iauApci[13], iauApcg[13], iauApco[13] +** or iauApcs[13]. +* +* If the only light-deflecting body to be taken into account is the +* Sun, the iauAticq function can be used instead. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri,di double CIRS RA,Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** n int number of bodies (Note 3) +** b iauLDBODY[n] data for each of the n bodies (Notes 3,4): +** bm double mass of the body (solar masses, Note 5) +** dl double deflection limiter (Note 6) +** pv [2][3] barycentric PV of the body (au, au/day) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Notes: +** +** 1) Iterative techniques are used for the aberration and light +** deflection corrections so that the functions iauAticqn and +** iauAtciqn are accurate inverses; even at the edge of the Sun's +** disk the discrepancy is only about 1 nanoarcsecond. +** +** 2) If the only light-deflecting body to be taken into account is the +** Sun, the iauAticq function can be used instead. +** +** 3) The struct b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 4) The struct b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 5) In the entry in the b struct for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 6) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 7) For efficiency, validation of the contents of the b array is +** omitted. The supplied masses must be greater than zero, the +** position and velocity vectors must be right, and the deflection +** limiter greater than zero. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauZp zero p-vector +** iauAb stellar aberration +** iauLdn light deflection by n bodies +** iauC2s p-vector to spherical +** iauAnp normalize angle into range +/- pi +** +** This revision: 2018 December 13 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j, i; + double pi[3], ppr[3], pnat[3], pco[3], w, d[3], before[3], r2, r, + after[3]; + + +/* CIRS RA,Dec to Cartesian. */ + iauS2c(ri, di, pi); + +/* Bias-precession-nutation, giving GCRS proper direction. */ + iauTrxp(astrom->bpn, pi, ppr); + +/* Aberration, giving GCRS natural direction. */ + iauZp(d); + for (j = 0; j < 2; j++) { + r2 = 0.0; + for (i = 0; i < 3; i++) { + w = ppr[i] - d[i]; + before[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + before[i] /= r; + } + iauAb(before, astrom->v, astrom->em, astrom->bm1, after); + r2 = 0.0; + for (i = 0; i < 3; i++) { + d[i] = after[i] - before[i]; + w = ppr[i] - d[i]; + pnat[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + pnat[i] /= r; + } + } + +/* Light deflection, giving BCRS coordinate direction. */ + iauZp(d); + for (j = 0; j < 5; j++) { + r2 = 0.0; + for (i = 0; i < 3; i++) { + w = pnat[i] - d[i]; + before[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + before[i] /= r; + } + iauLdn(n, b, astrom->eb, before, after); + r2 = 0.0; + for (i = 0; i < 3; i++) { + d[i] = after[i] - before[i]; + w = pnat[i] - d[i]; + pco[i] = w; + r2 += w*w; + } + r = sqrt(r2); + for (i = 0; i < 3; i++) { + pco[i] /= r; + } + } + +/* ICRS astrometric RA,Dec. */ + iauC2s(pco, &w, dc); + *rc = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atio13.c b/20200721/c/src/atio13.c new file mode 100644 index 0000000..172dad2 --- /dev/null +++ b/20200721/c/src/atio13.c @@ -0,0 +1,263 @@ +#include "sofa.h" + +int iauAtio13(double ri, double di, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob) +/* +** - - - - - - - - - - +** i a u A t i o 1 3 +** - - - - - - - - - - +** +** CIRS RA,Dec to observed place. The caller supplies UTC, site +** coordinates, ambient air conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri double CIRS right ascension (CIO-based, radians) +** di double CIRS declination (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 1,2) +** dut1 double UT1-UTC (seconds, Note 3) +** elong double longitude (radians, east +ve, Note 4) +** phi double geodetic latitude (radians, Note 4) +** hm double height above ellipsoid (m, geodetic Notes 4,6) +** xp,yp double polar motion coordinates (radians, Note 5) +** phpa double pressure at the observer (hPa = mB, Note 6) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 7) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 2) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 3) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 4) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 5) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 6) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 7) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 8) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 9) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** 10) The complementary functions iauAtio13 and iauAtoi13 are self- +** consistent to better than 1 microarcsecond all over the +** celestial sphere. +** +** 11) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApio13 astrometry parameters, CIRS-observed, 2013 +** iauAtioq quick CIRS to observed +** +** This revision: 2016 February 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + iauASTROM astrom; + + +/* Star-independent astrometry parameters for CIRS->observed. */ + j = iauApio13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom); + +/* Abort if bad UTC. */ + if ( j < 0 ) return j; + +/* Transform CIRS to observed. */ + iauAtioq(ri, di, &astrom, aob, zob, hob, dob, rob); + +/* Return OK/warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atioq.c b/20200721/c/src/atioq.c new file mode 100644 index 0000000..151c7dc --- /dev/null +++ b/20200721/c/src/atioq.c @@ -0,0 +1,284 @@ +#include "sofa.h" + +void iauAtioq(double ri, double di, iauASTROM *astrom, + double *aob, double *zob, + double *hob, double *dob, double *rob) +/* +** - - - - - - - - - +** i a u A t i o q +** - - - - - - - - - +** +** Quick CIRS to observed place transformation. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling iauApio[13] or iauApco[13]. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ri double CIRS right ascension +** di double CIRS declination +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** aob double* observed azimuth (radians: N=0,E=90) +** zob double* observed zenith distance (radians) +** hob double* observed hour angle (radians) +** dob double* observed declination (radians) +** rob double* observed right ascension (CIO-based, radians) +** +** Notes: +** +** 1) This function returns zenith distance rather than altitude in +** order to reflect the fact that no allowance is made for +** depression of the horizon. +** +** 2) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtioq and +** iauAtoiq are self-consistent to better than 1 microarcsecond all +** over the celestial sphere. With refraction included, consistency +** falls off at high zenith distances, but is still better than +** 0.05 arcsec at 85 degrees. +** +** 3) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** 4) The CIRS RA,Dec is obtained from a star catalog mean place by +** allowing for space motion, parallax, the Sun's gravitational lens +** effect, annual aberration and precession-nutation. For star +** positions in the ICRS, these effects can be applied by means of +** the iauAtci13 (etc.) functions. Starting from classical "mean +** place" systems, additional transformations will be needed first. +** +** 5) "Observed" Az,El means the position that would be seen by a +** perfect geodetically aligned theodolite. This is obtained from +** the CIRS RA,Dec by allowing for Earth orientation and diurnal +** aberration, rotating from equator to horizon coordinates, and +** then adjusting for refraction. The HA,Dec is obtained by +** rotating back into equatorial coordinates, and is the position +** that would be seen by a perfect equatorial with its polar axis +** aligned to the Earth's axis of rotation. Finally, the RA is +** obtained by subtracting the HA from the local ERA. +** +** 6) The star-independent CIRS-to-observed-place parameters in ASTROM +** may be computed with iauApio[13] or iauApco[13]. If nothing has +** changed significantly except the time, iauAper[13] may be used to +** perform the requisite adjustment to the astrom structure. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** This revision: 2016 March 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Minimum cos(alt) and sin(alt) for refraction purposes */ + const double CELMIN = 1e-6; + const double SELMIN = 0.05; + + double v[3], x, y, z, xhd, yhd, zhd, f, xhdt, yhdt, zhdt, + xaet, yaet, zaet, azobs, r, tz, w, del, cosdel, + xaeo, yaeo, zaeo, zdobs, hmobs, dcobs, raobs; + + +/* CIRS RA,Dec to Cartesian -HA,Dec. */ + iauS2c(ri-astrom->eral, di, v); + x = v[0]; + y = v[1]; + z = v[2]; + +/* Polar motion. */ + xhd = x + astrom->xpl*z; + yhd = y - astrom->ypl*z; + zhd = z - astrom->xpl*x + astrom->ypl*y; + +/* Diurnal aberration. */ + f = ( 1.0 - astrom->diurab*yhd ); + xhdt = f * xhd; + yhdt = f * ( yhd + astrom->diurab ); + zhdt = f * zhd; + +/* Cartesian -HA,Dec to Cartesian Az,El (S=0,E=90). */ + xaet = astrom->sphi*xhdt - astrom->cphi*zhdt; + yaet = yhdt; + zaet = astrom->cphi*xhdt + astrom->sphi*zhdt; + +/* Azimuth (N=0,E=90). */ + azobs = ( xaet != 0.0 || yaet != 0.0 ) ? atan2(yaet,-xaet) : 0.0; + +/* ---------- */ +/* Refraction */ +/* ---------- */ + +/* Cosine and sine of altitude, with precautions. */ + r = sqrt(xaet*xaet + yaet*yaet); + r = r > CELMIN ? r : CELMIN; + z = zaet > SELMIN ? zaet : SELMIN; + +/* A*tan(z)+B*tan^3(z) model, with Newton-Raphson correction. */ + tz = r/z; + w = astrom->refb*tz*tz; + del = ( astrom->refa + w ) * tz / + ( 1.0 + ( astrom->refa + 3.0*w ) / ( z*z ) ); + +/* Apply the change, giving observed vector. */ + cosdel = 1.0 - del*del/2.0; + f = cosdel - del*z/r; + xaeo = xaet*f; + yaeo = yaet*f; + zaeo = cosdel*zaet + del*r; + +/* Observed ZD. */ + zdobs = atan2(sqrt(xaeo*xaeo+yaeo*yaeo), zaeo); + +/* Az/El vector to HA,Dec vector (both right-handed). */ + v[0] = astrom->sphi*xaeo + astrom->cphi*zaeo; + v[1] = yaeo; + v[2] = - astrom->cphi*xaeo + astrom->sphi*zaeo; + +/* To spherical -HA,Dec. */ + iauC2s ( v, &hmobs, &dcobs ); + +/* Right ascension (with respect to CIO). */ + raobs = astrom->eral + hmobs; + +/* Return the results. */ + *aob = iauAnp(azobs); + *zob = zdobs; + *hob = -hmobs; + *dob = dcobs; + *rob = iauAnp(raobs); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atoc13.c b/20200721/c/src/atoc13.c new file mode 100644 index 0000000..a9d2789 --- /dev/null +++ b/20200721/c/src/atoc13.c @@ -0,0 +1,274 @@ +#include "sofa.h" + +int iauAtoc13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *rc, double *dc) +/* +** - - - - - - - - - - +** i a u A t o c 1 3 +** - - - - - - - - - - +** +** Observed place at a groundbased site to to ICRS astrometric RA,Dec. +** The caller supplies UTC, site coordinates, ambient air conditions +** and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates - "R", "H" or "A" (Notes 1,2) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3,4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double geodetic latitude (radians, Note 6) +** hm double height above ellipsoid (m, geodetic Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** rc,dc double ICRS astrometric RA,Dec (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth +** (north zero, east 90 deg) and zenith distance. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtco13 and +** iauAtoc13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 11) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApco13 astrometry parameters, ICRS-observed +** iauAtoiq quick observed to CIRS +** iauAticq quick CIRS to ICRS +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + iauASTROM astrom; + double eo, ri, di; + + +/* Star-independent astrometry parameters. */ + j = iauApco13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom, &eo); + +/* Abort if bad UTC. */ + if ( j < 0 ) return j; + +/* Transform observed to CIRS. */ + iauAtoiq(type, ob1, ob2, &astrom, &ri, &di); + +/* Transform CIRS to ICRS. */ + iauAticq(ri, di, &astrom, rc, dc); + +/* Return OK/warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atoi13.c b/20200721/c/src/atoi13.c new file mode 100644 index 0000000..0fb4fd3 --- /dev/null +++ b/20200721/c/src/atoi13.c @@ -0,0 +1,269 @@ +#include "sofa.h" + +int iauAtoi13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *ri, double *di) +/* +** - - - - - - - - - - +** i a u A t o i 1 3 +** - - - - - - - - - - +** +** Observed place to CIRS. The caller supplies UTC, site coordinates, +** ambient air conditions and observing wavelength. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates - "R", "H" or "A" (Notes 1,2) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** utc1 double UTC as a 2-part... +** utc2 double ...quasi Julian Date (Notes 3,4) +** dut1 double UT1-UTC (seconds, Note 5) +** elong double longitude (radians, east +ve, Note 6) +** phi double geodetic latitude (radians, Note 6) +** hm double height above the ellipsoid (meters, Notes 6,8) +** xp,yp double polar motion coordinates (radians, Note 7) +** phpa double pressure at the observer (hPa = mB, Note 8) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers, Note 9) +** +** Returned: +** ri double* CIRS right ascension (CIO-based, radians) +** di double* CIRS declination (radians) +** +** Returned (function value): +** int status: +1 = dubious year (Note 2) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) "Observed" Az,ZD means the position that would be seen by a +** perfect geodetically aligned theodolite. (Zenith distance is +** used rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) This is +** related to the observed HA,Dec via the standard rotation, using +** the geodetic latitude (corrected for polar motion), while the +** observed HA and RA are related simply through the Earth rotation +** angle and the site longitude. "Observed" RA,Dec or HA,Dec thus +** means the position that would be seen by a perfect equatorial +** with its polar axis aligned to the Earth's axis of rotation. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth +** (north zero, east 90 deg) and zenith distance. +** +** 3) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** However, JD cannot unambiguously represent UTC during a leap +** second unless special measures are taken. The convention in the +** present function is that the JD day represents UTC days whether +** the length is 86399, 86400 or 86401 SI seconds. +** +** Applications should use the function iauDtf2d to convert from +** calendar date and time of day into 2-part quasi Julian Date, as +** it implements the leap-second-ambiguity convention just +** described. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the +** future to be trusted. See iauDat for further details. +** +** 5) UT1-UTC is tabulated in IERS bulletins. It increases by exactly +** one second at the end of each positive UTC leap second, +** introduced in order to keep UT1-UTC within +/- 0.9s. n.b. This +** practice is under review, and in the future UT1-UTC may grow +** essentially without limit. +** +** 6) The geographical coordinates are with respect to the WGS84 +** reference ellipsoid. TAKE CARE WITH THE LONGITUDE SIGN: the +** longitude required by the present function is east-positive +** (i.e. right-handed), in accordance with geographical convention. +** +** 7) The polar motion xp,yp can be obtained from IERS bulletins. The +** values are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions 2003), measured along the +** meridians 0 and 90 deg west respectively. For many +** applications, xp and yp can be set to zero. +** +** 8) If hm, the height above the ellipsoid of the observing station +** in meters, is not known but phpa, the pressure in hPa (=mB), is +** available, an adequate estimate of hm can be obtained from the +** expression +** +** hm = -29.3 * tsl * log ( phpa / 1013.25 ); +** +** where tsl is the approximate sea-level air temperature in K +** (See Astrophysical Quantities, C.W.Allen, 3rd edition, section +** 52). Similarly, if the pressure phpa is not known, it can be +** estimated from the height of the observing station, hm, as +** follows: +** +** phpa = 1013.25 * exp ( -hm / ( 29.3 * tsl ) ); +** +** Note, however, that the refraction is nearly proportional to +** the pressure and that an accurate phpa value is important for +** precise work. +** +** 9) The argument wl specifies the observing wavelength in +** micrometers. The transition from optical to radio is assumed to +** occur at 100 micrometers (about 3000 GHz). +** +** 10) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted astrometric +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better +** than 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtio13 and +** iauAtoi13 are self-consistent to better than 1 microarcsecond +** all over the celestial sphere. With refraction included, +** consistency falls off at high zenith distances, but is still +** better than 0.05 arcsec at 85 degrees. +** +** 12) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauApio13 astrometry parameters, CIRS-observed, 2013 +** iauAtoiq quick observed to CIRS +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + iauASTROM astrom; + + +/* Star-independent astrometry parameters for CIRS->observed. */ + j = iauApio13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom); + +/* Abort if bad UTC. */ + if ( j < 0 ) return j; + +/* Transform observed to CIRS. */ + iauAtoiq(type, ob1, ob2, &astrom, ri, di); + +/* Return OK/warning status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/atoiq.c b/20200721/c/src/atoiq.c new file mode 100644 index 0000000..67ca1ec --- /dev/null +++ b/20200721/c/src/atoiq.c @@ -0,0 +1,298 @@ +#include "sofa.h" + +void iauAtoiq(const char *type, + double ob1, double ob2, iauASTROM *astrom, + double *ri, double *di) +/* +** - - - - - - - - - +** i a u A t o i q +** - - - - - - - - - +** +** Quick observed place to CIRS, given the star-independent astrometry +** parameters. +** +** Use of this function is appropriate when efficiency is important and +** where many star positions are all to be transformed for one date. +** The star-independent astrometry parameters can be obtained by +** calling iauApio[13] or iauApco[13]. +** +** Status: support function. +** +** Given: +** type char[] type of coordinates: "R", "H" or "A" (Note 1) +** ob1 double observed Az, HA or RA (radians; Az is N=0,E=90) +** ob2 double observed ZD or Dec (radians) +** astrom iauASTROM* star-independent astrometry parameters: +** pmt double PM time interval (SSB, Julian years) +** eb double[3] SSB to observer (vector, au) +** eh double[3] Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** v double[3] barycentric observer velocity (vector, c) +** bm1 double sqrt(1-|v|^2): reciprocal of Lorenz factor +** bpn double[3][3] bias-precession-nutation matrix +** along double longitude + s' (radians) +** xpl double polar motion xp wrt local meridian (radians) +** ypl double polar motion yp wrt local meridian (radians) +** sphi double sine of geodetic latitude +** cphi double cosine of geodetic latitude +** diurab double magnitude of diurnal aberration vector +** eral double "local" Earth rotation angle (radians) +** refa double refraction constant A (radians) +** refb double refraction constant B (radians) +** +** Returned: +** ri double* CIRS right ascension (CIO-based, radians) +** di double* CIRS declination (radians) +** +** Notes: +** +** 1) "Observed" Az,El means the position that would be seen by a +** perfect geodetically aligned theodolite. This is related to +** the observed HA,Dec via the standard rotation, using the geodetic +** latitude (corrected for polar motion), while the observed HA and +** RA are related simply through the Earth rotation angle and the +** site longitude. "Observed" RA,Dec or HA,Dec thus means the +** position that would be seen by a perfect equatorial with its +** polar axis aligned to the Earth's axis of rotation. By removing +** from the observed place the effects of atmospheric refraction and +** diurnal aberration, the CIRS RA,Dec is obtained. +** +** 2) Only the first character of the type argument is significant. +** "R" or "r" indicates that ob1 and ob2 are the observed right +** ascension and declination; "H" or "h" indicates that they are +** hour angle (west +ve) and declination; anything else ("A" or +** "a" is recommended) indicates that ob1 and ob2 are azimuth (north +** zero, east 90 deg) and zenith distance. (Zenith distance is used +** rather than altitude in order to reflect the fact that no +** allowance is made for depression of the horizon.) +** +** 3) The accuracy of the result is limited by the corrections for +** refraction, which use a simple A*tan(z) + B*tan^3(z) model. +** Providing the meteorological parameters are known accurately and +** there are no gross local effects, the predicted observed +** coordinates should be within 0.05 arcsec (optical) or 1 arcsec +** (radio) for a zenith distance of less than 70 degrees, better +** than 30 arcsec (optical or radio) at 85 degrees and better than +** 20 arcmin (optical) or 30 arcmin (radio) at the horizon. +** +** Without refraction, the complementary functions iauAtioq and +** iauAtoiq are self-consistent to better than 1 microarcsecond all +** over the celestial sphere. With refraction included, consistency +** falls off at high zenith distances, but is still better than +** 0.05 arcsec at 85 degrees. +** +** 4) It is advisable to take great care with units, as even unlikely +** values of the input parameters are accepted and processed in +** accordance with the models used. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int c; + double c1, c2, sphi, cphi, ce, xaeo, yaeo, zaeo, v[3], + xmhdo, ymhdo, zmhdo, az, sz, zdo, refa, refb, tz, dref, + zdt, xaet, yaet, zaet, xmhda, ymhda, zmhda, + f, xhd, yhd, zhd, xpl, ypl, w, hma; + + +/* Coordinate type. */ + c = (int) type[0]; + +/* Coordinates. */ + c1 = ob1; + c2 = ob2; + +/* Sin, cos of latitude. */ + sphi = astrom->sphi; + cphi = astrom->cphi; + +/* Standardize coordinate type. */ + if ( c == 'r' || c == 'R' ) { + c = 'R'; + } else if ( c == 'h' || c == 'H' ) { + c = 'H'; + } else { + c = 'A'; + } + +/* If Az,ZD, convert to Cartesian (S=0,E=90). */ + if ( c == 'A' ) { + ce = sin(c2); + xaeo = - cos(c1) * ce; + yaeo = sin(c1) * ce; + zaeo = cos(c2); + + } else { + + /* If RA,Dec, convert to HA,Dec. */ + if ( c == 'R' ) c1 = astrom->eral - c1; + + /* To Cartesian -HA,Dec. */ + iauS2c ( -c1, c2, v ); + xmhdo = v[0]; + ymhdo = v[1]; + zmhdo = v[2]; + + /* To Cartesian Az,El (S=0,E=90). */ + xaeo = sphi*xmhdo - cphi*zmhdo; + yaeo = ymhdo; + zaeo = cphi*xmhdo + sphi*zmhdo; + } + +/* Azimuth (S=0,E=90). */ + az = ( xaeo != 0.0 || yaeo != 0.0 ) ? atan2(yaeo,xaeo) : 0.0; + +/* Sine of observed ZD, and observed ZD. */ + sz = sqrt ( xaeo*xaeo + yaeo*yaeo ); + zdo = atan2 ( sz, zaeo ); + +/* +** Refraction +** ---------- +*/ + +/* Fast algorithm using two constant model. */ + refa = astrom->refa; + refb = astrom->refb; + tz = sz / zaeo; + dref = ( refa + refb*tz*tz ) * tz; + zdt = zdo + dref; + +/* To Cartesian Az,ZD. */ + ce = sin(zdt); + xaet = cos(az) * ce; + yaet = sin(az) * ce; + zaet = cos(zdt); + +/* Cartesian Az,ZD to Cartesian -HA,Dec. */ + xmhda = sphi*xaet + cphi*zaet; + ymhda = yaet; + zmhda = - cphi*xaet + sphi*zaet; + +/* Diurnal aberration. */ + f = ( 1.0 + astrom->diurab*ymhda ); + xhd = f * xmhda; + yhd = f * ( ymhda - astrom->diurab ); + zhd = f * zmhda; + +/* Polar motion. */ + xpl = astrom->xpl; + ypl = astrom->ypl; + w = xpl*xhd - ypl*yhd + zhd; + v[0] = xhd - xpl*w; + v[1] = yhd + ypl*w; + v[2] = w - ( xpl*xpl + ypl*ypl ) * zhd; + +/* To spherical -HA,Dec. */ + iauC2s(v, &hma, di); + +/* Right ascension. */ + *ri = iauAnp(astrom->eral + hma); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/bi00.c b/20200721/c/src/bi00.c new file mode 100644 index 0000000..19e2921 --- /dev/null +++ b/20200721/c/src/bi00.c @@ -0,0 +1,166 @@ +#include "sofa.h" + +void iauBi00(double *dpsibi, double *depsbi, double *dra) +/* +** - - - - - - - - +** i a u B i 0 0 +** - - - - - - - - +** +** Frame bias components of IAU 2000 precession-nutation models (part +** of MHB2000 with additions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Returned: +** dpsibi,depsbi double longitude and obliquity corrections +** dra double the ICRS RA of the J2000.0 mean equinox +** +** Notes: +** +** 1) The frame bias corrections in longitude and obliquity (radians) +** are required in order to correct for the offset between the GCRS +** pole and the mean J2000.0 pole. They define, with respect to the +** GCRS frame, a J2000.0 mean pole that is consistent with the rest +** of the IAU 2000A precession-nutation model. +** +** 2) In addition to the displacement of the pole, the complete +** description of the frame bias requires also an offset in right +** ascension. This is not part of the IAU 2000A model, and is from +** Chapront et al. (2002). It is returned in radians. +** +** 3) This is a supplemented implementation of one aspect of the IAU +** 2000A nutation model, formally adopted by the IAU General +** Assembly in 2000, namely MHB2000 (Mathews et al. 2002). +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G., Astron. +** Astrophys., 387, 700, 2002. +** +** Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation +** and precession New nutation series for nonrigid Earth and +** insights into the Earth's interior", J.Geophys.Res., 107, B4, +** 2002. The MHB2000 code itself was obtained on 9th September 2002 +** from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* The frame bias corrections in longitude and obliquity */ + const double DPBIAS = -0.041775 * DAS2R, + DEBIAS = -0.0068192 * DAS2R; + +/* The ICRS RA of the J2000.0 equinox (Chapront et al., 2002) */ + const double DRA0 = -0.0146 * DAS2R; + + +/* Return the results (which are fixed). */ + *dpsibi = DPBIAS; + *depsbi = DEBIAS; + *dra = DRA0; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/bp00.c b/20200721/c/src/bp00.c new file mode 100644 index 0000000..058a797 --- /dev/null +++ b/20200721/c/src/bp00.c @@ -0,0 +1,222 @@ +#include "sofa.h" + +void iauBp00(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]) +/* +** - - - - - - - - +** i a u B p 0 0 +** - - - - - - - - +** +** Frame bias and precession, IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rb double[3][3] frame bias matrix (Note 2) +** rp double[3][3] precession matrix (Note 3) +** rbp double[3][3] bias-precession matrix (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 3) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 4) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 5) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauBi00 frame bias components, IAU 2000 +** iauPr00 IAU 2000 precession adjustments +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRy rotate around Y-axis +** iauRz rotate around Z-axis +** iauCr copy r-matrix +** iauRxr product of two r-matrices +** +** Reference: +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** This revision: 2013 August 21 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* J2000.0 obliquity (Lieske et al. 1977) */ + const double EPS0 = 84381.448 * DAS2R; + + double t, dpsibi, depsbi, dra0, psia77, oma77, chia, + dpsipr, depspr, psia, oma, rbw[3][3]; + + +/* Interval between fundamental epoch J2000.0 and current date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Frame bias. */ + iauBi00(&dpsibi, &depsbi, &dra0); + +/* Precession angles (Lieske et al. 1977) */ + psia77 = (5038.7784 + (-1.07259 + (-0.001147) * t) * t) * t * DAS2R; + oma77 = EPS0 + ((0.05127 + (-0.007726) * t) * t) * t * DAS2R; + chia = ( 10.5526 + (-2.38064 + (-0.001125) * t) * t) * t * DAS2R; + +/* Apply IAU 2000 precession corrections. */ + iauPr00(date1, date2, &dpsipr, &depspr); + psia = psia77 + dpsipr; + oma = oma77 + depspr; + +/* Frame bias matrix: GCRS to J2000.0. */ + iauIr(rbw); + iauRz(dra0, rbw); + iauRy(dpsibi*sin(EPS0), rbw); + iauRx(-depsbi, rbw); + iauCr(rbw, rb); + +/* Precession matrix: J2000.0 to mean of date. */ + iauIr(rp); + iauRx(EPS0, rp); + iauRz(-psia, rp); + iauRx(-oma, rp); + iauRz(chia, rp); + +/* Bias-precession matrix: GCRS to mean of date. */ + iauRxr(rp, rbw, rbp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/bp06.c b/20200721/c/src/bp06.c new file mode 100644 index 0000000..680d799 --- /dev/null +++ b/20200721/c/src/bp06.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +void iauBp06(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]) +/* +** - - - - - - - - +** i a u B p 0 6 +** - - - - - - - - +** +** Frame bias and precession, IAU 2006. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rb double[3][3] frame bias matrix (Note 2) +** rp double[3][3] precession matrix (Note 3) +** rbp double[3][3] bias-precession matrix (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 3) The matrix rp transforms vectors from mean J2000.0 to mean of +** date by applying precession. +** +** 4) The matrix rbp transforms vectors from GCRS to mean of date by +** applying frame bias then precession. It is the product rp x rb. +** +** 5) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** iauPmat06 PB matrix, IAU 2006 +** iauTr transpose r-matrix +** iauRxr product of two r-matrices +** iauCr copy r-matrix +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 August 21 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gamb, phib, psib, epsa, rbpw[3][3], rbt[3][3]; + + +/* B matrix. */ + iauPfw06(DJM0, DJM00, &gamb, &phib, &psib, &epsa); + iauFw2m(gamb, phib, psib, epsa, rb); + +/* PxB matrix (temporary). */ + iauPmat06(date1, date2, rbpw); + +/* P matrix. */ + iauTr(rb, rbt); + iauRxr(rbpw, rbt, rp); + +/* PxB matrix. */ + iauCr(rbpw, rbp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/bpn2xy.c b/20200721/c/src/bpn2xy.c new file mode 100644 index 0000000..28012e1 --- /dev/null +++ b/20200721/c/src/bpn2xy.c @@ -0,0 +1,150 @@ +#include "sofa.h" + +void iauBpn2xy(double rbpn[3][3], double *x, double *y) +/* +** - - - - - - - - - - +** i a u B p n 2 x y +** - - - - - - - - - - +** +** Extract from the bias-precession-nutation matrix the X,Y coordinates +** of the Celestial Intermediate Pole. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rbpn double[3][3] celestial-to-true matrix (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** +** Notes: +** +** 1) The matrix rbpn transforms vectors from GCRS to true equator (and +** CIO or equinox) of date, and therefore the Celestial Intermediate +** Pole unit vector is the bottom row of the matrix. +** +** 2) The arguments x,y are components of the Celestial Intermediate +** Pole unit vector in the Geocentric Celestial Reference System. +** +** Reference: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Extract the X,Y coordinates. */ + *x = rbpn[2][0]; + *y = rbpn[2][1]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2i00a.c b/20200721/c/src/c2i00a.c new file mode 100644 index 0000000..26042a0 --- /dev/null +++ b/20200721/c/src/c2i00a.c @@ -0,0 +1,189 @@ +#include "sofa.h" + +void iauC2i00a(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 0 a +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2000A precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauC2i00b function. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauC2ibpn celestial-to-intermediate matrix, given NPB matrix +** +** References: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3]; + + +/* Obtain the celestial-to-true matrix (IAU 2000A). */ + iauPnm00a(date1, date2, rbpn); + +/* Form the celestial-to-intermediate matrix. */ + iauC2ibpn(date1, date2, rbpn, rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2i00b.c b/20200721/c/src/c2i00b.c new file mode 100644 index 0000000..945e70e --- /dev/null +++ b/20200721/c/src/c2i00b.c @@ -0,0 +1,189 @@ +#include "sofa.h" + +void iauC2i00b(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 0 b +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2000B precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauC2i00a function. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauC2ibpn celestial-to-intermediate matrix, given NPB matrix +** +** References: +** +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 +** (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3]; + + +/* Obtain the celestial-to-true matrix (IAU 2000B). */ + iauPnm00b(date1, date2, rbpn); + +/* Form the celestial-to-intermediate matrix. */ + iauC2ibpn(date1, date2, rbpn, rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2i06a.c b/20200721/c/src/c2i06a.c new file mode 100644 index 0000000..7aa7046 --- /dev/null +++ b/20200721/c/src/c2i06a.c @@ -0,0 +1,186 @@ +#include "sofa.h" + +void iauC2i06a(double date1, double date2, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i 0 6 a +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date using the +** IAU 2006 precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3], x, y, s; + + +/* Obtain the celestial-to-true matrix (IAU 2006/2000A). */ + iauPnm06a(date1, date2, rbpn); + +/* Extract the X,Y coordinates. */ + iauBpn2xy(rbpn, &x, &y); + +/* Obtain the CIO locator. */ + s = iauS06(date1, date2, x, y); + +/* Form the celestial-to-intermediate matrix. */ + iauC2ixys(x, y, s, rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2ibpn.c b/20200721/c/src/c2ibpn.c new file mode 100644 index 0000000..0fae02c --- /dev/null +++ b/20200721/c/src/c2ibpn.c @@ -0,0 +1,192 @@ +#include "sofa.h" + +void iauC2ibpn(double date1, double date2, double rbpn[3][3], + double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i b p n +** - - - - - - - - - - +** +** Form the celestial-to-intermediate matrix for a given date given +** the bias-precession-nutation matrix. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** rbpn double[3][3] celestial-to-true matrix (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix rbpn transforms vectors from GCRS to true equator (and +** CIO or equinox) of date. Only the CIP (bottom row) is used. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 4) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauC2ixy celestial-to-intermediate matrix, given X,Y +** +** References: +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y; + + +/* Extract the X,Y coordinates. */ + iauBpn2xy(rbpn, &x, &y); + +/* Form the celestial-to-intermediate matrix (n.b. IAU 2000 specific). */ + iauC2ixy(date1, date2, x, y, rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2ixy.c b/20200721/c/src/c2ixy.c new file mode 100644 index 0000000..d584835 --- /dev/null +++ b/20200721/c/src/c2ixy.c @@ -0,0 +1,181 @@ +#include "sofa.h" + +void iauC2ixy(double date1, double date2, double x, double y, + double rc2i[3][3]) +/* +** - - - - - - - - - +** i a u C 2 i x y +** - - - - - - - - - +** +** Form the celestial to intermediate-frame-of-date matrix for a given +** date when the CIP X,Y coordinates are known. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double Celestial Intermediate Pole (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y components +** of the unit vector in the Geocentric Celestial Reference System. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 4) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauC2ixys celestial-to-intermediate matrix, given X,Y and s +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +{ +/* Compute s and then the matrix. */ + iauC2ixys(x, y, iauS00(date1, date2, x, y), rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2ixys.c b/20200721/c/src/c2ixys.c new file mode 100644 index 0000000..20e76ef --- /dev/null +++ b/20200721/c/src/c2ixys.c @@ -0,0 +1,173 @@ +#include "sofa.h" + +void iauC2ixys(double x, double y, double s, double rc2i[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 i x y s +** - - - - - - - - - - +** +** Form the celestial to intermediate-frame-of-date matrix given the CIP +** X,Y and the CIO locator s. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** x,y double Celestial Intermediate Pole (Note 1) +** s double the CIO locator s (Note 2) +** +** Returned: +** rc2i double[3][3] celestial-to-intermediate matrix (Note 3) +** +** Notes: +** +** 1) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 2) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 3) The matrix rc2i is the first stage in the transformation from +** celestial to terrestrial coordinates: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = RC2T * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2014 November 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r2, e, d; + + +/* Obtain the spherical angles E and d. */ + r2 = x*x + y*y; + e = (r2 > 0.0) ? atan2(y, x) : 0.0; + d = atan(sqrt(r2 / (1.0 - r2))); + +/* Form the matrix. */ + iauIr(rc2i); + iauRz(e, rc2i); + iauRy(d, rc2i); + iauRz(-(e+s), rc2i); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2s.c b/20200721/c/src/c2s.c new file mode 100644 index 0000000..09c5fc6 --- /dev/null +++ b/20200721/c/src/c2s.c @@ -0,0 +1,146 @@ +#include "sofa.h" + +void iauC2s(double p[3], double *theta, double *phi) +/* +** - - - - - - - +** i a u C 2 s +** - - - - - - - +** +** P-vector to spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** +** Notes: +** +** 1) The vector p can have any magnitude; only its direction is used. +** +** 2) If p is null, zero theta and phi are returned. +** +** 3) At either pole, zero theta is returned. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, d2; + + + x = p[0]; + y = p[1]; + z = p[2]; + d2 = x*x + y*y; + + *theta = (d2 == 0.0) ? 0.0 : atan2(y, x); + *phi = (z == 0.0) ? 0.0 : atan2(z, sqrt(d2)); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2t00a.c b/20200721/c/src/c2t00a.c new file mode 100644 index 0000000..391947a --- /dev/null +++ b/20200721/c/src/c2t00a.c @@ -0,0 +1,204 @@ +#include "sofa.h" + +void iauC2t00a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 0 a +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2000A nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** 4) A faster, but slightly less accurate result (about 1 mas), can +** be obtained by using instead the iauC2t00b function. +** +** Called: +** iauC2i00a celestial-to-intermediate matrix, IAU 2000A +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rc2i[3][3], era, sp, rpom[3][3]; + + +/* Form the celestial-to-intermediate matrix for this TT (IAU 2000A). */ + iauC2i00a(tta, ttb, rc2i ); + +/* Predict the Earth rotation angle for this UT1. */ + era = iauEra00(uta, utb); + +/* Estimate s'. */ + sp = iauSp00(tta, ttb); + +/* Form the polar motion matrix. */ + iauPom00(xp, yp, sp, rpom); + +/* Combine to form the celestial-to-terrestrial matrix. */ + iauC2tcio(rc2i, era, rpom, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2t00b.c b/20200721/c/src/c2t00b.c new file mode 100644 index 0000000..b3025b2 --- /dev/null +++ b/20200721/c/src/c2t00b.c @@ -0,0 +1,200 @@ +#include "sofa.h" + +void iauC2t00b(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 0 b +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2000B nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** 4) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauC2t00a function. +** +** Called: +** iauC2i00b celestial-to-intermediate matrix, IAU 2000B +** iauEra00 Earth rotation angle, IAU 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rc2i[3][3], era, rpom[3][3]; + + +/* Form the celestial-to-intermediate matrix for this TT (IAU 2000B). */ + iauC2i00b(tta, ttb, rc2i); + +/* Predict the Earth rotation angle for this UT1. */ + era = iauEra00(uta, utb); + +/* Form the polar motion matrix (neglecting s'). */ + iauPom00(xp, yp, 0.0, rpom); + +/* Combine to form the celestial-to-terrestrial matrix. */ + iauC2tcio(rc2i, era, rpom, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2t06a.c b/20200721/c/src/c2t06a.c new file mode 100644 index 0000000..d1b47f9 --- /dev/null +++ b/20200721/c/src/c2t06a.c @@ -0,0 +1,202 @@ +#include "sofa.h" + +void iauC2t06a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t 0 6 a +** - - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1 and +** the polar motion, using the IAU 2006 precession and IAU 2000A +** nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** xp,yp double coordinates of the pole (radians, Note 2) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 3) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 3) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RC2I is the +** celestial-to-intermediate matrix, ERA is the Earth rotation +** angle and RPOM is the polar motion matrix. +** +** Called: +** iauC2i06a celestial-to-intermediate matrix, IAU 2006/2000A +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rc2i[3][3], era, sp, rpom[3][3]; + + +/* Form the celestial-to-intermediate matrix for this TT. */ + iauC2i06a(tta, ttb, rc2i); + +/* Predict the Earth rotation angle for this UT1. */ + era = iauEra00(uta, utb); + +/* Estimate s'. */ + sp = iauSp00(tta, ttb); + +/* Form the polar motion matrix. */ + iauPom00(xp, yp, sp, rpom); + +/* Combine to form the celestial-to-terrestrial matrix. */ + iauC2tcio(rc2i, era, rpom, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2tcio.c b/20200721/c/src/c2tcio.c new file mode 100644 index 0000000..9685047 --- /dev/null +++ b/20200721/c/src/c2tcio.c @@ -0,0 +1,172 @@ +#include "sofa.h" + +void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3], + double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t c i o +** - - - - - - - - - - +** +** Assemble the celestial to terrestrial matrix from CIO-based +** components (the celestial-to-intermediate matrix, the Earth Rotation +** Angle and the polar motion matrix). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc2i double[3][3] celestial-to-intermediate matrix +** era double Earth rotation angle (radians) +** rpom double[3][3] polar-motion matrix +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix +** +** Notes: +** +** 1) This function constructs the rotation matrix that transforms +** vectors in the celestial system into vectors in the terrestrial +** system. It does so starting from precomputed components, namely +** the matrix which rotates from celestial coordinates to the +** intermediate frame, the Earth rotation angle and the polar motion +** matrix. One use of the present function is when generating a +** series of celestial-to-terrestrial matrices where only the Earth +** Rotation Angle changes, avoiding the considerable overhead of +** recomputing the precession-nutation more often than necessary to +** achieve given accuracy objectives. +** +** 2) The relationship between the arguments is as follows: +** +** [TRS] = RPOM * R_3(ERA) * rc2i * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003). +** +** Called: +** iauCr copy r-matrix +** iauRz rotate around Z-axis +** iauRxr product of two r-matrices +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** This revision: 2013 August 24 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r[3][3]; + + +/* Construct the matrix. */ + iauCr(rc2i, r); + iauRz(era, r); + iauRxr(rpom, r, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2teqx.c b/20200721/c/src/c2teqx.c new file mode 100644 index 0000000..c4878c7 --- /dev/null +++ b/20200721/c/src/c2teqx.c @@ -0,0 +1,172 @@ +#include "sofa.h" + +void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3], + double rc2t[3][3]) +/* +** - - - - - - - - - - +** i a u C 2 t e q x +** - - - - - - - - - - +** +** Assemble the celestial to terrestrial matrix from equinox-based +** components (the celestial-to-true matrix, the Greenwich Apparent +** Sidereal Time and the polar motion matrix). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rbpn double[3][3] celestial-to-true matrix +** gst double Greenwich (apparent) Sidereal Time (radians) +** rpom double[3][3] polar-motion matrix +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 2) +** +** Notes: +** +** 1) This function constructs the rotation matrix that transforms +** vectors in the celestial system into vectors in the terrestrial +** system. It does so starting from precomputed components, namely +** the matrix which rotates from celestial coordinates to the +** true equator and equinox of date, the Greenwich Apparent Sidereal +** Time and the polar motion matrix. One use of the present function +** is when generating a series of celestial-to-terrestrial matrices +** where only the Sidereal Time changes, avoiding the considerable +** overhead of recomputing the precession-nutation more often than +** necessary to achieve given accuracy objectives. +** +** 2) The relationship between the arguments is as follows: +** +** [TRS] = rpom * R_3(gst) * rbpn * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003). +** +** Called: +** iauCr copy r-matrix +** iauRz rotate around Z-axis +** iauRxr product of two r-matrices +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 August 24 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r[3][3]; + + +/* Construct the matrix. */ + iauCr(rbpn, r); + iauRz(gst, r); + iauRxr(rpom, r, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2tpe.c b/20200721/c/src/c2tpe.c new file mode 100644 index 0000000..99b186d --- /dev/null +++ b/20200721/c/src/c2tpe.c @@ -0,0 +1,217 @@ +#include "sofa.h" + +void iauC2tpe(double tta, double ttb, double uta, double utb, + double dpsi, double deps, double xp, double yp, + double rc2t[3][3]) +/* +** - - - - - - - - - +** i a u C 2 t p e +** - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1, +** the nutation and the polar motion. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** xp,yp double coordinates of the pole (radians, Note 3) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 4) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any of +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 4) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(GST) * RBPN * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), RBPN is the +** bias-precession-nutation matrix, GST is the Greenwich (apparent) +** Sidereal Time and RPOM is the polar motion matrix. +** +** 5) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauPn00 bias/precession/nutation results, IAU 2000 +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauEe00 equation of the equinoxes, IAU 2000 +** iauPom00 polar motion matrix +** iauC2teqx form equinox-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3], + rbpn[3][3], gmst, ee, sp, rpom[3][3]; + + +/* Form the celestial-to-true matrix for this TT. */ + iauPn00(tta, ttb, dpsi, deps, &epsa, rb, rp, rbp, rn, rbpn); + +/* Predict the Greenwich Mean Sidereal Time for this UT1 and TT. */ + gmst = iauGmst00(uta, utb, tta, ttb); + +/* Predict the equation of the equinoxes given TT and nutation. */ + ee = iauEe00(tta, ttb, epsa, dpsi); + +/* Estimate s'. */ + sp = iauSp00(tta, ttb); + +/* Form the polar motion matrix. */ + iauPom00(xp, yp, sp, rpom); + +/* Combine to form the celestial-to-terrestrial matrix. */ + iauC2teqx(rbpn, gmst + ee, rpom, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/c2txy.c b/20200721/c/src/c2txy.c new file mode 100644 index 0000000..f9baa5e --- /dev/null +++ b/20200721/c/src/c2txy.c @@ -0,0 +1,209 @@ +#include "sofa.h" + +void iauC2txy(double tta, double ttb, double uta, double utb, + double x, double y, double xp, double yp, + double rc2t[3][3]) +/* +** - - - - - - - - - +** i a u C 2 t x y +** - - - - - - - - - +** +** Form the celestial to terrestrial matrix given the date, the UT1, +** the CIP coordinates and the polar motion. IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** tta,ttb double TT as a 2-part Julian Date (Note 1) +** uta,utb double UT1 as a 2-part Julian Date (Note 1) +** x,y double Celestial Intermediate Pole (Note 2) +** xp,yp double coordinates of the pole (radians, Note 3) +** +** Returned: +** rc2t double[3][3] celestial-to-terrestrial matrix (Note 4) +** +** Notes: +** +** 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, +** apportioned in any convenient way between the arguments uta and +** utb. For example, JD(UT1)=2450123.7 could be expressed in any o +** these ways, among others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. In the case of uta,utb, the +** date & time method is best matched to the Earth rotation angle +** algorithm used: maximum precision is delivered when the uta +** argument is for 0hrs UT1 on the day in question and the utb +** argument lies in the range 0 to 1, or vice versa. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 4) The matrix rc2t transforms from celestial to terrestrial +** coordinates: +** +** [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] +** +** = rc2t * [CRS] +** +** where [CRS] is a vector in the Geocentric Celestial Reference +** System and [TRS] is a vector in the International Terrestrial +** Reference System (see IERS Conventions 2003), ERA is the Earth +** Rotation Angle and RPOM is the polar motion matrix. +** +** 5) Although its name does not include "00", This function is in fact +** specific to the IAU 2000 models. +** +** Called: +** iauC2ixy celestial-to-intermediate matrix, given X,Y +** iauEra00 Earth rotation angle, IAU 2000 +** iauSp00 the TIO locator s', IERS 2000 +** iauPom00 polar motion matrix +** iauC2tcio form CIO-based celestial-to-terrestrial matrix +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rc2i[3][3], era, sp, rpom[3][3]; + + +/* Form the celestial-to-intermediate matrix for this TT. */ + iauC2ixy(tta, ttb, x, y, rc2i); + +/* Predict the Earth rotation angle for this UT1. */ + era = iauEra00(uta, utb); + +/* Estimate s'. */ + sp = iauSp00(tta, ttb); + +/* Form the polar motion matrix. */ + iauPom00(xp, yp, sp, rpom); + +/* Combine to form the celestial-to-terrestrial matrix. */ + iauC2tcio(rc2i, era, rpom, rc2t); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/cal2jd.c b/20200721/c/src/cal2jd.c new file mode 100644 index 0000000..8130ee7 --- /dev/null +++ b/20200721/c/src/cal2jd.c @@ -0,0 +1,189 @@ +#include "sofa.h" + +int iauCal2jd(int iy, int im, int id, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u C a l 2 j d +** - - - - - - - - - - +** +** Gregorian Calendar to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** iy,im,id int year, month, day in Gregorian calendar (Note 1) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date for 0 hrs +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = bad year (Note 3: JD not computed) +** -2 = bad month (JD not computed) +** -3 = bad day (JD computed) +** +** Notes: +** +** 1) The algorithm used is valid from -4800 March 1, but this +** implementation rejects dates before -4799 January 1. +** +** 2) The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** 3) In early eras the conversion is from the "Proleptic Gregorian +** Calendar"; no account is taken of the date(s) of adoption of +** the Gregorian Calendar, nor is the AD/BC numbering convention +** observed. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +** This revision: 2013 August 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j, ly, my; + long iypmy; + +/* Earliest year allowed (4800BC) */ + const int IYMIN = -4799; + +/* Month lengths in days */ + static const int mtab[] + = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + + +/* Preset status. */ + j = 0; + +/* Validate year and month. */ + if (iy < IYMIN) return -1; + if (im < 1 || im > 12) return -2; + +/* If February in a leap year, 1, otherwise 0. */ + ly = ((im == 2) && !(iy%4) && (iy%100 || !(iy%400))); + +/* Validate day, taking into account leap years. */ + if ( (id < 1) || (id > (mtab[im-1] + ly))) j = -3; + +/* Return result. */ + my = (im - 14) / 12; + iypmy = (long) (iy + my); + *djm0 = DJM0; + *djm = (double)((1461L * (iypmy + 4800L)) / 4L + + (367L * (long) (im - 2 - 12 * my)) / 12L + - (3L * ((iypmy + 4900L) / 100L)) / 4L + + (long) id - 2432076L); + +/* Return status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/cp.c b/20200721/c/src/cp.c new file mode 100644 index 0000000..ab5ded2 --- /dev/null +++ b/20200721/c/src/cp.c @@ -0,0 +1,130 @@ +#include "sofa.h" + +void iauCp(double p[3], double c[3]) +/* +** - - - - - - +** i a u C p +** - - - - - - +** +** Copy a p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector to be copied +** +** Returned: +** c double[3] copy +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + c[0] = p[0]; + c[1] = p[1]; + c[2] = p[2]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/cpv.c b/20200721/c/src/cpv.c new file mode 100644 index 0000000..4bea81d --- /dev/null +++ b/20200721/c/src/cpv.c @@ -0,0 +1,132 @@ +#include "sofa.h" + +void iauCpv(double pv[2][3], double c[2][3]) +/* +** - - - - - - - +** i a u C p v +** - - - - - - - +** +** Copy a position/velocity vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] position/velocity vector to be copied +** +** Returned: +** c double[2][3] copy +** +** Called: +** iauCp copy p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauCp(pv[0], c[0]); + iauCp(pv[1], c[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/cr.c b/20200721/c/src/cr.c new file mode 100644 index 0000000..f161679 --- /dev/null +++ b/20200721/c/src/cr.c @@ -0,0 +1,133 @@ +#include "sofa.h" + +void iauCr(double r[3][3], double c[3][3]) +/* +** - - - - - - +** i a u C r +** - - - - - - +** +** Copy an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix to be copied +** +** Returned: +** c double[3][3] copy +** +** Called: +** iauCp copy p-vector +** +** This revision: 2016 May 19 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauCp(r[0], c[0]); + iauCp(r[1], c[1]); + iauCp(r[2], c[2]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/d2dtf.c b/20200721/c/src/d2dtf.c new file mode 100644 index 0000000..279e738 --- /dev/null +++ b/20200721/c/src/d2dtf.c @@ -0,0 +1,286 @@ +#include "sofa.h" +#include + +int iauD2dtf(const char *scale, int ndp, double d1, double d2, + int *iy, int *im, int *id, int ihmsf[4]) +/* +** - - - - - - - - - +** i a u D 2 d t f +** - - - - - - - - - +** +** Format for output a 2-part Julian Date (or in the case of UTC a +** quasi-JD form that includes special provision for leap seconds). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** scale char[] time scale ID (Note 1) +** ndp int resolution (Note 2) +** d1,d2 double time as a 2-part Julian Date (Notes 3,4) +** +** Returned: +** iy,im,id int year, month, day in Gregorian calendar (Note 5) +** ihmsf int[4] hours, minutes, seconds, fraction (Note 1) +** +** Returned (function value): +** int status: +1 = dubious year (Note 5) +** 0 = OK +** -1 = unacceptable date (Note 6) +** +** Notes: +** +** 1) scale identifies the time scale. Only the value "UTC" (in upper +** case) is significant, and enables handling of leap seconds (see +** Note 4). +** +** 2) ndp is the number of decimal places in the seconds field, and can +** have negative as well as positive values, such as: +** +** ndp resolution +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** +** The limits are platform dependent, but a safe range is -5 to +9. +** +** 3) d1+d2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where d1 is the Julian Day Number +** and d2 is the fraction of a day. In the case of UTC, where the +** use of JD is problematical, special conventions apply: see the +** next note. +** +** 4) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The SOFA internal convention is that +** the quasi-JD day represents UTC days whether the length is 86399, +** 86400 or 86401 SI seconds. In the 1960-1972 era there were +** smaller jumps (in either direction) each time the linear UTC(TAI) +** expression was changed, and these "mini-leaps" are also included +** in the SOFA convention. +** +** 5) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 6) For calendar conventions and limitations, see iauCal2jd. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauD2tf decompose days to hms +** iauDat delta(AT) = TAI-UTC +** +** This revision: 2014 February 15 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int leap; + char s; + int iy1, im1, id1, js, iy2, im2, id2, ihmsf1[4], i; + double a1, b1, fd, dat0, dat12, w, dat24, dleap; + + +/* The two-part JD. */ + a1 = d1; + b1 = d2; + +/* Provisional calendar date. */ + js = iauJd2cal(a1, b1, &iy1, &im1, &id1, &fd); + if ( js ) return -1; + +/* Is this a leap second day? */ + leap = 0; + if ( ! strcmp(scale,"UTC") ) { + + /* TAI-UTC at 0h today. */ + js = iauDat(iy1, im1, id1, 0.0, &dat0); + if ( js < 0 ) return -1; + + /* TAI-UTC at 12h today (to detect drift). */ + js = iauDat(iy1, im1, id1, 0.5, &dat12); + if ( js < 0 ) return -1; + + /* TAI-UTC at 0h tomorrow (to detect jumps). */ + js = iauJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w); + if ( js ) return -1; + js = iauDat(iy2, im2, id2, 0.0, &dat24); + if ( js < 0 ) return -1; + + /* Any sudden change in TAI-UTC (seconds). */ + dleap = dat24 - (2.0*dat12 - dat0); + + /* If leap second day, scale the fraction of a day into SI. */ + leap = (dleap != 0.0); + if (leap) fd += fd * dleap/DAYSEC; + } + +/* Provisional time of day. */ + iauD2tf ( ndp, fd, &s, ihmsf1 ); + +/* Has the (rounded) time gone past 24h? */ + if ( ihmsf1[0] > 23 ) { + + /* Yes. We probably need tomorrow's calendar date. */ + js = iauJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w); + if ( js ) return -1; + + /* Is today a leap second day? */ + if ( ! leap ) { + + /* No. Use 0h tomorrow. */ + iy1 = iy2; + im1 = im2; + id1 = id2; + ihmsf1[0] = 0; + ihmsf1[1] = 0; + ihmsf1[2] = 0; + + } else { + + /* Yes. Are we past the leap second itself? */ + if ( ihmsf1[2] > 0 ) { + + /* Yes. Use tomorrow but allow for the leap second. */ + iy1 = iy2; + im1 = im2; + id1 = id2; + ihmsf1[0] = 0; + ihmsf1[1] = 0; + ihmsf1[2] = 0; + + } else { + + /* No. Use 23 59 60... today. */ + ihmsf1[0] = 23; + ihmsf1[1] = 59; + ihmsf1[2] = 60; + } + + /* If rounding to 10s or coarser always go up to new day. */ + if ( ndp < 0 && ihmsf1[2] == 60 ) { + iy1 = iy2; + im1 = im2; + id1 = id2; + ihmsf1[0] = 0; + ihmsf1[1] = 0; + ihmsf1[2] = 0; + } + } + } + +/* Results. */ + *iy = iy1; + *im = im1; + *id = id1; + for ( i = 0; i < 4; i++ ) { + ihmsf[i] = ihmsf1[i]; + } + +/* Status. */ + return js; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/d2tf.c b/20200721/c/src/d2tf.c new file mode 100644 index 0000000..f50677a --- /dev/null +++ b/20200721/c/src/d2tf.c @@ -0,0 +1,210 @@ +#include "sofa.h" + +void iauD2tf(int ndp, double days, char *sign, int ihmsf[4]) +/* +** - - - - - - - - +** i a u D 2 t f +** - - - - - - - - +** +** Decompose days to hours, minutes, seconds, fraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** ndp int resolution (Note 1) +** days double interval in days +** +** Returned: +** sign char* '+' or '-' +** ihmsf int[4] hours, minutes, seconds, fraction +** +** Notes: +** +** 1) The argument ndp is interpreted as follows: +** +** ndp resolution +** : ...0000 00 00 +** -7 1000 00 00 +** -6 100 00 00 +** -5 10 00 00 +** -4 1 00 00 +** -3 0 10 00 +** -2 0 01 00 +** -1 0 00 10 +** 0 0 00 01 +** 1 0 00 00.1 +** 2 0 00 00.01 +** 3 0 00 00.001 +** : 0 00 00.000... +** +** 2) The largest positive useful value for ndp is determined by the +** size of days, the format of double on the target platform, and +** the risk of overflowing ihmsf[3]. On a typical platform, for +** days up to 1.0, the available floating-point precision might +** correspond to ndp=12. However, the practical limit is typically +** ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is +** only 16 bits. +** +** 3) The absolute value of days may exceed 1.0. In cases where it +** does not, it is up to the caller to test for and handle the +** case where days is very nearly 1.0 and rounds up to 24 hours, +** by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero. +** +** This revision: 2020 April 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int nrs, n; + double rs, rm, rh, a, w, ah, am, as, af; + + +/* Handle sign. */ + *sign = (char) ( ( days >= 0.0 ) ? '+' : '-' ); + +/* Interval in seconds. */ + a = DAYSEC * fabs(days); + +/* Pre-round if resolution coarser than 1s (then pretend ndp=1). */ + if (ndp < 0) { + nrs = 1; + for (n = 1; n <= -ndp; n++) { + nrs *= (n == 2 || n == 4) ? 6 : 10; + } + rs = (double) nrs; + w = a / rs; + a = rs * dnint(w); + } + +/* Express the unit of each field in resolution units. */ + nrs = 1; + for (n = 1; n <= ndp; n++) { + nrs *= 10; + } + rs = (double) nrs; + rm = rs * 60.0; + rh = rm * 60.0; + +/* Round the interval and express in resolution units. */ + a = dnint(rs * a); + +/* Break into fields. */ + ah = a / rh; + ah = dint(ah); + a -= ah * rh; + am = a / rm; + am = dint(am); + a -= am * rm; + as = a / rs; + as = dint(as); + af = a - as * rs; + +/* Return results. */ + ihmsf[0] = (int) ah; + ihmsf[1] = (int) am; + ihmsf[2] = (int) as; + ihmsf[3] = (int) af; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/dat.c b/20200721/c/src/dat.c new file mode 100644 index 0000000..b7f60d6 --- /dev/null +++ b/20200721/c/src/dat.c @@ -0,0 +1,352 @@ +#include "sofa.h" + +int iauDat(int iy, int im, int id, double fd, double *deltat) +/* +** - - - - - - - +** i a u D a t +** - - - - - - - +** +** For a given UTC date, calculate Delta(AT) = TAI-UTC. +** +** :------------------------------------------: +** : : +** : IMPORTANT : +** : : +** : A new version of this function must be : +** : produced whenever a new leap second is : +** : announced. There are four items to : +** : change on each such occasion: : +** : : +** : 1) A new line must be added to the set : +** : of statements that initialize the : +** : array "changes". : +** : : +** : 2) The constant IYV must be set to the : +** : current year. : +** : : +** : 3) The "Latest leap second" comment : +** : below must be set to the new leap : +** : second date. : +** : : +** : 4) The "This revision" comment, later, : +** : must be set to the current date. : +** : : +** : Change (2) must also be carried out : +** : whenever the function is re-issued, : +** : even if no leap seconds have been : +** : added. : +** : : +** : Latest leap second: 2016 December 31 : +** : : +** :__________________________________________: +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: user-replaceable support function. +** +** Given: +** iy int UTC: year (Notes 1 and 2) +** im int month (Note 2) +** id int day (Notes 2 and 3) +** fd double fraction of day (Note 4) +** +** Returned: +** deltat double TAI minus UTC, seconds +** +** Returned (function value): +** int status (Note 5): +** 1 = dubious year (Note 1) +** 0 = OK +** -1 = bad year +** -2 = bad month +** -3 = bad day (Note 3) +** -4 = bad fraction (Note 4) +** -5 = internal error (Note 5) +** +** Notes: +** +** 1) UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper +** to call the function with an earlier date. If this is attempted, +** zero is returned together with a warning status. +** +** Because leap seconds cannot, in principle, be predicted in +** advance, a reliable check for dates beyond the valid range is +** impossible. To guard against gross errors, a year five or more +** after the release year of the present function (see the constant +** IYV) is considered dubious. In this case a warning status is +** returned but the result is computed in the normal way. +** +** For both too-early and too-late years, the warning status is +1. +** This is distinct from the error status -1, which signifies a year +** so early that JD could not be computed. +** +** 2) If the specified date is for a day which ends with a leap second, +** the TAI-UTC value returned is for the period leading up to the +** leap second. If the date is for a day which begins as a leap +** second ends, the TAI-UTC returned is for the period following the +** leap second. +** +** 3) The day number must be in the normal calendar range, for example +** 1 through 30 for April. The "almanac" convention of allowing +** such dates as January 0 and December 32 is not supported in this +** function, in order to avoid confusion near leap seconds. +** +** 4) The fraction of day is used only for dates before the +** introduction of leap seconds, the first of which occurred at the +** end of 1971. It is tested for validity (0 to 1 is the valid +** range) even if not used; if invalid, zero is used and status -4 +** is returned. For many applications, setting fd to zero is +** acceptable; the resulting error is always less than 3 ms (and +** occurs only pre-1972). +** +** 5) The status value returned in the case where there are multiple +** errors refers to the first error detected. For example, if the +** month and day are 13 and 32 respectively, status -2 (bad month) +** will be returned. The "internal error" status refers to a +** case that is impossible but causes some compilers to issue a +** warning. +** +** 6) In cases where a valid result is not available, zero is returned. +** +** References: +** +** 1) For dates from 1961 January 1 onwards, the expressions from the +** file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used. +** +** 2) The 5ms timestep at 1961 January 1 is taken from 2.58.1 (p87) of +** the 1992 Explanatory Supplement. +** +** Called: +** iauCal2jd Gregorian calendar to JD +** +** This revision: 2020 May 31 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Release year for this version of iauDat */ + enum { IYV = 2020}; + +/* Reference dates (MJD) and drift rates (s/day), pre leap seconds */ + static const double drift[][2] = { + { 37300.0, 0.0012960 }, + { 37300.0, 0.0012960 }, + { 37300.0, 0.0012960 }, + { 37665.0, 0.0011232 }, + { 37665.0, 0.0011232 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 38761.0, 0.0012960 }, + { 39126.0, 0.0025920 }, + { 39126.0, 0.0025920 } + }; + +/* Number of Delta(AT) expressions before leap seconds were introduced */ + enum { NERA1 = (int) (sizeof drift / sizeof (double) / 2) }; + +/* Dates and Delta(AT)s */ + static const struct { + int iyear, month; + double delat; + } changes[] = { + { 1960, 1, 1.4178180 }, + { 1961, 1, 1.4228180 }, + { 1961, 8, 1.3728180 }, + { 1962, 1, 1.8458580 }, + { 1963, 11, 1.9458580 }, + { 1964, 1, 3.2401300 }, + { 1964, 4, 3.3401300 }, + { 1964, 9, 3.4401300 }, + { 1965, 1, 3.5401300 }, + { 1965, 3, 3.6401300 }, + { 1965, 7, 3.7401300 }, + { 1965, 9, 3.8401300 }, + { 1966, 1, 4.3131700 }, + { 1968, 2, 4.2131700 }, + { 1972, 1, 10.0 }, + { 1972, 7, 11.0 }, + { 1973, 1, 12.0 }, + { 1974, 1, 13.0 }, + { 1975, 1, 14.0 }, + { 1976, 1, 15.0 }, + { 1977, 1, 16.0 }, + { 1978, 1, 17.0 }, + { 1979, 1, 18.0 }, + { 1980, 1, 19.0 }, + { 1981, 7, 20.0 }, + { 1982, 7, 21.0 }, + { 1983, 7, 22.0 }, + { 1985, 7, 23.0 }, + { 1988, 1, 24.0 }, + { 1990, 1, 25.0 }, + { 1991, 1, 26.0 }, + { 1992, 7, 27.0 }, + { 1993, 7, 28.0 }, + { 1994, 7, 29.0 }, + { 1996, 1, 30.0 }, + { 1997, 7, 31.0 }, + { 1999, 1, 32.0 }, + { 2006, 1, 33.0 }, + { 2009, 1, 34.0 }, + { 2012, 7, 35.0 }, + { 2015, 7, 36.0 }, + { 2017, 1, 37.0 } + }; + +/* Number of Delta(AT) changes */ + enum { NDAT = (int) (sizeof changes / sizeof changes[0]) }; + +/* Miscellaneous local variables */ + int j, i, m; + double da, djm0, djm; + + +/* Initialize the result to zero. */ + *deltat = da = 0.0; + +/* If invalid fraction of a day, set error status and give up. */ + if (fd < 0.0 || fd > 1.0) return -4; + +/* Convert the date into an MJD. */ + j = iauCal2jd(iy, im, id, &djm0, &djm); + +/* If invalid year, month, or day, give up. */ + if (j < 0) return j; + +/* If pre-UTC year, set warning status and give up. */ + if (iy < changes[0].iyear) return 1; + +/* If suspiciously late year, set warning status but proceed. */ + if (iy > IYV + 5) j = 1; + +/* Combine year and month to form a date-ordered integer... */ + m = 12*iy + im; + +/* ...and use it to find the preceding table entry. */ + for (i = NDAT-1; i >=0; i--) { + if (m >= (12 * changes[i].iyear + changes[i].month)) break; + } + +/* Prevent underflow warnings. */ + if (i < 0) return -5; + +/* Get the Delta(AT). */ + da = changes[i].delat; + +/* If pre-1972, adjust for drift. */ + if (i < NERA1) da += (djm + fd - drift[i][0]) * drift[i][1]; + +/* Return the Delta(AT) value. */ + *deltat = da; + +/* Return the status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2018 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) UNLIKE OTHER SOFA SOFTWARE, WHICH IS STRICTLY "READ ONLY", +** USERS ARE PERMITTED TO REPLACE THIS FUNCTION WITH ONE USING +** THE SAME NAME BUT DIFFERENT CODE. This is to allow use of +** locally supported mechanisms for keeping track of leap +** seconds, perhaps file or network based. It avoids the need +** for applications to be relinked periodically in order to pick +** up SOFA updates. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ + +} diff --git a/20200721/c/src/dtdb.c b/20200721/c/src/dtdb.c new file mode 100644 index 0000000..d6ee573 --- /dev/null +++ b/20200721/c/src/dtdb.c @@ -0,0 +1,1263 @@ +#include "sofa.h" + +double iauDtdb(double date1, double date2, + double ut, double elong, double u, double v) +/* +** - - - - - - - - +** i a u D t d b +** - - - - - - - - +** +** An approximation to TDB-TT, the difference between barycentric +** dynamical time and terrestrial time, for an observer on the Earth. +** +** The different time scales - proper, coordinate and realized - are +** related to each other: +** +** TAI <- physically realized +** : +** offset <- observed (nominally +32.184s) +** : +** TT <- terrestrial time +** : +** rate adjustment (L_G) <- definition of TT +** : +** TCG <- time scale for GCRS +** : +** "periodic" terms <- iauDtdb is an implementation +** : +** rate adjustment (L_C) <- function of solar-system ephemeris +** : +** TCB <- time scale for BCRS +** : +** rate adjustment (-L_B) <- definition of TDB +** : +** TDB <- TCB scaled to track TT +** : +** "periodic" terms <- -iauDtdb is an approximation +** : +** TT <- terrestrial time +** +** Adopted values for the various constants can be found in the IERS +** Conventions (McCarthy & Petit 2003). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double date, TDB (Notes 1-3) +** ut double universal time (UT1, fraction of one day) +** elong double longitude (east positive, radians) +** u double distance from Earth spin axis (km) +** v double distance north of equatorial plane (km) +** +** Returned (function value): +** double TDB-TT (seconds) +** +** Notes: +** +** 1) The date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** Although the date is, formally, barycentric dynamical time (TDB), +** the terrestrial dynamical time (TT) can be used with no practical +** effect on the accuracy of the prediction. +** +** 2) TT can be regarded as a coordinate time that is realized as an +** offset of 32.184s from International Atomic Time, TAI. TT is a +** specific linear transformation of geocentric coordinate time TCG, +** which is the time scale for the Geocentric Celestial Reference +** System, GCRS. +** +** 3) TDB is a coordinate time, and is a specific linear transformation +** of barycentric coordinate time TCB, which is the time scale for +** the Barycentric Celestial Reference System, BCRS. +** +** 4) The difference TCG-TCB depends on the masses and positions of the +** bodies of the solar system and the velocity of the Earth. It is +** dominated by a rate difference, the residual being of a periodic +** character. The latter, which is modeled by the present function, +** comprises a main (annual) sinusoidal term of amplitude +** approximately 0.00166 seconds, plus planetary terms up to about +** 20 microseconds, and lunar and diurnal terms up to 2 microseconds. +** These effects come from the changing transverse Doppler effect +** and gravitational red-shift as the observer (on the Earth's +** surface) experiences variations in speed (with respect to the +** BCRS) and gravitational potential. +** +** 5) TDB can be regarded as the same as TCB but with a rate adjustment +** to keep it close to TT, which is convenient for many applications. +** The history of successive attempts to define TDB is set out in +** Resolution 3 adopted by the IAU General Assembly in 2006, which +** defines a fixed TDB(TCB) transformation that is consistent with +** contemporary solar-system ephemerides. Future ephemerides will +** imply slightly changed transformations between TCG and TCB, which +** could introduce a linear drift between TDB and TT; however, any +** such drift is unlikely to exceed 1 nanosecond per century. +** +** 6) The geocentric TDB-TT model used in the present function is that of +** Fairhead & Bretagnon (1990), in its full form. It was originally +** supplied by Fairhead (private communications with P.T.Wallace, +** 1990) as a Fortran subroutine. The present C function contains an +** adaptation of the Fairhead code. The numerical results are +** essentially unaffected by the changes, the differences with +** respect to the Fairhead & Bretagnon original being at the 1e-20 s +** level. +** +** The topocentric part of the model is from Moyer (1981) and +** Murray (1983), with fundamental arguments adapted from +** Simon et al. 1994. It is an approximation to the expression +** ( v / c ) . ( r / c ), where v is the barycentric velocity of +** the Earth, r is the geocentric position of the observer and +** c is the speed of light. +** +** By supplying zeroes for u and v, the topocentric part of the +** model can be nullified, and the function will return the Fairhead +** & Bretagnon result alone. +** +** 7) During the interval 1950-2050, the absolute accuracy is better +** than +/- 3 nanoseconds relative to time ephemerides obtained by +** direct numerical integrations based on the JPL DE405 solar system +** ephemeris. +** +** 8) It must be stressed that the present function is merely a model, +** and that numerical integration of solar-system ephemerides is the +** definitive method for predicting the relationship between TCG and +** TCB and hence between TT and TDB. +** +** References: +** +** Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247 +** (1990). +** +** IAU 2006 Resolution 3. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Moyer, T.D., Cel.Mech., 23, 33 (1981). +** +** Murray, C.A., Vectorial Astrometry, Adam Hilger (1983). +** +** Seidelmann, P.K. et al., Explanatory Supplement to the +** Astronomical Almanac, Chapter 2, University Science Books (1992). +** +** Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G. & Laskar, J., Astron.Astrophys., 282, 663-683 (1994). +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, tsol, w, elsun, emsun, d, elj, els, wt, w0, w1, w2, w3, w4, + wf, wj; + int j; + +/* +** ===================== +** Fairhead et al. model +** ===================== +** +** 787 sets of three coefficients. +** +** Each set is +** amplitude (microseconds) +** frequency (radians per Julian millennium since J2000.0) +** phase (radians) +** +** Sets 1-474 are the T**0 terms +** " 475-679 " " T**1 +** " 680-764 " " T**2 +** " 765-784 " " T**3 +** " 785-787 " " T**4 +*/ + + static const double fairhd[787][3] = { + /* 1, 10 */ + { 1656.674564e-6, 6283.075849991, 6.240054195 }, + { 22.417471e-6, 5753.384884897, 4.296977442 }, + { 13.839792e-6, 12566.151699983, 6.196904410 }, + { 4.770086e-6, 529.690965095, 0.444401603 }, + { 4.676740e-6, 6069.776754553, 4.021195093 }, + { 2.256707e-6, 213.299095438, 5.543113262 }, + { 1.694205e-6, -3.523118349, 5.025132748 }, + { 1.554905e-6, 77713.771467920, 5.198467090 }, + { 1.276839e-6, 7860.419392439, 5.988822341 }, + { 1.193379e-6, 5223.693919802, 3.649823730 }, + /* 11, 20 */ + { 1.115322e-6, 3930.209696220, 1.422745069 }, + { 0.794185e-6, 11506.769769794, 2.322313077 }, + { 0.447061e-6, 26.298319800, 3.615796498 }, + { 0.435206e-6, -398.149003408, 4.349338347 }, + { 0.600309e-6, 1577.343542448, 2.678271909 }, + { 0.496817e-6, 6208.294251424, 5.696701824 }, + { 0.486306e-6, 5884.926846583, 0.520007179 }, + { 0.432392e-6, 74.781598567, 2.435898309 }, + { 0.468597e-6, 6244.942814354, 5.866398759 }, + { 0.375510e-6, 5507.553238667, 4.103476804 }, + /* 21, 30 */ + { 0.243085e-6, -775.522611324, 3.651837925 }, + { 0.173435e-6, 18849.227549974, 6.153743485 }, + { 0.230685e-6, 5856.477659115, 4.773852582 }, + { 0.203747e-6, 12036.460734888, 4.333987818 }, + { 0.143935e-6, -796.298006816, 5.957517795 }, + { 0.159080e-6, 10977.078804699, 1.890075226 }, + { 0.119979e-6, 38.133035638, 4.551585768 }, + { 0.118971e-6, 5486.777843175, 1.914547226 }, + { 0.116120e-6, 1059.381930189, 0.873504123 }, + { 0.137927e-6, 11790.629088659, 1.135934669 }, + /* 31, 40 */ + { 0.098358e-6, 2544.314419883, 0.092793886 }, + { 0.101868e-6, -5573.142801634, 5.984503847 }, + { 0.080164e-6, 206.185548437, 2.095377709 }, + { 0.079645e-6, 4694.002954708, 2.949233637 }, + { 0.062617e-6, 20.775395492, 2.654394814 }, + { 0.075019e-6, 2942.463423292, 4.980931759 }, + { 0.064397e-6, 5746.271337896, 1.280308748 }, + { 0.063814e-6, 5760.498431898, 4.167901731 }, + { 0.048042e-6, 2146.165416475, 1.495846011 }, + { 0.048373e-6, 155.420399434, 2.251573730 }, + /* 41, 50 */ + { 0.058844e-6, 426.598190876, 4.839650148 }, + { 0.046551e-6, -0.980321068, 0.921573539 }, + { 0.054139e-6, 17260.154654690, 3.411091093 }, + { 0.042411e-6, 6275.962302991, 2.869567043 }, + { 0.040184e-6, -7.113547001, 3.565975565 }, + { 0.036564e-6, 5088.628839767, 3.324679049 }, + { 0.040759e-6, 12352.852604545, 3.981496998 }, + { 0.036507e-6, 801.820931124, 6.248866009 }, + { 0.036955e-6, 3154.687084896, 5.071801441 }, + { 0.042732e-6, 632.783739313, 5.720622217 }, + /* 51, 60 */ + { 0.042560e-6, 161000.685737473, 1.270837679 }, + { 0.040480e-6, 15720.838784878, 2.546610123 }, + { 0.028244e-6, -6286.598968340, 5.069663519 }, + { 0.033477e-6, 6062.663207553, 4.144987272 }, + { 0.034867e-6, 522.577418094, 5.210064075 }, + { 0.032438e-6, 6076.890301554, 0.749317412 }, + { 0.030215e-6, 7084.896781115, 3.389610345 }, + { 0.029247e-6, -71430.695617928, 4.183178762 }, + { 0.033529e-6, 9437.762934887, 2.404714239 }, + { 0.032423e-6, 8827.390269875, 5.541473556 }, + /* 61, 70 */ + { 0.027567e-6, 6279.552731642, 5.040846034 }, + { 0.029862e-6, 12139.553509107, 1.770181024 }, + { 0.022509e-6, 10447.387839604, 1.460726241 }, + { 0.020937e-6, 8429.241266467, 0.652303414 }, + { 0.020322e-6, 419.484643875, 3.735430632 }, + { 0.024816e-6, -1194.447010225, 1.087136918 }, + { 0.025196e-6, 1748.016413067, 2.901883301 }, + { 0.021691e-6, 14143.495242431, 5.952658009 }, + { 0.017673e-6, 6812.766815086, 3.186129845 }, + { 0.022567e-6, 6133.512652857, 3.307984806 }, + /* 71, 80 */ + { 0.016155e-6, 10213.285546211, 1.331103168 }, + { 0.014751e-6, 1349.867409659, 4.308933301 }, + { 0.015949e-6, -220.412642439, 4.005298270 }, + { 0.015974e-6, -2352.866153772, 6.145309371 }, + { 0.014223e-6, 17789.845619785, 2.104551349 }, + { 0.017806e-6, 73.297125859, 3.475975097 }, + { 0.013671e-6, -536.804512095, 5.971672571 }, + { 0.011942e-6, 8031.092263058, 2.053414715 }, + { 0.014318e-6, 16730.463689596, 3.016058075 }, + { 0.012462e-6, 103.092774219, 1.737438797 }, + /* 81, 90 */ + { 0.010962e-6, 3.590428652, 2.196567739 }, + { 0.015078e-6, 19651.048481098, 3.969480770 }, + { 0.010396e-6, 951.718406251, 5.717799605 }, + { 0.011707e-6, -4705.732307544, 2.654125618 }, + { 0.010453e-6, 5863.591206116, 1.913704550 }, + { 0.012420e-6, 4690.479836359, 4.734090399 }, + { 0.011847e-6, 5643.178563677, 5.489005403 }, + { 0.008610e-6, 3340.612426700, 3.661698944 }, + { 0.011622e-6, 5120.601145584, 4.863931876 }, + { 0.010825e-6, 553.569402842, 0.842715011 }, + /* 91, 100 */ + { 0.008666e-6, -135.065080035, 3.293406547 }, + { 0.009963e-6, 149.563197135, 4.870690598 }, + { 0.009858e-6, 6309.374169791, 1.061816410 }, + { 0.007959e-6, 316.391869657, 2.465042647 }, + { 0.010099e-6, 283.859318865, 1.942176992 }, + { 0.007147e-6, -242.728603974, 3.661486981 }, + { 0.007505e-6, 5230.807466803, 4.920937029 }, + { 0.008323e-6, 11769.853693166, 1.229392026 }, + { 0.007490e-6, -6256.777530192, 3.658444681 }, + { 0.009370e-6, 149854.400134205, 0.673880395 }, + /* 101, 110 */ + { 0.007117e-6, 38.027672636, 5.294249518 }, + { 0.007857e-6, 12168.002696575, 0.525733528 }, + { 0.007019e-6, 6206.809778716, 0.837688810 }, + { 0.006056e-6, 955.599741609, 4.194535082 }, + { 0.008107e-6, 13367.972631107, 3.793235253 }, + { 0.006731e-6, 5650.292110678, 5.639906583 }, + { 0.007332e-6, 36.648562930, 0.114858677 }, + { 0.006366e-6, 4164.311989613, 2.262081818 }, + { 0.006858e-6, 5216.580372801, 0.642063318 }, + { 0.006919e-6, 6681.224853400, 6.018501522 }, + /* 111, 120 */ + { 0.006826e-6, 7632.943259650, 3.458654112 }, + { 0.005308e-6, -1592.596013633, 2.500382359 }, + { 0.005096e-6, 11371.704689758, 2.547107806 }, + { 0.004841e-6, 5333.900241022, 0.437078094 }, + { 0.005582e-6, 5966.683980335, 2.246174308 }, + { 0.006304e-6, 11926.254413669, 2.512929171 }, + { 0.006603e-6, 23581.258177318, 5.393136889 }, + { 0.005123e-6, -1.484472708, 2.999641028 }, + { 0.004648e-6, 1589.072895284, 1.275847090 }, + { 0.005119e-6, 6438.496249426, 1.486539246 }, + /* 121, 130 */ + { 0.004521e-6, 4292.330832950, 6.140635794 }, + { 0.005680e-6, 23013.539539587, 4.557814849 }, + { 0.005488e-6, -3.455808046, 0.090675389 }, + { 0.004193e-6, 7234.794256242, 4.869091389 }, + { 0.003742e-6, 7238.675591600, 4.691976180 }, + { 0.004148e-6, -110.206321219, 3.016173439 }, + { 0.004553e-6, 11499.656222793, 5.554998314 }, + { 0.004892e-6, 5436.993015240, 1.475415597 }, + { 0.004044e-6, 4732.030627343, 1.398784824 }, + { 0.004164e-6, 12491.370101415, 5.650931916 }, + /* 131, 140 */ + { 0.004349e-6, 11513.883316794, 2.181745369 }, + { 0.003919e-6, 12528.018664345, 5.823319737 }, + { 0.003129e-6, 6836.645252834, 0.003844094 }, + { 0.004080e-6, -7058.598461315, 3.690360123 }, + { 0.003270e-6, 76.266071276, 1.517189902 }, + { 0.002954e-6, 6283.143160294, 4.447203799 }, + { 0.002872e-6, 28.449187468, 1.158692983 }, + { 0.002881e-6, 735.876513532, 0.349250250 }, + { 0.003279e-6, 5849.364112115, 4.893384368 }, + { 0.003625e-6, 6209.778724132, 1.473760578 }, + /* 141, 150 */ + { 0.003074e-6, 949.175608970, 5.185878737 }, + { 0.002775e-6, 9917.696874510, 1.030026325 }, + { 0.002646e-6, 10973.555686350, 3.918259169 }, + { 0.002575e-6, 25132.303399966, 6.109659023 }, + { 0.003500e-6, 263.083923373, 1.892100742 }, + { 0.002740e-6, 18319.536584880, 4.320519510 }, + { 0.002464e-6, 202.253395174, 4.698203059 }, + { 0.002409e-6, 2.542797281, 5.325009315 }, + { 0.003354e-6, -90955.551694697, 1.942656623 }, + { 0.002296e-6, 6496.374945429, 5.061810696 }, + /* 151, 160 */ + { 0.003002e-6, 6172.869528772, 2.797822767 }, + { 0.003202e-6, 27511.467873537, 0.531673101 }, + { 0.002954e-6, -6283.008539689, 4.533471191 }, + { 0.002353e-6, 639.897286314, 3.734548088 }, + { 0.002401e-6, 16200.772724501, 2.605547070 }, + { 0.003053e-6, 233141.314403759, 3.029030662 }, + { 0.003024e-6, 83286.914269554, 2.355556099 }, + { 0.002863e-6, 17298.182327326, 5.240963796 }, + { 0.002103e-6, -7079.373856808, 5.756641637 }, + { 0.002303e-6, 83996.847317911, 2.013686814 }, + /* 161, 170 */ + { 0.002303e-6, 18073.704938650, 1.089100410 }, + { 0.002381e-6, 63.735898303, 0.759188178 }, + { 0.002493e-6, 6386.168624210, 0.645026535 }, + { 0.002366e-6, 3.932153263, 6.215885448 }, + { 0.002169e-6, 11015.106477335, 4.845297676 }, + { 0.002397e-6, 6243.458341645, 3.809290043 }, + { 0.002183e-6, 1162.474704408, 6.179611691 }, + { 0.002353e-6, 6246.427287062, 4.781719760 }, + { 0.002199e-6, -245.831646229, 5.956152284 }, + { 0.001729e-6, 3894.181829542, 1.264976635 }, + /* 171, 180 */ + { 0.001896e-6, -3128.388765096, 4.914231596 }, + { 0.002085e-6, 35.164090221, 1.405158503 }, + { 0.002024e-6, 14712.317116458, 2.752035928 }, + { 0.001737e-6, 6290.189396992, 5.280820144 }, + { 0.002229e-6, 491.557929457, 1.571007057 }, + { 0.001602e-6, 14314.168113050, 4.203664806 }, + { 0.002186e-6, 454.909366527, 1.402101526 }, + { 0.001897e-6, 22483.848574493, 4.167932508 }, + { 0.001825e-6, -3738.761430108, 0.545828785 }, + { 0.001894e-6, 1052.268383188, 5.817167450 }, + /* 181, 190 */ + { 0.001421e-6, 20.355319399, 2.419886601 }, + { 0.001408e-6, 10984.192351700, 2.732084787 }, + { 0.001847e-6, 10873.986030480, 2.903477885 }, + { 0.001391e-6, -8635.942003763, 0.593891500 }, + { 0.001388e-6, -7.046236698, 1.166145902 }, + { 0.001810e-6, -88860.057071188, 0.487355242 }, + { 0.001288e-6, -1990.745017041, 3.913022880 }, + { 0.001297e-6, 23543.230504682, 3.063805171 }, + { 0.001335e-6, -266.607041722, 3.995764039 }, + { 0.001376e-6, 10969.965257698, 5.152914309 }, + /* 191, 200 */ + { 0.001745e-6, 244287.600007027, 3.626395673 }, + { 0.001649e-6, 31441.677569757, 1.952049260 }, + { 0.001416e-6, 9225.539273283, 4.996408389 }, + { 0.001238e-6, 4804.209275927, 5.503379738 }, + { 0.001472e-6, 4590.910180489, 4.164913291 }, + { 0.001169e-6, 6040.347246017, 5.841719038 }, + { 0.001039e-6, 5540.085789459, 2.769753519 }, + { 0.001004e-6, -170.672870619, 0.755008103 }, + { 0.001284e-6, 10575.406682942, 5.306538209 }, + { 0.001278e-6, 71.812653151, 4.713486491 }, + /* 201, 210 */ + { 0.001321e-6, 18209.330263660, 2.624866359 }, + { 0.001297e-6, 21228.392023546, 0.382603541 }, + { 0.000954e-6, 6282.095528923, 0.882213514 }, + { 0.001145e-6, 6058.731054289, 1.169483931 }, + { 0.000979e-6, 5547.199336460, 5.448375984 }, + { 0.000987e-6, -6262.300454499, 2.656486959 }, + { 0.001070e-6, -154717.609887482, 1.827624012 }, + { 0.000991e-6, 4701.116501708, 4.387001801 }, + { 0.001155e-6, -14.227094002, 3.042700750 }, + { 0.001176e-6, 277.034993741, 3.335519004 }, + /* 211, 220 */ + { 0.000890e-6, 13916.019109642, 5.601498297 }, + { 0.000884e-6, -1551.045222648, 1.088831705 }, + { 0.000876e-6, 5017.508371365, 3.969902609 }, + { 0.000806e-6, 15110.466119866, 5.142876744 }, + { 0.000773e-6, -4136.910433516, 0.022067765 }, + { 0.001077e-6, 175.166059800, 1.844913056 }, + { 0.000954e-6, -6284.056171060, 0.968480906 }, + { 0.000737e-6, 5326.786694021, 4.923831588 }, + { 0.000845e-6, -433.711737877, 4.749245231 }, + { 0.000819e-6, 8662.240323563, 5.991247817 }, + /* 221, 230 */ + { 0.000852e-6, 199.072001436, 2.189604979 }, + { 0.000723e-6, 17256.631536341, 6.068719637 }, + { 0.000940e-6, 6037.244203762, 6.197428148 }, + { 0.000885e-6, 11712.955318231, 3.280414875 }, + { 0.000706e-6, 12559.038152982, 2.824848947 }, + { 0.000732e-6, 2379.164473572, 2.501813417 }, + { 0.000764e-6, -6127.655450557, 2.236346329 }, + { 0.000908e-6, 131.541961686, 2.521257490 }, + { 0.000907e-6, 35371.887265976, 3.370195967 }, + { 0.000673e-6, 1066.495477190, 3.876512374 }, + /* 231, 240 */ + { 0.000814e-6, 17654.780539750, 4.627122566 }, + { 0.000630e-6, 36.027866677, 0.156368499 }, + { 0.000798e-6, 515.463871093, 5.151962502 }, + { 0.000798e-6, 148.078724426, 5.909225055 }, + { 0.000806e-6, 309.278322656, 6.054064447 }, + { 0.000607e-6, -39.617508346, 2.839021623 }, + { 0.000601e-6, 412.371096874, 3.984225404 }, + { 0.000646e-6, 11403.676995575, 3.852959484 }, + { 0.000704e-6, 13521.751441591, 2.300991267 }, + { 0.000603e-6, -65147.619767937, 4.140083146 }, + /* 241, 250 */ + { 0.000609e-6, 10177.257679534, 0.437122327 }, + { 0.000631e-6, 5767.611978898, 4.026532329 }, + { 0.000576e-6, 11087.285125918, 4.760293101 }, + { 0.000674e-6, 14945.316173554, 6.270510511 }, + { 0.000726e-6, 5429.879468239, 6.039606892 }, + { 0.000710e-6, 28766.924424484, 5.672617711 }, + { 0.000647e-6, 11856.218651625, 3.397132627 }, + { 0.000678e-6, -5481.254918868, 6.249666675 }, + { 0.000618e-6, 22003.914634870, 2.466427018 }, + { 0.000738e-6, 6134.997125565, 2.242668890 }, + /* 251, 260 */ + { 0.000660e-6, 625.670192312, 5.864091907 }, + { 0.000694e-6, 3496.032826134, 2.668309141 }, + { 0.000531e-6, 6489.261398429, 1.681888780 }, + { 0.000611e-6, -143571.324284214, 2.424978312 }, + { 0.000575e-6, 12043.574281889, 4.216492400 }, + { 0.000553e-6, 12416.588502848, 4.772158039 }, + { 0.000689e-6, 4686.889407707, 6.224271088 }, + { 0.000495e-6, 7342.457780181, 3.817285811 }, + { 0.000567e-6, 3634.621024518, 1.649264690 }, + { 0.000515e-6, 18635.928454536, 3.945345892 }, + /* 261, 270 */ + { 0.000486e-6, -323.505416657, 4.061673868 }, + { 0.000662e-6, 25158.601719765, 1.794058369 }, + { 0.000509e-6, 846.082834751, 3.053874588 }, + { 0.000472e-6, -12569.674818332, 5.112133338 }, + { 0.000461e-6, 6179.983075773, 0.513669325 }, + { 0.000641e-6, 83467.156352816, 3.210727723 }, + { 0.000520e-6, 10344.295065386, 2.445597761 }, + { 0.000493e-6, 18422.629359098, 1.676939306 }, + { 0.000478e-6, 1265.567478626, 5.487314569 }, + { 0.000472e-6, -18.159247265, 1.999707589 }, + /* 271, 280 */ + { 0.000559e-6, 11190.377900137, 5.783236356 }, + { 0.000494e-6, 9623.688276691, 3.022645053 }, + { 0.000463e-6, 5739.157790895, 1.411223013 }, + { 0.000432e-6, 16858.482532933, 1.179256434 }, + { 0.000574e-6, 72140.628666286, 1.758191830 }, + { 0.000484e-6, 17267.268201691, 3.290589143 }, + { 0.000550e-6, 4907.302050146, 0.864024298 }, + { 0.000399e-6, 14.977853527, 2.094441910 }, + { 0.000491e-6, 224.344795702, 0.878372791 }, + { 0.000432e-6, 20426.571092422, 6.003829241 }, + /* 281, 290 */ + { 0.000481e-6, 5749.452731634, 4.309591964 }, + { 0.000480e-6, 5757.317038160, 1.142348571 }, + { 0.000485e-6, 6702.560493867, 0.210580917 }, + { 0.000426e-6, 6055.549660552, 4.274476529 }, + { 0.000480e-6, 5959.570433334, 5.031351030 }, + { 0.000466e-6, 12562.628581634, 4.959581597 }, + { 0.000520e-6, 39302.096962196, 4.788002889 }, + { 0.000458e-6, 12132.439962106, 1.880103788 }, + { 0.000470e-6, 12029.347187887, 1.405611197 }, + { 0.000416e-6, -7477.522860216, 1.082356330 }, + /* 291, 300 */ + { 0.000449e-6, 11609.862544012, 4.179989585 }, + { 0.000465e-6, 17253.041107690, 0.353496295 }, + { 0.000362e-6, -4535.059436924, 1.583849576 }, + { 0.000383e-6, 21954.157609398, 3.747376371 }, + { 0.000389e-6, 17.252277143, 1.395753179 }, + { 0.000331e-6, 18052.929543158, 0.566790582 }, + { 0.000430e-6, 13517.870106233, 0.685827538 }, + { 0.000368e-6, -5756.908003246, 0.731374317 }, + { 0.000330e-6, 10557.594160824, 3.710043680 }, + { 0.000332e-6, 20199.094959633, 1.652901407 }, + /* 301, 310 */ + { 0.000384e-6, 11933.367960670, 5.827781531 }, + { 0.000387e-6, 10454.501386605, 2.541182564 }, + { 0.000325e-6, 15671.081759407, 2.178850542 }, + { 0.000318e-6, 138.517496871, 2.253253037 }, + { 0.000305e-6, 9388.005909415, 0.578340206 }, + { 0.000352e-6, 5749.861766548, 3.000297967 }, + { 0.000311e-6, 6915.859589305, 1.693574249 }, + { 0.000297e-6, 24072.921469776, 1.997249392 }, + { 0.000363e-6, -640.877607382, 5.071820966 }, + { 0.000323e-6, 12592.450019783, 1.072262823 }, + /* 311, 320 */ + { 0.000341e-6, 12146.667056108, 4.700657997 }, + { 0.000290e-6, 9779.108676125, 1.812320441 }, + { 0.000342e-6, 6132.028180148, 4.322238614 }, + { 0.000329e-6, 6268.848755990, 3.033827743 }, + { 0.000374e-6, 17996.031168222, 3.388716544 }, + { 0.000285e-6, -533.214083444, 4.687313233 }, + { 0.000338e-6, 6065.844601290, 0.877776108 }, + { 0.000276e-6, 24.298513841, 0.770299429 }, + { 0.000336e-6, -2388.894020449, 5.353796034 }, + { 0.000290e-6, 3097.883822726, 4.075291557 }, + /* 321, 330 */ + { 0.000318e-6, 709.933048357, 5.941207518 }, + { 0.000271e-6, 13095.842665077, 3.208912203 }, + { 0.000331e-6, 6073.708907816, 4.007881169 }, + { 0.000292e-6, 742.990060533, 2.714333592 }, + { 0.000362e-6, 29088.811415985, 3.215977013 }, + { 0.000280e-6, 12359.966151546, 0.710872502 }, + { 0.000267e-6, 10440.274292604, 4.730108488 }, + { 0.000262e-6, 838.969287750, 1.327720272 }, + { 0.000250e-6, 16496.361396202, 0.898769761 }, + { 0.000325e-6, 20597.243963041, 0.180044365 }, + /* 331, 340 */ + { 0.000268e-6, 6148.010769956, 5.152666276 }, + { 0.000284e-6, 5636.065016677, 5.655385808 }, + { 0.000301e-6, 6080.822454817, 2.135396205 }, + { 0.000294e-6, -377.373607916, 3.708784168 }, + { 0.000236e-6, 2118.763860378, 1.733578756 }, + { 0.000234e-6, 5867.523359379, 5.575209112 }, + { 0.000268e-6, -226858.238553767, 0.069432392 }, + { 0.000265e-6, 167283.761587465, 4.369302826 }, + { 0.000280e-6, 28237.233459389, 5.304829118 }, + { 0.000292e-6, 12345.739057544, 4.096094132 }, + /* 341, 350 */ + { 0.000223e-6, 19800.945956225, 3.069327406 }, + { 0.000301e-6, 43232.306658416, 6.205311188 }, + { 0.000264e-6, 18875.525869774, 1.417263408 }, + { 0.000304e-6, -1823.175188677, 3.409035232 }, + { 0.000301e-6, 109.945688789, 0.510922054 }, + { 0.000260e-6, 813.550283960, 2.389438934 }, + { 0.000299e-6, 316428.228673312, 5.384595078 }, + { 0.000211e-6, 5756.566278634, 3.789392838 }, + { 0.000209e-6, 5750.203491159, 1.661943545 }, + { 0.000240e-6, 12489.885628707, 5.684549045 }, + /* 351, 360 */ + { 0.000216e-6, 6303.851245484, 3.862942261 }, + { 0.000203e-6, 1581.959348283, 5.549853589 }, + { 0.000200e-6, 5642.198242609, 1.016115785 }, + { 0.000197e-6, -70.849445304, 4.690702525 }, + { 0.000227e-6, 6287.008003254, 2.911891613 }, + { 0.000197e-6, 533.623118358, 1.048982898 }, + { 0.000205e-6, -6279.485421340, 1.829362730 }, + { 0.000209e-6, -10988.808157535, 2.636140084 }, + { 0.000208e-6, -227.526189440, 4.127883842 }, + { 0.000191e-6, 415.552490612, 4.401165650 }, + /* 361, 370 */ + { 0.000190e-6, 29296.615389579, 4.175658539 }, + { 0.000264e-6, 66567.485864652, 4.601102551 }, + { 0.000256e-6, -3646.350377354, 0.506364778 }, + { 0.000188e-6, 13119.721102825, 2.032195842 }, + { 0.000185e-6, -209.366942175, 4.694756586 }, + { 0.000198e-6, 25934.124331089, 3.832703118 }, + { 0.000195e-6, 4061.219215394, 3.308463427 }, + { 0.000234e-6, 5113.487598583, 1.716090661 }, + { 0.000188e-6, 1478.866574064, 5.686865780 }, + { 0.000222e-6, 11823.161639450, 1.942386641 }, + /* 371, 380 */ + { 0.000181e-6, 10770.893256262, 1.999482059 }, + { 0.000171e-6, 6546.159773364, 1.182807992 }, + { 0.000206e-6, 70.328180442, 5.934076062 }, + { 0.000169e-6, 20995.392966449, 2.169080622 }, + { 0.000191e-6, 10660.686935042, 5.405515999 }, + { 0.000228e-6, 33019.021112205, 4.656985514 }, + { 0.000184e-6, -4933.208440333, 3.327476868 }, + { 0.000220e-6, -135.625325010, 1.765430262 }, + { 0.000166e-6, 23141.558382925, 3.454132746 }, + { 0.000191e-6, 6144.558353121, 5.020393445 }, + /* 381, 390 */ + { 0.000180e-6, 6084.003848555, 0.602182191 }, + { 0.000163e-6, 17782.732072784, 4.960593133 }, + { 0.000225e-6, 16460.333529525, 2.596451817 }, + { 0.000222e-6, 5905.702242076, 3.731990323 }, + { 0.000204e-6, 227.476132789, 5.636192701 }, + { 0.000159e-6, 16737.577236597, 3.600691544 }, + { 0.000200e-6, 6805.653268085, 0.868220961 }, + { 0.000187e-6, 11919.140866668, 2.629456641 }, + { 0.000161e-6, 127.471796607, 2.862574720 }, + { 0.000205e-6, 6286.666278643, 1.742882331 }, + /* 391, 400 */ + { 0.000189e-6, 153.778810485, 4.812372643 }, + { 0.000168e-6, 16723.350142595, 0.027860588 }, + { 0.000149e-6, 11720.068865232, 0.659721876 }, + { 0.000189e-6, 5237.921013804, 5.245313000 }, + { 0.000143e-6, 6709.674040867, 4.317625647 }, + { 0.000146e-6, 4487.817406270, 4.815297007 }, + { 0.000144e-6, -664.756045130, 5.381366880 }, + { 0.000175e-6, 5127.714692584, 4.728443327 }, + { 0.000162e-6, 6254.626662524, 1.435132069 }, + { 0.000187e-6, 47162.516354635, 1.354371923 }, + /* 401, 410 */ + { 0.000146e-6, 11080.171578918, 3.369695406 }, + { 0.000180e-6, -348.924420448, 2.490902145 }, + { 0.000148e-6, 151.047669843, 3.799109588 }, + { 0.000157e-6, 6197.248551160, 1.284375887 }, + { 0.000167e-6, 146.594251718, 0.759969109 }, + { 0.000133e-6, -5331.357443741, 5.409701889 }, + { 0.000154e-6, 95.979227218, 3.366890614 }, + { 0.000148e-6, -6418.140930027, 3.384104996 }, + { 0.000128e-6, -6525.804453965, 3.803419985 }, + { 0.000130e-6, 11293.470674356, 0.939039445 }, + /* 411, 420 */ + { 0.000152e-6, -5729.506447149, 0.734117523 }, + { 0.000138e-6, 210.117701700, 2.564216078 }, + { 0.000123e-6, 6066.595360816, 4.517099537 }, + { 0.000140e-6, 18451.078546566, 0.642049130 }, + { 0.000126e-6, 11300.584221356, 3.485280663 }, + { 0.000119e-6, 10027.903195729, 3.217431161 }, + { 0.000151e-6, 4274.518310832, 4.404359108 }, + { 0.000117e-6, 6072.958148291, 0.366324650 }, + { 0.000165e-6, -7668.637425143, 4.298212528 }, + { 0.000117e-6, -6245.048177356, 5.379518958 }, + /* 421, 430 */ + { 0.000130e-6, -5888.449964932, 4.527681115 }, + { 0.000121e-6, -543.918059096, 6.109429504 }, + { 0.000162e-6, 9683.594581116, 5.720092446 }, + { 0.000141e-6, 6219.339951688, 0.679068671 }, + { 0.000118e-6, 22743.409379516, 4.881123092 }, + { 0.000129e-6, 1692.165669502, 0.351407289 }, + { 0.000126e-6, 5657.405657679, 5.146592349 }, + { 0.000114e-6, 728.762966531, 0.520791814 }, + { 0.000120e-6, 52.596639600, 0.948516300 }, + { 0.000115e-6, 65.220371012, 3.504914846 }, + /* 431, 440 */ + { 0.000126e-6, 5881.403728234, 5.577502482 }, + { 0.000158e-6, 163096.180360983, 2.957128968 }, + { 0.000134e-6, 12341.806904281, 2.598576764 }, + { 0.000151e-6, 16627.370915377, 3.985702050 }, + { 0.000109e-6, 1368.660252845, 0.014730471 }, + { 0.000131e-6, 6211.263196841, 0.085077024 }, + { 0.000146e-6, 5792.741760812, 0.708426604 }, + { 0.000146e-6, -77.750543984, 3.121576600 }, + { 0.000107e-6, 5341.013788022, 0.288231904 }, + { 0.000138e-6, 6281.591377283, 2.797450317 }, + /* 441, 450 */ + { 0.000113e-6, -6277.552925684, 2.788904128 }, + { 0.000115e-6, -525.758811831, 5.895222200 }, + { 0.000138e-6, 6016.468808270, 6.096188999 }, + { 0.000139e-6, 23539.707386333, 2.028195445 }, + { 0.000146e-6, -4176.041342449, 4.660008502 }, + { 0.000107e-6, 16062.184526117, 4.066520001 }, + { 0.000142e-6, 83783.548222473, 2.936315115 }, + { 0.000128e-6, 9380.959672717, 3.223844306 }, + { 0.000135e-6, 6205.325306007, 1.638054048 }, + { 0.000101e-6, 2699.734819318, 5.481603249 }, + /* 451, 460 */ + { 0.000104e-6, -568.821874027, 2.205734493 }, + { 0.000103e-6, 6321.103522627, 2.440421099 }, + { 0.000119e-6, 6321.208885629, 2.547496264 }, + { 0.000138e-6, 1975.492545856, 2.314608466 }, + { 0.000121e-6, 137.033024162, 4.539108237 }, + { 0.000123e-6, 19402.796952817, 4.538074405 }, + { 0.000119e-6, 22805.735565994, 2.869040566 }, + { 0.000133e-6, 64471.991241142, 6.056405489 }, + { 0.000129e-6, -85.827298831, 2.540635083 }, + { 0.000131e-6, 13613.804277336, 4.005732868 }, + /* 461, 470 */ + { 0.000104e-6, 9814.604100291, 1.959967212 }, + { 0.000112e-6, 16097.679950283, 3.589026260 }, + { 0.000123e-6, 2107.034507542, 1.728627253 }, + { 0.000121e-6, 36949.230808424, 6.072332087 }, + { 0.000108e-6, -12539.853380183, 3.716133846 }, + { 0.000113e-6, -7875.671863624, 2.725771122 }, + { 0.000109e-6, 4171.425536614, 4.033338079 }, + { 0.000101e-6, 6247.911759770, 3.441347021 }, + { 0.000113e-6, 7330.728427345, 0.656372122 }, + { 0.000113e-6, 51092.726050855, 2.791483066 }, + /* 471, 480 */ + { 0.000106e-6, 5621.842923210, 1.815323326 }, + { 0.000101e-6, 111.430161497, 5.711033677 }, + { 0.000103e-6, 909.818733055, 2.812745443 }, + { 0.000101e-6, 1790.642637886, 1.965746028 }, + + /* T */ + { 102.156724e-6, 6283.075849991, 4.249032005 }, + { 1.706807e-6, 12566.151699983, 4.205904248 }, + { 0.269668e-6, 213.299095438, 3.400290479 }, + { 0.265919e-6, 529.690965095, 5.836047367 }, + { 0.210568e-6, -3.523118349, 6.262738348 }, + { 0.077996e-6, 5223.693919802, 4.670344204 }, + /* 481, 490 */ + { 0.054764e-6, 1577.343542448, 4.534800170 }, + { 0.059146e-6, 26.298319800, 1.083044735 }, + { 0.034420e-6, -398.149003408, 5.980077351 }, + { 0.032088e-6, 18849.227549974, 4.162913471 }, + { 0.033595e-6, 5507.553238667, 5.980162321 }, + { 0.029198e-6, 5856.477659115, 0.623811863 }, + { 0.027764e-6, 155.420399434, 3.745318113 }, + { 0.025190e-6, 5746.271337896, 2.980330535 }, + { 0.022997e-6, -796.298006816, 1.174411803 }, + { 0.024976e-6, 5760.498431898, 2.467913690 }, + /* 491, 500 */ + { 0.021774e-6, 206.185548437, 3.854787540 }, + { 0.017925e-6, -775.522611324, 1.092065955 }, + { 0.013794e-6, 426.598190876, 2.699831988 }, + { 0.013276e-6, 6062.663207553, 5.845801920 }, + { 0.011774e-6, 12036.460734888, 2.292832062 }, + { 0.012869e-6, 6076.890301554, 5.333425680 }, + { 0.012152e-6, 1059.381930189, 6.222874454 }, + { 0.011081e-6, -7.113547001, 5.154724984 }, + { 0.010143e-6, 4694.002954708, 4.044013795 }, + { 0.009357e-6, 5486.777843175, 3.416081409 }, + /* 501, 510 */ + { 0.010084e-6, 522.577418094, 0.749320262 }, + { 0.008587e-6, 10977.078804699, 2.777152598 }, + { 0.008628e-6, 6275.962302991, 4.562060226 }, + { 0.008158e-6, -220.412642439, 5.806891533 }, + { 0.007746e-6, 2544.314419883, 1.603197066 }, + { 0.007670e-6, 2146.165416475, 3.000200440 }, + { 0.007098e-6, 74.781598567, 0.443725817 }, + { 0.006180e-6, -536.804512095, 1.302642751 }, + { 0.005818e-6, 5088.628839767, 4.827723531 }, + { 0.004945e-6, -6286.598968340, 0.268305170 }, + /* 511, 520 */ + { 0.004774e-6, 1349.867409659, 5.808636673 }, + { 0.004687e-6, -242.728603974, 5.154890570 }, + { 0.006089e-6, 1748.016413067, 4.403765209 }, + { 0.005975e-6, -1194.447010225, 2.583472591 }, + { 0.004229e-6, 951.718406251, 0.931172179 }, + { 0.005264e-6, 553.569402842, 2.336107252 }, + { 0.003049e-6, 5643.178563677, 1.362634430 }, + { 0.002974e-6, 6812.766815086, 1.583012668 }, + { 0.003403e-6, -2352.866153772, 2.552189886 }, + { 0.003030e-6, 419.484643875, 5.286473844 }, + /* 521, 530 */ + { 0.003210e-6, -7.046236698, 1.863796539 }, + { 0.003058e-6, 9437.762934887, 4.226420633 }, + { 0.002589e-6, 12352.852604545, 1.991935820 }, + { 0.002927e-6, 5216.580372801, 2.319951253 }, + { 0.002425e-6, 5230.807466803, 3.084752833 }, + { 0.002656e-6, 3154.687084896, 2.487447866 }, + { 0.002445e-6, 10447.387839604, 2.347139160 }, + { 0.002990e-6, 4690.479836359, 6.235872050 }, + { 0.002890e-6, 5863.591206116, 0.095197563 }, + { 0.002498e-6, 6438.496249426, 2.994779800 }, + /* 531, 540 */ + { 0.001889e-6, 8031.092263058, 3.569003717 }, + { 0.002567e-6, 801.820931124, 3.425611498 }, + { 0.001803e-6, -71430.695617928, 2.192295512 }, + { 0.001782e-6, 3.932153263, 5.180433689 }, + { 0.001694e-6, -4705.732307544, 4.641779174 }, + { 0.001704e-6, -1592.596013633, 3.997097652 }, + { 0.001735e-6, 5849.364112115, 0.417558428 }, + { 0.001643e-6, 8429.241266467, 2.180619584 }, + { 0.001680e-6, 38.133035638, 4.164529426 }, + { 0.002045e-6, 7084.896781115, 0.526323854 }, + /* 541, 550 */ + { 0.001458e-6, 4292.330832950, 1.356098141 }, + { 0.001437e-6, 20.355319399, 3.895439360 }, + { 0.001738e-6, 6279.552731642, 0.087484036 }, + { 0.001367e-6, 14143.495242431, 3.987576591 }, + { 0.001344e-6, 7234.794256242, 0.090454338 }, + { 0.001438e-6, 11499.656222793, 0.974387904 }, + { 0.001257e-6, 6836.645252834, 1.509069366 }, + { 0.001358e-6, 11513.883316794, 0.495572260 }, + { 0.001628e-6, 7632.943259650, 4.968445721 }, + { 0.001169e-6, 103.092774219, 2.838496795 }, + /* 551, 560 */ + { 0.001162e-6, 4164.311989613, 3.408387778 }, + { 0.001092e-6, 6069.776754553, 3.617942651 }, + { 0.001008e-6, 17789.845619785, 0.286350174 }, + { 0.001008e-6, 639.897286314, 1.610762073 }, + { 0.000918e-6, 10213.285546211, 5.532798067 }, + { 0.001011e-6, -6256.777530192, 0.661826484 }, + { 0.000753e-6, 16730.463689596, 3.905030235 }, + { 0.000737e-6, 11926.254413669, 4.641956361 }, + { 0.000694e-6, 3340.612426700, 2.111120332 }, + { 0.000701e-6, 3894.181829542, 2.760823491 }, + /* 561, 570 */ + { 0.000689e-6, -135.065080035, 4.768800780 }, + { 0.000700e-6, 13367.972631107, 5.760439898 }, + { 0.000664e-6, 6040.347246017, 1.051215840 }, + { 0.000654e-6, 5650.292110678, 4.911332503 }, + { 0.000788e-6, 6681.224853400, 4.699648011 }, + { 0.000628e-6, 5333.900241022, 5.024608847 }, + { 0.000755e-6, -110.206321219, 4.370971253 }, + { 0.000628e-6, 6290.189396992, 3.660478857 }, + { 0.000635e-6, 25132.303399966, 4.121051532 }, + { 0.000534e-6, 5966.683980335, 1.173284524 }, + /* 571, 580 */ + { 0.000543e-6, -433.711737877, 0.345585464 }, + { 0.000517e-6, -1990.745017041, 5.414571768 }, + { 0.000504e-6, 5767.611978898, 2.328281115 }, + { 0.000485e-6, 5753.384884897, 1.685874771 }, + { 0.000463e-6, 7860.419392439, 5.297703006 }, + { 0.000604e-6, 515.463871093, 0.591998446 }, + { 0.000443e-6, 12168.002696575, 4.830881244 }, + { 0.000570e-6, 199.072001436, 3.899190272 }, + { 0.000465e-6, 10969.965257698, 0.476681802 }, + { 0.000424e-6, -7079.373856808, 1.112242763 }, + /* 581, 590 */ + { 0.000427e-6, 735.876513532, 1.994214480 }, + { 0.000478e-6, -6127.655450557, 3.778025483 }, + { 0.000414e-6, 10973.555686350, 5.441088327 }, + { 0.000512e-6, 1589.072895284, 0.107123853 }, + { 0.000378e-6, 10984.192351700, 0.915087231 }, + { 0.000402e-6, 11371.704689758, 4.107281715 }, + { 0.000453e-6, 9917.696874510, 1.917490952 }, + { 0.000395e-6, 149.563197135, 2.763124165 }, + { 0.000371e-6, 5739.157790895, 3.112111866 }, + { 0.000350e-6, 11790.629088659, 0.440639857 }, + /* 591, 600 */ + { 0.000356e-6, 6133.512652857, 5.444568842 }, + { 0.000344e-6, 412.371096874, 5.676832684 }, + { 0.000383e-6, 955.599741609, 5.559734846 }, + { 0.000333e-6, 6496.374945429, 0.261537984 }, + { 0.000340e-6, 6055.549660552, 5.975534987 }, + { 0.000334e-6, 1066.495477190, 2.335063907 }, + { 0.000399e-6, 11506.769769794, 5.321230910 }, + { 0.000314e-6, 18319.536584880, 2.313312404 }, + { 0.000424e-6, 1052.268383188, 1.211961766 }, + { 0.000307e-6, 63.735898303, 3.169551388 }, + /* 601, 610 */ + { 0.000329e-6, 29.821438149, 6.106912080 }, + { 0.000357e-6, 6309.374169791, 4.223760346 }, + { 0.000312e-6, -3738.761430108, 2.180556645 }, + { 0.000301e-6, 309.278322656, 1.499984572 }, + { 0.000268e-6, 12043.574281889, 2.447520648 }, + { 0.000257e-6, 12491.370101415, 3.662331761 }, + { 0.000290e-6, 625.670192312, 1.272834584 }, + { 0.000256e-6, 5429.879468239, 1.913426912 }, + { 0.000339e-6, 3496.032826134, 4.165930011 }, + { 0.000283e-6, 3930.209696220, 4.325565754 }, + /* 611, 620 */ + { 0.000241e-6, 12528.018664345, 3.832324536 }, + { 0.000304e-6, 4686.889407707, 1.612348468 }, + { 0.000259e-6, 16200.772724501, 3.470173146 }, + { 0.000238e-6, 12139.553509107, 1.147977842 }, + { 0.000236e-6, 6172.869528772, 3.776271728 }, + { 0.000296e-6, -7058.598461315, 0.460368852 }, + { 0.000306e-6, 10575.406682942, 0.554749016 }, + { 0.000251e-6, 17298.182327326, 0.834332510 }, + { 0.000290e-6, 4732.030627343, 4.759564091 }, + { 0.000261e-6, 5884.926846583, 0.298259862 }, + /* 621, 630 */ + { 0.000249e-6, 5547.199336460, 3.749366406 }, + { 0.000213e-6, 11712.955318231, 5.415666119 }, + { 0.000223e-6, 4701.116501708, 2.703203558 }, + { 0.000268e-6, -640.877607382, 0.283670793 }, + { 0.000209e-6, 5636.065016677, 1.238477199 }, + { 0.000193e-6, 10177.257679534, 1.943251340 }, + { 0.000182e-6, 6283.143160294, 2.456157599 }, + { 0.000184e-6, -227.526189440, 5.888038582 }, + { 0.000182e-6, -6283.008539689, 0.241332086 }, + { 0.000228e-6, -6284.056171060, 2.657323816 }, + /* 631, 640 */ + { 0.000166e-6, 7238.675591600, 5.930629110 }, + { 0.000167e-6, 3097.883822726, 5.570955333 }, + { 0.000159e-6, -323.505416657, 5.786670700 }, + { 0.000154e-6, -4136.910433516, 1.517805532 }, + { 0.000176e-6, 12029.347187887, 3.139266834 }, + { 0.000167e-6, 12132.439962106, 3.556352289 }, + { 0.000153e-6, 202.253395174, 1.463313961 }, + { 0.000157e-6, 17267.268201691, 1.586837396 }, + { 0.000142e-6, 83996.847317911, 0.022670115 }, + { 0.000152e-6, 17260.154654690, 0.708528947 }, + /* 641, 650 */ + { 0.000144e-6, 6084.003848555, 5.187075177 }, + { 0.000135e-6, 5756.566278634, 1.993229262 }, + { 0.000134e-6, 5750.203491159, 3.457197134 }, + { 0.000144e-6, 5326.786694021, 6.066193291 }, + { 0.000160e-6, 11015.106477335, 1.710431974 }, + { 0.000133e-6, 3634.621024518, 2.836451652 }, + { 0.000134e-6, 18073.704938650, 5.453106665 }, + { 0.000134e-6, 1162.474704408, 5.326898811 }, + { 0.000128e-6, 5642.198242609, 2.511652591 }, + { 0.000160e-6, 632.783739313, 5.628785365 }, + /* 651, 660 */ + { 0.000132e-6, 13916.019109642, 0.819294053 }, + { 0.000122e-6, 14314.168113050, 5.677408071 }, + { 0.000125e-6, 12359.966151546, 5.251984735 }, + { 0.000121e-6, 5749.452731634, 2.210924603 }, + { 0.000136e-6, -245.831646229, 1.646502367 }, + { 0.000120e-6, 5757.317038160, 3.240883049 }, + { 0.000134e-6, 12146.667056108, 3.059480037 }, + { 0.000137e-6, 6206.809778716, 1.867105418 }, + { 0.000141e-6, 17253.041107690, 2.069217456 }, + { 0.000129e-6, -7477.522860216, 2.781469314 }, + /* 661, 670 */ + { 0.000116e-6, 5540.085789459, 4.281176991 }, + { 0.000116e-6, 9779.108676125, 3.320925381 }, + { 0.000129e-6, 5237.921013804, 3.497704076 }, + { 0.000113e-6, 5959.570433334, 0.983210840 }, + { 0.000122e-6, 6282.095528923, 2.674938860 }, + { 0.000140e-6, -11.045700264, 4.957936982 }, + { 0.000108e-6, 23543.230504682, 1.390113589 }, + { 0.000106e-6, -12569.674818332, 0.429631317 }, + { 0.000110e-6, -266.607041722, 5.501340197 }, + { 0.000115e-6, 12559.038152982, 4.691456618 }, + /* 671, 680 */ + { 0.000134e-6, -2388.894020449, 0.577313584 }, + { 0.000109e-6, 10440.274292604, 6.218148717 }, + { 0.000102e-6, -543.918059096, 1.477842615 }, + { 0.000108e-6, 21228.392023546, 2.237753948 }, + { 0.000101e-6, -4535.059436924, 3.100492232 }, + { 0.000103e-6, 76.266071276, 5.594294322 }, + { 0.000104e-6, 949.175608970, 5.674287810 }, + { 0.000101e-6, 13517.870106233, 2.196632348 }, + { 0.000100e-6, 11933.367960670, 4.056084160 }, + + /* T^2 */ + { 4.322990e-6, 6283.075849991, 2.642893748 }, + /* 681, 690 */ + { 0.406495e-6, 0.000000000, 4.712388980 }, + { 0.122605e-6, 12566.151699983, 2.438140634 }, + { 0.019476e-6, 213.299095438, 1.642186981 }, + { 0.016916e-6, 529.690965095, 4.510959344 }, + { 0.013374e-6, -3.523118349, 1.502210314 }, + { 0.008042e-6, 26.298319800, 0.478549024 }, + { 0.007824e-6, 155.420399434, 5.254710405 }, + { 0.004894e-6, 5746.271337896, 4.683210850 }, + { 0.004875e-6, 5760.498431898, 0.759507698 }, + { 0.004416e-6, 5223.693919802, 6.028853166 }, + /* 691, 700 */ + { 0.004088e-6, -7.113547001, 0.060926389 }, + { 0.004433e-6, 77713.771467920, 3.627734103 }, + { 0.003277e-6, 18849.227549974, 2.327912542 }, + { 0.002703e-6, 6062.663207553, 1.271941729 }, + { 0.003435e-6, -775.522611324, 0.747446224 }, + { 0.002618e-6, 6076.890301554, 3.633715689 }, + { 0.003146e-6, 206.185548437, 5.647874613 }, + { 0.002544e-6, 1577.343542448, 6.232904270 }, + { 0.002218e-6, -220.412642439, 1.309509946 }, + { 0.002197e-6, 5856.477659115, 2.407212349 }, + /* 701, 710 */ + { 0.002897e-6, 5753.384884897, 5.863842246 }, + { 0.001766e-6, 426.598190876, 0.754113147 }, + { 0.001738e-6, -796.298006816, 2.714942671 }, + { 0.001695e-6, 522.577418094, 2.629369842 }, + { 0.001584e-6, 5507.553238667, 1.341138229 }, + { 0.001503e-6, -242.728603974, 0.377699736 }, + { 0.001552e-6, -536.804512095, 2.904684667 }, + { 0.001370e-6, -398.149003408, 1.265599125 }, + { 0.001889e-6, -5573.142801634, 4.413514859 }, + { 0.001722e-6, 6069.776754553, 2.445966339 }, + /* 711, 720 */ + { 0.001124e-6, 1059.381930189, 5.041799657 }, + { 0.001258e-6, 553.569402842, 3.849557278 }, + { 0.000831e-6, 951.718406251, 2.471094709 }, + { 0.000767e-6, 4694.002954708, 5.363125422 }, + { 0.000756e-6, 1349.867409659, 1.046195744 }, + { 0.000775e-6, -11.045700264, 0.245548001 }, + { 0.000597e-6, 2146.165416475, 4.543268798 }, + { 0.000568e-6, 5216.580372801, 4.178853144 }, + { 0.000711e-6, 1748.016413067, 5.934271972 }, + { 0.000499e-6, 12036.460734888, 0.624434410 }, + /* 721, 730 */ + { 0.000671e-6, -1194.447010225, 4.136047594 }, + { 0.000488e-6, 5849.364112115, 2.209679987 }, + { 0.000621e-6, 6438.496249426, 4.518860804 }, + { 0.000495e-6, -6286.598968340, 1.868201275 }, + { 0.000456e-6, 5230.807466803, 1.271231591 }, + { 0.000451e-6, 5088.628839767, 0.084060889 }, + { 0.000435e-6, 5643.178563677, 3.324456609 }, + { 0.000387e-6, 10977.078804699, 4.052488477 }, + { 0.000547e-6, 161000.685737473, 2.841633844 }, + { 0.000522e-6, 3154.687084896, 2.171979966 }, + /* 731, 740 */ + { 0.000375e-6, 5486.777843175, 4.983027306 }, + { 0.000421e-6, 5863.591206116, 4.546432249 }, + { 0.000439e-6, 7084.896781115, 0.522967921 }, + { 0.000309e-6, 2544.314419883, 3.172606705 }, + { 0.000347e-6, 4690.479836359, 1.479586566 }, + { 0.000317e-6, 801.820931124, 3.553088096 }, + { 0.000262e-6, 419.484643875, 0.606635550 }, + { 0.000248e-6, 6836.645252834, 3.014082064 }, + { 0.000245e-6, -1592.596013633, 5.519526220 }, + { 0.000225e-6, 4292.330832950, 2.877956536 }, + /* 741, 750 */ + { 0.000214e-6, 7234.794256242, 1.605227587 }, + { 0.000205e-6, 5767.611978898, 0.625804796 }, + { 0.000180e-6, 10447.387839604, 3.499954526 }, + { 0.000229e-6, 199.072001436, 5.632304604 }, + { 0.000214e-6, 639.897286314, 5.960227667 }, + { 0.000175e-6, -433.711737877, 2.162417992 }, + { 0.000209e-6, 515.463871093, 2.322150893 }, + { 0.000173e-6, 6040.347246017, 2.556183691 }, + { 0.000184e-6, 6309.374169791, 4.732296790 }, + { 0.000227e-6, 149854.400134205, 5.385812217 }, + /* 751, 760 */ + { 0.000154e-6, 8031.092263058, 5.120720920 }, + { 0.000151e-6, 5739.157790895, 4.815000443 }, + { 0.000197e-6, 7632.943259650, 0.222827271 }, + { 0.000197e-6, 74.781598567, 3.910456770 }, + { 0.000138e-6, 6055.549660552, 1.397484253 }, + { 0.000149e-6, -6127.655450557, 5.333727496 }, + { 0.000137e-6, 3894.181829542, 4.281749907 }, + { 0.000135e-6, 9437.762934887, 5.979971885 }, + { 0.000139e-6, -2352.866153772, 4.715630782 }, + { 0.000142e-6, 6812.766815086, 0.513330157 }, + /* 761, 770 */ + { 0.000120e-6, -4705.732307544, 0.194160689 }, + { 0.000131e-6, -71430.695617928, 0.000379226 }, + { 0.000124e-6, 6279.552731642, 2.122264908 }, + { 0.000108e-6, -6256.777530192, 0.883445696 }, + + /* T^3 */ + { 0.143388e-6, 6283.075849991, 1.131453581 }, + { 0.006671e-6, 12566.151699983, 0.775148887 }, + { 0.001480e-6, 155.420399434, 0.480016880 }, + { 0.000934e-6, 213.299095438, 6.144453084 }, + { 0.000795e-6, 529.690965095, 2.941595619 }, + { 0.000673e-6, 5746.271337896, 0.120415406 }, + /* 771, 780 */ + { 0.000672e-6, 5760.498431898, 5.317009738 }, + { 0.000389e-6, -220.412642439, 3.090323467 }, + { 0.000373e-6, 6062.663207553, 3.003551964 }, + { 0.000360e-6, 6076.890301554, 1.918913041 }, + { 0.000316e-6, -21.340641002, 5.545798121 }, + { 0.000315e-6, -242.728603974, 1.884932563 }, + { 0.000278e-6, 206.185548437, 1.266254859 }, + { 0.000238e-6, -536.804512095, 4.532664830 }, + { 0.000185e-6, 522.577418094, 4.578313856 }, + { 0.000245e-6, 18849.227549974, 0.587467082 }, + /* 781, 787 */ + { 0.000180e-6, 426.598190876, 5.151178553 }, + { 0.000200e-6, 553.569402842, 5.355983739 }, + { 0.000141e-6, 5223.693919802, 1.336556009 }, + { 0.000104e-6, 5856.477659115, 4.239842759 }, + + /* T^4 */ + { 0.003826e-6, 6283.075849991, 5.705257275 }, + { 0.000303e-6, 12566.151699983, 5.407132842 }, + { 0.000209e-6, 155.420399434, 1.989815753 } + }; + + +/* Time since J2000.0 in Julian millennia. */ + t = ((date1 - DJ00) + date2) / DJM; + +/* ================= */ +/* Topocentric terms */ +/* ================= */ + +/* Convert UT to local solar time in radians. */ + tsol = fmod(ut, 1.0) * D2PI + elong; + +/* FUNDAMENTAL ARGUMENTS: Simon et al. 1994. */ + +/* Combine time argument (millennia) with deg/arcsec factor. */ + w = t / 3600.0; + +/* Sun Mean Longitude. */ + elsun = fmod(280.46645683 + 1296027711.03429 * w, 360.0) * DD2R; + +/* Sun Mean Anomaly. */ + emsun = fmod(357.52910918 + 1295965810.481 * w, 360.0) * DD2R; + +/* Mean Elongation of Moon from Sun. */ + d = fmod(297.85019547 + 16029616012.090 * w, 360.0) * DD2R; + +/* Mean Longitude of Jupiter. */ + elj = fmod(34.35151874 + 109306899.89453 * w, 360.0) * DD2R; + +/* Mean Longitude of Saturn. */ + els = fmod(50.07744430 + 44046398.47038 * w, 360.0) * DD2R; + +/* TOPOCENTRIC TERMS: Moyer 1981 and Murray 1983. */ + wt = + 0.00029e-10 * u * sin(tsol + elsun - els) + + 0.00100e-10 * u * sin(tsol - 2.0 * emsun) + + 0.00133e-10 * u * sin(tsol - d) + + 0.00133e-10 * u * sin(tsol + elsun - elj) + - 0.00229e-10 * u * sin(tsol + 2.0 * elsun + emsun) + - 0.02200e-10 * v * cos(elsun + emsun) + + 0.05312e-10 * u * sin(tsol - emsun) + - 0.13677e-10 * u * sin(tsol + 2.0 * elsun) + - 1.31840e-10 * v * cos(elsun) + + 3.17679e-10 * u * sin(tsol); + +/* ===================== */ +/* Fairhead et al. model */ +/* ===================== */ + +/* T**0 */ + w0 = 0; + for (j = 473; j >= 0; j--) { + w0 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]); + } + +/* T**1 */ + w1 = 0; + for (j = 678; j >= 474; j--) { + w1 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]); + } + +/* T**2 */ + w2 = 0; + for (j = 763; j >= 679; j--) { + w2 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]); + } + +/* T**3 */ + w3 = 0; + for (j = 783; j >= 764; j--) { + w3 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]); + } + +/* T**4 */ + w4 = 0; + for (j = 786; j >= 784; j--) { + w4 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]); + } + +/* Multiply by powers of T and combine. */ + wf = t * (t * (t * (t * w4 + w3) + w2) + w1) + w0; + +/* Adjustments to use JPL planetary masses instead of IAU. */ + wj = 0.00065e-6 * sin(6069.776754 * t + 4.021194) + + 0.00033e-6 * sin( 213.299095 * t + 5.543132) + + (-0.00196e-6 * sin(6208.294251 * t + 5.696701)) + + (-0.00173e-6 * sin( 74.781599 * t + 2.435900)) + + 0.03638e-6 * t * t; + +/* ============ */ +/* Final result */ +/* ============ */ + +/* TDB-TT in seconds. */ + w = wt + wf + wj; + + return w; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/dtf2d.c b/20200721/c/src/dtf2d.c new file mode 100644 index 0000000..200d93b --- /dev/null +++ b/20200721/c/src/dtf2d.c @@ -0,0 +1,253 @@ +#include "sofa.h" +#include + +int iauDtf2d(const char *scale, int iy, int im, int id, + int ihr, int imn, double sec, double *d1, double *d2) +/* +** - - - - - - - - - +** i a u D t f 2 d +** - - - - - - - - - +** +** Encode date and time fields into 2-part Julian Date (or in the case +** of UTC a quasi-JD form that includes special provision for leap +** seconds). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** scale char[] time scale ID (Note 1) +** iy,im,id int year, month, day in Gregorian calendar (Note 2) +** ihr,imn int hour, minute +** sec double seconds +** +** Returned: +** d1,d2 double 2-part Julian Date (Notes 3,4) +** +** Returned (function value): +** int status: +3 = both of next two +** +2 = time is after end of day (Note 5) +** +1 = dubious year (Note 6) +** 0 = OK +** -1 = bad year +** -2 = bad month +** -3 = bad day +** -4 = bad hour +** -5 = bad minute +** -6 = bad second (<0) +** +** Notes: +** +** 1) scale identifies the time scale. Only the value "UTC" (in upper +** case) is significant, and enables handling of leap seconds (see +** Note 4). +** +** 2) For calendar conventions and limitations, see iauCal2jd. +** +** 3) The sum of the results, d1+d2, is Julian Date, where normally d1 +** is the Julian Day Number and d2 is the fraction of a day. In the +** case of UTC, where the use of JD is problematical, special +** conventions apply: see the next note. +** +** 4) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The SOFA internal convention is that +** the quasi-JD day represents UTC days whether the length is 86399, +** 86400 or 86401 SI seconds. In the 1960-1972 era there were +** smaller jumps (in either direction) each time the linear UTC(TAI) +** expression was changed, and these "mini-leaps" are also included +** in the SOFA convention. +** +** 5) The warning status "time is after end of day" usually means that +** the sec argument is greater than 60.0. However, in a day ending +** in a leap second the limit changes to 61.0 (or 59.0 in the case +** of a negative leap second). +** +** 6) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 7) Only in the case of continuous and regular time scales (TAI, TT, +** TCG, TCB and TDB) is the result d1+d2 a Julian Date, strictly +** speaking. In the other cases (UT1 and UTC) the result must be +** used with circumspection; in particular the difference between +** two such results cannot be interpreted as a precise time +** interval. +** +** Called: +** iauCal2jd Gregorian calendar to JD +** iauDat delta(AT) = TAI-UTC +** iauJd2cal JD to Gregorian calendar +** +** This revision: 2013 July 26 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int js, iy2, im2, id2; + double dj, w, day, seclim, dat0, dat12, dat24, dleap, time; + + +/* Today's Julian Day Number. */ + js = iauCal2jd(iy, im, id, &dj, &w); + if ( js ) return js; + dj += w; + +/* Day length and final minute length in seconds (provisional). */ + day = DAYSEC; + seclim = 60.0; + +/* Deal with the UTC leap second case. */ + if ( ! strcmp(scale,"UTC") ) { + + /* TAI-UTC at 0h today. */ + js = iauDat(iy, im, id, 0.0, &dat0); + if ( js < 0 ) return js; + + /* TAI-UTC at 12h today (to detect drift). */ + js = iauDat(iy, im, id, 0.5, &dat12); + if ( js < 0 ) return js; + + /* TAI-UTC at 0h tomorrow (to detect jumps). */ + js = iauJd2cal ( dj, 1.5, &iy2, &im2, &id2, &w); + if ( js ) return js; + js = iauDat(iy2, im2, id2, 0.0, &dat24); + if ( js < 0 ) return js; + + /* Any sudden change in TAI-UTC between today and tomorrow. */ + dleap = dat24 - (2.0*dat12 - dat0); + + /* If leap second day, correct the day and final minute lengths. */ + day += dleap; + if ( ihr == 23 && imn == 59 ) seclim += dleap; + + /* End of UTC-specific actions. */ + } + +/* Validate the time. */ + if ( ihr >= 0 && ihr <= 23 ) { + if ( imn >= 0 && imn <= 59 ) { + if ( sec >= 0 ) { + if ( sec >= seclim ) { + js += 2; + } + } else { + js = -6; + } + } else { + js = -5; + } + } else { + js = -4; + } + if ( js < 0 ) return js; + +/* The time in days. */ + time = ( 60.0 * ( (double) ( 60 * ihr + imn ) ) + sec ) / day; + +/* Return the date and time. */ + *d1 = dj; + *d2 = time; + +/* Status. */ + return js; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eceq06.c b/20200721/c/src/eceq06.c new file mode 100644 index 0000000..ec42135 --- /dev/null +++ b/20200721/c/src/eceq06.c @@ -0,0 +1,182 @@ +#include "sofa.h" + +void iauEceq06(double date1, double date2, double dl, double db, + double *dr, double *dd) +/* +** - - - - - - - - - - +** i a u E c e q 0 6 +** - - - - - - - - - - +** +** Transformation from ecliptic coordinates (mean equinox and ecliptic +** of date) to ICRS RA,Dec, using the IAU 2006 precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** dl,db double ecliptic longitude and latitude (radians) +** +** Returned: +** dr,dd double ICRS right ascension and declination (radians) +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 3) The transformation is approximately that from ecliptic longitude +** and latitude (mean equinox and ecliptic of date) to mean J2000.0 +** right ascension and declination, with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauEcm06 J2000.0 to ecliptic rotation matrix, IAU 2006 +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rm[3][3], v1[3], v2[3], a, b; + + +/* Spherical to Cartesian. */ + iauS2c(dl, db, v1); + +/* Rotation matrix, ICRS equatorial to ecliptic. */ + iauEcm06(date1, date2, rm); + +/* The transformation from ecliptic to ICRS. */ + iauTrxp(rm, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, &a, &b); + +/* Express in conventional ranges. */ + *dr = iauAnp(a); + *dd = iauAnpm(b); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ecm06.c b/20200721/c/src/ecm06.c new file mode 100644 index 0000000..29ba346 --- /dev/null +++ b/20200721/c/src/ecm06.c @@ -0,0 +1,185 @@ +#include "sofa.h" + +void iauEcm06(double date1, double date2, double rm[3][3]) +/* +** - - - - - - - - - +** i a u E c m 0 6 +** - - - - - - - - - +** +** ICRS equatorial to ecliptic rotation matrix, IAU 2006. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** +** Returned: +** rm double[3][3] ICRS to ecliptic rotation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 1) The matrix is in the sense +** +** E_ep = rm x P_ICRS, +** +** where P_ICRS is a vector with respect to ICRS right ascension +** and declination axes and E_ep is the same vector with respect to +** the (inertial) ecliptic and equinox of date. +** +** 2) P_ICRS is a free vector, merely a direction, typically of unit +** magnitude, and not bound to any particular spatial origin, such +** as the Earth, Sun or SSB. No assumptions are made about whether +** it represents starlight and embodies astrometric effects such as +** parallax or aberration. The transformation is approximately that +** between mean J2000.0 right ascension and declination and ecliptic +** longitude and latitude, with only frame bias (always less than +** 25 mas) to disturb this classical picture. +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** iauPmat06 PB matrix, IAU 2006 +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRxr product of two r-matrices +** +** This revision: 2015 December 11 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ob, bp[3][3], e[3][3]; + + +/* Obliquity, IAU 2006. */ + ob = iauObl06(date1, date2); + +/* Precession-bias matrix, IAU 2006. */ + iauPmat06(date1, date2, bp); + +/* Equatorial of date to ecliptic matrix. */ + iauIr(e); + iauRx(ob, e); + +/* ICRS to ecliptic coordinates rotation matrix, IAU 2006. */ + iauRxr(e, bp, rm); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ee00.c b/20200721/c/src/ee00.c new file mode 100644 index 0000000..0e18788 --- /dev/null +++ b/20200721/c/src/ee00.c @@ -0,0 +1,178 @@ +#include "sofa.h" + +double iauEe00(double date1, double date2, double epsa, double dpsi) +/* +** - - - - - - - - +** i a u E e 0 0 +** - - - - - - - - +** +** The equation of the equinoxes, compatible with IAU 2000 resolutions, +** given the nutation in longitude and the mean obliquity. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** epsa double mean obliquity (Note 2) +** dpsi double nutation in longitude (Note 3) +** +** Returned (function value): +** double equation of the equinoxes (Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The obliquity, in radians, is mean of date. +** +** 3) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 4) The result is compatible with the IAU 2000 resolutions. For +** further details, see IERS Conventions 2003 and Capitaine et al. +** (2002). +** +** Called: +** iauEect00 equation of the equinoxes complementary terms +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2008 May 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ee; + + +/* Equation of the equinoxes. */ + ee = dpsi * cos(epsa) + iauEect00(date1, date2); + + return ee; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ee00a.c b/20200721/c/src/ee00a.c new file mode 100644 index 0000000..0db0cd1 --- /dev/null +++ b/20200721/c/src/ee00a.c @@ -0,0 +1,185 @@ +#include "sofa.h" + +double iauEe00a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 0 a +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 3) The result is compatible with the IAU 2000 resolutions. For +** further details, see IERS Conventions 2003 and Capitaine et al. +** (2002). +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauNut00a nutation, IAU 2000A +** iauEe00 equation of the equinoxes, IAU 2000 +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003). +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004). +** +** This revision: 2008 May 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsipr, depspr, epsa, dpsi, deps, ee; + + +/* IAU 2000 precession-rate adjustments. */ + iauPr00(date1, date2, &dpsipr, &depspr); + +/* Mean obliquity, consistent with IAU 2000 precession-nutation. */ + epsa = iauObl80(date1, date2) + depspr; + +/* Nutation in longitude. */ + iauNut00a(date1, date2, &dpsi, &deps); + +/* Equation of the equinoxes. */ + ee = iauEe00(date1, date2, epsa, dpsi); + + return ee; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ee00b.c b/20200721/c/src/ee00b.c new file mode 100644 index 0000000..0ccbb03 --- /dev/null +++ b/20200721/c/src/ee00b.c @@ -0,0 +1,191 @@ +#include "sofa.h" + +double iauEe00b(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 0 b +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions but +** using the truncated nutation model IAU 2000B. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** 3) The result is compatible with the IAU 2000 resolutions except +** that accuracy has been compromised for the sake of speed. For +** further details, see McCarthy & Luzum (2001), IERS Conventions +** 2003 and Capitaine et al. (2003). +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauNut00b nutation, IAU 2000B +** iauEe00 equation of the equinoxes, IAU 2000 +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Celestial Mechanics & +** Dynamical Astronomy, 85, 37-49 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2008 May 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsipr, depspr, epsa, dpsi, deps, ee; + + +/* IAU 2000 precession-rate adjustments. */ + iauPr00(date1, date2, &dpsipr, &depspr); + +/* Mean obliquity, consistent with IAU 2000 precession-nutation. */ + epsa = iauObl80(date1, date2) + depspr; + +/* Nutation in longitude. */ + iauNut00b(date1, date2, &dpsi, &deps); + +/* Equation of the equinoxes. */ + ee = iauEe00(date1, date2, epsa, dpsi); + + return ee; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ee06a.c b/20200721/c/src/ee06a.c new file mode 100644 index 0000000..c061a9e --- /dev/null +++ b/20200721/c/src/ee06a.c @@ -0,0 +1,172 @@ +#include "sofa.h" + +double iauEe06a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E e 0 6 a +** - - - - - - - - - +** +** Equation of the equinoxes, compatible with IAU 2000 resolutions and +** IAU 2006/2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** Called: +** iauAnpm normalize angle into range +/- pi +** iauGst06a Greenwich apparent sidereal time, IAU 2006/2000A +** iauGmst06 Greenwich mean sidereal time, IAU 2006 +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** This revision: 2008 May 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gst06a, gmst06, ee; + + +/* Apparent and mean sidereal times. */ + gst06a = iauGst06a(0.0, 0.0, date1, date2); + gmst06 = iauGmst06(0.0, 0.0, date1, date2); + +/* Equation of the equinoxes. */ + ee = iauAnpm(gst06a - gmst06); + + return ee; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eect00.c b/20200721/c/src/eect00.c new file mode 100644 index 0000000..72534de --- /dev/null +++ b/20200721/c/src/eect00.c @@ -0,0 +1,332 @@ +#include "sofa.h" + +double iauEect00(double date1, double date2) +/* +** - - - - - - - - - - +** i a u E e c t 0 0 +** - - - - - - - - - - +** +** Equation of the equinoxes complementary terms, consistent with +** IAU 2000 resolutions. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double complementary terms (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The "complementary terms" are part of the equation of the +** equinoxes (EE), classically the difference between apparent and +** mean Sidereal Time: +** +** GAST = GMST + EE +** +** with: +** +** EE = dpsi * cos(eps) +** +** where dpsi is the nutation in longitude and eps is the obliquity +** of date. However, if the rotation of the Earth were constant in +** an inertial frame the classical formulation would lead to +** apparent irregularities in the UT1 timescale traceable to side- +** effects of precession-nutation. In order to eliminate these +** effects from UT1, "complementary terms" were introduced in 1994 +** (IAU, 1994) and took effect from 1997 (Capitaine and Gontier, +** 1993): +** +** GAST = GMST + CT + EE +** +** By convention, the complementary terms are included as part of +** the equation of the equinoxes rather than as part of the mean +** Sidereal Time. This slightly compromises the "geometrical" +** interpretation of mean sidereal time but is otherwise +** inconsequential. +** +** The present function computes CT in the above expression, +** compatible with IAU 2000 resolutions (Capitaine et al., 2002, and +** IERS Conventions 2003). +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N. & Gontier, A.-M., Astron.Astrophys., 275, +** 645-650 (1993) +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astron.Astrophys., 406, +** 1135-1149 (2003) +** +** IAU Resolution C7, Recommendation 3 (1994) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Time since J2000.0, in Julian centuries */ + double t; + +/* Miscellaneous */ + int i, j; + double a, s0, s1; + +/* Fundamental arguments */ + double fa[14]; + +/* Returned value. */ + double eect; + +/* ----------------------------------------- */ +/* The series for the EE complementary terms */ +/* ----------------------------------------- */ + + typedef struct { + int nfa[8]; /* coefficients of l,l',F,D,Om,LVe,LE,pA */ + double s, c; /* sine and cosine coefficients */ + } TERM; + +/* Terms of order t^0 */ + static const TERM e0[] = { + + /* 1-10 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 2640.96e-6, -0.39e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, 63.52e-6, -0.02e-6 }, + {{ 0, 0, 2, -2, 3, 0, 0, 0}, 11.75e-6, 0.01e-6 }, + {{ 0, 0, 2, -2, 1, 0, 0, 0}, 11.21e-6, 0.01e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, -4.55e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 3, 0, 0, 0}, 2.02e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 1, 0, 0, 0}, 1.98e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 3, 0, 0, 0}, -1.72e-6, 0.00e-6 }, + {{ 0, 1, 0, 0, 1, 0, 0, 0}, -1.41e-6, -0.01e-6 }, + {{ 0, 1, 0, 0, -1, 0, 0, 0}, -1.26e-6, -0.01e-6 }, + + /* 11-20 */ + {{ 1, 0, 0, 0, -1, 0, 0, 0}, -0.63e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, 1, 0, 0, 0}, -0.63e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 3, 0, 0, 0}, 0.46e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 1, 0, 0, 0}, 0.45e-6, 0.00e-6 }, + {{ 0, 0, 4, -4, 4, 0, 0, 0}, 0.36e-6, 0.00e-6 }, + {{ 0, 0, 1, -1, 1, -8, 12, 0}, -0.24e-6, -0.12e-6 }, + {{ 0, 0, 2, 0, 0, 0, 0, 0}, 0.32e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, 0.28e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 3, 0, 0, 0}, 0.27e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 1, 0, 0, 0}, 0.26e-6, 0.00e-6 }, + + /* 21-30 */ + {{ 0, 0, 2, -2, 0, 0, 0, 0}, -0.21e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -3, 0, 0, 0}, 0.19e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -1, 0, 0, 0}, 0.18e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 0, 8,-13, -1}, -0.10e-6, 0.05e-6 }, + {{ 0, 0, 0, 2, 0, 0, 0, 0}, 0.15e-6, 0.00e-6 }, + {{ 2, 0, -2, 0, -1, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, 1, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 2, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, -1, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 0, 0, 4, -2, 4, 0, 0, 0}, 0.13e-6, 0.00e-6 }, + + /* 31-33 */ + {{ 0, 0, 2, -2, 4, 0, 0, 0}, -0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -3, 0, 0, 0}, 0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -1, 0, 0, 0}, 0.11e-6, 0.00e-6 } + }; + +/* Terms of order t^1 */ + static const TERM e1[] = { + {{ 0, 0, 0, 0, 1, 0, 0, 0}, -0.87e-6, 0.00e-6 } + }; + +/* Number of terms in the series */ + const int NE0 = (int) (sizeof e0 / sizeof (TERM)); + const int NE1 = (int) (sizeof e1 / sizeof (TERM)); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental epoch J2000.0 and current date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Fundamental Arguments (from IERS Conventions 2003) */ + +/* Mean anomaly of the Moon. */ + fa[0] = iauFal03(t); + +/* Mean anomaly of the Sun. */ + fa[1] = iauFalp03(t); + +/* Mean longitude of the Moon minus that of the ascending node. */ + fa[2] = iauFaf03(t); + +/* Mean elongation of the Moon from the Sun. */ + fa[3] = iauFad03(t); + +/* Mean longitude of the ascending node of the Moon. */ + fa[4] = iauFaom03(t); + +/* Mean longitude of Venus. */ + fa[5] = iauFave03(t); + +/* Mean longitude of Earth. */ + fa[6] = iauFae03(t); + +/* General precession in longitude. */ + fa[7] = iauFapa03(t); + +/* Evaluate the EE complementary terms. */ + s0 = 0.0; + s1 = 0.0; + + for (i = NE0-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)(e0[i].nfa[j]) * fa[j]; + } + s0 += e0[i].s * sin(a) + e0[i].c * cos(a); + } + + for (i = NE1-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)(e1[i].nfa[j]) * fa[j]; + } + s1 += e1[i].s * sin(a) + e1[i].c * cos(a); + } + + eect = (s0 + s1 * t ) * DAS2R; + + return eect; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eform.c b/20200721/c/src/eform.c new file mode 100644 index 0000000..645257b --- /dev/null +++ b/20200721/c/src/eform.c @@ -0,0 +1,196 @@ +#include "sofa.h" + +int iauEform ( int n, double *a, double *f ) +/* +** - - - - - - - - - +** i a u E f o r m +** - - - - - - - - - +** +** Earth reference ellipsoids. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** n int ellipsoid identifier (Note 1) +** +** Returned: +** a double equatorial radius (meters, Note 2) +** f double flattening (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The ellipsoid parameters are returned in the form of equatorial +** radius in meters (a) and flattening (f). The latter is a number +** around 0.00335, i.e. around 1/298. +** +** 3) For the case where an unsupported n value is supplied, zero a and +** f are returned, as well as error status. +** +** References: +** +** Department of Defense World Geodetic System 1984, National +** Imagery and Mapping Agency Technical Report 8350.2, Third +** Edition, p3-2. +** +** Moritz, H., Bull. Geodesique 66-2, 187 (1992). +** +** The Department of Defense World Geodetic System 1972, World +** Geodetic System Committee, May 1974. +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** p220. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Look up a and f for the specified reference ellipsoid. */ + switch ( n ) { + + case WGS84: + *a = 6378137.0; + *f = 1.0 / 298.257223563; + break; + + case GRS80: + *a = 6378137.0; + *f = 1.0 / 298.257222101; + break; + + case WGS72: + *a = 6378135.0; + *f = 1.0 / 298.26; + break; + + default: + + /* Invalid identifier. */ + *a = 0.0; + *f = 0.0; + return -1; + + } + +/* OK status. */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eo06a.c b/20200721/c/src/eo06a.c new file mode 100644 index 0000000..f38dd39 --- /dev/null +++ b/20200721/c/src/eo06a.c @@ -0,0 +1,181 @@ +#include "sofa.h" + +double iauEo06a(double date1, double date2) +/* +** - - - - - - - - - +** i a u E o 0 6 a +** - - - - - - - - - +** +** Equation of the origins, IAU 2006 precession and IAU 2000A nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double equation of the origins in radians +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The equation of the origins is the distance between the true +** equinox and the celestial intermediate origin and, equivalently, +** the difference between Earth rotation angle and Greenwich +** apparent sidereal time (ERA-GST). It comprises the precession +** (since J2000.0) in right ascension plus the equation of the +** equinoxes (including the small correction terms). +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauEors equation of the origins, given NPB matrix and s +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r[3][3], x, y, s, eo; + + +/* Classical nutation x precession x bias matrix. */ + iauPnm06a(date1, date2, r); + +/* Extract CIP coordinates. */ + iauBpn2xy(r, &x, &y); + +/* The CIO locator, s. */ + s = iauS06(date1, date2, x, y); + +/* Solve for the EO. */ + eo = iauEors(r, s); + + return eo; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eors.c b/20200721/c/src/eors.c new file mode 100644 index 0000000..21a7e3d --- /dev/null +++ b/20200721/c/src/eors.c @@ -0,0 +1,158 @@ +#include "sofa.h" + +double iauEors(double rnpb[3][3], double s) +/* +** - - - - - - - - +** i a u E o r s +** - - - - - - - - +** +** Equation of the origins, given the classical NPB matrix and the +** quantity s. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rnpb double[3][3] classical nutation x precession x bias matrix +** s double the quantity s (the CIO locator) +** +** Returned (function value): +** double the equation of the origins in radians. +** +** Notes: +** +** 1) The equation of the origins is the distance between the true +** equinox and the celestial intermediate origin and, equivalently, +** the difference between Earth rotation angle and Greenwich +** apparent sidereal time (ERA-GST). It comprises the precession +** (since J2000.0) in right ascension plus the equation of the +** equinoxes (including the small correction terms). +** +** 2) The algorithm is from Wallace & Capitaine (2006). +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, ax, xs, ys, zs, p, q, eo; + + +/* Evaluate Wallace & Capitaine (2006) expression (16). */ + x = rnpb[2][0]; + ax = x / (1.0 + rnpb[2][2]); + xs = 1.0 - ax * x; + ys = -ax * rnpb[2][1]; + zs = -x; + p = rnpb[0][0] * xs + rnpb[0][1] * ys + rnpb[0][2] * zs; + q = rnpb[1][0] * xs + rnpb[1][1] * ys + rnpb[1][2] * zs; + eo = ((p != 0) || (q != 0)) ? s - atan2(q, p) : s; + + return eo; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/epb.c b/20200721/c/src/epb.c new file mode 100644 index 0000000..fcb1d59 --- /dev/null +++ b/20200721/c/src/epb.c @@ -0,0 +1,141 @@ +#include "sofa.h" + +double iauEpb(double dj1, double dj2) +/* +** - - - - - - - +** i a u E p b +** - - - - - - - +** +** Julian Date to Besselian Epoch. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (see note) +** +** Returned (function value): +** double Besselian Epoch. +** +** Note: +** +** The Julian Date is supplied in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding dj1 and +** dj2. The maximum resolution is achieved if dj1 is 2451545.0 +** (J2000.0). +** +** Reference: +** +** Lieske, J.H., 1979. Astron.Astrophys., 73, 282. +** +** This revision: 2013 August 21 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* J2000.0-B1900.0 (2415019.81352) in days */ + const double D1900 = 36524.68648; + + return 1900.0 + ((dj1 - DJ00) + (dj2 + D1900)) / DTY; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/epb2jd.c b/20200721/c/src/epb2jd.c new file mode 100644 index 0000000..c819722 --- /dev/null +++ b/20200721/c/src/epb2jd.c @@ -0,0 +1,141 @@ +#include "sofa.h" + +void iauEpb2jd(double epb, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u E p b 2 j d +** - - - - - - - - - - +** +** Besselian Epoch to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epb double Besselian Epoch (e.g. 1957.3) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date +** +** Note: +** +** The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +** This revision: 2013 August 13 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + *djm0 = DJM0; + *djm = 15019.81352 + (epb - 1900.0) * DTY; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/epj.c b/20200721/c/src/epj.c new file mode 100644 index 0000000..4d7e40f --- /dev/null +++ b/20200721/c/src/epj.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +double iauEpj(double dj1, double dj2) +/* +** - - - - - - - +** i a u E p j +** - - - - - - - +** +** Julian Date to Julian Epoch. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (see note) +** +** Returned (function value): +** double Julian Epoch +** +** Note: +** +** The Julian Date is supplied in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding dj1 and +** dj2. The maximum resolution is achieved if dj1 is 2451545.0 +** (J2000.0). +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +** This revision: 2013 August 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double epj; + + + epj = 2000.0 + ((dj1 - DJ00) + dj2) / DJY; + + return epj; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/epj2jd.c b/20200721/c/src/epj2jd.c new file mode 100644 index 0000000..4b41aed --- /dev/null +++ b/20200721/c/src/epj2jd.c @@ -0,0 +1,141 @@ +#include "sofa.h" + +void iauEpj2jd(double epj, double *djm0, double *djm) +/* +** - - - - - - - - - - +** i a u E p j 2 j d +** - - - - - - - - - - +** +** Julian Epoch to Julian Date. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian Epoch (e.g. 1996.8) +** +** Returned: +** djm0 double MJD zero-point: always 2400000.5 +** djm double Modified Julian Date +** +** Note: +** +** The Julian Date is returned in two pieces, in the usual SOFA +** manner, which is designed to preserve time resolution. The +** Julian Date is available as a single number by adding djm0 and +** djm. +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** +** This revision: 2013 August 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + *djm0 = DJM0; + *djm = DJM00 + (epj - 2000.0) * 365.25; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/epv00.c b/20200721/c/src/epv00.c new file mode 100644 index 0000000..720b30c --- /dev/null +++ b/20200721/c/src/epv00.c @@ -0,0 +1,2639 @@ +#include "sofa.h" + +int iauEpv00(double date1, double date2, + double pvh[2][3], double pvb[2][3]) +/* +** - - - - - - - - - +** i a u E p v 0 0 +** - - - - - - - - - +** +** Earth position and velocity, heliocentric and barycentric, with +** respect to the Barycentric Celestial Reference System. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** pvh double[2][3] heliocentric Earth position/velocity +** pvb double[2][3] barycentric Earth position/velocity +** +** Returned (function value): +** int status: 0 = OK +** +1 = warning: date outside +** the range 1900-2100 AD +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, among +** others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. However, +** the accuracy of the result is more likely to be limited by the +** algorithm itself than the way the date has been expressed. +** +** n.b. TT can be used instead of TDB in most applications. +** +** 2) On return, the arrays pvh and pvb contain the following: +** +** pvh[0][0] x } +** pvh[0][1] y } heliocentric position, au +** pvh[0][2] z } +** +** pvh[1][0] xdot } +** pvh[1][1] ydot } heliocentric velocity, au/d +** pvh[1][2] zdot } +** +** pvb[0][0] x } +** pvb[0][1] y } barycentric position, au +** pvb[0][2] z } +** +** pvb[1][0] xdot } +** pvb[1][1] ydot } barycentric velocity, au/d +** pvb[1][2] zdot } +** +** The vectors are with respect to the Barycentric Celestial +** Reference System. The time unit is one day in TDB. +** +** 3) The function is a SIMPLIFIED SOLUTION from the planetary theory +** VSOP2000 (X. Moisson, P. Bretagnon, 2001, Celes. Mechanics & +** Dyn. Astron., 80, 3/4, 205-213) and is an adaptation of original +** Fortran code supplied by P. Bretagnon (private comm., 2000). +** +** 4) Comparisons over the time span 1900-2100 with this simplified +** solution and the JPL DE405 ephemeris give the following results: +** +** RMS max +** Heliocentric: +** position error 3.7 11.2 km +** velocity error 1.4 5.0 mm/s +** +** Barycentric: +** position error 4.6 13.4 km +** velocity error 1.4 4.9 mm/s +** +** Comparisons with the JPL DE406 ephemeris show that by 1800 and +** 2200 the position errors are approximately double their 1900-2100 +** size. By 1500 and 2500 the deterioration is a factor of 10 and +** by 1000 and 3000 a factor of 60. The velocity accuracy falls off +** at about half that rate. +** +** 5) It is permissible to use the same array for pvh and pvb, which +** will receive the barycentric values. +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* +** Matrix elements for orienting the analytical model to DE405. +** +** The corresponding Euler angles are: +** +** d ' " +** 1st rotation - 23 26 21.4091 about the x-axis (obliquity) +** 2nd rotation + 0.0475 about the z-axis (RA offset) +** +** These were obtained empirically, by comparisons with DE405 over +** 1900-2100. +*/ + static const double am12 = 0.000000211284, + am13 = -0.000000091603, + am21 = -0.000000230286, + am22 = 0.917482137087, + am23 = -0.397776982902, + am32 = 0.397776982902, + am33 = 0.917482137087; + +/* +** ---------------------- +** Ephemeris Coefficients +** ---------------------- +** +** The ephemeris consists of harmonic terms for predicting (i) the Sun +** to Earth vector and (ii) the Solar-System-barycenter to Sun vector +** respectively. The coefficients are stored in arrays which, although +** 1-demensional, contain groups of three. Each triplet of +** coefficients is the amplitude, phase and frequency for one term in +** the model, and each array contains the number of terms called for by +** the model. +** +** There are eighteen such arrays, named as follows: +** +** array model power of T component +** +** e0x Sun-to-Earth 0 x +** e0y Sun-to-Earth 0 y +** e0z Sun-to-Earth 0 z +** +** e1x Sun-to-Earth 1 x +** e1y Sun-to-Earth 1 y +** e1z Sun-to-Earth 1 z +** +** e2x Sun-to-Earth 2 x +** e2y Sun-to-Earth 2 y +** e2z Sun-to-Earth 2 z +** +** s0x SSB-to-Sun 0 x +** s0y SSB-to-Sun 0 y +** s0z SSB-to-Sun 0 z +** +** s1x SSB-to-Sun 1 x +** s1y SSB-to-Sun 1 y +** s1z SSB-to-Sun 1 z +** +** s2x SSB-to-Sun 2 x +** s2y SSB-to-Sun 2 y +** s2z SSB-to-Sun 2 z +*/ + +/* Sun-to-Earth, T^0, X */ + static const double e0x[] = { + 0.9998292878132e+00, 0.1753485171504e+01, 0.6283075850446e+01, + 0.8352579567414e-02, 0.1710344404582e+01, 0.1256615170089e+02, + 0.5611445335148e-02, 0.0000000000000e+00, 0.0000000000000e+00, + 0.1046664295572e-03, 0.1667225416770e+01, 0.1884922755134e+02, + 0.3110842534677e-04, 0.6687513390251e+00, 0.8399684731857e+02, + 0.2552413503550e-04, 0.5830637358413e+00, 0.5296909721118e+00, + 0.2137207845781e-04, 0.1092330954011e+01, 0.1577343543434e+01, + 0.1680240182951e-04, 0.4955366134987e+00, 0.6279552690824e+01, + 0.1679012370795e-04, 0.6153014091901e+01, 0.6286599010068e+01, + 0.1445526946777e-04, 0.3472744100492e+01, 0.2352866153506e+01, + + 0.1091038246184e-04, 0.3689845786119e+01, 0.5223693906222e+01, + 0.9344399733932e-05, 0.6073934645672e+01, 0.1203646072878e+02, + 0.8993182910652e-05, 0.3175705249069e+01, 0.1021328554739e+02, + 0.5665546034116e-05, 0.2152484672246e+01, 0.1059381944224e+01, + 0.6844146703035e-05, 0.1306964099750e+01, 0.5753384878334e+01, + 0.7346610905565e-05, 0.4354980070466e+01, 0.3981490189893e+00, + 0.6815396474414e-05, 0.2218229211267e+01, 0.4705732307012e+01, + 0.6112787253053e-05, 0.5384788425458e+01, 0.6812766822558e+01, + 0.4518120711239e-05, 0.6087604012291e+01, 0.5884926831456e+01, + 0.4521963430706e-05, 0.1279424524906e+01, 0.6256777527156e+01, + + 0.4497426764085e-05, 0.5369129144266e+01, 0.6309374173736e+01, + 0.4062190566959e-05, 0.5436473303367e+00, 0.6681224869435e+01, + 0.5412193480192e-05, 0.7867838528395e+00, 0.7755226100720e+00, + 0.5469839049386e-05, 0.1461440311134e+01, 0.1414349524433e+02, + 0.5205264083477e-05, 0.4432944696116e+01, 0.7860419393880e+01, + 0.2149759935455e-05, 0.4502237496846e+01, 0.1150676975667e+02, + 0.2279109618501e-05, 0.1239441308815e+01, 0.7058598460518e+01, + 0.2259282939683e-05, 0.3272430985331e+01, 0.4694002934110e+01, + 0.2558950271319e-05, 0.2265471086404e+01, 0.1216800268190e+02, + 0.2561581447555e-05, 0.1454740653245e+01, 0.7099330490126e+00, + + 0.1781441115440e-05, 0.2962068630206e+01, 0.7962980379786e+00, + 0.1612005874644e-05, 0.1473255041006e+01, 0.5486777812467e+01, + 0.1818630667105e-05, 0.3743903293447e+00, 0.6283008715021e+01, + 0.1818601377529e-05, 0.6274174354554e+01, 0.6283142985870e+01, + 0.1554475925257e-05, 0.1624110906816e+01, 0.2513230340178e+02, + 0.2090948029241e-05, 0.5852052276256e+01, 0.1179062909082e+02, + 0.2000176345460e-05, 0.4072093298513e+01, 0.1778984560711e+02, + 0.1289535917759e-05, 0.5217019331069e+01, 0.7079373888424e+01, + 0.1281135307881e-05, 0.4802054538934e+01, 0.3738761453707e+01, + 0.1518229005692e-05, 0.8691914742502e+00, 0.2132990797783e+00, + + 0.9450128579027e-06, 0.4601859529950e+01, 0.1097707878456e+02, + 0.7781119494996e-06, 0.1844352816694e+01, 0.8827390247185e+01, + 0.7733407759912e-06, 0.3582790154750e+01, 0.5507553240374e+01, + 0.7350644318120e-06, 0.2695277788230e+01, 0.1589072916335e+01, + 0.6535928827023e-06, 0.3651327986142e+01, 0.1176985366291e+02, + 0.6324624183656e-06, 0.2241302375862e+01, 0.6262300422539e+01, + 0.6298565300557e-06, 0.4407122406081e+01, 0.6303851278352e+01, + 0.8587037089179e-06, 0.3024307223119e+01, 0.1672837615881e+03, + 0.8299954491035e-06, 0.6192539428237e+01, 0.3340612434717e+01, + 0.6311263503401e-06, 0.2014758795416e+01, 0.7113454667900e-02, + + 0.6005646745452e-06, 0.3399500503397e+01, 0.4136910472696e+01, + 0.7917715109929e-06, 0.2493386877837e+01, 0.6069776770667e+01, + 0.7556958099685e-06, 0.4159491740143e+01, 0.6496374930224e+01, + 0.6773228244949e-06, 0.4034162934230e+01, 0.9437762937313e+01, + 0.5370708577847e-06, 0.1562219163734e+01, 0.1194447056968e+01, + 0.5710804266203e-06, 0.2662730803386e+01, 0.6282095334605e+01, + 0.5709824583726e-06, 0.3985828430833e+01, 0.6284056366286e+01, + 0.5143950896447e-06, 0.1308144688689e+01, 0.6290189305114e+01, + 0.5088010604546e-06, 0.5352817214804e+01, 0.6275962395778e+01, + 0.4960369085172e-06, 0.2644267922349e+01, 0.6127655567643e+01, + + 0.4803137891183e-06, 0.4008844192080e+01, 0.6438496133249e+01, + 0.5731747768225e-06, 0.3794550174597e+01, 0.3154687086868e+01, + 0.4735947960579e-06, 0.6107118308982e+01, 0.3128388763578e+01, + 0.4808348796625e-06, 0.4771458618163e+01, 0.8018209333619e+00, + 0.4115073743137e-06, 0.3327111335159e+01, 0.8429241228195e+01, + 0.5230575889287e-06, 0.5305708551694e+01, 0.1336797263425e+02, + 0.5133977889215e-06, 0.5784230738814e+01, 0.1235285262111e+02, + 0.5065815825327e-06, 0.2052064793679e+01, 0.1185621865188e+02, + 0.4339831593868e-06, 0.3644994195830e+01, 0.1726015463500e+02, + 0.3952928638953e-06, 0.4930376436758e+01, 0.5481254917084e+01, + + 0.4898498111942e-06, 0.4542084219731e+00, 0.9225539266174e+01, + 0.4757490209328e-06, 0.3161126388878e+01, 0.5856477690889e+01, + 0.4727701669749e-06, 0.6214993845446e+00, 0.2544314396739e+01, + 0.3800966681863e-06, 0.3040132339297e+01, 0.4265981595566e+00, + 0.3257301077939e-06, 0.8064977360087e+00, 0.3930209696940e+01, + 0.3255810528674e-06, 0.1974147981034e+01, 0.2146165377750e+01, + 0.3252029748187e-06, 0.2845924913135e+01, 0.4164311961999e+01, + 0.3255505635308e-06, 0.3017900824120e+01, 0.5088628793478e+01, + 0.2801345211990e-06, 0.6109717793179e+01, 0.1256967486051e+02, + 0.3688987740970e-06, 0.2911550235289e+01, 0.1807370494127e+02, + + 0.2475153429458e-06, 0.2179146025856e+01, 0.2629832328990e-01, + 0.3033457749150e-06, 0.1994161050744e+01, 0.4535059491685e+01, + 0.2186743763110e-06, 0.5125687237936e+01, 0.1137170464392e+02, + 0.2764777032774e-06, 0.4822646860252e+00, 0.1256262854127e+02, + 0.2199028768592e-06, 0.4637633293831e+01, 0.1255903824622e+02, + 0.2046482824760e-06, 0.1467038733093e+01, 0.7084896783808e+01, + 0.2611209147507e-06, 0.3044718783485e+00, 0.7143069561767e+02, + 0.2286079656818e-06, 0.4764220356805e+01, 0.8031092209206e+01, + 0.1855071202587e-06, 0.3383637774428e+01, 0.1748016358760e+01, + 0.2324669506784e-06, 0.6189088449251e+01, 0.1831953657923e+02, + + 0.1709528015688e-06, 0.5874966729774e+00, 0.4933208510675e+01, + 0.2168156875828e-06, 0.4302994009132e+01, 0.1044738781244e+02, + 0.2106675556535e-06, 0.3800475419891e+01, 0.7477522907414e+01, + 0.1430213830465e-06, 0.1294660846502e+01, 0.2942463415728e+01, + 0.1388396901944e-06, 0.4594797202114e+01, 0.8635942003952e+01, + 0.1922258844190e-06, 0.4943044543591e+00, 0.1729818233119e+02, + 0.1888460058292e-06, 0.2426943912028e+01, 0.1561374759853e+03, + 0.1789449386107e-06, 0.1582973303499e+00, 0.1592596075957e+01, + 0.1360803685374e-06, 0.5197240440504e+01, 0.1309584267300e+02, + 0.1504038014709e-06, 0.3120360916217e+01, 0.1649636139783e+02, + + 0.1382769533389e-06, 0.6164702888205e+01, 0.7632943190217e+01, + 0.1438059769079e-06, 0.1437423770979e+01, 0.2042657109477e+02, + 0.1326303260037e-06, 0.3609688799679e+01, 0.1213955354133e+02, + 0.1159244950540e-06, 0.5463018167225e+01, 0.5331357529664e+01, + 0.1433118149136e-06, 0.6028909912097e+01, 0.7342457794669e+01, + 0.1234623148594e-06, 0.3109645574997e+01, 0.6279485555400e+01, + 0.1233949875344e-06, 0.3539359332866e+01, 0.6286666145492e+01, + 0.9927196061299e-07, 0.1259321569772e+01, 0.7234794171227e+01, + 0.1242302191316e-06, 0.1065949392609e+01, 0.1511046609763e+02, + 0.1098402195201e-06, 0.2192508743837e+01, 0.1098880815746e+02, + + 0.1158191395315e-06, 0.4054411278650e+01, 0.5729506548653e+01, + 0.9048475596241e-07, 0.5429764748518e+01, 0.9623688285163e+01, + 0.8889853269023e-07, 0.5046586206575e+01, 0.6148010737701e+01, + 0.1048694242164e-06, 0.2628858030806e+01, 0.6836645152238e+01, + 0.1112308378646e-06, 0.4177292719907e+01, 0.1572083878776e+02, + 0.8631729709901e-07, 0.1601345232557e+01, 0.6418140963190e+01, + 0.8527816951664e-07, 0.2463888997513e+01, 0.1471231707864e+02, + 0.7892139456991e-07, 0.3154022088718e+01, 0.2118763888447e+01, + 0.1051782905236e-06, 0.4795035816088e+01, 0.1349867339771e+01, + 0.1048219943164e-06, 0.2952983395230e+01, 0.5999216516294e+01, + + 0.7435760775143e-07, 0.5420547991464e+01, 0.6040347114260e+01, + 0.9869574106949e-07, 0.3695646753667e+01, 0.6566935184597e+01, + 0.9156886364226e-07, 0.3922675306609e+01, 0.5643178611111e+01, + 0.7006834356188e-07, 0.1233968624861e+01, 0.6525804586632e+01, + 0.9806170182601e-07, 0.1919542280684e+01, 0.2122839202813e+02, + 0.9052289673607e-07, 0.4615902724369e+01, 0.4690479774488e+01, + 0.7554200867893e-07, 0.1236863719072e+01, 0.1253985337760e+02, + 0.8215741286498e-07, 0.3286800101559e+00, 0.1097355562493e+02, + 0.7185178575397e-07, 0.5880942158367e+01, 0.6245048154254e+01, + 0.7130726476180e-07, 0.7674871987661e+00, 0.6321103546637e+01, + + 0.6650894461162e-07, 0.6987129150116e+00, 0.5327476111629e+01, + 0.7396888823688e-07, 0.3576824794443e+01, 0.5368044267797e+00, + 0.7420588884775e-07, 0.5033615245369e+01, 0.2354323048545e+02, + 0.6141181642908e-07, 0.9449927045673e+00, 0.1296430071988e+02, + 0.6373557924058e-07, 0.6206342280341e+01, 0.9517183207817e+00, + 0.6359474329261e-07, 0.5036079095757e+01, 0.1990745094947e+01, + 0.5740173582646e-07, 0.6105106371350e+01, 0.9555997388169e+00, + 0.7019864084602e-07, 0.7237747359018e+00, 0.5225775174439e+00, + 0.6398054487042e-07, 0.3976367969666e+01, 0.2407292145756e+02, + 0.7797092650498e-07, 0.4305423910623e+01, 0.2200391463820e+02, + + 0.6466760000900e-07, 0.3500136825200e+01, 0.5230807360890e+01, + 0.7529417043890e-07, 0.3514779246100e+01, 0.1842262939178e+02, + 0.6924571140892e-07, 0.2743457928679e+01, 0.1554202828031e+00, + 0.6220798650222e-07, 0.2242598118209e+01, 0.1845107853235e+02, + 0.5870209391853e-07, 0.2332832707527e+01, 0.6398972393349e+00, + 0.6263953473888e-07, 0.2191105358956e+01, 0.6277552955062e+01, + 0.6257781390012e-07, 0.4457559396698e+01, 0.6288598745829e+01, + 0.5697304945123e-07, 0.3499234761404e+01, 0.1551045220144e+01, + 0.6335438746791e-07, 0.6441691079251e+00, 0.5216580451554e+01, + 0.6377258441152e-07, 0.2252599151092e+01, 0.5650292065779e+01, + + 0.6484841818165e-07, 0.1992812417646e+01, 0.1030928125552e+00, + 0.4735551485250e-07, 0.3744672082942e+01, 0.1431416805965e+02, + 0.4628595996170e-07, 0.1334226211745e+01, 0.5535693017924e+00, + 0.6258152336933e-07, 0.4395836159154e+01, 0.2608790314060e+02, + 0.6196171366594e-07, 0.2587043007997e+01, 0.8467247584405e+02, + 0.6159556952126e-07, 0.4782499769128e+01, 0.2394243902548e+03, + 0.4987741172394e-07, 0.7312257619924e+00, 0.7771377146812e+02, + 0.5459280703142e-07, 0.3001376372532e+01, 0.6179983037890e+01, + 0.4863461189999e-07, 0.3767222128541e+01, 0.9027992316901e+02, + 0.5349912093158e-07, 0.3663594450273e+01, 0.6386168663001e+01, + + 0.5673725607806e-07, 0.4331187919049e+01, 0.6915859635113e+01, + 0.4745485060512e-07, 0.5816195745518e+01, 0.6282970628506e+01, + 0.4745379005326e-07, 0.8323672435672e+00, 0.6283181072386e+01, + 0.4049002796321e-07, 0.3785023976293e+01, 0.6254626709878e+01, + 0.4247084014515e-07, 0.2378220728783e+01, 0.7875671926403e+01, + 0.4026912363055e-07, 0.2864103423269e+01, 0.6311524991013e+01, + 0.4062935011774e-07, 0.2415408595975e+01, 0.3634620989887e+01, + 0.5347771048509e-07, 0.3343479309801e+01, 0.2515860172507e+02, + 0.4829494136505e-07, 0.2821742398262e+01, 0.5760498333002e+01, + 0.4342554404599e-07, 0.5624662458712e+01, 0.7238675589263e+01, + + 0.4021599184361e-07, 0.5557250275009e+00, 0.1101510648075e+02, + 0.4104900474558e-07, 0.3296691780005e+01, 0.6709674010002e+01, + 0.4376532905131e-07, 0.3814443999443e+01, 0.6805653367890e+01, + 0.3314590480650e-07, 0.3560229189250e+01, 0.1259245002418e+02, + 0.3232421839643e-07, 0.5185389180568e+01, 0.1066495398892e+01, + 0.3541176318876e-07, 0.3921381909679e+01, 0.9917696840332e+01, + 0.3689831242681e-07, 0.4190658955386e+01, 0.1192625446156e+02, + 0.3890605376774e-07, 0.5546023371097e+01, 0.7478166569050e-01, + 0.3038559339780e-07, 0.6231032794494e+01, 0.1256621883632e+02, + 0.3137083969782e-07, 0.6207063419190e+01, 0.4292330755499e+01, + + 0.4024004081854e-07, 0.1195257375713e+01, 0.1334167431096e+02, + 0.3300234879283e-07, 0.1804694240998e+01, 0.1057540660594e+02, + 0.3635399155575e-07, 0.5597811343500e+01, 0.6208294184755e+01, + 0.3032668691356e-07, 0.3191059366530e+01, 0.1805292951336e+02, + 0.2809652069058e-07, 0.4094348032570e+01, 0.3523159621801e-02, + 0.3696955383823e-07, 0.5219282738794e+01, 0.5966683958112e+01, + 0.3562894142503e-07, 0.1037247544554e+01, 0.6357857516136e+01, + 0.3510598524148e-07, 0.1430020816116e+01, 0.6599467742779e+01, + 0.3617736142953e-07, 0.3002911403677e+01, 0.6019991944201e+01, + 0.2624524910730e-07, 0.2437046757292e+01, 0.6702560555334e+01, + + 0.2535824204490e-07, 0.1581594689647e+01, 0.3141537925223e+02, + 0.3519787226257e-07, 0.5379863121521e+01, 0.2505706758577e+03, + 0.2578406709982e-07, 0.4904222639329e+01, 0.1673046366289e+02, + 0.3423887981473e-07, 0.3646448997315e+01, 0.6546159756691e+01, + 0.2776083886467e-07, 0.3307829300144e+01, 0.1272157198369e+02, + 0.3379592818379e-07, 0.1747541251125e+01, 0.1494531617769e+02, + 0.3050255426284e-07, 0.1784689432607e-01, 0.4732030630302e+01, + 0.2652378350236e-07, 0.4420055276260e+01, 0.5863591145557e+01, + 0.2374498173768e-07, 0.3629773929208e+01, 0.2388894113936e+01, + 0.2716451255140e-07, 0.3079623706780e+01, 0.1202934727411e+02, + + 0.3038583699229e-07, 0.3312487903507e+00, 0.1256608456547e+02, + 0.2220681228760e-07, 0.5265520401774e+01, 0.1336244973887e+02, + 0.3044156540912e-07, 0.4766664081250e+01, 0.2908881142201e+02, + 0.2731859923561e-07, 0.5069146530691e+01, 0.1391601904066e+02, + 0.2285603018171e-07, 0.5954935112271e+01, 0.6076890225335e+01, + 0.2025006454555e-07, 0.4061789589267e+01, 0.4701116388778e+01, + 0.2012597519804e-07, 0.2485047705241e+01, 0.6262720680387e+01, + 0.2003406962258e-07, 0.4163779209320e+01, 0.6303431020504e+01, + 0.2207863441371e-07, 0.6923839133828e+00, 0.6489261475556e+01, + 0.2481374305624e-07, 0.5944173595676e+01, 0.1204357418345e+02, + + 0.2130923288870e-07, 0.4641013671967e+01, 0.5746271423666e+01, + 0.2446370543391e-07, 0.6125796518757e+01, 0.1495633313810e+00, + 0.1932492759052e-07, 0.2234572324504e+00, 0.1352175143971e+02, + 0.2600122568049e-07, 0.4281012405440e+01, 0.4590910121555e+01, + 0.2431754047488e-07, 0.1429943874870e+00, 0.1162474756779e+01, + 0.1875902869209e-07, 0.9781803816948e+00, 0.6279194432410e+01, + 0.1874381139426e-07, 0.5670368130173e+01, 0.6286957268481e+01, + 0.2156696047173e-07, 0.2008985006833e+01, 0.1813929450232e+02, + 0.1965076182484e-07, 0.2566186202453e+00, 0.4686889479442e+01, + 0.2334816372359e-07, 0.4408121891493e+01, 0.1002183730415e+02, + + 0.1869937408802e-07, 0.5272745038656e+01, 0.2427287361862e+00, + 0.2436236460883e-07, 0.4407720479029e+01, 0.9514313292143e+02, + 0.1761365216611e-07, 0.1943892315074e+00, 0.1351787002167e+02, + 0.2156289480503e-07, 0.1418570924545e+01, 0.6037244212485e+01, + 0.2164748979255e-07, 0.4724603439430e+01, 0.2301353951334e+02, + 0.2222286670853e-07, 0.2400266874598e+01, 0.1266924451345e+02, + 0.2070901414929e-07, 0.5230348028732e+01, 0.6528907488406e+01, + 0.1792745177020e-07, 0.2099190328945e+01, 0.6819880277225e+01, + 0.1841802068445e-07, 0.3467527844848e+00, 0.6514761976723e+02, + 0.1578401631718e-07, 0.7098642356340e+00, 0.2077542790660e-01, + + 0.1561690152531e-07, 0.5943349620372e+01, 0.6272439236156e+01, + 0.1558591045463e-07, 0.7040653478980e+00, 0.6293712464735e+01, + 0.1737356469576e-07, 0.4487064760345e+01, 0.1765478049437e+02, + 0.1434755619991e-07, 0.2993391570995e+01, 0.1102062672231e+00, + 0.1482187806654e-07, 0.2278049198251e+01, 0.1052268489556e+01, + 0.1424812827089e-07, 0.1682114725827e+01, 0.1311972100268e+02, + 0.1380282448623e-07, 0.3262668602579e+01, 0.1017725758696e+02, + 0.1811481244566e-07, 0.3187771221777e+01, 0.1887552587463e+02, + 0.1504446185696e-07, 0.5650162308647e+01, 0.7626583626240e-01, + 0.1740776154137e-07, 0.5487068607507e+01, 0.1965104848470e+02, + + 0.1374339536251e-07, 0.5745688172201e+01, 0.6016468784579e+01, + 0.1761377477704e-07, 0.5748060203659e+01, 0.2593412433514e+02, + 0.1535138225795e-07, 0.6226848505790e+01, 0.9411464614024e+01, + 0.1788140543676e-07, 0.6189318878563e+01, 0.3301902111895e+02, + 0.1375002807996e-07, 0.5371812884394e+01, 0.6327837846670e+00, + 0.1242115758632e-07, 0.1471687569712e+01, 0.3894181736510e+01, + 0.1450977333938e-07, 0.4143836662127e+01, 0.1277945078067e+02, + 0.1297579575023e-07, 0.9003477661957e+00, 0.6549682916313e+01, + 0.1462667934821e-07, 0.5760505536428e+01, 0.1863592847156e+02, + 0.1381774374799e-07, 0.1085471729463e+01, 0.2379164476796e+01, + + 0.1682333169307e-07, 0.5409870870133e+01, 0.1620077269078e+02, + 0.1190812918837e-07, 0.1397205174601e+01, 0.1149965630200e+02, + 0.1221434762106e-07, 0.9001804809095e+00, 0.1257326515556e+02, + 0.1549934644860e-07, 0.4262528275544e+01, 0.1820933031200e+02, + 0.1252138953050e-07, 0.1411642012027e+01, 0.6993008899458e+01, + 0.1237078905387e-07, 0.2844472403615e+01, 0.2435678079171e+02, + 0.1446953389615e-07, 0.5295835522223e+01, 0.3813291813120e-01, + 0.1388446457170e-07, 0.4969428135497e+01, 0.2458316379602e+00, + 0.1019339179228e-07, 0.2491369561806e+01, 0.6112403035119e+01, + 0.1258880815343e-07, 0.4679426248976e+01, 0.5429879531333e+01, + + 0.1297768238261e-07, 0.1074509953328e+01, 0.1249137003520e+02, + 0.9913505718094e-08, 0.4735097918224e+01, 0.6247047890016e+01, + 0.9830453155969e-08, 0.4158649187338e+01, 0.6453748665772e+01, + 0.1192615865309e-07, 0.3438208613699e+01, 0.6290122169689e+01, + 0.9835874798277e-08, 0.1913300781229e+01, 0.6319103810876e+01, + 0.9639087569277e-08, 0.9487683644125e+00, 0.8273820945392e+01, + 0.1175716107001e-07, 0.3228141664287e+01, 0.6276029531202e+01, + 0.1018926508678e-07, 0.2216607854300e+01, 0.1254537627298e+02, + 0.9500087869225e-08, 0.2625116459733e+01, 0.1256517118505e+02, + 0.9664192916575e-08, 0.5860562449214e+01, 0.6259197520765e+01, + + 0.9612858712203e-08, 0.7885682917381e+00, 0.6306954180126e+01, + 0.1117645675413e-07, 0.3932148831189e+01, 0.1779695906178e+02, + 0.1158864052160e-07, 0.9995605521691e+00, 0.1778273215245e+02, + 0.9021043467028e-08, 0.5263769742673e+01, 0.6172869583223e+01, + 0.8836134773563e-08, 0.1496843220365e+01, 0.1692165728891e+01, + 0.1045872200691e-07, 0.7009039517214e+00, 0.2204125344462e+00, + 0.1211463487798e-07, 0.4041544938511e+01, 0.8257698122054e+02, + 0.8541990804094e-08, 0.1447586692316e+01, 0.6393282117669e+01, + 0.1038720703636e-07, 0.4594249718112e+00, 0.1550861511662e+02, + 0.1126722351445e-07, 0.3925550579036e+01, 0.2061856251104e+00, + + 0.8697373859631e-08, 0.4411341856037e+01, 0.9491756770005e+00, + 0.8869380028441e-08, 0.2402659724813e+01, 0.3903911373650e+01, + 0.9247014693258e-08, 0.1401579743423e+01, 0.6267823317922e+01, + 0.9205062930950e-08, 0.5245978000814e+01, 0.6298328382969e+01, + 0.8000745038049e-08, 0.3590803356945e+01, 0.2648454860559e+01, + 0.9168973650819e-08, 0.2470150501679e+01, 0.1498544001348e+03, + 0.1075444949238e-07, 0.1328606161230e+01, 0.3694923081589e+02, + 0.7817298525817e-08, 0.6162256225998e+01, 0.4804209201333e+01, + 0.9541469226356e-08, 0.3942568967039e+01, 0.1256713221673e+02, + 0.9821910122027e-08, 0.2360246287233e+00, 0.1140367694411e+02, + + 0.9897822023777e-08, 0.4619805634280e+01, 0.2280573557157e+02, + 0.7737289283765e-08, 0.3784727847451e+01, 0.7834121070590e+01, + 0.9260204034710e-08, 0.2223352487601e+01, 0.2787043132925e+01, + 0.7320252888486e-08, 0.1288694636874e+01, 0.6282655592598e+01, + 0.7319785780946e-08, 0.5359869567774e+01, 0.6283496108294e+01, + 0.7147219933778e-08, 0.5516616675856e+01, 0.1725663147538e+02, + 0.7946502829878e-08, 0.2630459984567e+01, 0.1241073141809e+02, + 0.9001711808932e-08, 0.2849815827227e+01, 0.6281591679874e+01, + 0.8994041507257e-08, 0.3795244450750e+01, 0.6284560021018e+01, + 0.8298582787358e-08, 0.5236413127363e+00, 0.1241658836951e+02, + + 0.8526596520710e-08, 0.4794605424426e+01, 0.1098419223922e+02, + 0.8209822103197e-08, 0.1578752370328e+01, 0.1096996532989e+02, + 0.6357049861094e-08, 0.5708926113761e+01, 0.1596186371003e+01, + 0.7370473179049e-08, 0.3842402530241e+01, 0.4061219149443e+01, + 0.7232154664726e-08, 0.3067548981535e+01, 0.1610006857377e+03, + 0.6328765494903e-08, 0.1313930030069e+01, 0.1193336791622e+02, + 0.8030064908595e-08, 0.3488500408886e+01, 0.8460828644453e+00, + 0.6275464259232e-08, 0.1532061626198e+01, 0.8531963191132e+00, + 0.7051897446325e-08, 0.3285859929993e+01, 0.5849364236221e+01, + 0.6161593705428e-08, 0.1477341999464e+01, 0.5573142801433e+01, + + 0.7754683957278e-08, 0.1586118663096e+01, 0.8662240327241e+01, + 0.5889928990701e-08, 0.1304887868803e+01, 0.1232342296471e+02, + 0.5705756047075e-08, 0.4555333589350e+01, 0.1258692712880e+02, + 0.5964178808332e-08, 0.3001762842062e+01, 0.5333900173445e+01, + 0.6712446027467e-08, 0.4886780007595e+01, 0.1171295538178e+02, + 0.5941809275464e-08, 0.4701509603824e+01, 0.9779108567966e+01, + 0.5466993627395e-08, 0.4588357817278e+01, 0.1884211409667e+02, + 0.6340512090980e-08, 0.1164543038893e+01, 0.5217580628120e+02, + 0.6325505710045e-08, 0.3919171259645e+01, 0.1041998632314e+02, + 0.6164789509685e-08, 0.2143828253542e+01, 0.6151533897323e+01, + + 0.5263330812430e-08, 0.6066564434241e+01, 0.1885275071096e+02, + 0.5597087780221e-08, 0.2926316429472e+01, 0.4337116142245e+00, + 0.5396556236817e-08, 0.3244303591505e+01, 0.6286362197481e+01, + 0.5396615148223e-08, 0.3404304703662e+01, 0.6279789503410e+01, + 0.7091832443341e-08, 0.8532377803192e+00, 0.4907302013889e+01, + 0.6572352589782e-08, 0.4901966774419e+01, 0.1176433076753e+02, + 0.5960236060795e-08, 0.1874672315797e+01, 0.1422690933580e-01, + 0.5125480043511e-08, 0.3735726064334e+01, 0.1245594543367e+02, + 0.5928241866410e-08, 0.4502033899935e+01, 0.6414617803568e+01, + 0.5249600357424e-08, 0.4372334799878e+01, 0.1151388321134e+02, + + 0.6059171276087e-08, 0.2581617302908e+01, 0.6062663316000e+01, + 0.5295235081662e-08, 0.2974811513158e+01, 0.3496032717521e+01, + 0.5820561875933e-08, 0.1796073748244e+00, 0.2838593341516e+00, + 0.4754696606440e-08, 0.1981998136973e+01, 0.3104930017775e+01, + 0.6385053548955e-08, 0.2559174171605e+00, 0.6133512519065e+01, + 0.6589828273941e-08, 0.2750967106776e+01, 0.4087944051283e+02, + 0.5383376567189e-08, 0.6325947523578e+00, 0.2248384854122e+02, + 0.5928941683538e-08, 0.1672304519067e+01, 0.1581959461667e+01, + 0.4816060709794e-08, 0.3512566172575e+01, 0.9388005868221e+01, + 0.6003381586512e-08, 0.5610932219189e+01, 0.5326786718777e+01, + + 0.5504225393105e-08, 0.4037501131256e+01, 0.6503488384892e+01, + 0.5353772620129e-08, 0.6122774968240e+01, 0.1735668374386e+03, + 0.5786253768544e-08, 0.5527984999515e+01, 0.1350651127443e+00, + 0.5065706702002e-08, 0.9980765573624e+00, 0.1248988586463e+02, + 0.5972838885276e-08, 0.6044489493203e+01, 0.2673594526851e+02, + 0.5323585877961e-08, 0.3924265998147e+01, 0.4171425416666e+01, + 0.5210772682858e-08, 0.6220111376901e+01, 0.2460261242967e+02, + 0.4726549040535e-08, 0.3716043206862e+01, 0.7232251527446e+01, + 0.6029425105059e-08, 0.8548704071116e+00, 0.3227113045244e+03, + 0.4481542826513e-08, 0.1426925072829e+01, 0.5547199253223e+01, + + 0.5836024505068e-08, 0.7135651752625e-01, 0.7285056171570e+02, + 0.4137046613272e-08, 0.5330767643283e+01, 0.1087398597200e+02, + 0.5171977473924e-08, 0.4494262335353e+00, 0.1884570439172e+02, + 0.5694429833732e-08, 0.2952369582215e+01, 0.9723862754494e+02, + 0.4009158925298e-08, 0.3500003416535e+01, 0.6244942932314e+01, + 0.4784939596873e-08, 0.6196709413181e+01, 0.2929661536378e+02, + 0.3983725022610e-08, 0.5103690031897e+01, 0.4274518229222e+01, + 0.3870535232462e-08, 0.3187569587401e+01, 0.6321208768577e+01, + 0.5140501213951e-08, 0.1668924357457e+01, 0.1232032006293e+02, + 0.3849034819355e-08, 0.4445722510309e+01, 0.1726726808967e+02, + + 0.4002383075060e-08, 0.5226224152423e+01, 0.7018952447668e+01, + 0.3890719543549e-08, 0.4371166550274e+01, 0.1491901785440e+02, + 0.4887084607881e-08, 0.5973556689693e+01, 0.1478866649112e+01, + 0.3739939287592e-08, 0.2089084714600e+01, 0.6922973089781e+01, + 0.5031925918209e-08, 0.4658371936827e+01, 0.1715706182245e+02, + 0.4387748764954e-08, 0.4825580552819e+01, 0.2331413144044e+03, + 0.4147398098865e-08, 0.3739003524998e+01, 0.1376059875786e+02, + 0.3719089993586e-08, 0.1148941386536e+01, 0.6297302759782e+01, + 0.3934238461056e-08, 0.1559893008343e+01, 0.7872148766781e+01, + 0.3672471375622e-08, 0.5516145383612e+01, 0.6268848941110e+01, + + 0.3768911277583e-08, 0.6116053700563e+01, 0.4157198507331e+01, + 0.4033388417295e-08, 0.5076821746017e+01, 0.1567108171867e+02, + 0.3764194617832e-08, 0.8164676232075e+00, 0.3185192151914e+01, + 0.4840628226284e-08, 0.1360479453671e+01, 0.1252801878276e+02, + 0.4949443923785e-08, 0.2725622229926e+01, 0.1617106187867e+03, + 0.4117393089971e-08, 0.6054459628492e+00, 0.5642198095270e+01, + 0.3925754020428e-08, 0.8570462135210e+00, 0.2139354194808e+02, + 0.3630551757923e-08, 0.3552067338279e+01, 0.6294805223347e+01, + 0.3627274802357e-08, 0.3096565085313e+01, 0.6271346477544e+01, + 0.3806143885093e-08, 0.6367751709777e+00, 0.1725304118033e+02, + + 0.4433254641565e-08, 0.4848461503937e+01, 0.7445550607224e+01, + 0.3712319846576e-08, 0.1331950643655e+01, 0.4194847048887e+00, + 0.3849847534783e-08, 0.4958368297746e+00, 0.9562891316684e+00, + 0.3483955430165e-08, 0.2237215515707e+01, 0.1161697602389e+02, + 0.3961912730982e-08, 0.3332402188575e+01, 0.2277943724828e+02, + 0.3419978244481e-08, 0.5785600576016e+01, 0.1362553364512e+02, + 0.3329417758177e-08, 0.9812676559709e-01, 0.1685848245639e+02, + 0.4207206893193e-08, 0.9494780468236e+00, 0.2986433403208e+02, + 0.3268548976410e-08, 0.1739332095686e+00, 0.5749861718712e+01, + 0.3321880082685e-08, 0.1423354800666e+01, 0.6279143387820e+01, + + 0.4503173010852e-08, 0.2314972675293e+00, 0.1385561574497e+01, + 0.4316599090954e-08, 0.1012646782616e+00, 0.4176041334900e+01, + 0.3283493323850e-08, 0.5233306881265e+01, 0.6287008313071e+01, + 0.3164033542343e-08, 0.4005597257511e+01, 0.2099539292909e+02, + 0.4159720956725e-08, 0.5365676242020e+01, 0.5905702259363e+01, + 0.3565176892217e-08, 0.4284440620612e+01, 0.3932462625300e-02, + 0.3514440950221e-08, 0.4270562636575e+01, 0.7335344340001e+01, + 0.3540596871909e-08, 0.5953553201060e+01, 0.1234573916645e+02, + 0.2960769905118e-08, 0.1115180417718e+01, 0.2670964694522e+02, + 0.2962213739684e-08, 0.3863811918186e+01, 0.6408777551755e+00, + + 0.3883556700251e-08, 0.1268617928302e+01, 0.6660449441528e+01, + 0.2919225516346e-08, 0.4908605223265e+01, 0.1375773836557e+01, + 0.3115158863370e-08, 0.3744519976885e+01, 0.3802769619140e-01, + 0.4099438144212e-08, 0.4173244670532e+01, 0.4480965020977e+02, + 0.2899531858964e-08, 0.5910601428850e+01, 0.2059724391010e+02, + 0.3289733429855e-08, 0.2488050078239e+01, 0.1081813534213e+02, + 0.3933075612875e-08, 0.1122363652883e+01, 0.3773735910827e+00, + 0.3021403764467e-08, 0.4951973724904e+01, 0.2982630633589e+02, + 0.2798598949757e-08, 0.5117057845513e+01, 0.1937891852345e+02, + 0.3397421302707e-08, 0.6104159180476e+01, 0.6923953605621e+01, + + 0.3720398002179e-08, 0.1184933429829e+01, 0.3066615496545e+02, + 0.3598484186267e-08, 0.3505282086105e+01, 0.6147450479709e+01, + 0.3694594027310e-08, 0.2286651088141e+01, 0.2636725487657e+01, + 0.2680444152969e-08, 0.1871816775482e+00, 0.6816289982179e+01, + 0.3497574865641e-08, 0.3143251755431e+01, 0.6418701221183e+01, + 0.3130274129494e-08, 0.2462167316018e+01, 0.1235996607578e+02, + 0.3241119069551e-08, 0.4256374004686e+01, 0.1652265972112e+02, + 0.2601960842061e-08, 0.4970362941425e+01, 0.1045450126711e+02, + 0.2690601527504e-08, 0.2372657824898e+01, 0.3163918923335e+00, + 0.2908688152664e-08, 0.4232652627721e+01, 0.2828699048865e+02, + + 0.3120456131875e-08, 0.3925747001137e+00, 0.2195415756911e+02, + 0.3148855423384e-08, 0.3093478330445e+01, 0.1172006883645e+02, + 0.3051044261017e-08, 0.5560948248212e+01, 0.6055599646783e+01, + 0.2826006876660e-08, 0.5072790310072e+01, 0.5120601093667e+01, + 0.3100034191711e-08, 0.4998530231096e+01, 0.1799603123222e+02, + 0.2398771640101e-08, 0.2561739802176e+01, 0.6255674361143e+01, + 0.2384002842728e-08, 0.4087420284111e+01, 0.6310477339748e+01, + 0.2842146517568e-08, 0.2515048217955e+01, 0.5469525544182e+01, + 0.2847674371340e-08, 0.5235326497443e+01, 0.1034429499989e+02, + 0.2903722140764e-08, 0.1088200795797e+01, 0.6510552054109e+01, + + 0.3187610710605e-08, 0.4710624424816e+01, 0.1693792562116e+03, + 0.3048869992813e-08, 0.2857975896445e+00, 0.8390110365991e+01, + 0.2860216950984e-08, 0.2241619020815e+01, 0.2243449970715e+00, + 0.2701117683113e-08, 0.6651573305272e-01, 0.6129297044991e+01, + 0.2509891590152e-08, 0.1285135324585e+01, 0.1044027435778e+02, + 0.2623200252223e-08, 0.2981229834530e+00, 0.6436854655901e+01, + 0.2622541669202e-08, 0.6122470726189e+01, 0.9380959548977e+01, + 0.2818435667099e-08, 0.4251087148947e+01, 0.5934151399930e+01, + 0.2365196797465e-08, 0.3465070460790e+01, 0.2470570524223e+02, + 0.2358704646143e-08, 0.5791603815350e+01, 0.8671969964381e+01, + + 0.2388299481390e-08, 0.4142483772941e+01, 0.7096626156709e+01, + 0.1996041217224e-08, 0.2101901889496e+01, 0.1727188400790e+02, + 0.2687593060336e-08, 0.1526689456959e+01, 0.7075506709219e+02, + 0.2618913670810e-08, 0.2397684236095e+01, 0.6632000300961e+01, + 0.2571523050364e-08, 0.5751929456787e+00, 0.6206810014183e+01, + 0.2582135006946e-08, 0.5595464352926e+01, 0.4873985990671e+02, + 0.2372530190361e-08, 0.5092689490655e+01, 0.1590676413561e+02, + 0.2357178484712e-08, 0.4444363527851e+01, 0.3097883698531e+01, + 0.2451590394723e-08, 0.3108251687661e+01, 0.6612329252343e+00, + 0.2370045949608e-08, 0.2608133861079e+01, 0.3459636466239e+02, + + 0.2268997267358e-08, 0.3639717753384e+01, 0.2844914056730e-01, + 0.1731432137906e-08, 0.1741898445707e+00, 0.2019909489111e+02, + 0.1629869741622e-08, 0.3902225646724e+01, 0.3035599730800e+02, + 0.2206215801974e-08, 0.4971131250731e+01, 0.6281667977667e+01, + 0.2205469554680e-08, 0.1677462357110e+01, 0.6284483723224e+01, + 0.2148792362509e-08, 0.4236259604006e+01, 0.1980482729015e+02, + 0.1873733657847e-08, 0.5926814998687e+01, 0.2876692439167e+02, + 0.2026573758959e-08, 0.4349643351962e+01, 0.2449240616245e+02, + 0.1807770325110e-08, 0.5700940482701e+01, 0.2045286941806e+02, + 0.1881174408581e-08, 0.6601286363430e+00, 0.2358125818164e+02, + + 0.1368023671690e-08, 0.2211098592752e+01, 0.2473415438279e+02, + 0.1720017916280e-08, 0.4942488551129e+01, 0.1679593901136e+03, + 0.1702427665131e-08, 0.1452233856386e+01, 0.3338575901272e+03, + 0.1414032510054e-08, 0.5525357721439e+01, 0.1624205518357e+03, + 0.1652626045364e-08, 0.4108794283624e+01, 0.8956999012000e+02, + 0.1642957769686e-08, 0.7344335209984e+00, 0.5267006960365e+02, + 0.1614952403624e-08, 0.3541213951363e+01, 0.3332657872986e+02, + 0.1535988291188e-08, 0.4031094072151e+01, 0.3852657435933e+02, + 0.1593193738177e-08, 0.4185136203609e+01, 0.2282781046519e+03, + 0.1074569126382e-08, 0.1720485636868e+01, 0.8397383534231e+02, + + 0.1074408214509e-08, 0.2758613420318e+01, 0.8401985929482e+02, + 0.9700199670465e-09, 0.4216686842097e+01, 0.7826370942180e+02, + 0.1258433517061e-08, 0.2575068876639e+00, 0.3115650189215e+03, + 0.1240303229539e-08, 0.4800844956756e+00, 0.1784300471910e+03, + 0.9018345948127e-09, 0.3896756361552e+00, 0.5886454391678e+02, + 0.1135301432805e-08, 0.3700805023550e+00, 0.7842370451713e+02, + 0.9215887951370e-09, 0.4364579276638e+01, 0.1014262087719e+03, + 0.1055401054147e-08, 0.2156564222111e+01, 0.5660027930059e+02, + 0.1008725979831e-08, 0.5454015785234e+01, 0.4245678405627e+02, + 0.7217398104321e-09, 0.1597772562175e+01, 0.2457074661053e+03, + + 0.6912033134447e-09, 0.5824090621461e+01, 0.1679936946371e+03, + 0.6833881523549e-09, 0.3578778482835e+01, 0.6053048899753e+02, + 0.4887304205142e-09, 0.3724362812423e+01, 0.9656299901946e+02, + 0.5173709754788e-09, 0.5422427507933e+01, 0.2442876000072e+03, + 0.4671353097145e-09, 0.2396106924439e+01, 0.1435713242844e+03, + 0.5652608439480e-09, 0.2804028838685e+01, 0.8365903305582e+02, + 0.5604061331253e-09, 0.1638816006247e+01, 0.8433466158131e+02, + 0.4712723365400e-09, 0.8979003224474e+00, 0.3164282286739e+03, + 0.4909967465112e-09, 0.3210426725516e+01, 0.4059982187939e+03, + 0.4771358267658e-09, 0.5308027211629e+01, 0.1805255418145e+03, + + 0.3943451445989e-09, 0.2195145341074e+01, 0.2568537517081e+03, + 0.3952109120244e-09, 0.5081189491586e+01, 0.2449975330562e+03, + 0.3788134594789e-09, 0.4345171264441e+01, 0.1568131045107e+03, + 0.3738330190479e-09, 0.2613062847997e+01, 0.3948519331910e+03, + 0.3099866678136e-09, 0.2846760817689e+01, 0.1547176098872e+03, + 0.2002962716768e-09, 0.4921360989412e+01, 0.2268582385539e+03, + 0.2198291338754e-09, 0.1130360117454e+00, 0.1658638954901e+03, + 0.1491958330784e-09, 0.4228195232278e+01, 0.2219950288015e+03, + 0.1475384076173e-09, 0.3005721811604e+00, 0.3052819430710e+03, + 0.1661626624624e-09, 0.7830125621203e+00, 0.2526661704812e+03, + + 0.9015823460025e-10, 0.3807792942715e+01, 0.4171445043968e+03 }; + +/* Sun-to-Earth, T^0, Y */ + static const double e0y[] = { + 0.9998921098898e+00, 0.1826583913846e+00, 0.6283075850446e+01, + -0.2442700893735e-01, 0.0000000000000e+00, 0.0000000000000e+00, + 0.8352929742915e-02, 0.1395277998680e+00, 0.1256615170089e+02, + 0.1046697300177e-03, 0.9641423109763e-01, 0.1884922755134e+02, + 0.3110841876663e-04, 0.5381140401712e+01, 0.8399684731857e+02, + 0.2570269094593e-04, 0.5301016407128e+01, 0.5296909721118e+00, + 0.2147389623610e-04, 0.2662510869850e+01, 0.1577343543434e+01, + 0.1680344384050e-04, 0.5207904119704e+01, 0.6279552690824e+01, + 0.1679117312193e-04, 0.4582187486968e+01, 0.6286599010068e+01, + 0.1440512068440e-04, 0.1900688517726e+01, 0.2352866153506e+01, + + 0.1135139664999e-04, 0.5273108538556e+01, 0.5223693906222e+01, + 0.9345482571018e-05, 0.4503047687738e+01, 0.1203646072878e+02, + 0.9007418719568e-05, 0.1605621059637e+01, 0.1021328554739e+02, + 0.5671536712314e-05, 0.5812849070861e+00, 0.1059381944224e+01, + 0.7451401861666e-05, 0.2807346794836e+01, 0.3981490189893e+00, + 0.6393470057114e-05, 0.6029224133855e+01, 0.5753384878334e+01, + 0.6814275881697e-05, 0.6472990145974e+00, 0.4705732307012e+01, + 0.6113705628887e-05, 0.3813843419700e+01, 0.6812766822558e+01, + 0.4503851367273e-05, 0.4527804370996e+01, 0.5884926831456e+01, + 0.4522249141926e-05, 0.5991783029224e+01, 0.6256777527156e+01, + + 0.4501794307018e-05, 0.3798703844397e+01, 0.6309374173736e+01, + 0.5514927480180e-05, 0.3961257833388e+01, 0.5507553240374e+01, + 0.4062862799995e-05, 0.5256247296369e+01, 0.6681224869435e+01, + 0.5414900429712e-05, 0.5499032014097e+01, 0.7755226100720e+00, + 0.5463153987424e-05, 0.6173092454097e+01, 0.1414349524433e+02, + 0.5071611859329e-05, 0.2870244247651e+01, 0.7860419393880e+01, + 0.2195112094455e-05, 0.2952338617201e+01, 0.1150676975667e+02, + 0.2279139233919e-05, 0.5951775132933e+01, 0.7058598460518e+01, + 0.2278386100876e-05, 0.4845456398785e+01, 0.4694002934110e+01, + 0.2559088003308e-05, 0.6945321117311e+00, 0.1216800268190e+02, + + 0.2561079286856e-05, 0.6167224608301e+01, 0.7099330490126e+00, + 0.1792755796387e-05, 0.1400122509632e+01, 0.7962980379786e+00, + 0.1818715656502e-05, 0.4703347611830e+01, 0.6283142985870e+01, + 0.1818744924791e-05, 0.5086748900237e+01, 0.6283008715021e+01, + 0.1554518791390e-05, 0.5331008042713e-01, 0.2513230340178e+02, + 0.2063265737239e-05, 0.4283680484178e+01, 0.1179062909082e+02, + 0.1497613520041e-05, 0.6074207826073e+01, 0.5486777812467e+01, + 0.2000617940427e-05, 0.2501426281450e+01, 0.1778984560711e+02, + 0.1289731195580e-05, 0.3646340599536e+01, 0.7079373888424e+01, + 0.1282657998934e-05, 0.3232864804902e+01, 0.3738761453707e+01, + + 0.1528915968658e-05, 0.5581433416669e+01, 0.2132990797783e+00, + 0.1187304098432e-05, 0.5453576453694e+01, 0.9437762937313e+01, + 0.7842782928118e-06, 0.2823953922273e+00, 0.8827390247185e+01, + 0.7352892280868e-06, 0.1124369580175e+01, 0.1589072916335e+01, + 0.6570189360797e-06, 0.2089154042840e+01, 0.1176985366291e+02, + 0.6324967590410e-06, 0.6704855581230e+00, 0.6262300422539e+01, + 0.6298289872283e-06, 0.2836414855840e+01, 0.6303851278352e+01, + 0.6476686465855e-06, 0.4852433866467e+00, 0.7113454667900e-02, + 0.8587034651234e-06, 0.1453511005668e+01, 0.1672837615881e+03, + 0.8068948788113e-06, 0.9224087798609e+00, 0.6069776770667e+01, + + 0.8353786011661e-06, 0.4631707184895e+01, 0.3340612434717e+01, + 0.6009324532132e-06, 0.1829498827726e+01, 0.4136910472696e+01, + 0.7558158559566e-06, 0.2588596800317e+01, 0.6496374930224e+01, + 0.5809279504503e-06, 0.5516818853476e+00, 0.1097707878456e+02, + 0.5374131950254e-06, 0.6275674734960e+01, 0.1194447056968e+01, + 0.5711160507326e-06, 0.1091905956872e+01, 0.6282095334605e+01, + 0.5710183170746e-06, 0.2415001635090e+01, 0.6284056366286e+01, + 0.5144373590610e-06, 0.6020336443438e+01, 0.6290189305114e+01, + 0.5103108927267e-06, 0.3775634564605e+01, 0.6275962395778e+01, + 0.4960654697891e-06, 0.1073450946756e+01, 0.6127655567643e+01, + + 0.4786385689280e-06, 0.2431178012310e+01, 0.6438496133249e+01, + 0.6109911263665e-06, 0.5343356157914e+01, 0.3154687086868e+01, + 0.4839898944024e-06, 0.5830833594047e-01, 0.8018209333619e+00, + 0.4734822623919e-06, 0.4536080134821e+01, 0.3128388763578e+01, + 0.4834741473290e-06, 0.2585090489754e+00, 0.7084896783808e+01, + 0.5134858581156e-06, 0.4213317172603e+01, 0.1235285262111e+02, + 0.5064004264978e-06, 0.4814418806478e+00, 0.1185621865188e+02, + 0.3753476772761e-06, 0.1599953399788e+01, 0.8429241228195e+01, + 0.4935264014283e-06, 0.2157417556873e+01, 0.2544314396739e+01, + 0.3950929600897e-06, 0.3359394184254e+01, 0.5481254917084e+01, + + 0.4895849789777e-06, 0.5165704376558e+01, 0.9225539266174e+01, + 0.4215241688886e-06, 0.2065368800993e+01, 0.1726015463500e+02, + 0.3796773731132e-06, 0.1468606346612e+01, 0.4265981595566e+00, + 0.3114178142515e-06, 0.3615638079474e+01, 0.2146165377750e+01, + 0.3260664220838e-06, 0.4417134922435e+01, 0.4164311961999e+01, + 0.3976996123008e-06, 0.4700866883004e+01, 0.5856477690889e+01, + 0.2801459672924e-06, 0.4538902060922e+01, 0.1256967486051e+02, + 0.3638931868861e-06, 0.1334197991475e+01, 0.1807370494127e+02, + 0.2487013269476e-06, 0.3749275558275e+01, 0.2629832328990e-01, + 0.3034165481994e-06, 0.4236622030873e+00, 0.4535059491685e+01, + + 0.2676278825586e-06, 0.5970848007811e+01, 0.3930209696940e+01, + 0.2764903818918e-06, 0.5194636754501e+01, 0.1256262854127e+02, + 0.2485149930507e-06, 0.1002434207846e+01, 0.5088628793478e+01, + 0.2199305540941e-06, 0.3066773098403e+01, 0.1255903824622e+02, + 0.2571106500435e-06, 0.7588312459063e+00, 0.1336797263425e+02, + 0.2049751817158e-06, 0.3444977434856e+01, 0.1137170464392e+02, + 0.2599707296297e-06, 0.1873128542205e+01, 0.7143069561767e+02, + 0.1785018072217e-06, 0.5015891306615e+01, 0.1748016358760e+01, + 0.2324833891115e-06, 0.4618271239730e+01, 0.1831953657923e+02, + 0.1709711119545e-06, 0.5300003455669e+01, 0.4933208510675e+01, + + 0.2107159351716e-06, 0.2229819815115e+01, 0.7477522907414e+01, + 0.1750333080295e-06, 0.6161485880008e+01, 0.1044738781244e+02, + 0.2000598210339e-06, 0.2967357299999e+01, 0.8031092209206e+01, + 0.1380920248681e-06, 0.3027007923917e+01, 0.8635942003952e+01, + 0.1412460470299e-06, 0.6037597163798e+01, 0.2942463415728e+01, + 0.1888459803001e-06, 0.8561476243374e+00, 0.1561374759853e+03, + 0.1788370542585e-06, 0.4869736290209e+01, 0.1592596075957e+01, + 0.1360893296167e-06, 0.3626411886436e+01, 0.1309584267300e+02, + 0.1506846530160e-06, 0.1550975377427e+01, 0.1649636139783e+02, + 0.1800913376176e-06, 0.2075826033190e+01, 0.1729818233119e+02, + + 0.1436261390649e-06, 0.6148876420255e+01, 0.2042657109477e+02, + 0.1220227114151e-06, 0.4382583879906e+01, 0.7632943190217e+01, + 0.1337883603592e-06, 0.2036644327361e+01, 0.1213955354133e+02, + 0.1159326650738e-06, 0.3892276994687e+01, 0.5331357529664e+01, + 0.1352853128569e-06, 0.1447950649744e+01, 0.1673046366289e+02, + 0.1433408296083e-06, 0.4457854692961e+01, 0.7342457794669e+01, + 0.1234701666518e-06, 0.1538818147151e+01, 0.6279485555400e+01, + 0.1234027192007e-06, 0.1968523220760e+01, 0.6286666145492e+01, + 0.1244024091797e-06, 0.5779803499985e+01, 0.1511046609763e+02, + 0.1097934945516e-06, 0.6210975221388e+00, 0.1098880815746e+02, + + 0.1254611329856e-06, 0.2591963807998e+01, 0.1572083878776e+02, + 0.1158247286784e-06, 0.2483612812670e+01, 0.5729506548653e+01, + 0.9039078252960e-07, 0.3857554579796e+01, 0.9623688285163e+01, + 0.9108024978836e-07, 0.5826368512984e+01, 0.7234794171227e+01, + 0.8887068108436e-07, 0.3475694573987e+01, 0.6148010737701e+01, + 0.8632374035438e-07, 0.3059070488983e-01, 0.6418140963190e+01, + 0.7893186992967e-07, 0.1583194837728e+01, 0.2118763888447e+01, + 0.8297650201172e-07, 0.8519770534637e+00, 0.1471231707864e+02, + 0.1019759578988e-06, 0.1319598738732e+00, 0.1349867339771e+01, + 0.1010037696236e-06, 0.9937860115618e+00, 0.6836645152238e+01, + + 0.1047727548266e-06, 0.1382138405399e+01, 0.5999216516294e+01, + 0.7351993881086e-07, 0.3833397851735e+01, 0.6040347114260e+01, + 0.9868771092341e-07, 0.2124913814390e+01, 0.6566935184597e+01, + 0.7007321959390e-07, 0.5946305343763e+01, 0.6525804586632e+01, + 0.6861411679709e-07, 0.4574654977089e+01, 0.7238675589263e+01, + 0.7554519809614e-07, 0.5949232686844e+01, 0.1253985337760e+02, + 0.9541880448335e-07, 0.3495242990564e+01, 0.2122839202813e+02, + 0.7185606722155e-07, 0.4310113471661e+01, 0.6245048154254e+01, + 0.7131360871710e-07, 0.5480309323650e+01, 0.6321103546637e+01, + 0.6651142021039e-07, 0.5411097713654e+01, 0.5327476111629e+01, + + 0.8538618213667e-07, 0.1827849973951e+01, 0.1101510648075e+02, + 0.8634954288044e-07, 0.5443584943349e+01, 0.5643178611111e+01, + 0.7449415051484e-07, 0.2011535459060e+01, 0.5368044267797e+00, + 0.7421047599169e-07, 0.3464562529249e+01, 0.2354323048545e+02, + 0.6140694354424e-07, 0.5657556228815e+01, 0.1296430071988e+02, + 0.6353525143033e-07, 0.3463816593821e+01, 0.1990745094947e+01, + 0.6221964013447e-07, 0.1532259498697e+01, 0.9517183207817e+00, + 0.5852480257244e-07, 0.1375396598875e+01, 0.9555997388169e+00, + 0.6398637498911e-07, 0.2405645801972e+01, 0.2407292145756e+02, + 0.7039744069878e-07, 0.5397541799027e+01, 0.5225775174439e+00, + + 0.6977997694382e-07, 0.4762347105419e+01, 0.1097355562493e+02, + 0.7460629558396e-07, 0.2711944692164e+01, 0.2200391463820e+02, + 0.5376577536101e-07, 0.2352980430239e+01, 0.1431416805965e+02, + 0.7530607893556e-07, 0.1943940180699e+01, 0.1842262939178e+02, + 0.6822928971605e-07, 0.4337651846959e+01, 0.1554202828031e+00, + 0.6220772380094e-07, 0.6716871369278e+00, 0.1845107853235e+02, + 0.6586950799043e-07, 0.2229714460505e+01, 0.5216580451554e+01, + 0.5873800565771e-07, 0.7627013920580e+00, 0.6398972393349e+00, + 0.6264346929745e-07, 0.6202785478961e+00, 0.6277552955062e+01, + 0.6257929115669e-07, 0.2886775596668e+01, 0.6288598745829e+01, + + 0.5343536033409e-07, 0.1977241012051e+01, 0.4690479774488e+01, + 0.5587849781714e-07, 0.1922923484825e+01, 0.1551045220144e+01, + 0.6905100845603e-07, 0.3570757164631e+01, 0.1030928125552e+00, + 0.6178957066649e-07, 0.5197558947765e+01, 0.5230807360890e+01, + 0.6187270224331e-07, 0.8193497368922e+00, 0.5650292065779e+01, + 0.5385664291426e-07, 0.5406336665586e+01, 0.7771377146812e+02, + 0.6329363917926e-07, 0.2837760654536e+01, 0.2608790314060e+02, + 0.4546018761604e-07, 0.2933580297050e+01, 0.5535693017924e+00, + 0.6196091049375e-07, 0.4157871494377e+01, 0.8467247584405e+02, + 0.6159555108218e-07, 0.3211703561703e+01, 0.2394243902548e+03, + + 0.4995340539317e-07, 0.1459098102922e+01, 0.4732030630302e+01, + 0.5457031243572e-07, 0.1430457676136e+01, 0.6179983037890e+01, + 0.4863461418397e-07, 0.2196425916730e+01, 0.9027992316901e+02, + 0.5342947626870e-07, 0.2086612890268e+01, 0.6386168663001e+01, + 0.5674296648439e-07, 0.2760204966535e+01, 0.6915859635113e+01, + 0.4745783120161e-07, 0.4245368971862e+01, 0.6282970628506e+01, + 0.4745676961198e-07, 0.5544725787016e+01, 0.6283181072386e+01, + 0.4049796869973e-07, 0.2213984363586e+01, 0.6254626709878e+01, + 0.4248333596940e-07, 0.8075781952896e+00, 0.7875671926403e+01, + 0.4027178070205e-07, 0.1293268540378e+01, 0.6311524991013e+01, + + 0.4066543943476e-07, 0.3986141175804e+01, 0.3634620989887e+01, + 0.4858863787880e-07, 0.1276112738231e+01, 0.5760498333002e+01, + 0.5277398263530e-07, 0.4916111741527e+01, 0.2515860172507e+02, + 0.4105635656559e-07, 0.1725805864426e+01, 0.6709674010002e+01, + 0.4376781925772e-07, 0.2243642442106e+01, 0.6805653367890e+01, + 0.3235827894693e-07, 0.3614135118271e+01, 0.1066495398892e+01, + 0.3073244740308e-07, 0.2460873393460e+01, 0.5863591145557e+01, + 0.3088609271373e-07, 0.5678431771790e+01, 0.9917696840332e+01, + 0.3393022279836e-07, 0.3814017477291e+01, 0.1391601904066e+02, + 0.3038686508802e-07, 0.4660216229171e+01, 0.1256621883632e+02, + + 0.4019677752497e-07, 0.5906906243735e+01, 0.1334167431096e+02, + 0.3288834998232e-07, 0.9536146445882e+00, 0.1620077269078e+02, + 0.3889973794631e-07, 0.3942205097644e+01, 0.7478166569050e-01, + 0.3050438987141e-07, 0.1624810271286e+01, 0.1805292951336e+02, + 0.3601142564638e-07, 0.4030467142575e+01, 0.6208294184755e+01, + 0.3689015557141e-07, 0.3648878818694e+01, 0.5966683958112e+01, + 0.3563471893565e-07, 0.5749584017096e+01, 0.6357857516136e+01, + 0.2776183170667e-07, 0.2630124187070e+01, 0.3523159621801e-02, + 0.2922350530341e-07, 0.1790346403629e+01, 0.1272157198369e+02, + 0.3511076917302e-07, 0.6142198301611e+01, 0.6599467742779e+01, + + 0.3619351007632e-07, 0.1432421386492e+01, 0.6019991944201e+01, + 0.2561254711098e-07, 0.2302822475792e+01, 0.1259245002418e+02, + 0.2626903942920e-07, 0.8660470994571e+00, 0.6702560555334e+01, + 0.2550187397083e-07, 0.6069721995383e+01, 0.1057540660594e+02, + 0.2535873526138e-07, 0.1079020331795e-01, 0.3141537925223e+02, + 0.3519786153847e-07, 0.3809066902283e+01, 0.2505706758577e+03, + 0.3424651492873e-07, 0.2075435114417e+01, 0.6546159756691e+01, + 0.2372676630861e-07, 0.2057803120154e+01, 0.2388894113936e+01, + 0.2710980779541e-07, 0.1510068488010e+01, 0.1202934727411e+02, + 0.3038710889704e-07, 0.5043617528901e+01, 0.1256608456547e+02, + + 0.2220364130585e-07, 0.3694793218205e+01, 0.1336244973887e+02, + 0.3025880825460e-07, 0.5450618999049e-01, 0.2908881142201e+02, + 0.2784493486864e-07, 0.3381164084502e+01, 0.1494531617769e+02, + 0.2294414142438e-07, 0.4382309025210e+01, 0.6076890225335e+01, + 0.2012723294724e-07, 0.9142212256518e+00, 0.6262720680387e+01, + 0.2036357831958e-07, 0.5676172293154e+01, 0.4701116388778e+01, + 0.2003474823288e-07, 0.2592767977625e+01, 0.6303431020504e+01, + 0.2207144900109e-07, 0.5404976271180e+01, 0.6489261475556e+01, + 0.2481664905135e-07, 0.4373284587027e+01, 0.1204357418345e+02, + 0.2674949182295e-07, 0.5859182188482e+01, 0.4590910121555e+01, + + 0.2450554720322e-07, 0.4555381557451e+01, 0.1495633313810e+00, + 0.2601975986457e-07, 0.3933165584959e+01, 0.1965104848470e+02, + 0.2199860022848e-07, 0.5227977189087e+01, 0.1351787002167e+02, + 0.2448121172316e-07, 0.4858060353949e+01, 0.1162474756779e+01, + 0.1876014864049e-07, 0.5690546553605e+01, 0.6279194432410e+01, + 0.1874513219396e-07, 0.4099539297446e+01, 0.6286957268481e+01, + 0.2156380842559e-07, 0.4382594769913e+00, 0.1813929450232e+02, + 0.1981691240061e-07, 0.1829784152444e+01, 0.4686889479442e+01, + 0.2329992648539e-07, 0.2836254278973e+01, 0.1002183730415e+02, + 0.1765184135302e-07, 0.2803494925833e+01, 0.4292330755499e+01, + + 0.2436368366085e-07, 0.2836897959677e+01, 0.9514313292143e+02, + 0.2164089203889e-07, 0.6127522446024e+01, 0.6037244212485e+01, + 0.1847755034221e-07, 0.3683163635008e+01, 0.2427287361862e+00, + 0.1674798769966e-07, 0.3316993867246e+00, 0.1311972100268e+02, + 0.2222542124356e-07, 0.8294097805480e+00, 0.1266924451345e+02, + 0.2071074505925e-07, 0.3659492220261e+01, 0.6528907488406e+01, + 0.1608224471835e-07, 0.4774492067182e+01, 0.1352175143971e+02, + 0.1857583439071e-07, 0.2873120597682e+01, 0.8662240327241e+01, + 0.1793018836159e-07, 0.5282441177929e+00, 0.6819880277225e+01, + 0.1575391221692e-07, 0.1320789654258e+01, 0.1102062672231e+00, + + 0.1840132009557e-07, 0.1917110916256e+01, 0.6514761976723e+02, + 0.1760917288281e-07, 0.2972635937132e+01, 0.5746271423666e+01, + 0.1561779518516e-07, 0.4372569261981e+01, 0.6272439236156e+01, + 0.1558687885205e-07, 0.5416424926425e+01, 0.6293712464735e+01, + 0.1951359382579e-07, 0.3094448898752e+01, 0.2301353951334e+02, + 0.1569144275614e-07, 0.2802103689808e+01, 0.1765478049437e+02, + 0.1479130389462e-07, 0.2136435020467e+01, 0.2077542790660e-01, + 0.1467828510764e-07, 0.7072627435674e+00, 0.1052268489556e+01, + 0.1627627337440e-07, 0.3947607143237e+01, 0.6327837846670e+00, + 0.1503498479758e-07, 0.4079248909190e+01, 0.7626583626240e-01, + + 0.1297967708237e-07, 0.6269637122840e+01, 0.1149965630200e+02, + 0.1374416896634e-07, 0.4175657970702e+01, 0.6016468784579e+01, + 0.1783812325219e-07, 0.1476540547560e+01, 0.3301902111895e+02, + 0.1525884228756e-07, 0.4653477715241e+01, 0.9411464614024e+01, + 0.1451067396763e-07, 0.2573001128225e+01, 0.1277945078067e+02, + 0.1297713111950e-07, 0.5612799618771e+01, 0.6549682916313e+01, + 0.1462784012820e-07, 0.4189661623870e+01, 0.1863592847156e+02, + 0.1384185980007e-07, 0.2656915472196e+01, 0.2379164476796e+01, + 0.1221497599801e-07, 0.5612515760138e+01, 0.1257326515556e+02, + 0.1560574525896e-07, 0.4783414317919e+01, 0.1887552587463e+02, + + 0.1544598372036e-07, 0.2694431138063e+01, 0.1820933031200e+02, + 0.1531678928696e-07, 0.4105103489666e+01, 0.2593412433514e+02, + 0.1349321503795e-07, 0.3082437194015e+00, 0.5120601093667e+01, + 0.1252030290917e-07, 0.6124072334087e+01, 0.6993008899458e+01, + 0.1459243816687e-07, 0.3733103981697e+01, 0.3813291813120e-01, + 0.1226103625262e-07, 0.1267127706817e+01, 0.2435678079171e+02, + 0.1019449641504e-07, 0.4367790112269e+01, 0.1725663147538e+02, + 0.1380789433607e-07, 0.3387201768700e+01, 0.2458316379602e+00, + 0.1019453421658e-07, 0.9204143073737e+00, 0.6112403035119e+01, + 0.1297929434405e-07, 0.5786874896426e+01, 0.1249137003520e+02, + + 0.9912677786097e-08, 0.3164232870746e+01, 0.6247047890016e+01, + 0.9829386098599e-08, 0.2586762413351e+01, 0.6453748665772e+01, + 0.1226807746104e-07, 0.6239068436607e+01, 0.5429879531333e+01, + 0.1192691755997e-07, 0.1867380051424e+01, 0.6290122169689e+01, + 0.9836499227081e-08, 0.3424716293727e+00, 0.6319103810876e+01, + 0.9642862564285e-08, 0.5661372990657e+01, 0.8273820945392e+01, + 0.1165184404862e-07, 0.5768367239093e+01, 0.1778273215245e+02, + 0.1175794418818e-07, 0.1657351222943e+01, 0.6276029531202e+01, + 0.1018948635601e-07, 0.6458292350865e+00, 0.1254537627298e+02, + 0.9500383606676e-08, 0.1054306140741e+01, 0.1256517118505e+02, + + 0.1227512202906e-07, 0.2505278379114e+01, 0.2248384854122e+02, + 0.9664792009993e-08, 0.4289737277000e+01, 0.6259197520765e+01, + 0.9613285666331e-08, 0.5500597673141e+01, 0.6306954180126e+01, + 0.1117906736211e-07, 0.2361405953468e+01, 0.1779695906178e+02, + 0.9611378640782e-08, 0.2851310576269e+01, 0.2061856251104e+00, + 0.8845354852370e-08, 0.6208777705343e+01, 0.1692165728891e+01, + 0.1054046966600e-07, 0.5413091423934e+01, 0.2204125344462e+00, + 0.1215539124483e-07, 0.5613969479755e+01, 0.8257698122054e+02, + 0.9932460955209e-08, 0.1106124877015e+01, 0.1017725758696e+02, + 0.8785804715043e-08, 0.2869224476477e+01, 0.9491756770005e+00, + + 0.8538084097562e-08, 0.6159640899344e+01, 0.6393282117669e+01, + 0.8648994369529e-08, 0.1374901198784e+01, 0.4804209201333e+01, + 0.1039063219067e-07, 0.5171080641327e+01, 0.1550861511662e+02, + 0.8867983926439e-08, 0.8317320304902e+00, 0.3903911373650e+01, + 0.8327495955244e-08, 0.3605591969180e+01, 0.6172869583223e+01, + 0.9243088356133e-08, 0.6114299196843e+01, 0.6267823317922e+01, + 0.9205657357835e-08, 0.3675153683737e+01, 0.6298328382969e+01, + 0.1033269714606e-07, 0.3313328813024e+01, 0.5573142801433e+01, + 0.8001706275552e-08, 0.2019980960053e+01, 0.2648454860559e+01, + 0.9171858254191e-08, 0.8992015524177e+00, 0.1498544001348e+03, + + 0.1075327150242e-07, 0.2898669963648e+01, 0.3694923081589e+02, + 0.9884866689828e-08, 0.4946715904478e+01, 0.1140367694411e+02, + 0.9541835576677e-08, 0.2371787888469e+01, 0.1256713221673e+02, + 0.7739903376237e-08, 0.2213775190612e+01, 0.7834121070590e+01, + 0.7311962684106e-08, 0.3429378787739e+01, 0.1192625446156e+02, + 0.9724904869624e-08, 0.6195878564404e+01, 0.2280573557157e+02, + 0.9251628983612e-08, 0.6511509527390e+00, 0.2787043132925e+01, + 0.7320763787842e-08, 0.6001083639421e+01, 0.6282655592598e+01, + 0.7320296650962e-08, 0.3789073265087e+01, 0.6283496108294e+01, + 0.7947032271039e-08, 0.1059659582204e+01, 0.1241073141809e+02, + + 0.9005277053115e-08, 0.1280315624361e+01, 0.6281591679874e+01, + 0.8995601652048e-08, 0.2224439106766e+01, 0.6284560021018e+01, + 0.8288040568796e-08, 0.5234914433867e+01, 0.1241658836951e+02, + 0.6359381347255e-08, 0.4137989441490e+01, 0.1596186371003e+01, + 0.8699572228626e-08, 0.1758411009497e+01, 0.6133512519065e+01, + 0.6456797542736e-08, 0.5919285089994e+01, 0.1685848245639e+02, + 0.7424573475452e-08, 0.5414616938827e+01, 0.4061219149443e+01, + 0.7235671196168e-08, 0.1496516557134e+01, 0.1610006857377e+03, + 0.8104015182733e-08, 0.1919918242764e+01, 0.8460828644453e+00, + 0.8098576535937e-08, 0.3819615855458e+01, 0.3894181736510e+01, + + 0.6275292346625e-08, 0.6244264115141e+01, 0.8531963191132e+00, + 0.6052432989112e-08, 0.5037731872610e+00, 0.1567108171867e+02, + 0.5705651535817e-08, 0.2984557271995e+01, 0.1258692712880e+02, + 0.5789650115138e-08, 0.6087038140697e+01, 0.1193336791622e+02, + 0.5512132153377e-08, 0.5855668994076e+01, 0.1232342296471e+02, + 0.7388890819102e-08, 0.2443128574740e+01, 0.4907302013889e+01, + 0.5467593991798e-08, 0.3017561234194e+01, 0.1884211409667e+02, + 0.6388519802999e-08, 0.5887386712935e+01, 0.5217580628120e+02, + 0.6106777149944e-08, 0.3483461059895e+00, 0.1422690933580e-01, + 0.7383420275489e-08, 0.5417387056707e+01, 0.2358125818164e+02, + + 0.5505208141738e-08, 0.2848193644783e+01, 0.1151388321134e+02, + 0.6310757462877e-08, 0.2349882520828e+01, 0.1041998632314e+02, + 0.6166904929691e-08, 0.5728575944077e+00, 0.6151533897323e+01, + 0.5263442042754e-08, 0.4495796125937e+01, 0.1885275071096e+02, + 0.5591828082629e-08, 0.1355441967677e+01, 0.4337116142245e+00, + 0.5397051680497e-08, 0.1673422864307e+01, 0.6286362197481e+01, + 0.5396992745159e-08, 0.1833502206373e+01, 0.6279789503410e+01, + 0.6572913000726e-08, 0.3331122065824e+01, 0.1176433076753e+02, + 0.5123421866413e-08, 0.2165327142679e+01, 0.1245594543367e+02, + 0.5930495725999e-08, 0.2931146089284e+01, 0.6414617803568e+01, + + 0.6431797403933e-08, 0.4134407994088e+01, 0.1350651127443e+00, + 0.5003182207604e-08, 0.3805420303749e+01, 0.1096996532989e+02, + 0.5587731032504e-08, 0.1082469260599e+01, 0.6062663316000e+01, + 0.5935263407816e-08, 0.8384333678401e+00, 0.5326786718777e+01, + 0.4756019827760e-08, 0.3552588749309e+01, 0.3104930017775e+01, + 0.6599951172637e-08, 0.4320826409528e+01, 0.4087944051283e+02, + 0.5902606868464e-08, 0.4811879454445e+01, 0.5849364236221e+01, + 0.5921147809031e-08, 0.9942628922396e-01, 0.1581959461667e+01, + 0.5505382581266e-08, 0.2466557607764e+01, 0.6503488384892e+01, + 0.5353771071862e-08, 0.4551978748683e+01, 0.1735668374386e+03, + + 0.5063282210946e-08, 0.5710812312425e+01, 0.1248988586463e+02, + 0.5926120403383e-08, 0.1333998428358e+01, 0.2673594526851e+02, + 0.5211016176149e-08, 0.4649315360760e+01, 0.2460261242967e+02, + 0.5347075084894e-08, 0.5512754081205e+01, 0.4171425416666e+01, + 0.4872609773574e-08, 0.1308025299938e+01, 0.5333900173445e+01, + 0.4727711321420e-08, 0.2144908368062e+01, 0.7232251527446e+01, + 0.6029426018652e-08, 0.5567259412084e+01, 0.3227113045244e+03, + 0.4321485284369e-08, 0.5230667156451e+01, 0.9388005868221e+01, + 0.4476406760553e-08, 0.6134081115303e+01, 0.5547199253223e+01, + 0.5835268277420e-08, 0.4783808492071e+01, 0.7285056171570e+02, + + 0.5172183602748e-08, 0.5161817911099e+01, 0.1884570439172e+02, + 0.5693571465184e-08, 0.1381646203111e+01, 0.9723862754494e+02, + 0.4060634965349e-08, 0.3876705259495e+00, 0.4274518229222e+01, + 0.3967398770473e-08, 0.5029491776223e+01, 0.3496032717521e+01, + 0.3943754005255e-08, 0.1923162955490e+01, 0.6244942932314e+01, + 0.4781323427824e-08, 0.4633332586423e+01, 0.2929661536378e+02, + 0.3871483781204e-08, 0.1616650009743e+01, 0.6321208768577e+01, + 0.5141741733997e-08, 0.9817316704659e-01, 0.1232032006293e+02, + 0.4002385978497e-08, 0.3656161212139e+01, 0.7018952447668e+01, + 0.4901092604097e-08, 0.4404098713092e+01, 0.1478866649112e+01, + + 0.3740932630345e-08, 0.5181188732639e+00, 0.6922973089781e+01, + 0.4387283718538e-08, 0.3254859566869e+01, 0.2331413144044e+03, + 0.5019197802033e-08, 0.3086773224677e+01, 0.1715706182245e+02, + 0.3834931695175e-08, 0.2797882673542e+01, 0.1491901785440e+02, + 0.3760413942497e-08, 0.2892676280217e+01, 0.1726726808967e+02, + 0.3719717204628e-08, 0.5861046025739e+01, 0.6297302759782e+01, + 0.4145623530149e-08, 0.2168239627033e+01, 0.1376059875786e+02, + 0.3932788425380e-08, 0.6271811124181e+01, 0.7872148766781e+01, + 0.3686377476857e-08, 0.3936853151404e+01, 0.6268848941110e+01, + 0.3779077950339e-08, 0.1404148734043e+01, 0.4157198507331e+01, + + 0.4091334550598e-08, 0.2452436180854e+01, 0.9779108567966e+01, + 0.3926694536146e-08, 0.6102292739040e+01, 0.1098419223922e+02, + 0.4841000253289e-08, 0.6072760457276e+01, 0.1252801878276e+02, + 0.4949340130240e-08, 0.1154832815171e+01, 0.1617106187867e+03, + 0.3761557737360e-08, 0.5527545321897e+01, 0.3185192151914e+01, + 0.3647396268188e-08, 0.1525035688629e+01, 0.6271346477544e+01, + 0.3932405074189e-08, 0.5570681040569e+01, 0.2139354194808e+02, + 0.3631322501141e-08, 0.1981240601160e+01, 0.6294805223347e+01, + 0.4130007425139e-08, 0.2050060880201e+01, 0.2195415756911e+02, + 0.4433905965176e-08, 0.3277477970321e+01, 0.7445550607224e+01, + + 0.3851814176947e-08, 0.5210690074886e+01, 0.9562891316684e+00, + 0.3485807052785e-08, 0.6653274904611e+00, 0.1161697602389e+02, + 0.3979772816991e-08, 0.1767941436148e+01, 0.2277943724828e+02, + 0.3402607460500e-08, 0.3421746306465e+01, 0.1087398597200e+02, + 0.4049993000926e-08, 0.1127144787547e+01, 0.3163918923335e+00, + 0.3420511182382e-08, 0.4214794779161e+01, 0.1362553364512e+02, + 0.3640772365012e-08, 0.5324905497687e+01, 0.1725304118033e+02, + 0.3323037987501e-08, 0.6135761838271e+01, 0.6279143387820e+01, + 0.4503141663637e-08, 0.1802305450666e+01, 0.1385561574497e+01, + 0.4314560055588e-08, 0.4812299731574e+01, 0.4176041334900e+01, + + 0.3294226949110e-08, 0.3657547059723e+01, 0.6287008313071e+01, + 0.3215657197281e-08, 0.4866676894425e+01, 0.5749861718712e+01, + 0.4129362656266e-08, 0.3809342558906e+01, 0.5905702259363e+01, + 0.3137762976388e-08, 0.2494635174443e+01, 0.2099539292909e+02, + 0.3514010952384e-08, 0.2699961831678e+01, 0.7335344340001e+01, + 0.3327607571530e-08, 0.3318457714816e+01, 0.5436992986000e+01, + 0.3541066946675e-08, 0.4382703582466e+01, 0.1234573916645e+02, + 0.3216179847052e-08, 0.5271066317054e+01, 0.3802769619140e-01, + 0.2959045059570e-08, 0.5819591585302e+01, 0.2670964694522e+02, + 0.3884040326665e-08, 0.5980934960428e+01, 0.6660449441528e+01, + + 0.2922027539886e-08, 0.3337290282483e+01, 0.1375773836557e+01, + 0.4110846382042e-08, 0.5742978187327e+01, 0.4480965020977e+02, + 0.2934508411032e-08, 0.2278075804200e+01, 0.6408777551755e+00, + 0.3966896193000e-08, 0.5835747858477e+01, 0.3773735910827e+00, + 0.3286695827610e-08, 0.5838898193902e+01, 0.3932462625300e-02, + 0.3720643094196e-08, 0.1122212337858e+01, 0.1646033343740e+02, + 0.3285508906174e-08, 0.9182250996416e+00, 0.1081813534213e+02, + 0.3753880575973e-08, 0.5174761973266e+01, 0.5642198095270e+01, + 0.3022129385587e-08, 0.3381611020639e+01, 0.2982630633589e+02, + 0.2798569205621e-08, 0.3546193723922e+01, 0.1937891852345e+02, + + 0.3397872070505e-08, 0.4533203197934e+01, 0.6923953605621e+01, + 0.3708099772977e-08, 0.2756168198616e+01, 0.3066615496545e+02, + 0.3599283541510e-08, 0.1934395469918e+01, 0.6147450479709e+01, + 0.3688702753059e-08, 0.7149920971109e+00, 0.2636725487657e+01, + 0.2681084724003e-08, 0.4899819493154e+01, 0.6816289982179e+01, + 0.3495993460759e-08, 0.1572418915115e+01, 0.6418701221183e+01, + 0.3130770324995e-08, 0.8912190180489e+00, 0.1235996607578e+02, + 0.2744353821941e-08, 0.3800821940055e+01, 0.2059724391010e+02, + 0.2842732906341e-08, 0.2644717440029e+01, 0.2828699048865e+02, + 0.3046882682154e-08, 0.3987793020179e+01, 0.6055599646783e+01, + + 0.2399072455143e-08, 0.9908826440764e+00, 0.6255674361143e+01, + 0.2384306274204e-08, 0.2516149752220e+01, 0.6310477339748e+01, + 0.2977324500559e-08, 0.5849195642118e+01, 0.1652265972112e+02, + 0.3062835258972e-08, 0.1681660100162e+01, 0.1172006883645e+02, + 0.3109682589231e-08, 0.5804143987737e+00, 0.2751146787858e+02, + 0.2903920355299e-08, 0.5800768280123e+01, 0.6510552054109e+01, + 0.2823221989212e-08, 0.9241118370216e+00, 0.5469525544182e+01, + 0.3187949696649e-08, 0.3139776445735e+01, 0.1693792562116e+03, + 0.2922559771655e-08, 0.3549440782984e+01, 0.2630839062450e+00, + 0.2436302066603e-08, 0.4735540696319e+01, 0.3946258593675e+00, + + 0.3049473043606e-08, 0.4998289124561e+01, 0.8390110365991e+01, + 0.2863682575784e-08, 0.6709515671102e+00, 0.2243449970715e+00, + 0.2641750517966e-08, 0.5410978257284e+01, 0.2986433403208e+02, + 0.2704093466243e-08, 0.4778317207821e+01, 0.6129297044991e+01, + 0.2445522177011e-08, 0.6009020662222e+01, 0.1171295538178e+02, + 0.2623608810230e-08, 0.5010449777147e+01, 0.6436854655901e+01, + 0.2079259704053e-08, 0.5980943768809e+01, 0.2019909489111e+02, + 0.2820225596771e-08, 0.2679965110468e+01, 0.5934151399930e+01, + 0.2365221950927e-08, 0.1894231148810e+01, 0.2470570524223e+02, + 0.2359682077149e-08, 0.4220752950780e+01, 0.8671969964381e+01, + + 0.2387577137206e-08, 0.2571783940617e+01, 0.7096626156709e+01, + 0.1982102089816e-08, 0.5169765997119e+00, 0.1727188400790e+02, + 0.2687502389925e-08, 0.6239078264579e+01, 0.7075506709219e+02, + 0.2207751669135e-08, 0.2031184412677e+01, 0.4377611041777e+01, + 0.2618370214274e-08, 0.8266079985979e+00, 0.6632000300961e+01, + 0.2591951887361e-08, 0.8819350522008e+00, 0.4873985990671e+02, + 0.2375055656248e-08, 0.3520944177789e+01, 0.1590676413561e+02, + 0.2472019978911e-08, 0.1551431908671e+01, 0.6612329252343e+00, + 0.2368157127199e-08, 0.4178610147412e+01, 0.3459636466239e+02, + 0.1764846605693e-08, 0.1506764000157e+01, 0.1980094587212e+02, + + 0.2291769608798e-08, 0.2118250611782e+01, 0.2844914056730e-01, + 0.2209997316943e-08, 0.3363255261678e+01, 0.2666070658668e+00, + 0.2292699097923e-08, 0.4200423956460e+00, 0.1484170571900e-02, + 0.1629683015329e-08, 0.2331362582487e+01, 0.3035599730800e+02, + 0.2206492862426e-08, 0.3400274026992e+01, 0.6281667977667e+01, + 0.2205746568257e-08, 0.1066051230724e+00, 0.6284483723224e+01, + 0.2026310767991e-08, 0.2779066487979e+01, 0.2449240616245e+02, + 0.1762977622163e-08, 0.9951450691840e+00, 0.2045286941806e+02, + 0.1368535049606e-08, 0.6402447365817e+00, 0.2473415438279e+02, + 0.1720598775450e-08, 0.2303524214705e+00, 0.1679593901136e+03, + + 0.1702429015449e-08, 0.6164622655048e+01, 0.3338575901272e+03, + 0.1414033197685e-08, 0.3954561185580e+01, 0.1624205518357e+03, + 0.1573768958043e-08, 0.2028286308984e+01, 0.3144167757552e+02, + 0.1650705184447e-08, 0.2304040666128e+01, 0.5267006960365e+02, + 0.1651087618855e-08, 0.2538461057280e+01, 0.8956999012000e+02, + 0.1616409518983e-08, 0.5111054348152e+01, 0.3332657872986e+02, + 0.1537175173581e-08, 0.5601130666603e+01, 0.3852657435933e+02, + 0.1593191980553e-08, 0.2614340453411e+01, 0.2282781046519e+03, + 0.1499480170643e-08, 0.3624721577264e+01, 0.2823723341956e+02, + 0.1493807843235e-08, 0.4214569879008e+01, 0.2876692439167e+02, + + 0.1074571199328e-08, 0.1496911744704e+00, 0.8397383534231e+02, + 0.1074406983417e-08, 0.1187817671922e+01, 0.8401985929482e+02, + 0.9757576855851e-09, 0.2655703035858e+01, 0.7826370942180e+02, + 0.1258432887565e-08, 0.4969896184844e+01, 0.3115650189215e+03, + 0.1240336343282e-08, 0.5192460776926e+01, 0.1784300471910e+03, + 0.9016107005164e-09, 0.1960356923057e+01, 0.5886454391678e+02, + 0.1135392360918e-08, 0.5082427809068e+01, 0.7842370451713e+02, + 0.9216046089565e-09, 0.2793775037273e+01, 0.1014262087719e+03, + 0.1061276615030e-08, 0.3726144311409e+01, 0.5660027930059e+02, + 0.1010110596263e-08, 0.7404080708937e+00, 0.4245678405627e+02, + + 0.7217424756199e-09, 0.2697449980577e-01, 0.2457074661053e+03, + 0.6912003846756e-09, 0.4253296276335e+01, 0.1679936946371e+03, + 0.6871814664847e-09, 0.5148072412354e+01, 0.6053048899753e+02, + 0.4887158016343e-09, 0.2153581148294e+01, 0.9656299901946e+02, + 0.5161802866314e-09, 0.3852750634351e+01, 0.2442876000072e+03, + 0.5652599559057e-09, 0.1233233356270e+01, 0.8365903305582e+02, + 0.4710812608586e-09, 0.5610486976767e+01, 0.3164282286739e+03, + 0.4909977500324e-09, 0.1639629524123e+01, 0.4059982187939e+03, + 0.4772641839378e-09, 0.3737100368583e+01, 0.1805255418145e+03, + 0.4487562567153e-09, 0.1158417054478e+00, 0.8433466158131e+02, + + 0.3943441230497e-09, 0.6243502862796e+00, 0.2568537517081e+03, + 0.3952236913598e-09, 0.3510377382385e+01, 0.2449975330562e+03, + 0.3788898363417e-09, 0.5916128302299e+01, 0.1568131045107e+03, + 0.3738329328831e-09, 0.1042266763456e+01, 0.3948519331910e+03, + 0.2451199165151e-09, 0.1166788435700e+01, 0.1435713242844e+03, + 0.2436734402904e-09, 0.3254726114901e+01, 0.2268582385539e+03, + 0.2213605274325e-09, 0.1687210598530e+01, 0.1658638954901e+03, + 0.1491521204829e-09, 0.2657541786794e+01, 0.2219950288015e+03, + 0.1474995329744e-09, 0.5013089805819e+01, 0.3052819430710e+03, + 0.1661939475656e-09, 0.5495315428418e+01, 0.2526661704812e+03, + + 0.9015946748003e-10, 0.2236989966505e+01, 0.4171445043968e+03 }; + +/* Sun-to-Earth, T^0, Z */ + static const double e0z[] = { + 0.2796207639075e-05, 0.3198701560209e+01, 0.8433466158131e+02, + 0.1016042198142e-05, 0.5422360395913e+01, 0.5507553240374e+01, + 0.8044305033647e-06, 0.3880222866652e+01, 0.5223693906222e+01, + 0.4385347909274e-06, 0.3704369937468e+01, 0.2352866153506e+01, + 0.3186156414906e-06, 0.3999639363235e+01, 0.1577343543434e+01, + 0.2272412285792e-06, 0.3984738315952e+01, 0.1047747311755e+01, + 0.1645620103007e-06, 0.3565412516841e+01, 0.5856477690889e+01, + 0.1815836921166e-06, 0.4984507059020e+01, 0.6283075850446e+01, + 0.1447461676364e-06, 0.3702753570108e+01, 0.9437762937313e+01, + 0.1430760876382e-06, 0.3409658712357e+01, 0.1021328554739e+02, + + 0.1120445753226e-06, 0.4829561570246e+01, 0.1414349524433e+02, + 0.1090232840797e-06, 0.2080729178066e+01, 0.6812766822558e+01, + 0.9715727346551e-07, 0.3476295881948e+01, 0.4694002934110e+01, + 0.1036267136217e-06, 0.4056639536648e+01, 0.7109288135493e+02, + 0.8752665271340e-07, 0.4448159519911e+01, 0.5753384878334e+01, + 0.8331864956004e-07, 0.4991704044208e+01, 0.7084896783808e+01, + 0.6901658670245e-07, 0.4325358994219e+01, 0.6275962395778e+01, + 0.9144536848998e-07, 0.1141826375363e+01, 0.6620890113188e+01, + 0.7205085037435e-07, 0.3624344170143e+01, 0.5296909721118e+00, + 0.7697874654176e-07, 0.5554257458998e+01, 0.1676215758509e+03, + + 0.5197545738384e-07, 0.6251760961735e+01, 0.1807370494127e+02, + 0.5031345378608e-07, 0.2497341091913e+01, 0.4705732307012e+01, + 0.4527110205840e-07, 0.2335079920992e+01, 0.6309374173736e+01, + 0.4753355798089e-07, 0.7094148987474e+00, 0.5884926831456e+01, + 0.4296951977516e-07, 0.1101916352091e+01, 0.6681224869435e+01, + 0.3855341568387e-07, 0.1825495405486e+01, 0.5486777812467e+01, + 0.5253930970990e-07, 0.4424740687208e+01, 0.7860419393880e+01, + 0.4024630496471e-07, 0.5120498157053e+01, 0.1336797263425e+02, + 0.4061069791453e-07, 0.6029771435451e+01, 0.3930209696940e+01, + 0.3797883804205e-07, 0.4435193600836e+00, 0.3154687086868e+01, + + 0.2933033225587e-07, 0.5124157356507e+01, 0.1059381944224e+01, + 0.3503000930426e-07, 0.5421830162065e+01, 0.6069776770667e+01, + 0.3670096214050e-07, 0.4582101667297e+01, 0.1219403291462e+02, + 0.2905609437008e-07, 0.1926566420072e+01, 0.1097707878456e+02, + 0.2466827821713e-07, 0.6090174539834e+00, 0.6496374930224e+01, + 0.2691647295332e-07, 0.1393432595077e+01, 0.2200391463820e+02, + 0.2150554667946e-07, 0.4308671715951e+01, 0.5643178611111e+01, + 0.2237481922680e-07, 0.8133968269414e+00, 0.8635942003952e+01, + 0.1817741038157e-07, 0.3755205127454e+01, 0.3340612434717e+01, + 0.2227820762132e-07, 0.2759558596664e+01, 0.1203646072878e+02, + + 0.1944713772307e-07, 0.5699645869121e+01, 0.1179062909082e+02, + 0.1527340520662e-07, 0.1986749091746e+01, 0.3981490189893e+00, + 0.1577282574914e-07, 0.3205017217983e+01, 0.5088628793478e+01, + 0.1424738825424e-07, 0.6256747903666e+01, 0.2544314396739e+01, + 0.1616563121701e-07, 0.2601671259394e+00, 0.1729818233119e+02, + 0.1401210391692e-07, 0.4686939173506e+01, 0.7058598460518e+01, + 0.1488726974214e-07, 0.2815862451372e+01, 0.2593412433514e+02, + 0.1692626442388e-07, 0.4956894109797e+01, 0.1564752902480e+03, + 0.1123571582910e-07, 0.2381192697696e+01, 0.3738761453707e+01, + 0.9903308606317e-08, 0.4294851657684e+01, 0.9225539266174e+01, + + 0.9174533187191e-08, 0.3075171510642e+01, 0.4164311961999e+01, + 0.8645985631457e-08, 0.5477534821633e+00, 0.8429241228195e+01, + -0.1085876492688e-07, 0.0000000000000e+00, 0.0000000000000e+00, + 0.9264309077815e-08, 0.5968571670097e+01, 0.7079373888424e+01, + 0.8243116984954e-08, 0.1489098777643e+01, 0.1044738781244e+02, + 0.8268102113708e-08, 0.3512977691983e+01, 0.1150676975667e+02, + 0.9043613988227e-08, 0.1290704408221e+00, 0.1101510648075e+02, + 0.7432912038789e-08, 0.1991086893337e+01, 0.2608790314060e+02, + 0.8586233727285e-08, 0.4238357924414e+01, 0.2986433403208e+02, + 0.7612230060131e-08, 0.2911090150166e+01, 0.4732030630302e+01, + + 0.7097787751408e-08, 0.1908938392390e+01, 0.8031092209206e+01, + 0.7640237040175e-08, 0.6129219000168e+00, 0.7962980379786e+00, + 0.7070445688081e-08, 0.1380417036651e+01, 0.2146165377750e+01, + 0.7690770957702e-08, 0.1680504249084e+01, 0.2122839202813e+02, + 0.8051292542594e-08, 0.5127423484511e+01, 0.2942463415728e+01, + 0.5902709104515e-08, 0.2020274190917e+01, 0.7755226100720e+00, + 0.5134567496462e-08, 0.2606778676418e+01, 0.1256615170089e+02, + 0.5525802046102e-08, 0.1613011769663e+01, 0.8018209333619e+00, + 0.5880724784221e-08, 0.4604483417236e+01, 0.4690479774488e+01, + 0.5211699081370e-08, 0.5718964114193e+01, 0.8827390247185e+01, + + 0.4891849573562e-08, 0.3689658932196e+01, 0.2132990797783e+00, + 0.5150246069997e-08, 0.4099769855122e+01, 0.6480980550449e+02, + 0.5102434319633e-08, 0.5660834602509e+01, 0.3379454372902e+02, + 0.5083405254252e-08, 0.9842221218974e+00, 0.4136910472696e+01, + 0.4206562585682e-08, 0.1341363634163e+00, 0.3128388763578e+01, + 0.4663249683579e-08, 0.8130132735866e+00, 0.5216580451554e+01, + 0.4099474416530e-08, 0.5791497770644e+01, 0.4265981595566e+00, + 0.4628251220767e-08, 0.1249802769331e+01, 0.1572083878776e+02, + 0.5024068728142e-08, 0.4795684802743e+01, 0.6290189305114e+01, + 0.5120234327758e-08, 0.3810420387208e+01, 0.5230807360890e+01, + + 0.5524029815280e-08, 0.1029264714351e+01, 0.2397622045175e+03, + 0.4757415718860e-08, 0.3528044781779e+01, 0.1649636139783e+02, + 0.3915786131127e-08, 0.5593889282646e+01, 0.1589072916335e+01, + 0.4869053149991e-08, 0.3299636454433e+01, 0.7632943190217e+01, + 0.3649365703729e-08, 0.1286049002584e+01, 0.6206810014183e+01, + 0.3992493949002e-08, 0.3100307589464e+01, 0.2515860172507e+02, + 0.3320247477418e-08, 0.6212683940807e+01, 0.1216800268190e+02, + 0.3287123739696e-08, 0.4699118445928e+01, 0.7234794171227e+01, + 0.3472776811103e-08, 0.2630507142004e+01, 0.7342457794669e+01, + 0.3423253294767e-08, 0.2946432844305e+01, 0.9623688285163e+01, + + 0.3896173898244e-08, 0.1224834179264e+01, 0.6438496133249e+01, + 0.3388455337924e-08, 0.1543807616351e+01, 0.1494531617769e+02, + 0.3062704716523e-08, 0.1191777572310e+01, 0.8662240327241e+01, + 0.3270075600400e-08, 0.5483498767737e+01, 0.1194447056968e+01, + 0.3101209215259e-08, 0.8000833804348e+00, 0.3772475342596e+02, + 0.2780883347311e-08, 0.4077980721888e+00, 0.5863591145557e+01, + 0.2903605931824e-08, 0.2617490302147e+01, 0.1965104848470e+02, + 0.2682014743119e-08, 0.2634703158290e+01, 0.7238675589263e+01, + 0.2534360108492e-08, 0.6102446114873e+01, 0.6836645152238e+01, + 0.2392564882509e-08, 0.3681820208691e+01, 0.5849364236221e+01, + + 0.2656667254856e-08, 0.6216045388886e+01, 0.6133512519065e+01, + 0.2331242096773e-08, 0.5864949777744e+01, 0.4535059491685e+01, + 0.2287898363668e-08, 0.4566628532802e+01, 0.7477522907414e+01, + 0.2336944521306e-08, 0.2442722126930e+01, 0.1137170464392e+02, + 0.3156632236269e-08, 0.1626628050682e+01, 0.2509084901204e+03, + 0.2982612402766e-08, 0.2803604512609e+01, 0.1748016358760e+01, + 0.2774031674807e-08, 0.4654002897158e+01, 0.8223916695780e+02, + 0.2295236548638e-08, 0.4326518333253e+01, 0.3378142627421e+00, + 0.2190714699873e-08, 0.4519614578328e+01, 0.2908881142201e+02, + 0.2191495845045e-08, 0.3012626912549e+01, 0.1673046366289e+02, + + 0.2492901628386e-08, 0.1290101424052e+00, 0.1543797956245e+03, + 0.1993778064319e-08, 0.3864046799414e+01, 0.1778984560711e+02, + 0.1898146479022e-08, 0.5053777235891e+01, 0.2042657109477e+02, + 0.1918280127634e-08, 0.2222470192548e+01, 0.4165496312290e+02, + 0.1916351061607e-08, 0.8719067257774e+00, 0.7737595720538e+02, + 0.1834720181466e-08, 0.4031491098040e+01, 0.2358125818164e+02, + 0.1249201523806e-08, 0.5938379466835e+01, 0.3301902111895e+02, + 0.1477304050539e-08, 0.6544722606797e+00, 0.9548094718417e+02, + 0.1264316431249e-08, 0.2059072853236e+01, 0.8399684731857e+02, + 0.1203526495039e-08, 0.3644813532605e+01, 0.4558517281984e+02, + + 0.9221681059831e-09, 0.3241815055602e+01, 0.7805158573086e+02, + 0.7849278367646e-09, 0.5043812342457e+01, 0.5217580628120e+02, + 0.7983392077387e-09, 0.5000024502753e+01, 0.1501922143975e+03, + 0.7925395431654e-09, 0.1398734871821e-01, 0.9061773743175e+02, + 0.7640473285886e-09, 0.5067111723130e+01, 0.4951538251678e+02, + 0.5398937754482e-09, 0.5597382200075e+01, 0.1613385000004e+03, + 0.5626247550193e-09, 0.2601338209422e+01, 0.7318837597844e+02, + 0.5525197197855e-09, 0.5814832109256e+01, 0.1432335100216e+03, + 0.5407629837898e-09, 0.3384820609076e+01, 0.3230491187871e+03, + 0.3856739119801e-09, 0.1072391840473e+01, 0.2334791286671e+03, + + 0.3856425239987e-09, 0.2369540393327e+01, 0.1739046517013e+03, + 0.4350867755983e-09, 0.5255575751082e+01, 0.1620484330494e+03, + 0.3844113924996e-09, 0.5482356246182e+01, 0.9757644180768e+02, + 0.2854869155431e-09, 0.9573634763143e+00, 0.1697170704744e+03, + 0.1719227671416e-09, 0.1887203025202e+01, 0.2265204242912e+03, + 0.1527846879755e-09, 0.3982183931157e+01, 0.3341954043900e+03, + 0.1128229264847e-09, 0.2787457156298e+01, 0.3119028331842e+03 }; + +/* Sun-to-Earth, T^1, X */ + static const double e1x[] = { + 0.1234046326004e-05, 0.0000000000000e+00, 0.0000000000000e+00, + 0.5150068824701e-06, 0.6002664557501e+01, 0.1256615170089e+02, + 0.1290743923245e-07, 0.5959437664199e+01, 0.1884922755134e+02, + 0.1068615564952e-07, 0.2015529654209e+01, 0.6283075850446e+01, + 0.2079619142538e-08, 0.1732960531432e+01, 0.6279552690824e+01, + 0.2078009243969e-08, 0.4915604476996e+01, 0.6286599010068e+01, + 0.6206330058856e-09, 0.3616457953824e+00, 0.4705732307012e+01, + 0.5989335313746e-09, 0.3802607304474e+01, 0.6256777527156e+01, + 0.5958495663840e-09, 0.2845866560031e+01, 0.6309374173736e+01, + 0.4866923261539e-09, 0.5213203771824e+01, 0.7755226100720e+00, + + 0.4267785823142e-09, 0.4368189727818e+00, 0.1059381944224e+01, + 0.4610675141648e-09, 0.1837249181372e-01, 0.7860419393880e+01, + 0.3626989993973e-09, 0.2161590545326e+01, 0.5753384878334e+01, + 0.3563071194389e-09, 0.1452631954746e+01, 0.5884926831456e+01, + 0.3557015642807e-09, 0.4470593393054e+01, 0.6812766822558e+01, + 0.3210412089122e-09, 0.5195926078314e+01, 0.6681224869435e+01, + 0.2875473577986e-09, 0.5916256610193e+01, 0.2513230340178e+02, + 0.2842913681629e-09, 0.1149902426047e+01, 0.6127655567643e+01, + 0.2751248215916e-09, 0.5502088574662e+01, 0.6438496133249e+01, + 0.2481432881127e-09, 0.2921989846637e+01, 0.5486777812467e+01, + + 0.2059885976560e-09, 0.3718070376585e+01, 0.7079373888424e+01, + 0.2015522342591e-09, 0.5979395259740e+01, 0.6290189305114e+01, + 0.1995364084253e-09, 0.6772087985494e+00, 0.6275962395778e+01, + 0.1957436436943e-09, 0.2899210654665e+01, 0.5507553240374e+01, + 0.1651609818948e-09, 0.6228206482192e+01, 0.1150676975667e+02, + 0.1822980550699e-09, 0.1469348746179e+01, 0.1179062909082e+02, + 0.1675223159760e-09, 0.3813910555688e+01, 0.7058598460518e+01, + 0.1706491764745e-09, 0.3004380506684e+00, 0.7113454667900e-02, + 0.1392952362615e-09, 0.1440393973406e+01, 0.7962980379786e+00, + 0.1209868266342e-09, 0.4150425791727e+01, 0.4694002934110e+01, + + 0.1009827202611e-09, 0.3290040429843e+01, 0.3738761453707e+01, + 0.1047261388602e-09, 0.4229590090227e+01, 0.6282095334605e+01, + 0.1047006652004e-09, 0.2418967680575e+01, 0.6284056366286e+01, + 0.9609993143095e-10, 0.4627943659201e+01, 0.6069776770667e+01, + 0.9590900593873e-10, 0.1894393939924e+01, 0.4136910472696e+01, + 0.9146249188071e-10, 0.2010647519562e+01, 0.6496374930224e+01, + 0.8545274480290e-10, 0.5529846956226e-01, 0.1194447056968e+01, + 0.8224377881194e-10, 0.1254304102174e+01, 0.1589072916335e+01, + 0.6183529510410e-10, 0.3360862168815e+01, 0.8827390247185e+01, + 0.6259255147141e-10, 0.4755628243179e+01, 0.8429241228195e+01, + + 0.5539291694151e-10, 0.5371746955142e+01, 0.4933208510675e+01, + 0.7328259466314e-10, 0.4927699613906e+00, 0.4535059491685e+01, + 0.6017835843560e-10, 0.5776682001734e-01, 0.1255903824622e+02, + 0.7079827775243e-10, 0.4395059432251e+01, 0.5088628793478e+01, + 0.5170358878213e-10, 0.5154062619954e+01, 0.1176985366291e+02, + 0.4872301838682e-10, 0.6289611648973e+00, 0.6040347114260e+01, + 0.5249869411058e-10, 0.5617272046949e+01, 0.3154687086868e+01, + 0.4716172354411e-10, 0.3965901800877e+01, 0.5331357529664e+01, + 0.4871214940964e-10, 0.4627507050093e+01, 0.1256967486051e+02, + 0.4598076850751e-10, 0.6023631226459e+01, 0.6525804586632e+01, + + 0.4562196089485e-10, 0.4138562084068e+01, 0.3930209696940e+01, + 0.4325493872224e-10, 0.1330845906564e+01, 0.7632943190217e+01, + 0.5673781176748e-10, 0.2558752615657e+01, 0.5729506548653e+01, + 0.3961436642503e-10, 0.2728071734630e+01, 0.7234794171227e+01, + 0.5101868209058e-10, 0.4113444965144e+01, 0.6836645152238e+01, + 0.5257043167676e-10, 0.6195089830590e+01, 0.8031092209206e+01, + 0.5076613989393e-10, 0.2305124132918e+01, 0.7477522907414e+01, + 0.3342169352778e-10, 0.5415998155071e+01, 0.1097707878456e+02, + 0.3545881983591e-10, 0.3727160564574e+01, 0.4164311961999e+01, + 0.3364063738599e-10, 0.2901121049204e+00, 0.1137170464392e+02, + + 0.3357039670776e-10, 0.1652229354331e+01, 0.5223693906222e+01, + 0.4307412268687e-10, 0.4938909587445e+01, 0.1592596075957e+01, + 0.3405769115435e-10, 0.2408890766511e+01, 0.3128388763578e+01, + 0.3001926198480e-10, 0.4862239006386e+01, 0.1748016358760e+01, + 0.2778264787325e-10, 0.5241168661353e+01, 0.7342457794669e+01, + 0.2676159480666e-10, 0.3423593942199e+01, 0.2146165377750e+01, + 0.2954273399939e-10, 0.1881721265406e+01, 0.5368044267797e+00, + 0.3309362888795e-10, 0.1931525677349e+01, 0.8018209333619e+00, + 0.2810283608438e-10, 0.2414659495050e+01, 0.5225775174439e+00, + 0.3378045637764e-10, 0.4238019163430e+01, 0.1554202828031e+00, + + 0.2558134979840e-10, 0.1828225235805e+01, 0.5230807360890e+01, + 0.2273755578447e-10, 0.5858184283998e+01, 0.7084896783808e+01, + 0.2294176037690e-10, 0.4514589779057e+01, 0.1726015463500e+02, + 0.2533506099435e-10, 0.2355717851551e+01, 0.5216580451554e+01, + 0.2716685375812e-10, 0.2221003625100e+01, 0.8635942003952e+01, + 0.2419043435198e-10, 0.5955704951635e+01, 0.4690479774488e+01, + 0.2521232544812e-10, 0.1395676848521e+01, 0.5481254917084e+01, + 0.2630195021491e-10, 0.5727468918743e+01, 0.2629832328990e-01, + 0.2548395840944e-10, 0.2628351859400e-03, 0.1349867339771e+01 }; + +/* Sun-to-Earth, T^1, Y */ + static const double e1y[] = { + 0.9304690546528e-06, 0.0000000000000e+00, 0.0000000000000e+00, + 0.5150715570663e-06, 0.4431807116294e+01, 0.1256615170089e+02, + 0.1290825411056e-07, 0.4388610039678e+01, 0.1884922755134e+02, + 0.4645466665386e-08, 0.5827263376034e+01, 0.6283075850446e+01, + 0.2079625310718e-08, 0.1621698662282e+00, 0.6279552690824e+01, + 0.2078189850907e-08, 0.3344713435140e+01, 0.6286599010068e+01, + 0.6207190138027e-09, 0.5074049319576e+01, 0.4705732307012e+01, + 0.5989826532569e-09, 0.2231842216620e+01, 0.6256777527156e+01, + 0.5961360812618e-09, 0.1274975769045e+01, 0.6309374173736e+01, + 0.4874165471016e-09, 0.3642277426779e+01, 0.7755226100720e+00, + + 0.4283834034360e-09, 0.5148765510106e+01, 0.1059381944224e+01, + 0.4652389287529e-09, 0.4715794792175e+01, 0.7860419393880e+01, + 0.3751707476401e-09, 0.6617207370325e+00, 0.5753384878334e+01, + 0.3559998806198e-09, 0.6155548875404e+01, 0.5884926831456e+01, + 0.3558447558857e-09, 0.2898827297664e+01, 0.6812766822558e+01, + 0.3211116927106e-09, 0.3625813502509e+01, 0.6681224869435e+01, + 0.2875609914672e-09, 0.4345435813134e+01, 0.2513230340178e+02, + 0.2843109704069e-09, 0.5862263940038e+01, 0.6127655567643e+01, + 0.2744676468427e-09, 0.3926419475089e+01, 0.6438496133249e+01, + 0.2481285237789e-09, 0.1351976572828e+01, 0.5486777812467e+01, + + 0.2060338481033e-09, 0.2147556998591e+01, 0.7079373888424e+01, + 0.2015822358331e-09, 0.4408358972216e+01, 0.6290189305114e+01, + 0.2001195944195e-09, 0.5385829822531e+01, 0.6275962395778e+01, + 0.1953667642377e-09, 0.1304933746120e+01, 0.5507553240374e+01, + 0.1839744078713e-09, 0.6173567228835e+01, 0.1179062909082e+02, + 0.1643334294845e-09, 0.4635942997523e+01, 0.1150676975667e+02, + 0.1768051018652e-09, 0.5086283558874e+01, 0.7113454667900e-02, + 0.1674874205489e-09, 0.2243332137241e+01, 0.7058598460518e+01, + 0.1421445397609e-09, 0.6186899771515e+01, 0.7962980379786e+00, + 0.1255163958267e-09, 0.5730238465658e+01, 0.4694002934110e+01, + + 0.1013945281961e-09, 0.1726055228402e+01, 0.3738761453707e+01, + 0.1047294335852e-09, 0.2658801228129e+01, 0.6282095334605e+01, + 0.1047103879392e-09, 0.8481047835035e+00, 0.6284056366286e+01, + 0.9530343962826e-10, 0.3079267149859e+01, 0.6069776770667e+01, + 0.9604637611690e-10, 0.3258679792918e+00, 0.4136910472696e+01, + 0.9153518537177e-10, 0.4398599886584e+00, 0.6496374930224e+01, + 0.8562458214922e-10, 0.4772686794145e+01, 0.1194447056968e+01, + 0.8232525360654e-10, 0.5966220721679e+01, 0.1589072916335e+01, + 0.6150223411438e-10, 0.1780985591923e+01, 0.8827390247185e+01, + 0.6272087858000e-10, 0.3184305429012e+01, 0.8429241228195e+01, + + 0.5540476311040e-10, 0.3801260595433e+01, 0.4933208510675e+01, + 0.7331901699361e-10, 0.5205948591865e+01, 0.4535059491685e+01, + 0.6018528702791e-10, 0.4770139083623e+01, 0.1255903824622e+02, + 0.5150530724804e-10, 0.3574796899585e+01, 0.1176985366291e+02, + 0.6471933741811e-10, 0.2679787266521e+01, 0.5088628793478e+01, + 0.5317460644174e-10, 0.9528763345494e+00, 0.3154687086868e+01, + 0.4832187748783e-10, 0.5329322498232e+01, 0.6040347114260e+01, + 0.4716763555110e-10, 0.2395235316466e+01, 0.5331357529664e+01, + 0.4871509139861e-10, 0.3056663648823e+01, 0.1256967486051e+02, + 0.4598417696768e-10, 0.4452762609019e+01, 0.6525804586632e+01, + + 0.5674189533175e-10, 0.9879680872193e+00, 0.5729506548653e+01, + 0.4073560328195e-10, 0.5939127696986e+01, 0.7632943190217e+01, + 0.5040994945359e-10, 0.4549875824510e+01, 0.8031092209206e+01, + 0.5078185134679e-10, 0.7346659893982e+00, 0.7477522907414e+01, + 0.3769343537061e-10, 0.1071317188367e+01, 0.7234794171227e+01, + 0.4980331365299e-10, 0.2500345341784e+01, 0.6836645152238e+01, + 0.3458236594757e-10, 0.3825159450711e+01, 0.1097707878456e+02, + 0.3578859493602e-10, 0.5299664791549e+01, 0.4164311961999e+01, + 0.3370504646419e-10, 0.5002316301593e+01, 0.1137170464392e+02, + 0.3299873338428e-10, 0.2526123275282e+01, 0.3930209696940e+01, + + 0.4304917318409e-10, 0.3368078557132e+01, 0.1592596075957e+01, + 0.3402418753455e-10, 0.8385495425800e+00, 0.3128388763578e+01, + 0.2778460572146e-10, 0.3669905203240e+01, 0.7342457794669e+01, + 0.2782710128902e-10, 0.2691664812170e+00, 0.1748016358760e+01, + 0.2711725179646e-10, 0.4707487217718e+01, 0.5296909721118e+00, + 0.2981760946340e-10, 0.3190260867816e+00, 0.5368044267797e+00, + 0.2811672977772e-10, 0.3196532315372e+01, 0.7084896783808e+01, + 0.2863454474467e-10, 0.2263240324780e+00, 0.5223693906222e+01, + 0.3333464634051e-10, 0.3498451685065e+01, 0.8018209333619e+00, + 0.3312991747609e-10, 0.5839154477412e+01, 0.1554202828031e+00, + + 0.2813255564006e-10, 0.8268044346621e+00, 0.5225775174439e+00, + 0.2665098083966e-10, 0.3934021725360e+01, 0.5216580451554e+01, + 0.2349795705216e-10, 0.5197620913779e+01, 0.2146165377750e+01, + 0.2330352293961e-10, 0.2984999231807e+01, 0.1726015463500e+02, + 0.2728001683419e-10, 0.6521679638544e+00, 0.8635942003952e+01, + 0.2484061007669e-10, 0.3468955561097e+01, 0.5230807360890e+01, + 0.2646328768427e-10, 0.1013724533516e+01, 0.2629832328990e-01, + 0.2518630264831e-10, 0.6108081057122e+01, 0.5481254917084e+01, + 0.2421901455384e-10, 0.1651097776260e+01, 0.1349867339771e+01, + 0.6348533267831e-11, 0.3220226560321e+01, 0.8433466158131e+02 }; + +/* Sun-to-Earth, T^1, Z */ + static const double e1z[] = { + 0.2278290449966e-05, 0.3413716033863e+01, 0.6283075850446e+01, + 0.5429458209830e-07, 0.0000000000000e+00, 0.0000000000000e+00, + 0.1903240492525e-07, 0.3370592358297e+01, 0.1256615170089e+02, + 0.2385409276743e-09, 0.3327914718416e+01, 0.1884922755134e+02, + 0.8676928342573e-10, 0.1824006811264e+01, 0.5223693906222e+01, + 0.7765442593544e-10, 0.3888564279247e+01, 0.5507553240374e+01, + 0.7066158332715e-10, 0.5194267231944e+01, 0.2352866153506e+01, + 0.7092175288657e-10, 0.2333246960021e+01, 0.8399684731857e+02, + 0.5357582213535e-10, 0.2224031176619e+01, 0.5296909721118e+00, + 0.3828035865021e-10, 0.2156710933584e+01, 0.6279552690824e+01, + + 0.3824857220427e-10, 0.1529755219915e+01, 0.6286599010068e+01, + 0.3286995181628e-10, 0.4879512900483e+01, 0.1021328554739e+02 }; + +/* Sun-to-Earth, T^2, X */ + static const double e2x[] = { + -0.4143818297913e-10, 0.0000000000000e+00, 0.0000000000000e+00, + 0.2171497694435e-10, 0.4398225628264e+01, 0.1256615170089e+02, + 0.9845398442516e-11, 0.2079720838384e+00, 0.6283075850446e+01, + 0.9256833552682e-12, 0.4191264694361e+01, 0.1884922755134e+02, + 0.1022049384115e-12, 0.5381133195658e+01, 0.8399684731857e+02 }; + +/* Sun-to-Earth, T^2, Y */ + static const double e2y[] = { + 0.5063375872532e-10, 0.0000000000000e+00, 0.0000000000000e+00, + 0.2173815785980e-10, 0.2827805833053e+01, 0.1256615170089e+02, + 0.1010231999920e-10, 0.4634612377133e+01, 0.6283075850446e+01, + 0.9259745317636e-12, 0.2620612076189e+01, 0.1884922755134e+02, + 0.1022202095812e-12, 0.3809562326066e+01, 0.8399684731857e+02 }; + +/* Sun-to-Earth, T^2, Z */ + static const double e2z[] = { + 0.9722666114891e-10, 0.5152219582658e+01, 0.6283075850446e+01, + -0.3494819171909e-11, 0.0000000000000e+00, 0.0000000000000e+00, + 0.6713034376076e-12, 0.6440188750495e+00, 0.1256615170089e+02 }; + +/* SSB-to-Sun, T^0, X */ + static const double s0x[] = { + 0.4956757536410e-02, 0.3741073751789e+01, 0.5296909721118e+00, + 0.2718490072522e-02, 0.4016011511425e+01, 0.2132990797783e+00, + 0.1546493974344e-02, 0.2170528330642e+01, 0.3813291813120e-01, + 0.8366855276341e-03, 0.2339614075294e+01, 0.7478166569050e-01, + 0.2936777942117e-03, 0.0000000000000e+00, 0.0000000000000e+00, + 0.1201317439469e-03, 0.4090736353305e+01, 0.1059381944224e+01, + 0.7578550887230e-04, 0.3241518088140e+01, 0.4265981595566e+00, + 0.1941787367773e-04, 0.1012202064330e+01, 0.2061856251104e+00, + 0.1889227765991e-04, 0.3892520416440e+01, 0.2204125344462e+00, + 0.1937896968613e-04, 0.4797779441161e+01, 0.1495633313810e+00, + + 0.1434506110873e-04, 0.3868960697933e+01, 0.5225775174439e+00, + 0.1406659911580e-04, 0.4759766557397e+00, 0.5368044267797e+00, + 0.1179022300202e-04, 0.7774961520598e+00, 0.7626583626240e-01, + 0.8085864460959e-05, 0.3254654471465e+01, 0.3664874755930e-01, + 0.7622752967615e-05, 0.4227633103489e+01, 0.3961708870310e-01, + 0.6209171139066e-05, 0.2791828325711e+00, 0.7329749511860e-01, + 0.4366435633970e-05, 0.4440454875925e+01, 0.1589072916335e+01, + 0.3792124889348e-05, 0.5156393842356e+01, 0.7113454667900e-02, + 0.3154548963402e-05, 0.6157005730093e+01, 0.4194847048887e+00, + 0.3088359882942e-05, 0.2494567553163e+01, 0.6398972393349e+00, + + 0.2788440902136e-05, 0.4934318747989e+01, 0.1102062672231e+00, + 0.3039928456376e-05, 0.4895077702640e+01, 0.6283075850446e+01, + 0.2272258457679e-05, 0.5278394064764e+01, 0.1030928125552e+00, + 0.2162007057957e-05, 0.5802978019099e+01, 0.3163918923335e+00, + 0.1767632855737e-05, 0.3415346595193e-01, 0.1021328554739e+02, + 0.1349413459362e-05, 0.2001643230755e+01, 0.1484170571900e-02, + 0.1170141900476e-05, 0.2424750491620e+01, 0.6327837846670e+00, + 0.1054355266820e-05, 0.3123311487576e+01, 0.4337116142245e+00, + 0.9800822461610e-06, 0.3026258088130e+01, 0.1052268489556e+01, + 0.1091203749931e-05, 0.3157811670347e+01, 0.1162474756779e+01, + + 0.6960236715913e-06, 0.8219570542313e+00, 0.1066495398892e+01, + 0.5689257296909e-06, 0.1323052375236e+01, 0.9491756770005e+00, + 0.6613172135802e-06, 0.2765348881598e+00, 0.8460828644453e+00, + 0.6277702517571e-06, 0.5794064466382e+01, 0.1480791608091e+00, + 0.6304884066699e-06, 0.7323555380787e+00, 0.2243449970715e+00, + 0.4897850467382e-06, 0.3062464235399e+01, 0.3340612434717e+01, + 0.3759148598786e-06, 0.4588290469664e+01, 0.3516457698740e-01, + 0.3110520548195e-06, 0.1374299536572e+01, 0.6373574839730e-01, + 0.3064708359780e-06, 0.4222267485047e+01, 0.1104591729320e-01, + 0.2856347168241e-06, 0.3714202944973e+01, 0.1510475019529e+00, + + 0.2840945514288e-06, 0.2847972875882e+01, 0.4110125927500e-01, + 0.2378951599405e-06, 0.3762072563388e+01, 0.2275259891141e+00, + 0.2714229481417e-06, 0.1036049980031e+01, 0.2535050500000e-01, + 0.2323551717307e-06, 0.4682388599076e+00, 0.8582758298370e-01, + 0.1881790512219e-06, 0.4790565425418e+01, 0.2118763888447e+01, + 0.2261353968371e-06, 0.1669144912212e+01, 0.7181332454670e-01, + 0.2214546389848e-06, 0.3937717281614e+01, 0.2968341143800e-02, + 0.2184915594933e-06, 0.1129169845099e+00, 0.7775000683430e-01, + 0.2000164937936e-06, 0.4030009638488e+01, 0.2093666171530e+00, + 0.1966105136719e-06, 0.8745955786834e+00, 0.2172315424036e+00, + + 0.1904742332624e-06, 0.5919743598964e+01, 0.2022531624851e+00, + 0.1657399705031e-06, 0.2549141484884e+01, 0.7358765972222e+00, + 0.1574070533987e-06, 0.5277533020230e+01, 0.7429900518901e+00, + 0.1832261651039e-06, 0.3064688127777e+01, 0.3235053470014e+00, + 0.1733615346569e-06, 0.3011432799094e+01, 0.1385174140878e+00, + 0.1549124014496e-06, 0.4005569132359e+01, 0.5154640627760e+00, + 0.1637044713838e-06, 0.1831375966632e+01, 0.8531963191132e+00, + 0.1123420082383e-06, 0.1180270407578e+01, 0.1990721704425e+00, + 0.1083754165740e-06, 0.3414101320863e+00, 0.5439178814476e+00, + 0.1156638012655e-06, 0.6130479452594e+00, 0.5257585094865e+00, + + 0.1142548785134e-06, 0.3724761948846e+01, 0.5336234347371e+00, + 0.7921463895965e-07, 0.2435425589361e+01, 0.1478866649112e+01, + 0.7428600285231e-07, 0.3542144398753e+01, 0.2164800718209e+00, + 0.8323211246747e-07, 0.3525058072354e+01, 0.1692165728891e+01, + 0.7257595116312e-07, 0.1364299431982e+01, 0.2101180877357e+00, + 0.7111185833236e-07, 0.2460478875808e+01, 0.4155522422634e+00, + 0.6868090383716e-07, 0.4397327670704e+01, 0.1173197218910e+00, + 0.7226419974175e-07, 0.4042647308905e+01, 0.1265567569334e+01, + 0.6955642383177e-07, 0.2865047906085e+01, 0.9562891316684e+00, + 0.7492139296331e-07, 0.5014278994215e+01, 0.1422690933580e-01, + + 0.6598363128857e-07, 0.2376730020492e+01, 0.6470106940028e+00, + 0.7381147293385e-07, 0.3272990384244e+01, 0.1581959461667e+01, + 0.6402909624032e-07, 0.5302290955138e+01, 0.9597935788730e-01, + 0.6237454263857e-07, 0.5444144425332e+01, 0.7084920306520e-01, + 0.5241198544016e-07, 0.4215359579205e+01, 0.5265099800692e+00, + 0.5144463853918e-07, 0.1218916689916e+00, 0.5328719641544e+00, + 0.5868164772299e-07, 0.2369402002213e+01, 0.7871412831580e-01, + 0.6233195669151e-07, 0.1254922242403e+01, 0.2608790314060e+02, + 0.6068463791422e-07, 0.5679713760431e+01, 0.1114304132498e+00, + 0.4359361135065e-07, 0.6097219641646e+00, 0.1375773836557e+01, + + 0.4686510366826e-07, 0.4786231041431e+01, 0.1143987543936e+00, + 0.3758977287225e-07, 0.1167368068139e+01, 0.1596186371003e+01, + 0.4282051974778e-07, 0.1519471064319e+01, 0.2770348281756e+00, + 0.5153765386113e-07, 0.1860532322984e+01, 0.2228608264996e+00, + 0.4575129387188e-07, 0.7632857887158e+00, 0.1465949902372e+00, + 0.3326844933286e-07, 0.1298219485285e+01, 0.5070101000000e-01, + 0.3748617450984e-07, 0.1046510321062e+01, 0.4903339079539e+00, + 0.2816756661499e-07, 0.3434522346190e+01, 0.2991266627620e+00, + 0.3412750405039e-07, 0.2523766270318e+01, 0.3518164938661e+00, + 0.2655796761776e-07, 0.2904422260194e+01, 0.6256703299991e+00, + + 0.2963597929458e-07, 0.5923900431149e+00, 0.1099462426779e+00, + 0.2539523734781e-07, 0.4851947722567e+01, 0.1256615170089e+02, + 0.2283087914139e-07, 0.3400498595496e+01, 0.6681224869435e+01, + 0.2321309799331e-07, 0.5789099148673e+01, 0.3368040641550e-01, + 0.2549657649750e-07, 0.3991856479792e-01, 0.1169588211447e+01, + 0.2290462303977e-07, 0.2788567577052e+01, 0.1045155034888e+01, + 0.1945398522914e-07, 0.3290896998176e+01, 0.1155361302111e+01, + 0.1849171512638e-07, 0.2698060129367e+01, 0.4452511715700e-02, + 0.1647199834254e-07, 0.3016735644085e+01, 0.4408250688924e+00, + 0.1529530765273e-07, 0.5573043116178e+01, 0.6521991896920e-01, + + 0.1433199339978e-07, 0.1481192356147e+01, 0.9420622223326e+00, + 0.1729134193602e-07, 0.1422817538933e+01, 0.2108507877249e+00, + 0.1716463931346e-07, 0.3469468901855e+01, 0.2157473718317e+00, + 0.1391206061378e-07, 0.6122436220547e+01, 0.4123712502208e+00, + 0.1404746661924e-07, 0.1647765641936e+01, 0.4258542984690e-01, + 0.1410452399455e-07, 0.5989729161964e+01, 0.2258291676434e+00, + 0.1089828772168e-07, 0.2833705509371e+01, 0.4226656969313e+00, + 0.1047374564948e-07, 0.5090690007331e+00, 0.3092784376656e+00, + 0.1358279126532e-07, 0.5128990262836e+01, 0.7923417740620e-01, + 0.1020456476148e-07, 0.9632772880808e+00, 0.1456308687557e+00, + + 0.1033428735328e-07, 0.3223779318418e+01, 0.1795258541446e+01, + 0.1412435841540e-07, 0.2410271572721e+01, 0.1525316725248e+00, + 0.9722759371574e-08, 0.2333531395690e+01, 0.8434341241180e-01, + 0.9657334084704e-08, 0.6199270974168e+01, 0.1272681024002e+01, + 0.1083641148690e-07, 0.2864222292929e+01, 0.7032915397480e-01, + 0.1067318403838e-07, 0.5833458866568e+00, 0.2123349582968e+00, + 0.1062366201976e-07, 0.4307753989494e+01, 0.2142632012598e+00, + 0.1236364149266e-07, 0.2873917870593e+01, 0.1847279083684e+00, + 0.1092759489593e-07, 0.2959887266733e+01, 0.1370332435159e+00, + 0.8912069362899e-08, 0.5141213702562e+01, 0.2648454860559e+01, + + 0.9656467707970e-08, 0.4532182462323e+01, 0.4376440768498e+00, + 0.8098386150135e-08, 0.2268906338379e+01, 0.2880807454688e+00, + 0.7857714675000e-08, 0.4055544260745e+01, 0.2037373330570e+00, + 0.7288455940646e-08, 0.5357901655142e+01, 0.1129145838217e+00, + 0.9450595950552e-08, 0.4264926963939e+01, 0.5272426800584e+00, + 0.9381718247537e-08, 0.7489366976576e-01, 0.5321392641652e+00, + 0.7079052646038e-08, 0.1923311052874e+01, 0.6288513220417e+00, + 0.9259004415344e-08, 0.2970256853438e+01, 0.1606092486742e+00, + 0.8259801499742e-08, 0.3327056314697e+01, 0.8389694097774e+00, + 0.6476334355779e-08, 0.2954925505727e+01, 0.2008557621224e+01, + + 0.5984021492007e-08, 0.9138753105829e+00, 0.2042657109477e+02, + 0.5989546863181e-08, 0.3244464082031e+01, 0.2111650433779e+01, + 0.6233108606023e-08, 0.4995232638403e+00, 0.4305306221819e+00, + 0.6877299149965e-08, 0.2834987233449e+01, 0.9561746721300e-02, + 0.8311234227190e-08, 0.2202951835758e+01, 0.3801276407308e+00, + 0.6599472832414e-08, 0.4478581462618e+01, 0.1063314406849e+01, + 0.6160491096549e-08, 0.5145858696411e+01, 0.1368660381889e+01, + 0.6164772043891e-08, 0.3762976697911e+00, 0.4234171675140e+00, + 0.6363248684450e-08, 0.3162246718685e+01, 0.1253008786510e-01, + 0.6448587520999e-08, 0.3442693302119e+01, 0.5287268506303e+00, + + 0.6431662283977e-08, 0.8977549136606e+00, 0.5306550935933e+00, + 0.6351223158474e-08, 0.4306447410369e+01, 0.5217580628120e+02, + 0.5476721393451e-08, 0.3888529177855e+01, 0.2221856701002e+01, + 0.5341772572619e-08, 0.2655560662512e+01, 0.7466759693650e-01, + 0.5337055758302e-08, 0.5164990735946e+01, 0.7489573444450e-01, + 0.5373120816787e-08, 0.6041214553456e+01, 0.1274714967946e+00, + 0.5392351705426e-08, 0.9177763485932e+00, 0.1055449481598e+01, + 0.6688495850205e-08, 0.3089608126937e+01, 0.2213766559277e+00, + 0.5072003660362e-08, 0.4311316541553e+01, 0.2132517061319e+00, + 0.5070726650455e-08, 0.5790675464444e+00, 0.2133464534247e+00, + + 0.5658012950032e-08, 0.2703945510675e+01, 0.7287631425543e+00, + 0.4835509924854e-08, 0.2975422976065e+01, 0.7160067364790e-01, + 0.6479821978012e-08, 0.1324168733114e+01, 0.2209183458640e-01, + 0.6230636494980e-08, 0.2860103632836e+01, 0.3306188016693e+00, + 0.4649239516213e-08, 0.4832259763403e+01, 0.7796265773310e-01, + 0.6487325792700e-08, 0.2726165825042e+01, 0.3884652414254e+00, + 0.4682823682770e-08, 0.6966602455408e+00, 0.1073608853559e+01, + 0.5704230804976e-08, 0.5669634104606e+01, 0.8731175355560e-01, + 0.6125413585489e-08, 0.1513386538915e+01, 0.7605151500000e-01, + 0.6035825038187e-08, 0.1983509168227e+01, 0.9846002785331e+00, + + 0.4331123462303e-08, 0.2782892992807e+01, 0.4297791515992e+00, + 0.4681107685143e-08, 0.5337232886836e+01, 0.2127790306879e+00, + 0.4669105829655e-08, 0.5837133792160e+01, 0.2138191288687e+00, + 0.5138823602365e-08, 0.3080560200507e+01, 0.7233337363710e-01, + 0.4615856664534e-08, 0.1661747897471e+01, 0.8603097737811e+00, + 0.4496916702197e-08, 0.2112508027068e+01, 0.7381754420900e-01, + 0.4278479042945e-08, 0.5716528462627e+01, 0.7574578717200e-01, + 0.3840525503932e-08, 0.6424172726492e+00, 0.3407705765729e+00, + 0.4866636509685e-08, 0.4919244697715e+01, 0.7722995774390e-01, + 0.3526100639296e-08, 0.2550821052734e+01, 0.6225157782540e-01, + + 0.3939558488075e-08, 0.3939331491710e+01, 0.5268983110410e-01, + 0.4041268772576e-08, 0.2275337571218e+01, 0.3503323232942e+00, + 0.3948761842853e-08, 0.1999324200790e+01, 0.1451108196653e+00, + 0.3258394550029e-08, 0.9121001378200e+00, 0.5296435984654e+00, + 0.3257897048761e-08, 0.3428428660869e+01, 0.5297383457582e+00, + 0.3842559031298e-08, 0.6132927720035e+01, 0.9098186128426e+00, + 0.3109920095448e-08, 0.7693650193003e+00, 0.3932462625300e-02, + 0.3132237775119e-08, 0.3621293854908e+01, 0.2346394437820e+00, + 0.3942189421510e-08, 0.4841863659733e+01, 0.3180992042600e-02, + 0.3796972285340e-08, 0.1814174994268e+01, 0.1862120789403e+00, + + 0.3995640233688e-08, 0.1386990406091e+01, 0.4549093064213e+00, + 0.2875013727414e-08, 0.9178318587177e+00, 0.1905464808669e+01, + 0.3073719932844e-08, 0.2688923811835e+01, 0.3628624111593e+00, + 0.2731016580075e-08, 0.1188259127584e+01, 0.2131850110243e+00, + 0.2729549896546e-08, 0.3702160634273e+01, 0.2134131485323e+00, + 0.3339372892449e-08, 0.7199163960331e+00, 0.2007689919132e+00, + 0.2898833764204e-08, 0.1916709364999e+01, 0.5291709230214e+00, + 0.2894536549362e-08, 0.2424043195547e+01, 0.5302110212022e+00, + 0.3096872473843e-08, 0.4445894977497e+01, 0.2976424921901e+00, + 0.2635672326810e-08, 0.3814366984117e+01, 0.1485980103780e+01, + + 0.3649302697001e-08, 0.2924200596084e+01, 0.6044726378023e+00, + 0.3127954585895e-08, 0.1842251648327e+01, 0.1084620721060e+00, + 0.2616040173947e-08, 0.4155841921984e+01, 0.1258454114666e+01, + 0.2597395859860e-08, 0.1158045978874e+00, 0.2103781122809e+00, + 0.2593286172210e-08, 0.4771850408691e+01, 0.2162200472757e+00, + 0.2481823585747e-08, 0.4608842558889e+00, 0.1062562936266e+01, + 0.2742219550725e-08, 0.1538781127028e+01, 0.5651155736444e+00, + 0.3199558469610e-08, 0.3226647822878e+00, 0.7036329877322e+00, + 0.2666088542957e-08, 0.1967991731219e+00, 0.1400015846597e+00, + 0.2397067430580e-08, 0.3707036669873e+01, 0.2125476091956e+00, + + 0.2376570772738e-08, 0.1182086628042e+01, 0.2140505503610e+00, + 0.2547228007887e-08, 0.4906256820629e+01, 0.1534957940063e+00, + 0.2265575594114e-08, 0.3414949866857e+01, 0.2235935264888e+00, + 0.2464381430585e-08, 0.4599122275378e+01, 0.2091065926078e+00, + 0.2433408527044e-08, 0.2830751145445e+00, 0.2174915669488e+00, + 0.2443605509076e-08, 0.4212046432538e+01, 0.1739420156204e+00, + 0.2319779262465e-08, 0.9881978408630e+00, 0.7530171478090e-01, + 0.2284622835465e-08, 0.5565347331588e+00, 0.7426161660010e-01, + 0.2467268750783e-08, 0.5655708150766e+00, 0.2526561439362e+00, + 0.2808513492782e-08, 0.1418405053408e+01, 0.5636314030725e+00, + + 0.2329528932532e-08, 0.4069557545675e+01, 0.1056200952181e+01, + 0.9698639532817e-09, 0.1074134313634e+01, 0.7826370942180e+02 }; + +/* SSB-to-Sun, T^0, Y */ + static const double s0y[] = { + 0.4955392320126e-02, 0.2170467313679e+01, 0.5296909721118e+00, + 0.2722325167392e-02, 0.2444433682196e+01, 0.2132990797783e+00, + 0.1546579925346e-02, 0.5992779281546e+00, 0.3813291813120e-01, + 0.8363140252966e-03, 0.7687356310801e+00, 0.7478166569050e-01, + 0.3385792683603e-03, 0.0000000000000e+00, 0.0000000000000e+00, + 0.1201192221613e-03, 0.2520035601514e+01, 0.1059381944224e+01, + 0.7587125720554e-04, 0.1669954006449e+01, 0.4265981595566e+00, + 0.1964155361250e-04, 0.5707743963343e+01, 0.2061856251104e+00, + 0.1891900364909e-04, 0.2320960679937e+01, 0.2204125344462e+00, + 0.1937373433356e-04, 0.3226940689555e+01, 0.1495633313810e+00, + + 0.1437139941351e-04, 0.2301626908096e+01, 0.5225775174439e+00, + 0.1406267683099e-04, 0.5188579265542e+01, 0.5368044267797e+00, + 0.1178703080346e-04, 0.5489483248476e+01, 0.7626583626240e-01, + 0.8079835186041e-05, 0.1683751835264e+01, 0.3664874755930e-01, + 0.7623253594652e-05, 0.2656400462961e+01, 0.3961708870310e-01, + 0.6248667483971e-05, 0.4992775362055e+01, 0.7329749511860e-01, + 0.4366353695038e-05, 0.2869706279678e+01, 0.1589072916335e+01, + 0.3829101568895e-05, 0.3572131359950e+01, 0.7113454667900e-02, + 0.3175733773908e-05, 0.4535372530045e+01, 0.4194847048887e+00, + 0.3092437902159e-05, 0.9230153317909e+00, 0.6398972393349e+00, + + 0.2874168812154e-05, 0.3363143761101e+01, 0.1102062672231e+00, + 0.3040119321826e-05, 0.3324250895675e+01, 0.6283075850446e+01, + 0.2699723308006e-05, 0.2917882441928e+00, 0.1030928125552e+00, + 0.2134832683534e-05, 0.4220997202487e+01, 0.3163918923335e+00, + 0.1770412139433e-05, 0.4747318496462e+01, 0.1021328554739e+02, + 0.1377264209373e-05, 0.4305058462401e+00, 0.1484170571900e-02, + 0.1127814538960e-05, 0.8538177240740e+00, 0.6327837846670e+00, + 0.1055608090130e-05, 0.1551800742580e+01, 0.4337116142245e+00, + 0.9802673861420e-06, 0.1459646735377e+01, 0.1052268489556e+01, + 0.1090329461951e-05, 0.1587351228711e+01, 0.1162474756779e+01, + + 0.6959590025090e-06, 0.5534442628766e+01, 0.1066495398892e+01, + 0.5664914529542e-06, 0.6030673003297e+01, 0.9491756770005e+00, + 0.6607787763599e-06, 0.4989507233927e+01, 0.8460828644453e+00, + 0.6269725742838e-06, 0.4222951804572e+01, 0.1480791608091e+00, + 0.6301889697863e-06, 0.5444316669126e+01, 0.2243449970715e+00, + 0.4891042662861e-06, 0.1490552839784e+01, 0.3340612434717e+01, + 0.3457083123290e-06, 0.3030475486049e+01, 0.3516457698740e-01, + 0.3032559967314e-06, 0.2652038793632e+01, 0.1104591729320e-01, + 0.2841133988903e-06, 0.1276744786829e+01, 0.4110125927500e-01, + 0.2855564444432e-06, 0.2143368674733e+01, 0.1510475019529e+00, + + 0.2765157135038e-06, 0.5444186109077e+01, 0.6373574839730e-01, + 0.2382312465034e-06, 0.2190521137593e+01, 0.2275259891141e+00, + 0.2808060365077e-06, 0.5735195064841e+01, 0.2535050500000e-01, + 0.2332175234405e-06, 0.9481985524859e-01, 0.7181332454670e-01, + 0.2322488199659e-06, 0.5180499361533e+01, 0.8582758298370e-01, + 0.1881850258423e-06, 0.3219788273885e+01, 0.2118763888447e+01, + 0.2196111392808e-06, 0.2366941159761e+01, 0.2968341143800e-02, + 0.2183810335519e-06, 0.4825445110915e+01, 0.7775000683430e-01, + 0.2002733093326e-06, 0.2457148995307e+01, 0.2093666171530e+00, + 0.1967111767229e-06, 0.5586291545459e+01, 0.2172315424036e+00, + + 0.1568473250543e-06, 0.3708003123320e+01, 0.7429900518901e+00, + 0.1852528314300e-06, 0.4310638151560e+01, 0.2022531624851e+00, + 0.1832111226447e-06, 0.1494665322656e+01, 0.3235053470014e+00, + 0.1746805502310e-06, 0.1451378500784e+01, 0.1385174140878e+00, + 0.1555730966650e-06, 0.1068040418198e+01, 0.7358765972222e+00, + 0.1554883462559e-06, 0.2442579035461e+01, 0.5154640627760e+00, + 0.1638380568746e-06, 0.2597913420625e+00, 0.8531963191132e+00, + 0.1159938593640e-06, 0.5834512021280e+01, 0.1990721704425e+00, + 0.1083427965695e-06, 0.5054033177950e+01, 0.5439178814476e+00, + 0.1156480369431e-06, 0.5325677432457e+01, 0.5257585094865e+00, + + 0.1141308860095e-06, 0.2153403923857e+01, 0.5336234347371e+00, + 0.7913146470946e-07, 0.8642846847027e+00, 0.1478866649112e+01, + 0.7439752463733e-07, 0.1970628496213e+01, 0.2164800718209e+00, + 0.7280277104079e-07, 0.6073307250609e+01, 0.2101180877357e+00, + 0.8319567719136e-07, 0.1954371928334e+01, 0.1692165728891e+01, + 0.7137705549290e-07, 0.8904989440909e+00, 0.4155522422634e+00, + 0.6900825396225e-07, 0.2825717714977e+01, 0.1173197218910e+00, + 0.7245757216635e-07, 0.2481677513331e+01, 0.1265567569334e+01, + 0.6961165696255e-07, 0.1292955312978e+01, 0.9562891316684e+00, + 0.7571804456890e-07, 0.3427517575069e+01, 0.1422690933580e-01, + + 0.6605425721904e-07, 0.8052192701492e+00, 0.6470106940028e+00, + 0.7375477357248e-07, 0.1705076390088e+01, 0.1581959461667e+01, + 0.7041664951470e-07, 0.4848356967891e+00, 0.9597935788730e-01, + 0.6322199535763e-07, 0.3878069473909e+01, 0.7084920306520e-01, + 0.5244380279191e-07, 0.2645560544125e+01, 0.5265099800692e+00, + 0.5143125704988e-07, 0.4834486101370e+01, 0.5328719641544e+00, + 0.5871866319373e-07, 0.7981472548900e+00, 0.7871412831580e-01, + 0.6300822573871e-07, 0.5979398788281e+01, 0.2608790314060e+02, + 0.6062154271548e-07, 0.4108655402756e+01, 0.1114304132498e+00, + 0.4361912339976e-07, 0.5322624319280e+01, 0.1375773836557e+01, + + 0.4417005920067e-07, 0.6240817359284e+01, 0.2770348281756e+00, + 0.4686806749936e-07, 0.3214977301156e+01, 0.1143987543936e+00, + 0.3758892132305e-07, 0.5879809634765e+01, 0.1596186371003e+01, + 0.5151351332319e-07, 0.2893377688007e+00, 0.2228608264996e+00, + 0.4554683578572e-07, 0.5475427144122e+01, 0.1465949902372e+00, + 0.3442381385338e-07, 0.5992034796640e+01, 0.5070101000000e-01, + 0.2831093954933e-07, 0.5367350273914e+01, 0.3092784376656e+00, + 0.3756267090084e-07, 0.5758171285420e+01, 0.4903339079539e+00, + 0.2816374679892e-07, 0.1863718700923e+01, 0.2991266627620e+00, + 0.3419307025569e-07, 0.9524347534130e+00, 0.3518164938661e+00, + + 0.2904250494239e-07, 0.5304471615602e+01, 0.1099462426779e+00, + 0.2471734511206e-07, 0.1297069793530e+01, 0.6256703299991e+00, + 0.2539620831872e-07, 0.3281126083375e+01, 0.1256615170089e+02, + 0.2281017868007e-07, 0.1829122133165e+01, 0.6681224869435e+01, + 0.2275319473335e-07, 0.5797198160181e+01, 0.3932462625300e-02, + 0.2547755368442e-07, 0.4752697708330e+01, 0.1169588211447e+01, + 0.2285979669317e-07, 0.1223205292886e+01, 0.1045155034888e+01, + 0.1913386560994e-07, 0.1757532993389e+01, 0.1155361302111e+01, + 0.1809020525147e-07, 0.4246116108791e+01, 0.3368040641550e-01, + 0.1649213300201e-07, 0.1445162890627e+01, 0.4408250688924e+00, + + 0.1834972793932e-07, 0.1126917567225e+01, 0.4452511715700e-02, + 0.1439550648138e-07, 0.6160756834764e+01, 0.9420622223326e+00, + 0.1487645457041e-07, 0.4358761931792e+01, 0.4123712502208e+00, + 0.1731729516660e-07, 0.6134456753344e+01, 0.2108507877249e+00, + 0.1717747163567e-07, 0.1898186084455e+01, 0.2157473718317e+00, + 0.1418190430374e-07, 0.4180286741266e+01, 0.6521991896920e-01, + 0.1404844134873e-07, 0.7654053565412e-01, 0.4258542984690e-01, + 0.1409842846538e-07, 0.4418612420312e+01, 0.2258291676434e+00, + 0.1090948346291e-07, 0.1260615686131e+01, 0.4226656969313e+00, + 0.1357577323612e-07, 0.3558248818690e+01, 0.7923417740620e-01, + + 0.1018154061960e-07, 0.5676087241256e+01, 0.1456308687557e+00, + 0.1412073972109e-07, 0.8394392632422e+00, 0.1525316725248e+00, + 0.1030938326496e-07, 0.1653593274064e+01, 0.1795258541446e+01, + 0.1180081567104e-07, 0.1285802592036e+01, 0.7032915397480e-01, + 0.9708510575650e-08, 0.7631889488106e+00, 0.8434341241180e-01, + 0.9637689663447e-08, 0.4630642649176e+01, 0.1272681024002e+01, + 0.1068910429389e-07, 0.5294934032165e+01, 0.2123349582968e+00, + 0.1063716179336e-07, 0.2736266800832e+01, 0.2142632012598e+00, + 0.1234858713814e-07, 0.1302891146570e+01, 0.1847279083684e+00, + 0.8912631189738e-08, 0.3570415993621e+01, 0.2648454860559e+01, + + 0.1036378285534e-07, 0.4236693440949e+01, 0.1370332435159e+00, + 0.9667798501561e-08, 0.2960768892398e+01, 0.4376440768498e+00, + 0.8108314201902e-08, 0.6987781646841e+00, 0.2880807454688e+00, + 0.7648364324628e-08, 0.2499017863863e+01, 0.2037373330570e+00, + 0.7286136828406e-08, 0.3787426951665e+01, 0.1129145838217e+00, + 0.9448237743913e-08, 0.2694354332983e+01, 0.5272426800584e+00, + 0.9374276106428e-08, 0.4787121277064e+01, 0.5321392641652e+00, + 0.7100226287462e-08, 0.3530238792101e+00, 0.6288513220417e+00, + 0.9253056659571e-08, 0.1399478925664e+01, 0.1606092486742e+00, + 0.6636432145504e-08, 0.3479575438447e+01, 0.1368660381889e+01, + + 0.6469975312932e-08, 0.1383669964800e+01, 0.2008557621224e+01, + 0.7335849729765e-08, 0.1243698166898e+01, 0.9561746721300e-02, + 0.8743421205855e-08, 0.3776164289301e+01, 0.3801276407308e+00, + 0.5993635744494e-08, 0.5627122113596e+01, 0.2042657109477e+02, + 0.5981008479693e-08, 0.1674336636752e+01, 0.2111650433779e+01, + 0.6188535145838e-08, 0.5214925208672e+01, 0.4305306221819e+00, + 0.6596074017566e-08, 0.2907653268124e+01, 0.1063314406849e+01, + 0.6630815126226e-08, 0.2127643669658e+01, 0.8389694097774e+00, + 0.6156772830040e-08, 0.5082160803295e+01, 0.4234171675140e+00, + 0.6446960563014e-08, 0.1872100916905e+01, 0.5287268506303e+00, + + 0.6429324424668e-08, 0.5610276103577e+01, 0.5306550935933e+00, + 0.6302232396465e-08, 0.1592152049607e+01, 0.1253008786510e-01, + 0.6399244436159e-08, 0.2746214421532e+01, 0.5217580628120e+02, + 0.5474965172558e-08, 0.2317666374383e+01, 0.2221856701002e+01, + 0.5339293190692e-08, 0.1084724961156e+01, 0.7466759693650e-01, + 0.5334733683389e-08, 0.3594106067745e+01, 0.7489573444450e-01, + 0.5392665782110e-08, 0.5630254365606e+01, 0.1055449481598e+01, + 0.6682075673789e-08, 0.1518480041732e+01, 0.2213766559277e+00, + 0.5079130495960e-08, 0.2739765115711e+01, 0.2132517061319e+00, + 0.5077759793261e-08, 0.5290711290094e+01, 0.2133464534247e+00, + + 0.4832037368310e-08, 0.1404473217200e+01, 0.7160067364790e-01, + 0.6463279674802e-08, 0.6038381695210e+01, 0.2209183458640e-01, + 0.6240592771560e-08, 0.1290170653666e+01, 0.3306188016693e+00, + 0.4672013521493e-08, 0.3261895939677e+01, 0.7796265773310e-01, + 0.6500650750348e-08, 0.1154522312095e+01, 0.3884652414254e+00, + 0.6344161389053e-08, 0.6206111545062e+01, 0.7605151500000e-01, + 0.4682518370646e-08, 0.5409118796685e+01, 0.1073608853559e+01, + 0.5329460015591e-08, 0.1202985784864e+01, 0.7287631425543e+00, + 0.5701588675898e-08, 0.4098715257064e+01, 0.8731175355560e-01, + 0.6030690867211e-08, 0.4132033218460e+00, 0.9846002785331e+00, + + 0.4336256312655e-08, 0.1211415991827e+01, 0.4297791515992e+00, + 0.4688498808975e-08, 0.3765479072409e+01, 0.2127790306879e+00, + 0.4675578609335e-08, 0.4265540037226e+01, 0.2138191288687e+00, + 0.4225578112158e-08, 0.5237566010676e+01, 0.3407705765729e+00, + 0.5139422230028e-08, 0.1507173079513e+01, 0.7233337363710e-01, + 0.4619995093571e-08, 0.9023957449848e-01, 0.8603097737811e+00, + 0.4494776255461e-08, 0.5414930552139e+00, 0.7381754420900e-01, + 0.4274026276788e-08, 0.4145735303659e+01, 0.7574578717200e-01, + 0.5018141789353e-08, 0.3344408829055e+01, 0.3180992042600e-02, + 0.4866163952181e-08, 0.3348534657607e+01, 0.7722995774390e-01, + + 0.4111986020501e-08, 0.4198823597220e+00, 0.1451108196653e+00, + 0.3356142784950e-08, 0.5609144747180e+01, 0.1274714967946e+00, + 0.4070575554551e-08, 0.7028411059224e+00, 0.3503323232942e+00, + 0.3257451857278e-08, 0.5624697983086e+01, 0.5296435984654e+00, + 0.3256973703026e-08, 0.1857842076707e+01, 0.5297383457582e+00, + 0.3830771508640e-08, 0.4562887279931e+01, 0.9098186128426e+00, + 0.3725024005962e-08, 0.2358058692652e+00, 0.1084620721060e+00, + 0.3136763921756e-08, 0.2049731526845e+01, 0.2346394437820e+00, + 0.3795147256194e-08, 0.2432356296933e+00, 0.1862120789403e+00, + 0.2877342229911e-08, 0.5631101279387e+01, 0.1905464808669e+01, + + 0.3076931798805e-08, 0.1117615737392e+01, 0.3628624111593e+00, + 0.2734765945273e-08, 0.5899826516955e+01, 0.2131850110243e+00, + 0.2733405296885e-08, 0.2130562964070e+01, 0.2134131485323e+00, + 0.2898552353410e-08, 0.3462387048225e+00, 0.5291709230214e+00, + 0.2893736103681e-08, 0.8534352781543e+00, 0.5302110212022e+00, + 0.3095717734137e-08, 0.2875061429041e+01, 0.2976424921901e+00, + 0.2636190425832e-08, 0.2242512846659e+01, 0.1485980103780e+01, + 0.3645512095537e-08, 0.1354016903958e+01, 0.6044726378023e+00, + 0.2808173547723e-08, 0.6705114365631e-01, 0.6225157782540e-01, + 0.2625012866888e-08, 0.4775705748482e+01, 0.5268983110410e-01, + + 0.2572233995651e-08, 0.2638924216139e+01, 0.1258454114666e+01, + 0.2604238824792e-08, 0.4826358927373e+01, 0.2103781122809e+00, + 0.2596886385239e-08, 0.3200388483118e+01, 0.2162200472757e+00, + 0.3228057304264e-08, 0.5384848409563e+01, 0.2007689919132e+00, + 0.2481601798252e-08, 0.5173373487744e+01, 0.1062562936266e+01, + 0.2745977498864e-08, 0.6250966149853e+01, 0.5651155736444e+00, + 0.2669878833811e-08, 0.4906001352499e+01, 0.1400015846597e+00, + 0.3203986611711e-08, 0.5034333010005e+01, 0.7036329877322e+00, + 0.3354961227212e-08, 0.6108262423137e+01, 0.4549093064213e+00, + 0.2400407324558e-08, 0.2135399294955e+01, 0.2125476091956e+00, + + 0.2379905859802e-08, 0.5893721933961e+01, 0.2140505503610e+00, + 0.2550844302187e-08, 0.3331940762063e+01, 0.1534957940063e+00, + 0.2268824211001e-08, 0.1843418461035e+01, 0.2235935264888e+00, + 0.2464700891204e-08, 0.3029548547230e+01, 0.2091065926078e+00, + 0.2436814726024e-08, 0.4994717970364e+01, 0.2174915669488e+00, + 0.2443623894745e-08, 0.2645102591375e+01, 0.1739420156204e+00, + 0.2318701783838e-08, 0.5700547397897e+01, 0.7530171478090e-01, + 0.2284448700256e-08, 0.5268898905872e+01, 0.7426161660010e-01, + 0.2468848123510e-08, 0.5276280575078e+01, 0.2526561439362e+00, + 0.2814052350303e-08, 0.6130168623475e+01, 0.5636314030725e+00, + + 0.2243662755220e-08, 0.6631692457995e+00, 0.8886590321940e-01, + 0.2330795855941e-08, 0.2499435487702e+01, 0.1056200952181e+01, + 0.9757679038404e-09, 0.5796846023126e+01, 0.7826370942180e+02 }; + +/* SSB-to-Sun, T^0, Z */ + static const double s0z[] = { + 0.1181255122986e-03, 0.4607918989164e+00, 0.2132990797783e+00, + 0.1127777651095e-03, 0.4169146331296e+00, 0.5296909721118e+00, + 0.4777754401806e-04, 0.4582657007130e+01, 0.3813291813120e-01, + 0.1129354285772e-04, 0.5758735142480e+01, 0.7478166569050e-01, + -0.1149543637123e-04, 0.0000000000000e+00, 0.0000000000000e+00, + 0.3298730512306e-05, 0.5978801994625e+01, 0.4265981595566e+00, + 0.2733376706079e-05, 0.7665413691040e+00, 0.1059381944224e+01, + 0.9426389657270e-06, 0.3710201265838e+01, 0.2061856251104e+00, + 0.8187517749552e-06, 0.3390675605802e+00, 0.2204125344462e+00, + 0.4080447871819e-06, 0.4552296640088e+00, 0.5225775174439e+00, + + 0.3169973017028e-06, 0.3445455899321e+01, 0.5368044267797e+00, + 0.2438098615549e-06, 0.5664675150648e+01, 0.3664874755930e-01, + 0.2601897517235e-06, 0.1931894095697e+01, 0.1495633313810e+00, + 0.2314558080079e-06, 0.3666319115574e+00, 0.3961708870310e-01, + 0.1962549548002e-06, 0.3167411699020e+01, 0.7626583626240e-01, + 0.2180518287925e-06, 0.1544420746580e+01, 0.7113454667900e-02, + 0.1451382442868e-06, 0.1583756740070e+01, 0.1102062672231e+00, + 0.1358439007389e-06, 0.5239941758280e+01, 0.6398972393349e+00, + 0.1050585898028e-06, 0.2266958352859e+01, 0.3163918923335e+00, + 0.1050029870186e-06, 0.2711495250354e+01, 0.4194847048887e+00, + + 0.9934920679800e-07, 0.1116208151396e+01, 0.1589072916335e+01, + 0.1048395331560e-06, 0.3408619600206e+01, 0.1021328554739e+02, + 0.8370147196668e-07, 0.3810459401087e+01, 0.2535050500000e-01, + 0.7989856510998e-07, 0.3769910473647e+01, 0.7329749511860e-01, + 0.5441221655233e-07, 0.2416994903374e+01, 0.1030928125552e+00, + 0.4610812906784e-07, 0.5858503336994e+01, 0.4337116142245e+00, + 0.3923022803444e-07, 0.3354170010125e+00, 0.1484170571900e-02, + 0.2610725582128e-07, 0.5410600646324e+01, 0.6327837846670e+00, + 0.2455279767721e-07, 0.6120216681403e+01, 0.1162474756779e+01, + 0.2375530706525e-07, 0.6055443426143e+01, 0.1052268489556e+01, + + 0.1782967577553e-07, 0.3146108708004e+01, 0.8460828644453e+00, + 0.1581687095238e-07, 0.6255496089819e+00, 0.3340612434717e+01, + 0.1594657672461e-07, 0.3782604300261e+01, 0.1066495398892e+01, + 0.1563448615040e-07, 0.1997775733196e+01, 0.2022531624851e+00, + 0.1463624258525e-07, 0.1736316792088e+00, 0.3516457698740e-01, + 0.1331585056673e-07, 0.4331941830747e+01, 0.9491756770005e+00, + 0.1130634557637e-07, 0.6152017751825e+01, 0.2968341143800e-02, + 0.1028949607145e-07, 0.2101792614637e+00, 0.2275259891141e+00, + 0.1024074971618e-07, 0.4071833211074e+01, 0.5070101000000e-01, + 0.8826956060303e-08, 0.4861633688145e+00, 0.2093666171530e+00, + + 0.8572230171541e-08, 0.5268190724302e+01, 0.4110125927500e-01, + 0.7649332643544e-08, 0.5134543417106e+01, 0.2608790314060e+02, + 0.8581673291033e-08, 0.2920218146681e+01, 0.1480791608091e+00, + 0.8430589300938e-08, 0.3604576619108e+01, 0.2172315424036e+00, + 0.7776165501012e-08, 0.3772942249792e+01, 0.6373574839730e-01, + 0.8311070234408e-08, 0.6200412329888e+01, 0.3235053470014e+00, + 0.6927365212582e-08, 0.4543353113437e+01, 0.8531963191132e+00, + 0.6791574208598e-08, 0.2882188406238e+01, 0.7181332454670e-01, + 0.5593100811839e-08, 0.1776646892780e+01, 0.7429900518901e+00, + 0.4553381853021e-08, 0.3949617611240e+01, 0.7775000683430e-01, + + 0.5758000450068e-08, 0.3859251775075e+01, 0.1990721704425e+00, + 0.4281283457133e-08, 0.1466294631206e+01, 0.2118763888447e+01, + 0.4206935661097e-08, 0.5421776011706e+01, 0.1104591729320e-01, + 0.4213751641837e-08, 0.3412048993322e+01, 0.2243449970715e+00, + 0.5310506239878e-08, 0.5421641370995e+00, 0.5154640627760e+00, + 0.3827450341320e-08, 0.8887314524995e+00, 0.1510475019529e+00, + 0.4292435241187e-08, 0.1405043757194e+01, 0.1422690933580e-01, + 0.3189780702289e-08, 0.1060049293445e+01, 0.1173197218910e+00, + 0.3226611928069e-08, 0.6270858897442e+01, 0.2164800718209e+00, + 0.2893897608830e-08, 0.5117563223301e+01, 0.6470106940028e+00, + + 0.3239852024578e-08, 0.4079092237983e+01, 0.2101180877357e+00, + 0.2956892222200e-08, 0.1594917021704e+01, 0.3092784376656e+00, + 0.2980177912437e-08, 0.5258787667564e+01, 0.4155522422634e+00, + 0.3163725690776e-08, 0.3854589225479e+01, 0.8582758298370e-01, + 0.2662262399118e-08, 0.3561326430187e+01, 0.5257585094865e+00, + 0.2766689135729e-08, 0.3180732086830e+00, 0.1385174140878e+00, + 0.2411600278464e-08, 0.3324798335058e+01, 0.5439178814476e+00, + 0.2483527695131e-08, 0.4169069291947e+00, 0.5336234347371e+00, + 0.7788777276590e-09, 0.1900569908215e+01, 0.5217580628120e+02 }; + +/* SSB-to-Sun, T^1, X */ + static const double s1x[] = { + -0.1296310361520e-07, 0.0000000000000e+00, 0.0000000000000e+00, + 0.8975769009438e-08, 0.1128891609250e+01, 0.4265981595566e+00, + 0.7771113441307e-08, 0.2706039877077e+01, 0.2061856251104e+00, + 0.7538303866642e-08, 0.2191281289498e+01, 0.2204125344462e+00, + 0.6061384579336e-08, 0.3248167319958e+01, 0.1059381944224e+01, + 0.5726994235594e-08, 0.5569981398610e+01, 0.5225775174439e+00, + 0.5616492836424e-08, 0.5057386614909e+01, 0.5368044267797e+00, + 0.1010881584769e-08, 0.3473577116095e+01, 0.7113454667900e-02, + 0.7259606157626e-09, 0.3651858593665e+00, 0.6398972393349e+00, + 0.8755095026935e-09, 0.1662835408338e+01, 0.4194847048887e+00, + + 0.5370491182812e-09, 0.1327673878077e+01, 0.4337116142245e+00, + 0.5743773887665e-09, 0.4250200846687e+01, 0.2132990797783e+00, + 0.4408103140300e-09, 0.3598752574277e+01, 0.1589072916335e+01, + 0.3101892374445e-09, 0.4887822983319e+01, 0.1052268489556e+01, + 0.3209453713578e-09, 0.9702272295114e+00, 0.5296909721118e+00, + 0.3017228286064e-09, 0.5484462275949e+01, 0.1066495398892e+01, + 0.3200700038601e-09, 0.2846613338643e+01, 0.1495633313810e+00, + 0.2137637279911e-09, 0.5692163292729e+00, 0.3163918923335e+00, + 0.1899686386727e-09, 0.2061077157189e+01, 0.2275259891141e+00, + 0.1401994545308e-09, 0.4177771136967e+01, 0.1102062672231e+00, + + 0.1578057810499e-09, 0.5782460597335e+01, 0.7626583626240e-01, + 0.1237713253351e-09, 0.5705900866881e+01, 0.5154640627760e+00, + 0.1313076837395e-09, 0.5163438179576e+01, 0.3664874755930e-01, + 0.1184963304860e-09, 0.3054804427242e+01, 0.6327837846670e+00, + 0.1238130878565e-09, 0.2317292575962e+01, 0.3961708870310e-01, + 0.1015959527736e-09, 0.2194643645526e+01, 0.7329749511860e-01, + 0.9017954423714e-10, 0.2868603545435e+01, 0.1990721704425e+00, + 0.8668024955603e-10, 0.4923849675082e+01, 0.5439178814476e+00, + 0.7756083930103e-10, 0.3014334135200e+01, 0.9491756770005e+00, + 0.7536503401741e-10, 0.2704886279769e+01, 0.1030928125552e+00, + + 0.5483308679332e-10, 0.6010983673799e+01, 0.8531963191132e+00, + 0.5184339620428e-10, 0.1952704573291e+01, 0.2093666171530e+00, + 0.5108658712030e-10, 0.2958575786649e+01, 0.2172315424036e+00, + 0.5019424524650e-10, 0.1736317621318e+01, 0.2164800718209e+00, + 0.4909312625978e-10, 0.3167216416257e+01, 0.2101180877357e+00, + 0.4456638901107e-10, 0.7697579923471e+00, 0.3235053470014e+00, + 0.4227030350925e-10, 0.3490910137928e+01, 0.6373574839730e-01, + 0.4095456040093e-10, 0.5178888984491e+00, 0.6470106940028e+00, + 0.4990537041422e-10, 0.3323887668974e+01, 0.1422690933580e-01, + 0.4321170010845e-10, 0.4288484987118e+01, 0.7358765972222e+00, + + 0.3544072091802e-10, 0.6021051579251e+01, 0.5265099800692e+00, + 0.3480198638687e-10, 0.4600027054714e+01, 0.5328719641544e+00, + 0.3440287244435e-10, 0.4349525970742e+01, 0.8582758298370e-01, + 0.3330628322713e-10, 0.2347391505082e+01, 0.1104591729320e-01, + 0.2973060707184e-10, 0.4789409286400e+01, 0.5257585094865e+00, + 0.2932606766089e-10, 0.5831693799927e+01, 0.5336234347371e+00, + 0.2876972310953e-10, 0.2692638514771e+01, 0.1173197218910e+00, + 0.2827488278556e-10, 0.2056052487960e+01, 0.2022531624851e+00, + 0.2515028239756e-10, 0.7411863262449e+00, 0.9597935788730e-01, + 0.2853033744415e-10, 0.3948481024894e+01, 0.2118763888447e+01 }; + +/* SSB-to-Sun, T^1, Y */ + static const double s1y[] = { + 0.8989047573576e-08, 0.5840593672122e+01, 0.4265981595566e+00, + 0.7815938401048e-08, 0.1129664707133e+01, 0.2061856251104e+00, + 0.7550926713280e-08, 0.6196589104845e+00, 0.2204125344462e+00, + 0.6056556925895e-08, 0.1677494667846e+01, 0.1059381944224e+01, + 0.5734142698204e-08, 0.4000920852962e+01, 0.5225775174439e+00, + 0.5614341822459e-08, 0.3486722577328e+01, 0.5368044267797e+00, + 0.1028678147656e-08, 0.1877141024787e+01, 0.7113454667900e-02, + 0.7270792075266e-09, 0.5077167301739e+01, 0.6398972393349e+00, + 0.8734141726040e-09, 0.9069550282609e-01, 0.4194847048887e+00, + 0.5377371402113e-09, 0.6039381844671e+01, 0.4337116142245e+00, + + 0.4729719431571e-09, 0.2153086311760e+01, 0.2132990797783e+00, + 0.4458052820973e-09, 0.5059830025565e+01, 0.5296909721118e+00, + 0.4406855467908e-09, 0.2027971692630e+01, 0.1589072916335e+01, + 0.3101659310977e-09, 0.3317677981860e+01, 0.1052268489556e+01, + 0.3016749232545e-09, 0.3913703482532e+01, 0.1066495398892e+01, + 0.3198541352656e-09, 0.1275513098525e+01, 0.1495633313810e+00, + 0.2142065389871e-09, 0.5301351614597e+01, 0.3163918923335e+00, + 0.1902615247592e-09, 0.4894943352736e+00, 0.2275259891141e+00, + 0.1613410990871e-09, 0.2449891130437e+01, 0.1102062672231e+00, + 0.1576992165097e-09, 0.4211421447633e+01, 0.7626583626240e-01, + + 0.1241637259894e-09, 0.4140803368133e+01, 0.5154640627760e+00, + 0.1313974830355e-09, 0.3591920305503e+01, 0.3664874755930e-01, + 0.1181697118258e-09, 0.1506314382788e+01, 0.6327837846670e+00, + 0.1238239742779e-09, 0.7461405378404e+00, 0.3961708870310e-01, + 0.1010107068241e-09, 0.6271010795475e+00, 0.7329749511860e-01, + 0.9226316616509e-10, 0.1259158839583e+01, 0.1990721704425e+00, + 0.8664946419555e-10, 0.3353244696934e+01, 0.5439178814476e+00, + 0.7757230468978e-10, 0.1447677295196e+01, 0.9491756770005e+00, + 0.7693168628139e-10, 0.1120509896721e+01, 0.1030928125552e+00, + 0.5487897454612e-10, 0.4439380426795e+01, 0.8531963191132e+00, + + 0.5196118677218e-10, 0.3788856619137e+00, 0.2093666171530e+00, + 0.5110853339935e-10, 0.1386879372016e+01, 0.2172315424036e+00, + 0.5027804534813e-10, 0.1647881805466e+00, 0.2164800718209e+00, + 0.4922485922674e-10, 0.1594315079862e+01, 0.2101180877357e+00, + 0.6155599524400e-10, 0.0000000000000e+00, 0.0000000000000e+00, + 0.4447147832161e-10, 0.5480720918976e+01, 0.3235053470014e+00, + 0.4144691276422e-10, 0.1931371033660e+01, 0.6373574839730e-01, + 0.4099950625452e-10, 0.5229611294335e+01, 0.6470106940028e+00, + 0.5060541682953e-10, 0.1731112486298e+01, 0.1422690933580e-01, + 0.4293615946300e-10, 0.2714571038925e+01, 0.7358765972222e+00, + + 0.3545659845763e-10, 0.4451041444634e+01, 0.5265099800692e+00, + 0.3479112041196e-10, 0.3029385448081e+01, 0.5328719641544e+00, + 0.3438516493570e-10, 0.2778507143731e+01, 0.8582758298370e-01, + 0.3297341285033e-10, 0.7898709807584e+00, 0.1104591729320e-01, + 0.2972585818015e-10, 0.3218785316973e+01, 0.5257585094865e+00, + 0.2931707295017e-10, 0.4260731012098e+01, 0.5336234347371e+00, + 0.2897198149403e-10, 0.1120753978101e+01, 0.1173197218910e+00, + 0.2832293240878e-10, 0.4597682717827e+00, 0.2022531624851e+00, + 0.2864348326612e-10, 0.2169939928448e+01, 0.9597935788730e-01, + 0.2852714675471e-10, 0.2377659870578e+01, 0.2118763888447e+01 }; + +/* SSB-to-Sun, T^1, Z */ + static const double s1z[] = { + 0.5444220475678e-08, 0.1803825509310e+01, 0.2132990797783e+00, + 0.3883412695596e-08, 0.4668616389392e+01, 0.5296909721118e+00, + 0.1334341434551e-08, 0.0000000000000e+00, 0.0000000000000e+00, + 0.3730001266883e-09, 0.5401405918943e+01, 0.2061856251104e+00, + 0.2894929197956e-09, 0.4932415609852e+01, 0.2204125344462e+00, + 0.2857950357701e-09, 0.3154625362131e+01, 0.7478166569050e-01, + 0.2499226432292e-09, 0.3657486128988e+01, 0.4265981595566e+00, + 0.1937705443593e-09, 0.5740434679002e+01, 0.1059381944224e+01, + 0.1374894396320e-09, 0.1712857366891e+01, 0.5368044267797e+00, + 0.1217248678408e-09, 0.2312090870932e+01, 0.5225775174439e+00, + + 0.7961052740870e-10, 0.5283368554163e+01, 0.3813291813120e-01, + 0.4979225949689e-10, 0.4298290471860e+01, 0.4194847048887e+00, + 0.4388552286597e-10, 0.6145515047406e+01, 0.7113454667900e-02, + 0.2586835212560e-10, 0.3019448001809e+01, 0.6398972393349e+00 }; + +/* SSB-to-Sun, T^2, X */ + static const double s2x[] = { + 0.1603551636587e-11, 0.4404109410481e+01, 0.2061856251104e+00, + 0.1556935889384e-11, 0.4818040873603e+00, 0.2204125344462e+00, + 0.1182594414915e-11, 0.9935762734472e+00, 0.5225775174439e+00, + 0.1158794583180e-11, 0.3353180966450e+01, 0.5368044267797e+00, + 0.9597358943932e-12, 0.5567045358298e+01, 0.2132990797783e+00, + 0.6511516579605e-12, 0.5630872420788e+01, 0.4265981595566e+00, + 0.7419792747688e-12, 0.2156188581957e+01, 0.5296909721118e+00, + 0.3951972655848e-12, 0.1981022541805e+01, 0.1059381944224e+01, + 0.4478223877045e-12, 0.0000000000000e+00, 0.0000000000000e+00 }; + +/* SSB-to-Sun, T^2, Y */ + static const double s2y[] = { + 0.1609114495091e-11, 0.2831096993481e+01, 0.2061856251104e+00, + 0.1560330784946e-11, 0.5193058213906e+01, 0.2204125344462e+00, + 0.1183535479202e-11, 0.5707003443890e+01, 0.5225775174439e+00, + 0.1158183066182e-11, 0.1782400404928e+01, 0.5368044267797e+00, + 0.1032868027407e-11, 0.4036925452011e+01, 0.2132990797783e+00, + 0.6540142847741e-12, 0.4058241056717e+01, 0.4265981595566e+00, + 0.7305236491596e-12, 0.6175401942957e+00, 0.5296909721118e+00, + -0.5580725052968e-12, 0.0000000000000e+00, 0.0000000000000e+00, + 0.3946122651015e-12, 0.4108265279171e+00, 0.1059381944224e+01 }; + +/* SSB-to-Sun, T^2, Z */ + static const double s2z[] = { + 0.3749920358054e-12, 0.3230285558668e+01, 0.2132990797783e+00, + 0.2735037220939e-12, 0.6154322683046e+01, 0.5296909721118e+00 }; + +/* Pointers to coefficient arrays, in x,y,z sets */ + static const double *ce0[] = { e0x, e0y, e0z }, + *ce1[] = { e1x, e1y, e1z }, + *ce2[] = { e2x, e2y, e2z }, + *cs0[] = { s0x, s0y, s0z }, + *cs1[] = { s1x, s1y, s1z }, + *cs2[] = { s2x, s2y, s2z }; + const double *coeffs; + +/* Numbers of terms for each component of the model, in x,y,z sets */ + static const int ne0[3] = {(int)(sizeof e0x / sizeof (double) / 3), + (int)(sizeof e0y / sizeof (double) / 3), + (int)(sizeof e0z / sizeof (double) / 3) }, + ne1[3] = {(int)(sizeof e1x / sizeof (double) / 3), + (int)(sizeof e1y / sizeof (double) / 3), + (int)(sizeof e1z / sizeof (double) / 3) }, + ne2[3] = {(int)(sizeof e2x / sizeof (double) / 3), + (int)(sizeof e2y / sizeof (double) / 3), + (int)(sizeof e2z / sizeof (double) / 3) }, + ns0[3] = {(int)(sizeof s0x / sizeof (double) / 3), + (int)(sizeof s0y / sizeof (double) / 3), + (int)(sizeof s0z / sizeof (double) / 3) }, + ns1[3] = {(int)(sizeof s1x / sizeof (double) / 3), + (int)(sizeof s1y / sizeof (double) / 3), + (int)(sizeof s1z / sizeof (double) / 3) }, + ns2[3] = {(int)(sizeof s2x / sizeof (double) / 3), + (int)(sizeof s2y / sizeof (double) / 3), + (int)(sizeof s2z / sizeof (double) / 3) }; + int nterms; + +/* Miscellaneous */ + int jstat, i, j; + double t, t2, xyz, xyzd, a, b, c, ct, p, cp, + ph[3], vh[3], pb[3], vb[3], x, y, z; + +/* ------------------------------------------------------------------ */ + +/* Time since reference epoch, Julian years. */ + t = ((date1 - DJ00) + date2) / DJY; + t2 = t*t; + +/* Set status. */ + jstat = fabs(t) <= 100.0 ? 0 : 1; + +/* X then Y then Z. */ + for (i = 0; i < 3; i++) { + + /* Initialize position and velocity component. */ + xyz = 0.0; + xyzd = 0.0; + + /* ------------------------------------------------ */ + /* Obtain component of Sun to Earth ecliptic vector */ + /* ------------------------------------------------ */ + + /* Sun to Earth, T^0 terms. */ + coeffs = ce0[i]; + nterms = ne0[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + p = b + c*t; + xyz += a*cos(p); + xyzd -= a*c*sin(p); + } + + /* Sun to Earth, T^1 terms. */ + coeffs = ce1[i]; + nterms = ne1[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + ct = c*t; + p = b + ct; + cp = cos(p); + xyz += a*t*cp; + xyzd += a*( cp - ct*sin(p) ); + } + + /* Sun to Earth, T^2 terms. */ + coeffs = ce2[i]; + nterms = ne2[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + ct = c*t; + p = b + ct; + cp = cos(p); + xyz += a*t2*cp; + xyzd += a*t*( 2.0*cp - ct*sin(p) ); + } + + /* Heliocentric Earth position and velocity component. */ + ph[i] = xyz; + vh[i] = xyzd / DJY; + + /* ------------------------------------------------ */ + /* Obtain component of SSB to Earth ecliptic vector */ + /* ------------------------------------------------ */ + + /* SSB to Sun, T^0 terms. */ + coeffs = cs0[i]; + nterms = ns0[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + p = b + c*t; + xyz += a*cos(p); + xyzd -= a*c*sin(p); + } + + /* SSB to Sun, T^1 terms. */ + coeffs = cs1[i]; + nterms = ns1[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + ct = c*t; + p = b + ct; + cp = cos(p); + xyz += a*t*cp; + xyzd += a*(cp - ct*sin(p)); + } + + /* SSB to Sun, T^2 terms. */ + coeffs = cs2[i]; + nterms = ns2[i]; + for (j = 0; j < nterms; j++) { + a = *coeffs++; + b = *coeffs++; + c = *coeffs++; + ct = c*t; + p = b + ct; + cp = cos(p); + xyz += a*t2*cp; + xyzd += a*t*(2.0*cp - ct*sin(p)); + } + + /* Barycentric Earth position and velocity component. */ + pb[i] = xyz; + vb[i] = xyzd / DJY; + + /* Next Cartesian component. */ + } + +/* Rotate from ecliptic to BCRS coordinates. */ + + x = ph[0]; + y = ph[1]; + z = ph[2]; + pvh[0][0] = x + am12*y + am13*z; + pvh[0][1] = am21*x + am22*y + am23*z; + pvh[0][2] = am32*y + am33*z; + + x = vh[0]; + y = vh[1]; + z = vh[2]; + pvh[1][0] = x + am12*y + am13*z; + pvh[1][1] = am21*x + am22*y + am23*z; + pvh[1][2] = am32*y + am33*z; + + x = pb[0]; + y = pb[1]; + z = pb[2]; + pvb[0][0] = x + am12*y + am13*z; + pvb[0][1] = am21*x + am22*y + am23*z; + pvb[0][2] = am32*y + am33*z; + + x = vb[0]; + y = vb[1]; + z = vb[2]; + pvb[1][0] = x + am12*y + am13*z; + pvb[1][1] = am21*x + am22*y + am23*z; + pvb[1][2] = am32*y + am33*z; + +/* Return the status. */ + return jstat; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eqec06.c b/20200721/c/src/eqec06.c new file mode 100644 index 0000000..ed3e6c0 --- /dev/null +++ b/20200721/c/src/eqec06.c @@ -0,0 +1,183 @@ +#include "sofa.h" + +void iauEqec06(double date1, double date2, double dr, double dd, + double *dl, double *db) +/* +** - - - - - - - - - - +** i a u E q e c 0 6 +** - - - - - - - - - - +** +** Transformation from ICRS equatorial coordinates to ecliptic +** coordinates (mean equinox and ecliptic of date) using IAU 2006 +** precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian date (Note 1) +** dr,dd double ICRS right ascension and declination (radians) +** +** Returned: +** dl,db double ecliptic longitude and latitude (radians) +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 3) The transformation is approximately that from mean J2000.0 right +** ascension and declination to ecliptic longitude and latitude +** (mean equinox and ecliptic of date), with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauEcm06 J2000.0 to ecliptic rotation matrix, IAU 2006 +** iauRxp product of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rm[3][3], v1[3], v2[3], a, b; + + +/* Spherical to Cartesian. */ + iauS2c(dr, dd, v1); + +/* Rotation matrix, ICRS equatorial to ecliptic. */ + iauEcm06(date1, date2, rm); + +/* The transformation from ICRS to ecliptic. */ + iauRxp(rm, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, &a, &b); + +/* Express in conventional ranges. */ + *dl = iauAnp(a); + *db = iauAnpm(b); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/eqeq94.c b/20200721/c/src/eqeq94.c new file mode 100644 index 0000000..dcb4638 --- /dev/null +++ b/20200721/c/src/eqeq94.c @@ -0,0 +1,182 @@ +#include "sofa.h" + +double iauEqeq94(double date1, double date2) +/* +** - - - - - - - - - - +** i a u E q e q 9 4 +** - - - - - - - - - - +** +** Equation of the equinoxes, IAU 1994 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned (function value): +** double equation of the equinoxes (Note 2) +** +** Notes: +** +** 1) The date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result, which is in radians, operates in the following sense: +** +** Greenwich apparent ST = GMST + equation of the equinoxes +** +** Called: +** iauAnpm normalize angle into range +/- pi +** iauNut80 nutation, IAU 1980 +** iauObl80 mean obliquity, IAU 1980 +** +** References: +** +** IAU Resolution C7, Recommendation 3 (1994). +** +** Capitaine, N. & Gontier, A.-M., 1993, Astron.Astrophys., 275, +** 645-650. +** +** This revision: 2017 October 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, om, dpsi, deps, eps0, ee; + + +/* Interval between fundamental epoch J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Longitude of the mean ascending node of the lunar orbit on the */ +/* ecliptic, measured from the mean equinox of date. */ + om = iauAnpm((450160.280 + (-482890.539 + + (7.455 + 0.008 * t) * t) * t) * DAS2R + + fmod(-5.0 * t, 1.0) * D2PI); + +/* Nutation components and mean obliquity. */ + iauNut80(date1, date2, &dpsi, &deps); + eps0 = iauObl80(date1, date2); + +/* Equation of the equinoxes. */ + ee = dpsi*cos(eps0) + DAS2R*(0.00264*sin(om) + 0.000063*sin(om+om)); + + return ee; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/era00.c b/20200721/c/src/era00.c new file mode 100644 index 0000000..58d521a --- /dev/null +++ b/20200721/c/src/era00.c @@ -0,0 +1,186 @@ +#include "sofa.h" + +double iauEra00(double dj1, double dj2) +/* +** - - - - - - - - - +** i a u E r a 0 0 +** - - - - - - - - - +** +** Earth rotation angle (IAU 2000 model). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** dj1,dj2 double UT1 as a 2-part Julian Date (see note) +** +** Returned (function value): +** double Earth rotation angle (radians), range 0-2pi +** +** Notes: +** +** 1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any +** convenient way between the arguments dj1 and dj2. For example, +** JD(UT1)=2450123.7 could be expressed in any of these ways, +** among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum precision is +** delivered when the dj1 argument is for 0hrs UT1 on the day in +** question and the dj2 argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The algorithm is adapted from Expression 22 of Capitaine et al. +** 2000. The time argument has been expressed in days directly, +** and, to retain precision, integer contributions have been +** eliminated. The same formulation is given in IERS Conventions +** (2003), Chap. 5, Eq. 14. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine N., Guinot B. and McCarthy D.D, 2000, Astron. +** Astrophys., 355, 398-405. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double d1, d2, t, f, theta; + + +/* Days since fundamental epoch. */ + if (dj1 < dj2) { + d1 = dj1; + d2 = dj2; + } else { + d1 = dj2; + d2 = dj1; + } + t = d1 + (d2- DJ00); + +/* Fractional part of T (days). */ + f = fmod(d1, 1.0) + fmod(d2, 1.0); + +/* Earth rotation angle at this UT1. */ + theta = iauAnp(D2PI * (f + 0.7790572732640 + + 0.00273781191135448 * t)); + + return theta; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fad03.c b/20200721/c/src/fad03.c new file mode 100644 index 0000000..40d8543 --- /dev/null +++ b/20200721/c/src/fad03.c @@ -0,0 +1,153 @@ +#include "sofa.h" + +double iauFad03(double t) +/* +** - - - - - - - - - +** i a u F a d 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean elongation of the Moon from the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double D, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean elongation of the Moon from the Sun (IERS Conventions 2003). */ + a = fmod( 1072260.703692 + + t * ( 1602961601.2090 + + t * ( - 6.3706 + + t * ( 0.006593 + + t * ( - 0.00003169 ) ) ) ), TURNAS ) * DAS2R; + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fae03.c b/20200721/c/src/fae03.c new file mode 100644 index 0000000..6a61456 --- /dev/null +++ b/20200721/c/src/fae03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFae03(double t) +/* +** - - - - - - - - - +** i a u F a e 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Earth. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Earth, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Earth (IERS Conventions 2003). */ + a = fmod(1.753470314 + 628.3075849991 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/faf03.c b/20200721/c/src/faf03.c new file mode 100644 index 0000000..e3f7e98 --- /dev/null +++ b/20200721/c/src/faf03.c @@ -0,0 +1,156 @@ +#include "sofa.h" + +double iauFaf03(double t) +/* +** - - - - - - - - - +** i a u F a f 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of the Moon minus mean longitude of the ascending +** node. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double F, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of the Moon minus that of the ascending node */ +/* (IERS Conventions 2003). */ + a = fmod( 335779.526232 + + t * ( 1739527262.8478 + + t * ( - 12.7512 + + t * ( - 0.001037 + + t * ( 0.00000417 ) ) ) ), TURNAS ) * DAS2R; + + return a; + + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/faju03.c b/20200721/c/src/faju03.c new file mode 100644 index 0000000..6c32628 --- /dev/null +++ b/20200721/c/src/faju03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFaju03(double t) +/* +** - - - - - - - - - - +** i a u F a j u 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Jupiter. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Jupiter, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Jupiter (IERS Conventions 2003). */ + a = fmod(0.599546497 + 52.9690962641 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fal03.c b/20200721/c/src/fal03.c new file mode 100644 index 0000000..3787e26 --- /dev/null +++ b/20200721/c/src/fal03.c @@ -0,0 +1,153 @@ +#include "sofa.h" + +double iauFal03(double t) +/* +** - - - - - - - - - +** i a u F a l 0 3 +** - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean anomaly of the Moon. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double l, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean anomaly of the Moon (IERS Conventions 2003). */ + a = fmod( 485868.249036 + + t * ( 1717915923.2178 + + t * ( 31.8792 + + t * ( 0.051635 + + t * ( - 0.00024470 ) ) ) ), TURNAS ) * DAS2R; + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/falp03.c b/20200721/c/src/falp03.c new file mode 100644 index 0000000..9d4e1b2 --- /dev/null +++ b/20200721/c/src/falp03.c @@ -0,0 +1,153 @@ +#include "sofa.h" + +double iauFalp03(double t) +/* +** - - - - - - - - - - +** i a u F a l p 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean anomaly of the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double l', radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean anomaly of the Sun (IERS Conventions 2003). */ + a = fmod( 1287104.793048 + + t * ( 129596581.0481 + + t * ( - 0.5532 + + t * ( 0.000136 + + t * ( - 0.00001149 ) ) ) ), TURNAS ) * DAS2R; + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fama03.c b/20200721/c/src/fama03.c new file mode 100644 index 0000000..cfffd30 --- /dev/null +++ b/20200721/c/src/fama03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFama03(double t) +/* +** - - - - - - - - - - +** i a u F a m a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Mars. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Mars, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Mars (IERS Conventions 2003). */ + a = fmod(6.203480913 + 334.0612426700 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fame03.c b/20200721/c/src/fame03.c new file mode 100644 index 0000000..8347021 --- /dev/null +++ b/20200721/c/src/fame03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFame03(double t) +/* +** - - - - - - - - - - +** i a u F a m e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Mercury. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Mercury, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Mercury (IERS Conventions 2003). */ + a = fmod(4.402608842 + 2608.7903141574 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fane03.c b/20200721/c/src/fane03.c new file mode 100644 index 0000000..50227d3 --- /dev/null +++ b/20200721/c/src/fane03.c @@ -0,0 +1,149 @@ +#include "sofa.h" + +double iauFane03(double t) +/* +** - - - - - - - - - - +** i a u F a n e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Neptune. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Neptune, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is adapted from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Neptune (IERS Conventions 2003). */ + a = fmod(5.311886287 + 3.8133035638 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/faom03.c b/20200721/c/src/faom03.c new file mode 100644 index 0000000..953bd42 --- /dev/null +++ b/20200721/c/src/faom03.c @@ -0,0 +1,154 @@ +#include "sofa.h" + +double iauFaom03(double t) +/* +** - - - - - - - - - - +** i a u F a o m 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of the Moon's ascending node. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double Omega, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of the Moon's ascending node */ +/* (IERS Conventions 2003). */ + a = fmod( 450160.398036 + + t * ( - 6962890.5431 + + t * ( 7.4722 + + t * ( 0.007702 + + t * ( - 0.00005939 ) ) ) ), TURNAS ) * DAS2R; + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fapa03.c b/20200721/c/src/fapa03.c new file mode 100644 index 0000000..3ec1d56 --- /dev/null +++ b/20200721/c/src/fapa03.c @@ -0,0 +1,153 @@ +#include "sofa.h" + +double iauFapa03(double t) +/* +** - - - - - - - - - - +** i a u F a p a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** general accumulated precession in longitude. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double general precession in longitude, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003). It +** is taken from Kinoshita & Souchay (1990) and comes originally +** from Lieske et al. (1977). +** +** References: +** +** Kinoshita, H. and Souchay J. 1990, Celest.Mech. and Dyn.Astron. +** 48, 187 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* General accumulated precession in longitude. */ + a = (0.024381750 + 0.00000538691 * t) * t; + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fasa03.c b/20200721/c/src/fasa03.c new file mode 100644 index 0000000..263ac99 --- /dev/null +++ b/20200721/c/src/fasa03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFasa03(double t) +/* +** - - - - - - - - - - +** i a u F a s a 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Saturn. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Saturn, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Saturn (IERS Conventions 2003). */ + a = fmod(0.874016757 + 21.3299104960 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/faur03.c b/20200721/c/src/faur03.c new file mode 100644 index 0000000..916939e --- /dev/null +++ b/20200721/c/src/faur03.c @@ -0,0 +1,149 @@ +#include "sofa.h" + +double iauFaur03(double t) +/* +** - - - - - - - - - - +** i a u F a u r 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Uranus. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Uranus, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** is adapted from Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Uranus (IERS Conventions 2003). */ + a = fmod(5.481293872 + 7.4781598567 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fave03.c b/20200721/c/src/fave03.c new file mode 100644 index 0000000..d2ffaee --- /dev/null +++ b/20200721/c/src/fave03.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +double iauFave03(double t) +/* +** - - - - - - - - - - +** i a u F a v e 0 3 +** - - - - - - - - - - +** +** Fundamental argument, IERS Conventions (2003): +** mean longitude of Venus. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** t double TDB, Julian centuries since J2000.0 (Note 1) +** +** Returned (function value): +** double mean longitude of Venus, radians (Note 2) +** +** Notes: +** +** 1) Though t is strictly TDB, it is usually more convenient to use +** TT, which makes no significant difference. +** +** 2) The expression used is as adopted in IERS Conventions (2003) and +** comes from Souchay et al. (1999) after Simon et al. (1994). +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double a; + + +/* Mean longitude of Venus (IERS Conventions 2003). */ + a = fmod(3.176146697 + 1021.3285546211 * t, D2PI); + + return a; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk425.c b/20200721/c/src/fk425.c new file mode 100644 index 0000000..1bb7c64 --- /dev/null +++ b/20200721/c/src/fk425.c @@ -0,0 +1,321 @@ +#include "sofa.h" + +void iauFk425(double r1950, double d1950, + double dr1950, double dd1950, + double p1950, double v1950, + double *r2000, double *d2000, + double *dr2000, double *dd2000, + double *p2000, double *v2000) +/* +** - - - - - - - - - +** i a u F k 4 2 5 +** - - - - - - - - - +** +** Convert B1950.0 FK4 star catalog data to J2000.0 FK5. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** This function converts a star's catalog data from the old FK4 +** (Bessel-Newcomb) system to the later IAU 1976 FK5 (Fricke) system. +** +** Given: (all B1950.0, FK4) +** r1950,d1950 double B1950.0 RA,Dec (rad) +** dr1950,dd1950 double B1950.0 proper motions (rad/trop.yr) +** p1950 double parallax (arcsec) +** v1950 double radial velocity (km/s, +ve = moving away) +** +** Returned: (all J2000.0, FK5) +** r2000,d2000 double J2000.0 RA,Dec (rad) +** dr2000,dd2000 double J2000.0 proper motions (rad/Jul.yr) +** p2000 double parallax (arcsec) +** v2000 double radial velocity (km/s, +ve = moving away) +** +** Notes: +** +** 1) The proper motions in RA are dRA/dt rather than cos(Dec)*dRA/dt, +** and are per year rather than per century. +** +** 2) The conversion is somewhat complicated, for several reasons: +** +** . Change of standard epoch from B1950.0 to J2000.0. +** +** . An intermediate transition date of 1984 January 1.0 TT. +** +** . A change of precession model. +** +** . Change of time unit for proper motion (tropical to Julian). +** +** . FK4 positions include the E-terms of aberration, to simplify +** the hand computation of annual aberration. FK5 positions +** assume a rigorous aberration computation based on the Earth's +** barycentric velocity. +** +** . The E-terms also affect proper motions, and in particular cause +** objects at large distances to exhibit fictitious proper +** motions. +** +** The algorithm is based on Smith et al. (1989) and Yallop et al. +** (1989), which presented a matrix method due to Standish (1982) as +** developed by Aoki et al. (1983), using Kinoshita's development of +** Andoyer's post-Newcomb precession. The numerical constants from +** Seidelmann (1992) are used canonically. +** +** 3) Conversion from B1950.0 FK4 to J2000.0 FK5 only is provided for. +** Conversions for different epochs and equinoxes would require +** additional treatment for precession, proper motion and E-terms. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch J2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauPv2s pv-vector to spherical coordinates +** iauPdp scalar product of two p-vectors +** iauPvmpv pv-vector minus pv_vector +** iauPvppv pv-vector plus pv_vector +** iauS2pv spherical coordinates to pv-vector +** iauSxp multiply p-vector by scalar +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Smith, C.A. et al., 1989, "The transformation of astrometric +** catalog systems to the equinox J2000.0". Astron.J. 97, 265. +** +** Standish, E.M., 1982, "Conversion of positions and proper motions +** from B1950.0 to the IAU system at J2000.0". Astron.Astrophys., +** 115, 1, 20-22. +** +** Yallop, B.D. et al., 1989, "Transformation of mean star places +** from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space". +** Astron.J. 97, 274. +** +** This revision: 2018 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Radians per year to arcsec per century */ + const double PMF = 100.0*DR2AS; + +/* Small number to avoid arithmetic problems */ + const double TINY = 1e-30; + +/* Miscellaneous */ + double r, d, ur, ud, px, rv, pxvf, w, rd; + int i, j, k, l; + +/* Pv-vectors */ + double r0[2][3], pv1[2][3], pv2[2][3]; + +/* +** CANONICAL CONSTANTS (Seidelmann 1992) +*/ + +/* Km per sec to AU per tropical century */ +/* = 86400 * 36524.2198782 / 149597870.7 */ + const double VF = 21.095; + +/* Constant pv-vector (cf. Seidelmann 3.591-2, vectors A and Adot) */ + static double a[2][3] = { + { -1.62557e-6, -0.31919e-6, -0.13843e-6 }, + { +1.245e-3, -1.580e-3, -0.659e-3 } + }; + +/* 3x2 matrix of pv-vectors (cf. Seidelmann 3.591-4, matrix M) */ + static double em[2][3][2][3] = { + + { { { +0.9999256782, -0.0111820611, -0.0048579477 }, + { +0.00000242395018, -0.00000002710663, -0.00000001177656 } }, + + { { +0.0111820610, +0.9999374784, -0.0000271765 }, + { +0.00000002710663, +0.00000242397878, -0.00000000006587 } }, + + { { +0.0048579479, -0.0000271474, +0.9999881997, }, + { +0.00000001177656, -0.00000000006582, +0.00000242410173 } } }, + + { { { -0.000551, -0.238565, +0.435739 }, + { +0.99994704, -0.01118251, -0.00485767 } }, + + { { +0.238514, -0.002667, -0.008541 }, + { +0.01118251, +0.99995883, -0.00002718 } }, + + { { -0.435623, +0.012254, +0.002117 }, + { +0.00485767, -0.00002714, +1.00000956 } } } + + }; + +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/* The FK4 data (units radians and arcsec per tropical century). */ + r = r1950; + d = d1950; + ur = dr1950*PMF; + ud = dd1950*PMF; + px = p1950; + rv = v1950; + +/* Express as a pv-vector. */ + pxvf = px*VF; + w = rv*pxvf; + iauS2pv(r, d, 1.0, ur, ud, w, r0); + +/* Allow for E-terms (cf. Seidelmann 3.591-2). */ + iauPvmpv(r0, a, pv1); + iauSxp(iauPdp(r0[0], a[0]), r0[0], pv2[0]); + iauSxp(iauPdp(r0[0], a[1]), r0[0], pv2[1]); + iauPvppv(pv1, pv2, pv1); + +/* Convert pv-vector to Fricke system (cf. Seidelmann 3.591-3). */ + for ( i = 0; i < 2; i++ ) { + for ( j = 0; j < 3; j++ ) { + w = 0.0; + for ( k = 0; k < 2; k++ ) { + for ( l = 0; l < 3; l++ ) { + w += em[i][j][k][l] * pv1[k][l]; + } + } + pv2[i][j] = w; + } + } + +/* Revert to catalog form. */ + iauPv2s(pv2, &r, &d, &w, &ur, &ud, &rd); + if ( px > TINY ) { + rv = rd/pxvf; + px = px/w; + } + +/* Return the results. */ + *r2000 = iauAnp(r); + *d2000 = d; + *dr2000 = ur/PMF; + *dd2000 = ud/PMF; + *v2000 = rv; + *p2000 = px; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk45z.c b/20200721/c/src/fk45z.c new file mode 100644 index 0000000..9c93871 --- /dev/null +++ b/20200721/c/src/fk45z.c @@ -0,0 +1,251 @@ +#include "sofa.h" + +void iauFk45z(double r1950, double d1950, double bepoch, + double *r2000, double *d2000) +/* +** - - - - - - - - - +** i a u F k 4 5 z +** - - - - - - - - - +** +** Convert a B1950.0 FK4 star position to J2000.0 FK5, assuming zero +** proper motion in the FK5 system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** This function converts a star's catalog data from the old FK4 +** (Bessel-Newcomb) system to the later IAU 1976 FK5 (Fricke) system, +** in such a way that the FK5 proper motion is zero. Because such a +** star has, in general, a non-zero proper motion in the FK4 system, +** the routine requires the epoch at which the position in the FK4 +** system was determined. +** +** Given: +** r1950,d1950 double B1950.0 FK4 RA,Dec at epoch (rad) +** bepoch double Besselian epoch (e.g. 1979.3D0) +** +** Returned: +** r2000,d2000 double J2000.0 FK5 RA,Dec (rad) +** +** Notes: +** +** 1) The epoch bepoch is strictly speaking Besselian, but if a +** Julian epoch is supplied the result will be affected only to a +** negligible extent. +** +** 2) The method is from Appendix 2 of Aoki et al. (1983), but using +** the constants of Seidelmann (1992). See the routine iauFk425 +** for a general introduction to the FK4 to FK5 conversion. +** +** 3) Conversion from equinox B1950.0 FK4 to equinox J2000.0 FK5 only +** is provided for. Conversions for different starting and/or +** ending epochs would require additional treatment for precession, +** proper motion and E-terms. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch 2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauC2s p-vector to spherical +** iauEpb2jd Besselian epoch to Julian date +** iauEpj Julian date to Julian epoch +** iauPdp scalar product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPpsp p-vector plus scaled p-vector +** iauPvu update a pv-vector +** iauS2c spherical to p-vector +** +** This revision: 2018 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Radians per year to arcsec per century */ + const double PMF = 100.0*DR2AS; + +/* Position and position+velocity vectors */ + double r0[3], p[3], pv[2][3]; + +/* Miscellaneous */ + double w, djm0, djm; + int i, j, k; + +/* +** CANONICAL CONSTANTS (Seidelmann 1992) +*/ + +/* Vectors A and Adot (Seidelmann 3.591-2) */ + static double a[3] = { -1.62557e-6, -0.31919e-6, -0.13843e-6 }; + static double ad[3] = { +1.245e-3, -1.580e-3, -0.659e-3 }; + +/* 3x2 matrix of p-vectors (cf. Seidelmann 3.591-4, matrix M) */ + static double em[2][3][3] = { + { { +0.9999256782, -0.0111820611, -0.0048579477 }, + { +0.0111820610, +0.9999374784, -0.0000271765 }, + { +0.0048579479, -0.0000271474, +0.9999881997 } }, + { { -0.000551, -0.238565, +0.435739 }, + { +0.238514, -0.002667, -0.008541 }, + { -0.435623, +0.012254, +0.002117 } } + }; + +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/* Spherical coordinates to p-vector. */ + iauS2c(r1950, d1950, r0); + +/* Adjust p-vector A to give zero proper motion in FK5. */ + w = (bepoch - 1950) / PMF; + iauPpsp(a, w, ad, p); + +/* Remove E-terms. */ + iauPpsp(p, -iauPdp(r0,p), r0, p); + iauPmp(r0, p, p); + +/* Convert to Fricke system pv-vector (cf. Seidelmann 3.591-3). */ + for ( i = 0; i < 2; i++ ) { + for ( j = 0; j < 3; j++ ) { + w = 0.0; + for ( k = 0; k < 3; k++ ) { + w += em[i][j][k] * p[k]; + } + pv[i][j] = w; + } + } + +/* Allow for fictitious proper motion. */ + iauEpb2jd(bepoch, &djm0, &djm); + w = (iauEpj(djm0,djm)-2000.0) / PMF; + iauPvu(w, pv, pv); + +/* Revert to spherical coordinates. */ + iauC2s(pv[0], &w, d2000); + *r2000 = iauAnp(w); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk524.c b/20200721/c/src/fk524.c new file mode 100644 index 0000000..7def34d --- /dev/null +++ b/20200721/c/src/fk524.c @@ -0,0 +1,333 @@ +#include "sofa.h" + +void iauFk524(double r2000, double d2000, + double dr2000, double dd2000, + double p2000, double v2000, + double *r1950, double *d1950, + double *dr1950, double *dd1950, + double *p1950, double *v1950) +/* +** - - - - - - - - - +** i a u F k 5 2 4 +** - - - - - - - - - +** +** Convert J2000.0 FK5 star catalog data to B1950.0 FK4. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: (all J2000.0, FK5) +** r2000,d2000 double J2000.0 RA,Dec (rad) +** dr2000,dd2000 double J2000.0 proper motions (rad/Jul.yr) +** p2000 double parallax (arcsec) +** v2000 double radial velocity (km/s, +ve = moving away) +** +** Returned: (all B1950.0, FK4) +** r1950,d1950 double B1950.0 RA,Dec (rad) +** dr1950,dd1950 double B1950.0 proper motions (rad/trop.yr) +** p1950 double parallax (arcsec) +** v1950 double radial velocity (km/s, +ve = moving away) +** +** Notes: +** +** 1) The proper motions in RA are dRA/dt rather than cos(Dec)*dRA/dt, +** and are per year rather than per century. +** +** 2) The conversion is somewhat complicated, for several reasons: +** +** . Change of standard epoch from J2000.0 to B1950.0. +** +** . An intermediate transition date of 1984 January 1.0 TT. +** +** . A change of precession model. +** +** . Change of time unit for proper motion (Julian to tropical). +** +** . FK4 positions include the E-terms of aberration, to simplify +** the hand computation of annual aberration. FK5 positions +** assume a rigorous aberration computation based on the Earth's +** barycentric velocity. +** +** . The E-terms also affect proper motions, and in particular cause +** objects at large distances to exhibit fictitious proper +** motions. +** +** The algorithm is based on Smith et al. (1989) and Yallop et al. +** (1989), which presented a matrix method due to Standish (1982) as +** developed by Aoki et al. (1983), using Kinoshita's development of +** Andoyer's post-Newcomb precession. The numerical constants from +** Seidelmann (1992) are used canonically. +** +** 4) In the FK4 catalog the proper motions of stars within 10 degrees +** of the poles do not embody differential E-terms effects and +** should, strictly speaking, be handled in a different manner from +** stars outside these regions. However, given the general lack of +** homogeneity of the star data available for routine astrometry, +** the difficulties of handling positions that may have been +** determined from astrometric fields spanning the polar and non- +** polar regions, the likelihood that the differential E-terms +** effect was not taken into account when allowing for proper motion +** in past astrometry, and the undesirability of a discontinuity in +** the algorithm, the decision has been made in this SOFA algorithm +** to include the effects of differential E-terms on the proper +** motions for all stars, whether polar or not. At epoch J2000.0, +** and measuring "on the sky" rather than in terms of RA change, the +** errors resulting from this simplification are less than +** 1 milliarcsecond in position and 1 milliarcsecond per century in +** proper motion. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauPdp scalar product of two p-vectors +** iauPm modulus of p-vector +** iauPmp p-vector minus p-vector +** iauPpp p-vector pluus p-vector +** iauPv2s pv-vector to spherical coordinates +** iauS2pv spherical coordinates to pv-vector +** iauSxp multiply p-vector by scalar +** +** References: +** +** Aoki, S. et al., 1983, "Conversion matrix of epoch B1950.0 +** FK4-based positions of stars to epoch J2000.0 positions in +** accordance with the new IAU resolutions". Astron.Astrophys. +** 128, 263-267. +** +** Seidelmann, P.K. (ed), 1992, "Explanatory Supplement to the +** Astronomical Almanac", ISBN 0-935702-68-7. +** +** Smith, C.A. et al., 1989, "The transformation of astrometric +** catalog systems to the equinox J2000.0". Astron.J. 97, 265. +** +** Standish, E.M., 1982, "Conversion of positions and proper motions +** from B1950.0 to the IAU system at J2000.0". Astron.Astrophys., +** 115, 1, 20-22. +** +** Yallop, B.D. et al., 1989, "Transformation of mean star places +** from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space". +** Astron.J. 97, 274. +** +** This revision: 2019 October 3 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Radians per year to arcsec per century */ + const double PMF = 100.0*DR2AS; + +/* Small number to avoid arithmetic problems */ + const double TINY = 1e-30; + +/* Miscellaneous */ + double r, d, ur, ud, px, rv, pxvf, w, rd; + int i, j, k, l; + +/* Vectors, p and pv */ + double r0[2][3], r1[2][3], p1[3], p2[3], pv[2][3]; + +/* +** CANONICAL CONSTANTS (Seidelmann 1992) +*/ + +/* Km per sec to AU per tropical century */ +/* = 86400 * 36524.2198782 / 149597870.7 */ + const double VF = 21.095; + +/* Constant pv-vector (cf. Seidelmann 3.591-2, vectors A and Adot) */ + static double a[2][3] = { + { -1.62557e-6, -0.31919e-6, -0.13843e-6 }, + { +1.245e-3, -1.580e-3, -0.659e-3 } + }; + +/* 3x2 matrix of pv-vectors (cf. Seidelmann 3.592-1, matrix M^-1) */ + static double em[2][3][2][3] = { + + { { { +0.9999256795, +0.0111814828, +0.0048590039, }, + { -0.00000242389840, -0.00000002710544, -0.00000001177742 } }, + + { { -0.0111814828, +0.9999374849, -0.0000271771, }, + { +0.00000002710544, -0.00000242392702, +0.00000000006585 } }, + + { { -0.0048590040, -0.0000271557, +0.9999881946, }, + { +0.00000001177742, +0.00000000006585, -0.00000242404995 } } }, + + { { { -0.000551, +0.238509, -0.435614, }, + { +0.99990432, +0.01118145, +0.00485852 } }, + + { { -0.238560, -0.002667, +0.012254, }, + { -0.01118145, +0.99991613, -0.00002717 } }, + + { { +0.435730, -0.008541, +0.002117, }, + { -0.00485852, -0.00002716, +0.99996684 } } } + + }; + +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/* The FK5 data (units radians and arcsec per Julian century). */ + r = r2000; + d = d2000; + ur = dr2000*PMF; + ud = dd2000*PMF; + px = p2000; + rv = v2000; + +/* Express as a pv-vector. */ + pxvf = px * VF; + w = rv * pxvf; + iauS2pv(r, d, 1.0, ur, ud, w, r0); + +/* Convert pv-vector to Bessel-Newcomb system (cf. Seidelmann 3.592-1). */ + for ( i = 0; i < 2; i++ ) { + for ( j = 0; j < 3; j++ ) { + w = 0.0; + for ( k = 0; k < 2; k++ ) { + for ( l = 0; l < 3; l++ ) { + w += em[i][j][k][l] * r0[k][l]; + } + } + r1[i][j] = w; + } + } + +/* Apply E-terms (equivalent to Seidelmann 3.592-3, one iteration). */ + +/* Direction. */ + w = iauPm(r1[0]); + iauSxp(iauPdp(r1[0],a[0]), r1[0], p1); + iauSxp(w, a[0], p2); + iauPmp(p2, p1, p1); + iauPpp(r1[0], p1, p1); + +/* Recompute length. */ + w = iauPm(p1); + +/* Direction. */ + iauSxp(iauPdp(r1[0],a[0]), r1[0], p1); + iauSxp(w, a[0], p2); + iauPmp(p2, p1, p1); + iauPpp(r1[0], p1, pv[0]); + +/* Derivative. */ + iauSxp(iauPdp(r1[0],a[1]), pv[0], p1); + iauSxp(w, a[1], p2); + iauPmp(p2, p1, p1); + iauPpp(r1[1], p1, pv[1]); + +/* Revert to catalog form. */ + iauPv2s(pv, &r, &d, &w, &ur, &ud, &rd); + if ( px > TINY ) { + rv = rd/pxvf; + px = px/w; + } + +/* Return the results. */ + *r1950 = iauAnp(r); + *d1950 = d; + *dr1950 = ur/PMF; + *dd1950 = ud/PMF; + *p1950 = px; + *v1950 = rv; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk52h.c b/20200721/c/src/fk52h.c new file mode 100644 index 0000000..40b6ee4 --- /dev/null +++ b/20200721/c/src/fk52h.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +void iauFk52h(double r5, double d5, + double dr5, double dd5, double px5, double rv5, + double *rh, double *dh, + double *drh, double *ddh, double *pxh, double *rvh) +/* +** - - - - - - - - - +** i a u F k 5 2 h +** - - - - - - - - - +** +** Transform FK5 (J2000.0) star data into the Hipparcos system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (all FK5, equinox J2000.0, epoch J2000.0): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double proper motion in RA (dRA/dt, rad/Jyear) +** dd5 double proper motion in Dec (dDec/dt, rad/Jyear) +** px5 double parallax (arcsec) +** rv5 double radial velocity (km/s, positive = receding) +** +** Returned (all Hipparcos, epoch J2000.0): +** rh double RA (radians) +** dh double Dec (radians) +** drh double proper motion in RA (dRA/dt, rad/Jyear) +** ddh double proper motion in Dec (dDec/dt, rad/Jyear) +** pxh double parallax (arcsec) +** rvh double radial velocity (km/s, positive = receding) +** +** Notes: +** +** 1) This function transforms FK5 star positions and proper motions +** into the system of the Hipparcos catalog. +** +** 2) The proper motions in RA are dRA/dt rather than +** cos(Dec)*dRA/dt, and are per year rather than per century. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalog are not +** taken into account. +** +** 4) See also iauH2fk5, iauFk5hz, iauHfk5z. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRxp product of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPpp p-vector plus p-vector +** iauPvstar space motion pv-vector to star catalog data +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +** This revision: 2017 October 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double pv5[2][3], r5h[3][3], s5h[3], wxp[3], vv[3], pvh[2][3]; + + +/* FK5 barycentric position/velocity pv-vector (normalized). */ + iauStarpv(r5, d5, dr5, dd5, px5, rv5, pv5); + +/* FK5 to Hipparcos orientation matrix and spin vector. */ + iauFk5hip(r5h, s5h); + +/* Make spin units per day instead of per year. */ + for ( i = 0; i < 3; s5h[i++] /= 365.25 ); + +/* Orient the FK5 position into the Hipparcos system. */ + iauRxp(r5h, pv5[0], pvh[0]); + +/* Apply spin to the position giving an extra space motion component. */ + iauPxp(pv5[0], s5h, wxp); + +/* Add this component to the FK5 space motion. */ + iauPpp(wxp, pv5[1], vv); + +/* Orient the FK5 space motion into the Hipparcos system. */ + iauRxp(r5h, vv, pvh[1]); + +/* Hipparcos pv-vector to spherical. */ + iauPvstar(pvh, rh, dh, drh, ddh, pxh, rvh); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk54z.c b/20200721/c/src/fk54z.c new file mode 100644 index 0000000..a24f294 --- /dev/null +++ b/20200721/c/src/fk54z.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +void iauFk54z(double r2000, double d2000, double bepoch, + double *r1950, double *d1950, + double *dr1950, double *dd1950) +/* +** - - - - - - - - - +** i a u F k 5 4 z +** - - - - - - - - - +** +** Convert a J2000.0 FK5 star position to B1950.0 FK4, assuming zero +** proper motion in FK5 and parallax. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** r2000,d2000 double J2000.0 FK5 RA,Dec (rad) +** bepoch double Besselian epoch (e.g. 1950.0) +** +** Returned: +** r1950,d1950 double B1950.0 FK4 RA,Dec (rad) at epoch BEPOCH +** dr1950,dd1950 double B1950.0 FK4 proper motions (rad/trop.yr) +** +** Notes: +** +** 1) In contrast to the iauFk524 routine, here the FK5 proper +** motions, the parallax and the radial velocity are presumed zero. +** +** 2) This function converts a star position from the IAU 1976 FK5 +** (Fricke) system to the former FK4 (Bessel-Newcomb) system, for +** cases such as distant radio sources where it is presumed there is +** zero parallax and no proper motion. Because of the E-terms of +** aberration, such objects have (in general) non-zero proper motion +** in FK4, and the present routine returns those fictitious proper +** motions. +** +** 3) Conversion from B1950.0 FK4 to J2000.0 FK5 only is provided for. +** Conversions involving other equinoxes would require additional +** treatment for precession. +** +** 4) The position returned by this routine is in the B1950.0 FK4 +** reference system but at Besselian epoch BEPOCH. For comparison +** with catalogs the BEPOCH argument will frequently be 1950.0. (In +** this context the distinction between Besselian and Julian epoch +** is insignificant.) +** +** 5) The RA component of the returned (fictitious) proper motion is +** dRA/dt rather than cos(Dec)*dRA/dt. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauC2s p-vector to spherical +** iauFk524 FK4 to FK5 +** iauS2c spherical to p-vector +** +** This revision: 2018 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r, d, pr, pd, px, rv, p[3], w, v[3]; + int i; + + +/* FK5 equinox J2000.0 to FK4 equinox B1950.0. */ + iauFk524(r2000, d2000, 0.0, 0.0, 0.0, 0.0, + &r, &d, &pr, &pd, &px, &rv); + +/* Spherical to Cartesian. */ + iauS2c(r, d, p); + +/* Fictitious proper motion (radians per year). */ + v[0] = - pr*p[1] - pd*cos(r)*sin(d); + v[1] = pr*p[0] - pd*sin(r)*sin(d); + v[2] = pd*cos(d); + +/* Apply the motion. */ + w = bepoch - 1950.0; + for ( i = 0; i < 3; i++ ) { + p[i] += w*v[i]; + } + +/* Cartesian to spherical. */ + iauC2s(p, &w, d1950); + *r1950 = iauAnp(w); + +/* Fictitious proper motion. */ + *dr1950 = pr; + *dd1950 = pd; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk5hip.c b/20200721/c/src/fk5hip.c new file mode 100644 index 0000000..387e1cc --- /dev/null +++ b/20200721/c/src/fk5hip.c @@ -0,0 +1,176 @@ +#include "sofa.h" + +void iauFk5hip(double r5h[3][3], double s5h[3]) +/* +** - - - - - - - - - - +** i a u F k 5 h i p +** - - - - - - - - - - +** +** FK5 to Hipparcos rotation and spin. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Returned: +** r5h double[3][3] r-matrix: FK5 rotation wrt Hipparcos (Note 2) +** s5h double[3] r-vector: FK5 spin wrt Hipparcos (Note 3) +** +** Notes: +** +** 1) This function models the FK5 to Hipparcos transformation as a +** pure rotation and spin; zonal errors in the FK5 catalogue are +** not taken into account. +** +** 2) The r-matrix r5h operates in the sense: +** +** P_Hipparcos = r5h x P_FK5 +** +** where P_FK5 is a p-vector in the FK5 frame, and P_Hipparcos is +** the equivalent Hipparcos p-vector. +** +** 3) The r-vector s5h represents the time derivative of the FK5 to +** Hipparcos rotation. The units are radians per year (Julian, +** TDB). +** +** Called: +** iauRv2m r-vector to r-matrix +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +** This revision: 2017 October 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double v[3]; + +/* FK5 wrt Hipparcos orientation and spin (radians, radians/year) */ + double epx, epy, epz; + double omx, omy, omz; + + + epx = -19.9e-3 * DAS2R; + epy = -9.1e-3 * DAS2R; + epz = 22.9e-3 * DAS2R; + + omx = -0.30e-3 * DAS2R; + omy = 0.60e-3 * DAS2R; + omz = 0.70e-3 * DAS2R; + +/* FK5 to Hipparcos orientation expressed as an r-vector. */ + v[0] = epx; + v[1] = epy; + v[2] = epz; + +/* Re-express as an r-matrix. */ + iauRv2m(v, r5h); + +/* Hipparcos wrt FK5 spin expressed as an r-vector. */ + s5h[0] = omx; + s5h[1] = omy; + s5h[2] = omz; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fk5hz.c b/20200721/c/src/fk5hz.c new file mode 100644 index 0000000..87d1cbc --- /dev/null +++ b/20200721/c/src/fk5hz.c @@ -0,0 +1,210 @@ +#include "sofa.h" + +void iauFk5hz(double r5, double d5, double date1, double date2, + double *rh, double *dh) +/* +** - - - - - - - - - +** i a u F k 5 h z +** - - - - - - - - - +** +** Transform an FK5 (J2000.0) star position into the system of the +** Hipparcos catalogue, assuming zero Hipparcos proper motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** r5 double FK5 RA (radians), equinox J2000.0, at date +** d5 double FK5 Dec (radians), equinox J2000.0, at date +** date1,date2 double TDB date (Notes 1,2) +** +** Returned: +** rh double Hipparcos RA (radians) +** dh double Hipparcos Dec (radians) +** +** Notes: +** +** 1) This function converts a star position from the FK5 system to +** the Hipparcos system, in such a way that the Hipparcos proper +** motion is zero. Because such a star has, in general, a non-zero +** proper motion in the FK5 system, the function requires the date +** at which the position in the FK5 system was determined. +** +** 2) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalogue are not +** taken into account. +** +** 4) The position returned by this function is in the Hipparcos +** reference system but at date date1+date2. +** +** 5) See also iauFk52h, iauH2fk5, iauHfk5z. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauSxp multiply p-vector by scalar +** iauRv2m r-vector to r-matrix +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauC2s p-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, p5e[3], r5h[3][3], s5h[3], vst[3], rst[3][3], p5[3], + ph[3], w; + + +/* Interval from given date to fundamental epoch J2000.0 (JY). */ + t = - ((date1 - DJ00) + date2) / DJY; + +/* FK5 barycentric position vector. */ + iauS2c(r5, d5, p5e); + +/* FK5 to Hipparcos orientation matrix and spin vector. */ + iauFk5hip(r5h, s5h); + +/* Accumulated Hipparcos wrt FK5 spin over that interval. */ + iauSxp(t, s5h, vst); + +/* Express the accumulated spin as a rotation matrix. */ + iauRv2m(vst, rst); + +/* Derotate the vector's FK5 axes back to date. */ + iauTrxp(rst, p5e, p5); + +/* Rotate the vector into the Hipparcos system. */ + iauRxp(r5h, p5, ph); + +/* Hipparcos vector to spherical. */ + iauC2s(ph, &w, dh); + *rh = iauAnp(w); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fw2m.c b/20200721/c/src/fw2m.c new file mode 100644 index 0000000..9d4f21e --- /dev/null +++ b/20200721/c/src/fw2m.c @@ -0,0 +1,188 @@ +#include "sofa.h" + +void iauFw2m(double gamb, double phib, double psi, double eps, + double r[3][3]) +/* +** - - - - - - - - +** i a u F w 2 m +** - - - - - - - - +** +** Form rotation matrix given the Fukushima-Williams angles. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psi double F-W angle psi (radians) +** eps double F-W angle epsilon (radians) +** +** Returned: +** r double[3][3] rotation matrix +** +** Notes: +** +** 1) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole, +** E = ecliptic pole of date, +** and P = CIP, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma = epE +** phib = phi = pE +** psi = psi = pEP +** eps = epsilon = EP +** +** 2) The matrix representing the combined effects of frame bias, +** precession and nutation is: +** +** NxPxB = R_1(-eps).R_3(-psi).R_1(phib).R_3(gamb) +** +** 3) The present function can construct three different matrices, +** depending on which angles are supplied as the arguments gamb, +** phib, psi and eps: +** +** o To obtain the nutation x precession x frame bias matrix, +** first generate the four precession angles known conventionally +** as gamma_bar, phi_bar, psi_bar and epsilon_A, then generate +** the nutation components Dpsi and Depsilon and add them to +** psi_bar and epsilon_A, and finally call the present function +** using those four angles as arguments. +** +** o To obtain the precession x frame bias matrix, generate the +** four precession angles and call the present function. +** +** o To obtain the frame bias matrix, generate the four precession +** angles for date J2000.0 and call the present function. +** +** The nutation-only and precession-only matrices can if necessary +** be obtained by combining these three appropriately. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRx rotate around X-axis +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** This revision: 2019 July 26 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Construct the matrix. */ + iauIr(r); + iauRz(gamb, r); + iauRx(phib, r); + iauRz(-psi, r); + iauRx(-eps, r); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/fw2xy.c b/20200721/c/src/fw2xy.c new file mode 100644 index 0000000..c3197d5 --- /dev/null +++ b/20200721/c/src/fw2xy.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +void iauFw2xy(double gamb, double phib, double psi, double eps, + double *x, double *y) +/* +** - - - - - - - - - +** i a u F w 2 x y +** - - - - - - - - - +** +** CIP X,Y given Fukushima-Williams bias-precession-nutation angles. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psi double F-W angle psi (radians) +** eps double F-W angle epsilon (radians) +** +** Returned: +** x,y double CIP unit vector X,Y +** +** Notes: +** +** 1) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole +** E = ecliptic pole of date, +** and P = CIP, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma = epE +** phib = phi = pE +** psi = psi = pEP +** eps = epsilon = EP +** +** 2) The matrix representing the combined effects of frame bias, +** precession and nutation is: +** +** NxPxB = R_1(-epsA).R_3(-psi).R_1(phib).R_3(gamb) +** +** The returned values x,y are elements [2][0] and [2][1] of the +** matrix. Near J2000.0, they are essentially angles in radians. +** +** Called: +** iauFw2m F-W angles to r-matrix +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** This revision: 2013 September 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r[3][3]; + + +/* Form NxPxB matrix. */ + iauFw2m(gamb, phib, psi, eps, r); + +/* Extract CIP X,Y. */ + iauBpn2xy(r, x, y); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/g2icrs.c b/20200721/c/src/g2icrs.c new file mode 100644 index 0000000..40e6cea --- /dev/null +++ b/20200721/c/src/g2icrs.c @@ -0,0 +1,211 @@ +#include "sofa.h" + +void iauG2icrs ( double dl, double db, double *dr, double *dd ) +/* +** - - - - - - - - - - +** i a u G 2 i c r s +** - - - - - - - - - - +** +** Transformation from Galactic Coordinates to ICRS. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dl double galactic longitude (radians) +** db double galactic latitude (radians) +** +** Returned: +** dr double ICRS right ascension (radians) +** dd double ICRS declination (radians) +** +** Notes: +** +** 1) The IAU 1958 system of Galactic coordinates was defined with +** respect to the now obsolete reference system FK4 B1950.0. When +** interpreting the system in a modern context, several factors have +** to be taken into account: +** +** . The inclusion in FK4 positions of the E-terms of aberration. +** +** . The distortion of the FK4 proper motion system by differential +** Galactic rotation. +** +** . The use of the B1950.0 equinox rather than the now-standard +** J2000.0. +** +** . The frame bias between ICRS and the J2000.0 mean place system. +** +** The Hipparcos Catalogue (Perryman & ESA 1997) provides a rotation +** matrix that transforms directly between ICRS and Galactic +** coordinates with the above factors taken into account. The +** matrix is derived from three angles, namely the ICRS coordinates +** of the Galactic pole and the longitude of the ascending node of +** the galactic equator on the ICRS equator. They are given in +** degrees to five decimal places and for canonical purposes are +** regarded as exact. In the Hipparcos Catalogue the matrix +** elements are given to 10 decimal places (about 20 microarcsec). +** In the present SOFA function the matrix elements have been +** recomputed from the canonical three angles and are given to 30 +** decimal places. +** +** 2) The inverse transformation is performed by the function iauIcrs2g. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** iauS2c spherical coordinates to unit vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s p-vector to spherical +** +** Reference: +** Perryman M.A.C. & ESA, 1997, ESA SP-1200, The Hipparcos and Tycho +** catalogues. Astrometric and photometric star catalogues +** derived from the ESA Hipparcos Space Astrometry Mission. ESA +** Publications Division, Noordwijk, Netherlands. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double v1[3], v2[3]; + +/* +** L2,B2 system of galactic coordinates in the form presented in the +** Hipparcos Catalogue. In degrees: +** +** P = 192.85948 right ascension of the Galactic north pole in ICRS +** Q = 27.12825 declination of the Galactic north pole in ICRS +** R = 32.93192 longitude of the ascending node of the Galactic +** plane on the ICRS equator +** +** ICRS to galactic rotation matrix, obtained by computing +** R_3(-R) R_1(pi/2-Q) R_3(pi/2+P) to the full precision shown: +*/ + double r[3][3] = { { -0.054875560416215368492398900454, + -0.873437090234885048760383168409, + -0.483835015548713226831774175116 }, + { +0.494109427875583673525222371358, + -0.444829629960011178146614061616, + +0.746982244497218890527388004556 }, + { -0.867666149019004701181616534570, + -0.198076373431201528180486091412, + +0.455983776175066922272100478348 } }; + + +/* Spherical to Cartesian. */ + iauS2c(dl, db, v1); + +/* Galactic to ICRS. */ + iauTrxp(r, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, dr, dd); + +/* Express in conventional ranges. */ + *dr = iauAnp(*dr); + *dd = iauAnpm(*dd); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gc2gd.c b/20200721/c/src/gc2gd.c new file mode 100644 index 0000000..3038f33 --- /dev/null +++ b/20200721/c/src/gc2gd.c @@ -0,0 +1,184 @@ +#include "sofa.h" + +int iauGc2gd ( int n, double xyz[3], + double *elong, double *phi, double *height ) +/* +** - - - - - - - - - +** i a u G c 2 g d +** - - - - - - - - - +** +** Transform geocentric coordinates to geodetic using the specified +** reference ellipsoid. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical transformation. +** +** Given: +** n int ellipsoid identifier (Note 1) +** xyz double[3] geocentric vector (Note 2) +** +** Returned: +** elong double longitude (radians, east +ve, Note 3) +** phi double latitude (geodetic, radians, Note 3) +** height double height above ellipsoid (geodetic, Notes 2,3) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** -2 = internal error (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The geocentric vector (xyz, given) and height (height, returned) +** are in meters. +** +** 3) An error status -1 means that the identifier n is illegal. An +** error status -2 is theoretically impossible. In all error cases, +** all three results are set to -1e9. +** +** 4) The inverse transformation is performed in the function iauGd2gc. +** +** Called: +** iauEform Earth reference ellipsoids +** iauGc2gde geocentric to geodetic transformation, general +** +** This revision: 2013 September 1 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + double a, f; + + +/* Obtain reference ellipsoid parameters. */ + j = iauEform ( n, &a, &f ); + +/* If OK, transform x,y,z to longitude, geodetic latitude, height. */ + if ( j == 0 ) { + j = iauGc2gde ( a, f, xyz, elong, phi, height ); + if ( j < 0 ) j = -2; + } + +/* Deal with any errors. */ + if ( j < 0 ) { + *elong = -1e9; + *phi = -1e9; + *height = -1e9; + } + +/* Return the status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gc2gde.c b/20200721/c/src/gc2gde.c new file mode 100644 index 0000000..d14e870 --- /dev/null +++ b/20200721/c/src/gc2gde.c @@ -0,0 +1,249 @@ +#include "sofa.h" + +int iauGc2gde ( double a, double f, double xyz[3], + double *elong, double *phi, double *height ) +/* +** - - - - - - - - - - +** i a u G c 2 g d e +** - - - - - - - - - - +** +** Transform geocentric coordinates to geodetic for a reference +** ellipsoid of specified form. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a double equatorial radius (Notes 2,4) +** f double flattening (Note 3) +** xyz double[3] geocentric vector (Note 4) +** +** Returned: +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians) +** height double height above ellipsoid (geodetic, Note 4) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal f +** -2 = illegal a +** +** Notes: +** +** 1) This function is based on the GCONV2H Fortran subroutine by +** Toshio Fukushima (see reference). +** +** 2) The equatorial radius, a, can be in any units, but meters is +** the conventional choice. +** +** 3) The flattening, f, is (for the Earth) a value around 0.00335, +** i.e. around 1/298. +** +** 4) The equatorial radius, a, and the geocentric vector, xyz, +** must be given in the same units, and determine the units of +** the returned height, height. +** +** 5) If an error occurs (status < 0), elong, phi and height are +** unchanged. +** +** 6) The inverse transformation is performed in the function +** iauGd2gce. +** +** 7) The transformation for a standard ellipsoid (such as WGS84) can +** more conveniently be performed by calling iauGc2gd, which uses a +** numerical code to identify the required A and F values. +** +** Reference: +** +** Fukushima, T., "Transformation from Cartesian to geodetic +** coordinates accelerated by Halley's method", J.Geodesy (2006) +** 79: 689-693 +** +** This revision: 2014 November 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double aeps2, e2, e4t, ec2, ec, b, x, y, z, p2, absz, p, s0, pn, zc, + c0, c02, c03, s02, s03, a02, a0, a03, d0, f0, b0, s1, + cc, s12, cc2; + + +/* ------------- */ +/* Preliminaries */ +/* ------------- */ + +/* Validate ellipsoid parameters. */ + if ( f < 0.0 || f >= 1.0 ) return -1; + if ( a <= 0.0 ) return -2; + +/* Functions of ellipsoid parameters (with further validation of f). */ + aeps2 = a*a * 1e-32; + e2 = (2.0 - f) * f; + e4t = e2*e2 * 1.5; + ec2 = 1.0 - e2; + if ( ec2 <= 0.0 ) return -1; + ec = sqrt(ec2); + b = a * ec; + +/* Cartesian components. */ + x = xyz[0]; + y = xyz[1]; + z = xyz[2]; + +/* Distance from polar axis squared. */ + p2 = x*x + y*y; + +/* Longitude. */ + *elong = p2 > 0.0 ? atan2(y, x) : 0.0; + +/* Unsigned z-coordinate. */ + absz = fabs(z); + +/* Proceed unless polar case. */ + if ( p2 > aeps2 ) { + + /* Distance from polar axis. */ + p = sqrt(p2); + + /* Normalization. */ + s0 = absz / a; + pn = p / a; + zc = ec * s0; + + /* Prepare Newton correction factors. */ + c0 = ec * pn; + c02 = c0 * c0; + c03 = c02 * c0; + s02 = s0 * s0; + s03 = s02 * s0; + a02 = c02 + s02; + a0 = sqrt(a02); + a03 = a02 * a0; + d0 = zc*a03 + e2*s03; + f0 = pn*a03 - e2*c03; + + /* Prepare Halley correction factor. */ + b0 = e4t * s02 * c02 * pn * (a0 - ec); + s1 = d0*f0 - b0*s0; + cc = ec * (f0*f0 - b0*c0); + + /* Evaluate latitude and height. */ + *phi = atan(s1/cc); + s12 = s1 * s1; + cc2 = cc * cc; + *height = (p*cc + absz*s1 - a * sqrt(ec2*s12 + cc2)) / + sqrt(s12 + cc2); + } else { + + /* Exception: pole. */ + *phi = DPI / 2.0; + *height = absz - b; + } + +/* Restore sign of latitude. */ + if ( z < 0 ) *phi = -*phi; + +/* OK status. */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gd2gc.c b/20200721/c/src/gd2gc.c new file mode 100644 index 0000000..8ae7c3d --- /dev/null +++ b/20200721/c/src/gd2gc.c @@ -0,0 +1,183 @@ +#include "sofa.h" + +int iauGd2gc ( int n, double elong, double phi, double height, + double xyz[3] ) +/* +** - - - - - - - - - +** i a u G d 2 g c +** - - - - - - - - - +** +** Transform geodetic coordinates to geocentric using the specified +** reference ellipsoid. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical transformation. +** +** Given: +** n int ellipsoid identifier (Note 1) +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians, Note 3) +** height double height above ellipsoid (geodetic, Notes 2,3) +** +** Returned: +** xyz double[3] geocentric vector (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal identifier (Note 3) +** -2 = illegal case (Note 3) +** +** Notes: +** +** 1) The identifier n is a number that specifies the choice of +** reference ellipsoid. The following are supported: +** +** n ellipsoid +** +** 1 WGS84 +** 2 GRS80 +** 3 WGS72 +** +** The n value has no significance outside the SOFA software. For +** convenience, symbols WGS84 etc. are defined in sofam.h. +** +** 2) The height (height, given) and the geocentric vector (xyz, +** returned) are in meters. +** +** 3) No validation is performed on the arguments elong, phi and +** height. An error status -1 means that the identifier n is +** illegal. An error status -2 protects against cases that would +** lead to arithmetic exceptions. In all error cases, xyz is set +** to zeros. +** +** 4) The inverse transformation is performed in the function iauGc2gd. +** +** Called: +** iauEform Earth reference ellipsoids +** iauGd2gce geodetic to geocentric transformation, general +** iauZp zero p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j; + double a, f; + + +/* Obtain reference ellipsoid parameters. */ + j = iauEform ( n, &a, &f ); + +/* If OK, transform longitude, geodetic latitude, height to x,y,z. */ + if ( j == 0 ) { + j = iauGd2gce ( a, f, elong, phi, height, xyz ); + if ( j != 0 ) j = -2; + } + +/* Deal with any errors. */ + if ( j != 0 ) iauZp ( xyz ); + +/* Return the status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gd2gce.c b/20200721/c/src/gd2gce.c new file mode 100644 index 0000000..a3fd6f0 --- /dev/null +++ b/20200721/c/src/gd2gce.c @@ -0,0 +1,187 @@ +#include "sofa.h" + +int iauGd2gce ( double a, double f, double elong, double phi, + double height, double xyz[3] ) +/* +** - - - - - - - - - - +** i a u G d 2 g c e +** - - - - - - - - - - +** +** Transform geodetic coordinates to geocentric for a reference +** ellipsoid of specified form. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a double equatorial radius (Notes 1,4) +** f double flattening (Notes 2,4) +** elong double longitude (radians, east +ve) +** phi double latitude (geodetic, radians, Note 4) +** height double height above ellipsoid (geodetic, Notes 3,4) +** +** Returned: +** xyz double[3] geocentric vector (Note 3) +** +** Returned (function value): +** int status: 0 = OK +** -1 = illegal case (Note 4) +** Notes: +** +** 1) The equatorial radius, a, can be in any units, but meters is +** the conventional choice. +** +** 2) The flattening, f, is (for the Earth) a value around 0.00335, +** i.e. around 1/298. +** +** 3) The equatorial radius, a, and the height, height, must be +** given in the same units, and determine the units of the +** returned geocentric vector, xyz. +** +** 4) No validation is performed on individual arguments. The error +** status -1 protects against (unrealistic) cases that would lead +** to arithmetic exceptions. If an error occurs, xyz is unchanged. +** +** 5) The inverse transformation is performed in the function +** iauGc2gde. +** +** 6) The transformation for a standard ellipsoid (such as WGS84) can +** more conveniently be performed by calling iauGd2gc, which uses a +** numerical code to identify the required a and f values. +** +** References: +** +** Green, R.M., Spherical Astronomy, Cambridge University Press, +** (1985) Section 4.5, p96. +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 4.22, p202. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sp, cp, w, d, ac, as, r; + + +/* Functions of geodetic latitude. */ + sp = sin(phi); + cp = cos(phi); + w = 1.0 - f; + w = w * w; + d = cp*cp + w*sp*sp; + if ( d <= 0.0 ) return -1; + ac = a / sqrt(d); + as = w * ac; + +/* Geocentric vector. */ + r = (ac + height) * cp; + xyz[0] = r * cos(elong); + xyz[1] = r * sin(elong); + xyz[2] = (as + height) * sp; + +/* Success. */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gmst00.c b/20200721/c/src/gmst00.c new file mode 100644 index 0000000..b184fa3 --- /dev/null +++ b/20200721/c/src/gmst00.c @@ -0,0 +1,195 @@ +#include "sofa.h" + +double iauGmst00(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G m s t 0 0 +** - - - - - - - - - - +** +** Greenwich mean sidereal time (model consistent with IAU 2000 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession. If UT1 is used for +** both purposes, errors of order 100 microarcseconds result. +** +** 3) This GMST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation and equation of the +** equinoxes. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauEra00 Earth rotation angle, IAU 2000 +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, gmst; + + +/* TT Julian centuries since J2000.0. */ + t = ((tta - DJ00) + ttb) / DJC; + +/* Greenwich Mean Sidereal Time, IAU 2000. */ + gmst = iauAnp(iauEra00(uta, utb) + + ( 0.014506 + + ( 4612.15739966 + + ( 1.39667721 + + ( -0.00009344 + + ( 0.00001882 ) + * t) * t) * t) * t) * DAS2R); + + return gmst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gmst06.c b/20200721/c/src/gmst06.c new file mode 100644 index 0000000..6d7471c --- /dev/null +++ b/20200721/c/src/gmst06.c @@ -0,0 +1,186 @@ +#include "sofa.h" + +double iauGmst06(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G m s t 0 6 +** - - - - - - - - - - +** +** Greenwich mean sidereal time (consistent with IAU 2006 precession). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession. If UT1 is used for +** both purposes, errors of order 100 microarcseconds result. +** +** 3) This GMST is compatible with the IAU 2006 precession and must not +** be used with other precession models. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauEra00 Earth rotation angle, IAU 2000 +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2005, +** Astron.Astrophys. 432, 355 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, gmst; + + +/* TT Julian centuries since J2000.0. */ + t = ((tta - DJ00) + ttb) / DJC; + +/* Greenwich mean sidereal time, IAU 2006. */ + gmst = iauAnp(iauEra00(uta, utb) + + ( 0.014506 + + ( 4612.156534 + + ( 1.3915817 + + ( -0.00000044 + + ( -0.000029956 + + ( -0.0000000368 ) + * t) * t) * t) * t) * t) * DAS2R); + + return gmst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gmst82.c b/20200721/c/src/gmst82.c new file mode 100644 index 0000000..81806a7 --- /dev/null +++ b/20200721/c/src/gmst82.c @@ -0,0 +1,200 @@ +#include "sofa.h" + +double iauGmst82(double dj1, double dj2) +/* +** - - - - - - - - - - +** i a u G m s t 8 2 +** - - - - - - - - - - +** +** Universal Time to Greenwich mean sidereal time (IAU 1982 model). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** dj1,dj2 double UT1 Julian Date (see note) +** +** Returned (function value): +** double Greenwich mean sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any +** convenient way between the arguments dj1 and dj2. For example, +** JD(UT1)=2450123.7 could be expressed in any of these ways, +** among others: +** +** dj1 dj2 +** +** 2450123.7 0 (JD method) +** 2451545 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. The date & time method is +** best matched to the algorithm used: maximum accuracy (or, at +** least, minimum noise) is delivered when the dj1 argument is for +** 0hrs UT1 on the day in question and the dj2 argument lies in the +** range 0 to 1, or vice versa. +** +** 2) The algorithm is based on the IAU 1982 expression. This is +** always described as giving the GMST at 0 hours UT1. In fact, it +** gives the difference between the GMST and the UT, the steady +** 4-minutes-per-day drawing-ahead of ST with respect to UT. When +** whole days are ignored, the expression happens to equal the GMST +** at 0 hours UT1 each day. +** +** 3) In this function, the entire UT1 (the sum of the two arguments +** dj1 and dj2) is used directly as the argument for the standard +** formula, the constant term of which is adjusted by 12 hours to +** take account of the noon phasing of Julian Date. The UT1 is then +** added, but omitting whole days to conserve accuracy. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Transactions of the International Astronomical Union, +** XVIII B, 67 (1983). +** +** Aoki et al., Astron.Astrophys., 105, 359-361 (1982). +** +** This revision: 2020 January 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Coefficients of IAU 1982 GMST-UT1 model */ + double A = 24110.54841 - DAYSEC / 2.0; + double B = 8640184.812866; + double C = 0.093104; + double D = -6.2e-6; + +/* The first constant, A, has to be adjusted by 12 hours because the */ +/* UT1 is supplied as a Julian date, which begins at noon. */ + + double d1, d2, t, f, gmst; + + +/* Julian centuries since fundamental epoch. */ + if (dj1 < dj2) { + d1 = dj1; + d2 = dj2; + } else { + d1 = dj2; + d2 = dj1; + } + t = (d1 + (d2 - DJ00)) / DJC; + +/* Fractional part of JD(UT1), in seconds. */ + f = DAYSEC * (fmod(d1, 1.0) + fmod(d2, 1.0)); + +/* GMST at this UT1. */ + gmst = iauAnp(DS2R * ((A + (B + (C + D * t) * t) * t) + f)); + + return gmst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gst00a.c b/20200721/c/src/gst00a.c new file mode 100644 index 0000000..1089384 --- /dev/null +++ b/20200721/c/src/gst00a.c @@ -0,0 +1,188 @@ +#include "sofa.h" + +double iauGst00a(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G s t 0 0 a +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) This GAST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauEe00a equation of the equinoxes, IAU 2000A +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gmst00, ee00a, gst; + + + gmst00 = iauGmst00(uta, utb, tta, ttb); + ee00a = iauEe00a(tta, ttb); + gst = iauAnp(gmst00 + ee00a); + + return gst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gst00b.c b/20200721/c/src/gst00b.c new file mode 100644 index 0000000..604ea36 --- /dev/null +++ b/20200721/c/src/gst00b.c @@ -0,0 +1,196 @@ +#include "sofa.h" + +double iauGst00b(double uta, double utb) +/* +** - - - - - - - - - - +** i a u G s t 0 0 b +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 +** resolutions but using the truncated nutation model IAU 2000B). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date uta+utb is a Julian Date, apportioned in any +** convenient way between the argument pair. For example, +** JD=2450123.7 could be expressed in any of these ways, among +** others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The result is compatible with the IAU 2000 resolutions, except +** that accuracy has been compromised for the sake of speed and +** convenience in two respects: +** +** . UT is used instead of TDB (or TT) to compute the precession +** component of GMST and the equation of the equinoxes. This +** results in errors of order 0.1 mas at present. +** +** . The IAU 2000B abridged nutation model (McCarthy & Luzum, 2001) +** is used, introducing errors of up to 1 mas. +** +** 3) This GAST is compatible with the IAU 2000 resolutions and must be +** used only in conjunction with other IAU 2000 compatible +** components such as precession-nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** 5) The algorithm is from Capitaine et al. (2003) and IERS +** Conventions 2003. +** +** Called: +** iauGmst00 Greenwich mean sidereal time, IAU 2000 +** iauEe00b equation of the equinoxes, IAU 2000B +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to +** implement the IAU 2000 definition of UT1", Astronomy & +** Astrophysics, 406, 1135-1149 (2003) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Celestial Mechanics & +** Dynamical Astronomy, 85, 37-49 (2003) +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gmst00, ee00b, gst; + + + gmst00 = iauGmst00(uta, utb, uta, utb); + ee00b = iauEe00b(uta, utb); + gst = iauAnp(gmst00 + ee00b); + + return gst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gst06.c b/20200721/c/src/gst06.c new file mode 100644 index 0000000..27a7098 --- /dev/null +++ b/20200721/c/src/gst06.c @@ -0,0 +1,190 @@ +#include "sofa.h" + +double iauGst06(double uta, double utb, double tta, double ttb, + double rnpb[3][3]) +/* +** - - - - - - - - - +** i a u G s t 0 6 +** - - - - - - - - - +** +** Greenwich apparent sidereal time, IAU 2006, given the NPB matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** rnpb double[3][3] nutation x precession x bias matrix +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) Although the function uses the IAU 2006 series for s+XY/2, it is +** otherwise independent of the precession-nutation model and can in +** practice be used with any equinox-based NPB matrix. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** iauAnp normalize angle into range 0 to 2pi +** iauEra00 Earth rotation angle, IAU 2000 +** iauEors equation of the origins, given NPB matrix and s +** +** Reference: +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, s, era, eors, gst; + + +/* Extract CIP coordinates. */ + iauBpn2xy(rnpb, &x, &y); + +/* The CIO locator, s. */ + s = iauS06(tta, ttb, x, y); + +/* Greenwich apparent sidereal time. */ + era = iauEra00(uta, utb); + eors = iauEors(rnpb, s); + gst = iauAnp(era - eors); + + return gst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gst06a.c b/20200721/c/src/gst06a.c new file mode 100644 index 0000000..0e6bdf7 --- /dev/null +++ b/20200721/c/src/gst06a.c @@ -0,0 +1,181 @@ +#include "sofa.h" + +double iauGst06a(double uta, double utb, double tta, double ttb) +/* +** - - - - - - - - - - +** i a u G s t 0 6 a +** - - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 2000 and 2006 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** tta,ttb double TT as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both +** Julian Dates, apportioned in any convenient way between the +** argument pairs. For example, JD=2450123.7 could be expressed in +** any of these ways, among others: +** +** Part A Part B +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable (in the case of UT; the TT is not at all critical +** in this respect). The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** rotation angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) Both UT1 and TT are required, UT1 to predict the Earth rotation +** and TT to predict the effects of precession-nutation. If UT1 is +** used for both purposes, errors of order 100 microarcseconds +** result. +** +** 3) This GAST is compatible with the IAU 2000/2006 resolutions and +** must be used only in conjunction with IAU 2006 precession and +** IAU 2000A nutation. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauGst06 Greenwich apparent ST, IAU 2006, given NPB matrix +** +** Reference: +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rnpb[3][3], gst; + + +/* Classical nutation x precession x bias matrix, IAU 2000A. */ + iauPnm06a(tta, ttb, rnpb); + +/* Greenwich apparent sidereal time. */ + gst = iauGst06(uta, utb, tta, ttb, rnpb); + + return gst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/gst94.c b/20200721/c/src/gst94.c new file mode 100644 index 0000000..ffb4654 --- /dev/null +++ b/20200721/c/src/gst94.c @@ -0,0 +1,181 @@ +#include "sofa.h" + +double iauGst94(double uta, double utb) +/* +** - - - - - - - - - +** i a u G s t 9 4 +** - - - - - - - - - +** +** Greenwich apparent sidereal time (consistent with IAU 1982/94 +** resolutions). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** uta,utb double UT1 as a 2-part Julian Date (Notes 1,2) +** +** Returned (function value): +** double Greenwich apparent sidereal time (radians) +** +** Notes: +** +** 1) The UT1 date uta+utb is a Julian Date, apportioned in any +** convenient way between the argument pair. For example, +** JD=2450123.7 could be expressed in any of these ways, among +** others: +** +** uta utb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 and MJD methods are good compromises +** between resolution and convenience. For UT, the date & time +** method is best matched to the algorithm that is used by the Earth +** Rotation Angle function, called internally: maximum precision is +** delivered when the uta argument is for 0hrs UT1 on the day in +** question and the utb argument lies in the range 0 to 1, or vice +** versa. +** +** 2) The result is compatible with the IAU 1982 and 1994 resolutions, +** except that accuracy has been compromised for the sake of +** convenience in that UT is used instead of TDB (or TT) to compute +** the equation of the equinoxes. +** +** 3) This GAST must be used only in conjunction with contemporaneous +** IAU standards such as 1976 precession, 1980 obliquity and 1982 +** nutation. It is not compatible with the IAU 2000 resolutions. +** +** 4) The result is returned in the range 0 to 2pi. +** +** Called: +** iauGmst82 Greenwich mean sidereal time, IAU 1982 +** iauEqeq94 equation of the equinoxes, IAU 1994 +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** IAU Resolution C7, Recommendation 3 (1994) +** +** This revision: 2008 May 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gmst82, eqeq94, gst; + + + gmst82 = iauGmst82(uta, utb); + eqeq94 = iauEqeq94(uta, utb); + gst = iauAnp(gmst82 + eqeq94); + + return gst; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/h2fk5.c b/20200721/c/src/h2fk5.c new file mode 100644 index 0000000..7824d80 --- /dev/null +++ b/20200721/c/src/h2fk5.c @@ -0,0 +1,198 @@ +#include "sofa.h" + +void iauH2fk5(double rh, double dh, + double drh, double ddh, double pxh, double rvh, + double *r5, double *d5, + double *dr5, double *dd5, double *px5, double *rv5) +/* +** - - - - - - - - - +** i a u H 2 f k 5 +** - - - - - - - - - +** +** Transform Hipparcos star data into the FK5 (J2000.0) system. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (all Hipparcos, epoch J2000.0): +** rh double RA (radians) +** dh double Dec (radians) +** drh double proper motion in RA (dRA/dt, rad/Jyear) +** ddh double proper motion in Dec (dDec/dt, rad/Jyear) +** pxh double parallax (arcsec) +** rvh double radial velocity (km/s, positive = receding) +** +** Returned (all FK5, equinox J2000.0, epoch J2000.0): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double proper motion in RA (dRA/dt, rad/Jyear) +** dd5 double proper motion in Dec (dDec/dt, rad/Jyear) +** px5 double parallax (arcsec) +** rv5 double radial velocity (km/s, positive = receding) +** +** Notes: +** +** 1) This function transforms Hipparcos star positions and proper +** motions into FK5 J2000.0. +** +** 2) The proper motions in RA are dRA/dt rather than +** cos(Dec)*dRA/dt, and are per year rather than per century. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure +** rotation and spin; zonal errors in the FK5 catalog are not +** taken into account. +** +** 4) See also iauFk52h, iauFk5hz, iauHfk5z. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRv2m r-vector to r-matrix +** iauRxp product of r-matrix and p-vector +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPvstar space motion pv-vector to star catalog data +** +** Reference: +** +** F.Mignard & M.Froeschle, Astron.Astrophys., 354, 732-739 (2000). +** +** This revision: 2017 October 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double pvh[2][3], r5h[3][3], s5h[3], sh[3], wxp[3], vv[3], pv5[2][3]; + + +/* Hipparcos barycentric position/velocity pv-vector (normalized). */ + iauStarpv(rh, dh, drh, ddh, pxh, rvh, pvh); + +/* FK5 to Hipparcos orientation matrix and spin vector. */ + iauFk5hip(r5h, s5h); + +/* Make spin units per day instead of per year. */ + for ( i = 0; i < 3; s5h[i++] /= 365.25 ); + +/* Orient the spin into the Hipparcos system. */ + iauRxp(r5h, s5h, sh); + +/* De-orient the Hipparcos position into the FK5 system. */ + iauTrxp(r5h, pvh[0], pv5[0]); + +/* Apply spin to the position giving an extra space motion component. */ + iauPxp(pvh[0], sh, wxp); + +/* Subtract this component from the Hipparcos space motion. */ + iauPmp(pvh[1], wxp, vv); + +/* De-orient the Hipparcos space motion into the FK5 system. */ + iauTrxp(r5h, vv, pv5[1]); + +/* FK5 pv-vector to spherical. */ + iauPvstar(pv5, r5, d5, dr5, dd5, px5, rv5); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/hd2ae.c b/20200721/c/src/hd2ae.c new file mode 100644 index 0000000..533e762 --- /dev/null +++ b/20200721/c/src/hd2ae.c @@ -0,0 +1,190 @@ +#include "sofa.h" + +void iauHd2ae (double ha, double dec, double phi, + double *az, double *el) +/* +** - - - - - - - - - +** i a u H d 2 a e +** - - - - - - - - - +** +** Equatorial to horizon coordinates: transform hour angle and +** declination to azimuth and altitude. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ha double hour angle (local) +** dec double declination +** phi double site latitude +** +** Returned: +** *az double azimuth +** *el double altitude (informally, elevation) +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) Azimuth is returned in the range 0-2pi; north is zero, and east +** is +pi/2. Altitude is returned in the range +/- pi/2. +** +** 3) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 4) The returned azimuth az is with respect to the rotational north +** pole, as opposed to the ITRS pole, and for sub-arcsecond +** accuracy will need to be adjusted for polar motion if it is to +** be with respect to north on a map of the Earth's surface. +** +** 5) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of the hour angle ha will also +** be affected. +** +** 6) The transformation is the same as Vh = Rz(pi)*Ry(pi/2-phi)*Ve, +** where Vh and Ve are lefthanded unit vectors in the (az,el) and +** (ha,dec) systems respectively and Ry and Rz are rotations about +** first the y-axis and then the z-axis. (n.b. Rz(pi) simply +** reverses the signs of the x and y components.) For efficiency, +** the algorithm is written out rather than calling other utility +** functions. For applications that require even greater +** efficiency, additional savings are possible if constant terms +** such as functions of latitude are computed once and for all. +** +** 7) Again for efficiency, no range checking of arguments is carried +** out. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sh, ch, sd, cd, sp, cp, x, y, z, r, a; + + +/* Useful trig functions. */ + sh = sin(ha); + ch = cos(ha); + sd = sin(dec); + cd = cos(dec); + sp = sin(phi); + cp = cos(phi); + +/* Az,Alt unit vector. */ + x = - ch*cd*sp + sd*cp; + y = - sh*cd; + z = ch*cd*cp + sd*sp; + +/* To spherical. */ + r = sqrt(x*x + y*y); + a = (r != 0.0) ? atan2(y,x) : 0.0; + *az = (a < 0.0) ? a+D2PI : a; + *el = atan2(z,r); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/hd2pa.c b/20200721/c/src/hd2pa.c new file mode 100644 index 0000000..fc1c0b1 --- /dev/null +++ b/20200721/c/src/hd2pa.c @@ -0,0 +1,164 @@ +#include "sofa.h" + +double iauHd2pa (double ha, double dec, double phi) +/* +** - - - - - - - - - +** i a u H d 2 p a +** - - - - - - - - - +** +** Parallactic angle for a given hour angle and declination. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ha double hour angle +** dec double declination +** phi double site latitude +** +** Returned (function value): +** double parallactic angle +** +** Notes: +** +** 1) All the arguments are angles in radians. +** +** 2) The parallactic angle at a point in the sky is the position +** angle of the vertical, i.e. the angle between the directions to +** the north celestial pole and to the zenith respectively. +** +** 3) The result is returned in the range -pi to +pi. +** +** 4) At the pole itself a zero result is returned. +** +** 5) The latitude phi is pi/2 minus the angle between the Earth's +** rotation axis and the adopted zenith. In many applications it +** will be sufficient to use the published geodetic latitude of the +** site. In very precise (sub-arcsecond) applications, phi can be +** corrected for polar motion. +** +** 6) Should the user wish to work with respect to the astronomical +** zenith rather than the geodetic zenith, phi will need to be +** adjusted for deflection of the vertical (often tens of +** arcseconds), and the zero point of the hour angle ha will also +** be affected. +** +** Reference: +** Smart, W.M., "Spherical Astronomy", Cambridge University Press, +** 6th edition (Green, 1977), p49. +** +** Last revision: 2017 September 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double cp, cqsz, sqsz; + + + cp = cos(phi); + sqsz = cp*sin(ha); + cqsz = sin(phi)*cos(dec) - cp*sin(dec)*cos(ha); + return ( ( sqsz != 0.0 || cqsz != 0.0 ) ? atan2(sqsz,cqsz) : 0.0 ); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/hfk5z.c b/20200721/c/src/hfk5z.c new file mode 100644 index 0000000..92c3262 --- /dev/null +++ b/20200721/c/src/hfk5z.c @@ -0,0 +1,225 @@ +#include "sofa.h" + +void iauHfk5z(double rh, double dh, double date1, double date2, + double *r5, double *d5, double *dr5, double *dd5) +/* +** - - - - - - - - - +** i a u H f k 5 z +** - - - - - - - - - +** +** Transform a Hipparcos star position into FK5 J2000.0, assuming +** zero Hipparcos proper motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rh double Hipparcos RA (radians) +** dh double Hipparcos Dec (radians) +** date1,date2 double TDB date (Note 1) +** +** Returned (all FK5, equinox J2000.0, date date1+date2): +** r5 double RA (radians) +** d5 double Dec (radians) +** dr5 double FK5 RA proper motion (rad/year, Note 4) +** dd5 double Dec proper motion (rad/year, Note 4) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 3) The FK5 to Hipparcos transformation is modeled as a pure rotation +** and spin; zonal errors in the FK5 catalogue are not taken into +** account. +** +** 4) It was the intention that Hipparcos should be a close +** approximation to an inertial frame, so that distant objects have +** zero proper motion; such objects have (in general) non-zero +** proper motion in FK5, and this function returns those fictitious +** proper motions. +** +** 5) The position returned by this function is in the FK5 J2000.0 +** reference system but at date date1+date2. +** +** 6) See also iauFk52h, iauH2fk5, iauFk5zhz. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauFk5hip FK5 to Hipparcos rotation and spin +** iauRxp product of r-matrix and p-vector +** iauSxp multiply p-vector by scalar +** iauRxr product of two r-matrices +** iauTrxp product of transpose of r-matrix and p-vector +** iauPxp vector product of two p-vectors +** iauPv2s pv-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, ph[3], r5h[3][3], s5h[3], sh[3], vst[3], + rst[3][3], r5ht[3][3], pv5e[2][3], vv[3], + w, r, v; + + +/* Time interval from fundamental epoch J2000.0 to given date (JY). */ + t = ((date1 - DJ00) + date2) / DJY; + +/* Hipparcos barycentric position vector (normalized). */ + iauS2c(rh, dh, ph); + +/* FK5 to Hipparcos orientation matrix and spin vector. */ + iauFk5hip(r5h, s5h); + +/* Rotate the spin into the Hipparcos system. */ + iauRxp(r5h, s5h, sh); + +/* Accumulated Hipparcos wrt FK5 spin over that interval. */ + iauSxp(t, s5h, vst); + +/* Express the accumulated spin as a rotation matrix. */ + iauRv2m(vst, rst); + +/* Rotation matrix: accumulated spin, then FK5 to Hipparcos. */ + iauRxr(r5h, rst, r5ht); + +/* De-orient & de-spin the Hipparcos position into FK5 J2000.0. */ + iauTrxp(r5ht, ph, pv5e[0]); + +/* Apply spin to the position giving a space motion. */ + iauPxp(sh, ph, vv); + +/* De-orient & de-spin the Hipparcos space motion into FK5 J2000.0. */ + iauTrxp(r5ht, vv, pv5e[1]); + +/* FK5 position/velocity pv-vector to spherical. */ + iauPv2s(pv5e, &w, d5, &r, dr5, dd5, &v); + *r5 = iauAnp(w); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/icrs2g.c b/20200721/c/src/icrs2g.c new file mode 100644 index 0000000..f5158b8 --- /dev/null +++ b/20200721/c/src/icrs2g.c @@ -0,0 +1,211 @@ +#include "sofa.h" + +void iauIcrs2g ( double dr, double dd, double *dl, double *db ) +/* +** - - - - - - - - - - +** i a u I c r s 2 g +** - - - - - - - - - - +** +** Transformation from ICRS to Galactic Coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dr double ICRS right ascension (radians) +** dd double ICRS declination (radians) +** +** Returned: +** dl double galactic longitude (radians) +** db double galactic latitude (radians) +** +** Notes: +** +** 1) The IAU 1958 system of Galactic coordinates was defined with +** respect to the now obsolete reference system FK4 B1950.0. When +** interpreting the system in a modern context, several factors have +** to be taken into account: +** +** . The inclusion in FK4 positions of the E-terms of aberration. +** +** . The distortion of the FK4 proper motion system by differential +** Galactic rotation. +** +** . The use of the B1950.0 equinox rather than the now-standard +** J2000.0. +** +** . The frame bias between ICRS and the J2000.0 mean place system. +** +** The Hipparcos Catalogue (Perryman & ESA 1997) provides a rotation +** matrix that transforms directly between ICRS and Galactic +** coordinates with the above factors taken into account. The +** matrix is derived from three angles, namely the ICRS coordinates +** of the Galactic pole and the longitude of the ascending node of +** the galactic equator on the ICRS equator. They are given in +** degrees to five decimal places and for canonical purposes are +** regarded as exact. In the Hipparcos Catalogue the matrix +** elements are given to 10 decimal places (about 20 microarcsec). +** In the present SOFA function the matrix elements have been +** recomputed from the canonical three angles and are given to 30 +** decimal places. +** +** 2) The inverse transformation is performed by the function iauG2icrs. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** iauS2c spherical coordinates to unit vector +** iauRxp product of r-matrix and p-vector +** iauC2s p-vector to spherical +** +** Reference: +** Perryman M.A.C. & ESA, 1997, ESA SP-1200, The Hipparcos and Tycho +** catalogues. Astrometric and photometric star catalogues +** derived from the ESA Hipparcos Space Astrometry Mission. ESA +** Publications Division, Noordwijk, Netherlands. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double v1[3], v2[3]; + +/* +** L2,B2 system of galactic coordinates in the form presented in the +** Hipparcos Catalogue. In degrees: +** +** P = 192.85948 right ascension of the Galactic north pole in ICRS +** Q = 27.12825 declination of the Galactic north pole in ICRS +** R = 32.93192 longitude of the ascending node of the Galactic +** plane on the ICRS equator +** +** ICRS to galactic rotation matrix, obtained by computing +** R_3(-R) R_1(pi/2-Q) R_3(pi/2+P) to the full precision shown: +*/ + double r[3][3] = { { -0.054875560416215368492398900454, + -0.873437090234885048760383168409, + -0.483835015548713226831774175116 }, + { +0.494109427875583673525222371358, + -0.444829629960011178146614061616, + +0.746982244497218890527388004556 }, + { -0.867666149019004701181616534570, + -0.198076373431201528180486091412, + +0.455983776175066922272100478348 } }; + + +/* Spherical to Cartesian. */ + iauS2c(dr, dd, v1); + +/* ICRS to Galactic. */ + iauRxp(r, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, dl, db); + +/* Express in conventional ranges. */ + *dl = iauAnp(*dl); + *db = iauAnpm(*db); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ir.c b/20200721/c/src/ir.c new file mode 100644 index 0000000..44d4328 --- /dev/null +++ b/20200721/c/src/ir.c @@ -0,0 +1,133 @@ +#include "sofa.h" + +void iauIr(double r[3][3]) +/* +** - - - - - - +** i a u I r +** - - - - - - +** +** Initialize an r-matrix to the identity matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** r double[3][3] r-matrix +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + r[0][0] = 1.0; + r[0][1] = 0.0; + r[0][2] = 0.0; + r[1][0] = 0.0; + r[1][1] = 1.0; + r[1][2] = 0.0; + r[2][0] = 0.0; + r[2][1] = 0.0; + r[2][2] = 1.0; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/jd2cal.c b/20200721/c/src/jd2cal.c new file mode 100644 index 0000000..4530e91 --- /dev/null +++ b/20200721/c/src/jd2cal.c @@ -0,0 +1,247 @@ +#include "sofa.h" +#include + +int iauJd2cal(double dj1, double dj2, + int *iy, int *im, int *id, double *fd) +/* +** - - - - - - - - - - +** i a u J d 2 c a l +** - - - - - - - - - - +** +** Julian Date to Gregorian year, month, day, and fraction of a day. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** dj1,dj2 double Julian Date (Notes 1, 2) +** +** Returned (arguments): +** iy int year +** im int month +** id int day +** fd double fraction of day +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = unacceptable date (Note 1) +** +** Notes: +** +** 1) The earliest valid date is -68569.5 (-4900 March 1). The +** largest value accepted is 1e9. +** +** 2) The Julian Date is apportioned in any convenient way between +** the arguments dj1 and dj2. For example, JD=2450123.7 could +** be expressed in any of these ways, among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** Separating integer and fraction uses the "compensated summation" +** algorithm of Kahan-Neumaier to preserve as much precision as +** possible irrespective of the jd1+jd2 apportionment. +** +** 3) In early eras the conversion is from the "proleptic Gregorian +** calendar"; no account is taken of the date(s) of adoption of +** the Gregorian calendar, nor is the AD/BC numbering convention +** observed. +** +** References: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +** Klein, A., A Generalized Kahan-Babuska-Summation-Algorithm. +** Computing 76, 279-293 (2006), Section 3. +** +** This revision: 2020 June 24 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Minimum and maximum allowed JD */ + const double DJMIN = -68569.5; + const double DJMAX = 1e9; + + long jd, i, l, n, k; + double dj, f1, f2, d, s, cs, v[2], x, t, f; + + +/* Verify date is acceptable. */ + dj = dj1 + dj2; + if (dj < DJMIN || dj > DJMAX) return -1; + +/* Separate day and fraction (where -0.5 <= fraction < 0.5). */ + d = dnint(dj1); + f1 = dj1 - d; + jd = (long) d; + d = dnint(dj2); + f2 = dj2 - d; + jd += (long) d; + +/* Compute f1+f2+0.5 using compensated summation (Klein 2006). */ + s = 0.5; + cs = 0.0; + v[0] = f1; + v[1] = f2; + for ( i = 0; i < 2; i++ ) { + x = v[i]; + t = s + x; + cs += fabs(s) >= fabs(x) ? (s-t) + x : (x-t) + s; + s = t; + if ( s >= 1.0 ) { + jd++; + s -= 1.0; + } + } + f = s + cs; + cs = f - s; + +/* Deal with negative f. */ + if ( f < 0.0 ) { + + /* Compensated summation: assume that |s| <= 1.0. */ + f = s + 1.0; + cs += (1.0-f) + s; + s = f; + f = s + cs; + cs = f - s; + jd--; + } + +/* Deal with f that is 1.0 or more (when rounded to double). */ + if ( (f-1.0) >= -DBL_EPSILON/4.0 ) { + + /* Compensated summation: assume that |s| <= 1.0. */ + t = s - 1.0; + cs += (s-t) - 1.0; + s = t; + f = s + cs; + if ( -DBL_EPSILON/2.0 < f ) { + jd++; + f = gmax(f, 0.0); + } + } + +/* Express day in Gregorian calendar. */ + l = jd + 68569L; + n = (4L * l) / 146097L; + l -= (146097L * n + 3L) / 4L; + i = (4000L * (l + 1L)) / 1461001L; + l -= (1461L * i) / 4L - 31L; + k = (80L * l) / 2447L; + *id = (int) (l - (2447L * k) / 80L); + l = k / 11L; + *im = (int) (k + 2L - 12L * l); + *iy = (int) (100L * (n - 49L) + i + l); + *fd = f; + + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/jdcalf.c b/20200721/c/src/jdcalf.c new file mode 100644 index 0000000..e2c5787 --- /dev/null +++ b/20200721/c/src/jdcalf.c @@ -0,0 +1,222 @@ +#include "sofa.h" + +int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4]) +/* +** - - - - - - - - - - +** i a u J d c a l f +** - - - - - - - - - - +** +** Julian Date to Gregorian Calendar, expressed in a form convenient +** for formatting messages: rounded to a specified precision. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ndp int number of decimal places of days in fraction +** dj1,dj2 double dj1+dj2 = Julian Date (Note 1) +** +** Returned: +** iymdf int[4] year, month, day, fraction in Gregorian +** calendar +** +** Returned (function value): +** int status: +** -1 = date out of range +** 0 = OK +** +1 = NDP not 0-9 (interpreted as 0) +** +** Notes: +** +** 1) The Julian Date is apportioned in any convenient way between +** the arguments dj1 and dj2. For example, JD=2450123.7 could +** be expressed in any of these ways, among others: +** +** dj1 dj2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** 2) In early eras the conversion is from the "Proleptic Gregorian +** Calendar"; no account is taken of the date(s) of adoption of +** the Gregorian Calendar, nor is the AD/BC numbering convention +** observed. +** +** 3) Refer to the function iauJd2cal. +** +** 4) NDP should be 4 or less if internal overflows are to be +** avoided on machines which use 16-bit integers. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 12.92 (p604). +** +** This revision: 2020 April 13 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int j, js; + double denom, d1, d2, f1, f2, d, djd, f, rf; + + +/* Denominator of fraction (e.g. 100 for 2 decimal places). */ + if ((ndp >= 0) && (ndp <= 9)) { + j = 0; + denom = pow(10.0, ndp); + } else { + j = 1; + denom = 1.0; + } + +/* Copy the date, big then small. */ + if (fabs(dj1) >= fabs(dj2)) { + d1 = dj1; + d2 = dj2; + } else { + d1 = dj2; + d2 = dj1; + } + +/* Realign to midnight (without rounding error). */ + d1 -= 0.5; + +/* Separate day and fraction (as precisely as possible). */ + d = dnint(d1); + f1 = d1 - d; + djd = d; + d = dnint(d2); + f2 = d2 - d; + djd += d; + d = dnint(f1 + f2); + f = (f1 - d) + f2; + if (f < 0.0) { + f += 1.0; + d -= 1.0; + } + djd += d; + +/* Round the total fraction to the specified number of places. */ + rf = dnint(f*denom) / denom; + +/* Re-align to noon. */ + djd += 0.5; + +/* Convert to Gregorian calendar. */ + js = iauJd2cal(djd, rf, &iymdf[0], &iymdf[1], &iymdf[2], &f); + if (js == 0) { + iymdf[3] = (int) dnint(f * denom); + } else { + j = js; + } + +/* Return the status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ld.c b/20200721/c/src/ld.c new file mode 100644 index 0000000..0b31836 --- /dev/null +++ b/20200721/c/src/ld.c @@ -0,0 +1,202 @@ +#include "sofa.h" + +void iauLd(double bm, double p[3], double q[3], double e[3], + double em, double dlim, double p1[3]) +/* +** - - - - - - +** i a u L d +** - - - - - - +** +** Apply light deflection by a solar-system body, as part of +** transforming coordinate direction into natural direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** bm double mass of the gravitating body (solar masses) +** p double[3] direction from observer to source (unit vector) +** q double[3] direction from body to source (unit vector) +** e double[3] direction from body to observer (unit vector) +** em double distance from body to observer (au) +** dlim double deflection limiter (Note 4) +** +** Returned: +** p1 double[3] observer to deflected source (unit vector) +** +** Notes: +** +** 1) The algorithm is based on Expr. (70) in Klioner (2003) and +** Expr. (7.63) in the Explanatory Supplement (Urban & Seidelmann +** 2013), with some rearrangement to minimize the effects of machine +** precision. +** +** 2) The mass parameter bm can, as required, be adjusted in order to +** allow for such effects as quadrupole field. +** +** 3) The barycentric position of the deflecting body should ideally +** correspond to the time of closest approach of the light ray to +** the body. +** +** 4) The deflection limiter parameter dlim is phi^2/2, where phi is +** the angular separation (in radians) between source and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. +** +** 5) The returned vector p1 is not normalized, but the consequential +** departure from unit magnitude is always negligible. +** +** 6) The arguments p and p1 can be the same array. +** +** 7) To accumulate total light deflection taking into account the +** contributions from several bodies, call the present function for +** each body in succession, in decreasing order of distance from the +** observer. +** +** 8) For efficiency, validation is omitted. The supplied vectors must +** be of unit magnitude, and the deflection limiter non-zero and +** positive. +** +** References: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013). +** +** Klioner, Sergei A., "A practical relativistic model for micro- +** arcsecond astrometry in space", Astr. J. 125, 1580-1597 (2003). +** +** Called: +** iauPdp scalar product of two p-vectors +** iauPxp vector product of two p-vectors +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double qpe[3], qdqpe, w, eq[3], peq[3]; + + +/* q . (q + e). */ + for (i = 0; i < 3; i++) { + qpe[i] = q[i] + e[i]; + } + qdqpe = iauPdp(q, qpe); + +/* 2 x G x bm / ( em x c^2 x ( q . (q + e) ) ). */ + w = bm * SRS / em / gmax(qdqpe,dlim); + +/* p x (e x q). */ + iauPxp(e, q, eq); + iauPxp(p, eq, peq); + +/* Apply the deflection. */ + for (i = 0; i < 3; i++) { + p1[i] = p[i] + w*peq[i]; + } + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ldn.c b/20200721/c/src/ldn.c new file mode 100644 index 0000000..c102948 --- /dev/null +++ b/20200721/c/src/ldn.c @@ -0,0 +1,224 @@ +#include "sofa.h" + +void iauLdn(int n, iauLDBODY b[], double ob[3], double sc[3], + double sn[3]) +/*+ +** - - - - - - - +** i a u L d n +** - - - - - - - +** +** For a star, apply light deflection by multiple solar-system bodies, +** as part of transforming coordinate direction into natural direction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** n int number of bodies (note 1) +** b iauLDBODY[n] data for each of the n bodies (Notes 1,2): +** bm double mass of the body (solar masses, Note 3) +** dl double deflection limiter (Note 4) +** pv [2][3] barycentric PV of the body (au, au/day) +** ob double[3] barycentric position of the observer (au) +** sc double[3] observer to star coord direction (unit vector) +** +** Returned: +** sn double[3] observer to deflected star (unit vector) +** +** 1) The array b contains n entries, one for each body to be +** considered. If n = 0, no gravitational light deflection will be +** applied, not even for the Sun. +** +** 2) The array b should include an entry for the Sun as well as for +** any planet or other body to be taken into account. The entries +** should be in the order in which the light passes the body. +** +** 3) In the entry in the b array for body i, the mass parameter +** b[i].bm can, as required, be adjusted in order to allow for such +** effects as quadrupole field. +** +** 4) The deflection limiter parameter b[i].dl is phi^2/2, where phi is +** the angular separation (in radians) between star and body at +** which limiting is applied. As phi shrinks below the chosen +** threshold, the deflection is artificially reduced, reaching zero +** for phi = 0. Example values suitable for a terrestrial +** observer, together with masses, are as follows: +** +** body i b[i].bm b[i].dl +** +** Sun 1.0 6e-6 +** Jupiter 0.00095435 3e-9 +** Saturn 0.00028574 3e-10 +** +** 5) For cases where the starlight passes the body before reaching the +** observer, the body is placed back along its barycentric track by +** the light time from that point to the observer. For cases where +** the body is "behind" the observer no such shift is applied. If +** a different treatment is preferred, the user has the option of +** instead using the iauLd function. Similarly, iauLd can be used +** for cases where the source is nearby, not a star. +** +** 6) The returned vector sn is not normalized, but the consequential +** departure from unit magnitude is always negligible. +** +** 7) The arguments sc and sn can be the same array. +** +** 8) For efficiency, validation is omitted. The supplied masses must +** be greater than zero, the position and velocity vectors must be +** right, and the deflection limiter greater than zero. +** +** Reference: +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.2.4. +** +** Called: +** iauCp copy p-vector +** iauPdp scalar product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPpsp p-vector plus scaled p-vector +** iauPn decompose p-vector into modulus and direction +** iauLd light deflection by a solar-system body +** +** This revision: 2017 March 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Light time for 1 au (days) */ + const double CR = AULT/DAYSEC; + + int i; + double v[3], dt, ev[3], em, e[3]; + + +/* Star direction prior to deflection. */ + iauCp(sc, sn); + +/* Body by body. */ + for ( i = 0; i < n; i++ ) { + + /* Body to observer vector at epoch of observation (au). */ + iauPmp ( ob, b[i].pv[0], v ); + + /* Minus the time since the light passed the body (days). */ + dt = iauPdp(sn,v) * CR; + + /* Neutralize if the star is "behind" the observer. */ + dt = gmin(dt, 0.0); + + /* Backtrack the body to the time the light was passing the body. */ + iauPpsp(v, -dt, b[i].pv[1], ev); + + /* Body to observer vector as magnitude and direction. */ + iauPn(ev, &em, e); + + /* Apply light deflection for this body. */ + iauLd ( b[i].bm, sn, sn, e, em, b[i].dl, sn ); + + /* Next body. */ + } + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ldsun.c b/20200721/c/src/ldsun.c new file mode 100644 index 0000000..f79477b --- /dev/null +++ b/20200721/c/src/ldsun.c @@ -0,0 +1,156 @@ +#include "sofa.h" + +void iauLdsun(double p[3], double e[3], double em, double p1[3]) +/* +** - - - - - - - - - +** i a u L d s u n +** - - - - - - - - - +** +** Deflection of starlight by the Sun. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** p double[3] direction from observer to star (unit vector) +** e double[3] direction from Sun to observer (unit vector) +** em double distance from Sun to observer (au) +** +** Returned: +** p1 double[3] observer to deflected star (unit vector) +** +** Notes: +** +** 1) The source is presumed to be sufficiently distant that its +** directions seen from the Sun and the observer are essentially +** the same. +** +** 2) The deflection is restrained when the angle between the star and +** the center of the Sun is less than a threshold value, falling to +** zero deflection for zero separation. The chosen threshold value +** is within the solar limb for all solar-system applications, and +** is about 5 arcminutes for the case of a terrestrial observer. +** +** 3) The arguments p and p1 can be the same array. +** +** Called: +** iauLd light deflection by a solar-system body +** +** This revision: 2016 June 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double em2, dlim; + + +/* Deflection limiter (smaller for distant observers). */ + em2 = em*em; + if ( em2 < 1.0 ) em2 = 1.0; + dlim = 1e-6 / (em2 > 1.0 ? em2 : 1.0); + +/* Apply the deflection. */ + iauLd(1.0, p, p, e, em, dlim, p1); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/lteceq.c b/20200721/c/src/lteceq.c new file mode 100644 index 0000000..d519fb2 --- /dev/null +++ b/20200721/c/src/lteceq.c @@ -0,0 +1,179 @@ +#include "sofa.h" + +void iauLteceq(double epj, double dl, double db, double *dr, double *dd) +/* +** - - - - - - - - - - +** i a u L t e c e q +** - - - - - - - - - - +** +** Transformation from ecliptic coordinates (mean equinox and ecliptic +** of date) to ICRS RA,Dec, using a long-term precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** dl,db double ecliptic longitude and latitude (radians) +** +** Returned: +** dr,dd double ICRS right ascension and declination (radians) +** +** 1) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 2) The transformation is approximately that from ecliptic longitude +** and latitude (mean equinox and ecliptic of date) to mean J2000.0 +** right ascension and declination, with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLtecm J2000.0 to ecliptic rotation matrix, long term +** iauTrxp product of transpose of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rm[3][3], v1[3], v2[3], a, b; + + +/* Spherical to Cartesian. */ + iauS2c(dl, db, v1); + +/* Rotation matrix, ICRS equatorial to ecliptic. */ + iauLtecm(epj, rm); + +/* The transformation from ecliptic to ICRS. */ + iauTrxp(rm, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, &a, &b); + +/* Express in conventional ranges. */ + *dr = iauAnp(a); + *dd = iauAnpm(b); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ltecm.c b/20200721/c/src/ltecm.c new file mode 100644 index 0000000..d5ae6e9 --- /dev/null +++ b/20200721/c/src/ltecm.c @@ -0,0 +1,198 @@ +#include "sofa.h" + +void iauLtecm(double epj, double rm[3][3]) +/* +** - - - - - - - - - +** i a u L t e c m +** - - - - - - - - - +** +** ICRS equatorial to ecliptic rotation matrix, long-term. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rm double[3][3] ICRS to ecliptic rotation matrix +** +** Notes: +** +** 1) The matrix is in the sense +** +** E_ep = rm x P_ICRS, +** +** where P_ICRS is a vector with respect to ICRS right ascension +** and declination axes and E_ep is the same vector with respect to +** the (inertial) ecliptic and equinox of epoch epj. +** +** 2) P_ICRS is a free vector, merely a direction, typically of unit +** magnitude, and not bound to any particular spatial origin, such +** as the Earth, Sun or SSB. No assumptions are made about whether +** it represents starlight and embodies astrometric effects such as +** parallax or aberration. The transformation is approximately that +** between mean J2000.0 right ascension and declination and ecliptic +** longitude and latitude, with only frame bias (always less than +** 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauLtpequ equator pole, long term +** iauLtpecl ecliptic pole, long term +** iauPxp vector product +** iauPn normalize vector +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2015 December 6 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Frame bias (IERS Conventions 2010, Eqs. 5.21 and 5.33) */ + const double dx = -0.016617 * DAS2R, + de = -0.0068192 * DAS2R, + dr = -0.0146 * DAS2R; + + double p[3], z[3], w[3], s, x[3], y[3]; + + +/* Equator pole. */ + iauLtpequ(epj, p); + +/* Ecliptic pole (bottom row of equatorial to ecliptic matrix). */ + iauLtpecl(epj, z); + +/* Equinox (top row of matrix). */ + iauPxp(p, z, w); + iauPn(w, &s, x); + +/* Middle row of matrix. */ + iauPxp(z, x, y); + +/* Combine with frame bias. */ + rm[0][0] = x[0] - x[1]*dr + x[2]*dx; + rm[0][1] = x[0]*dr + x[1] + x[2]*de; + rm[0][2] = - x[0]*dx - x[1]*de + x[2]; + rm[1][0] = y[0] - y[1]*dr + y[2]*dx; + rm[1][1] = y[0]*dr + y[1] + y[2]*de; + rm[1][2] = - y[0]*dx - y[1]*de + y[2]; + rm[2][0] = z[0] - z[1]*dr + z[2]*dx; + rm[2][1] = z[0]*dr + z[1] + z[2]*de; + rm[2][2] = - z[0]*dx - z[1]*de + z[2]; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/lteqec.c b/20200721/c/src/lteqec.c new file mode 100644 index 0000000..f0fd175 --- /dev/null +++ b/20200721/c/src/lteqec.c @@ -0,0 +1,180 @@ +#include "sofa.h" + +void iauLteqec(double epj, double dr, double dd, double *dl, double *db) +/* +** - - - - - - - - - - +** i a u L t e q e c +** - - - - - - - - - - +** +** Transformation from ICRS equatorial coordinates to ecliptic +** coordinates (mean equinox and ecliptic of date) using a long-term +** precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** dr,dd double ICRS right ascension and declination (radians) +** +** Returned: +** dl,db double ecliptic longitude and latitude (radians) +** +** 1) No assumptions are made about whether the coordinates represent +** starlight and embody astrometric effects such as parallax or +** aberration. +** +** 2) The transformation is approximately that from mean J2000.0 right +** ascension and declination to ecliptic longitude and latitude +** (mean equinox and ecliptic of date), with only frame bias (always +** less than 25 mas) to disturb this classical picture. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauLtecm J2000.0 to ecliptic rotation matrix, long term +** iauRxp product of r-matrix and p-vector +** iauC2s unit vector to spherical coordinates +** iauAnp normalize angle into range 0 to 2pi +** iauAnpm normalize angle into range +/- pi +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rm[3][3], v1[3], v2[3], a, b; + + +/* Spherical to Cartesian. */ + iauS2c(dr, dd, v1); + +/* Rotation matrix, ICRS equatorial to ecliptic. */ + iauLtecm(epj, rm); + +/* The transformation from ICRS to ecliptic. */ + iauRxp(rm, v1, v2); + +/* Cartesian to spherical. */ + iauC2s(v2, &a, &b); + +/* Express in conventional ranges. */ + *dl = iauAnp(a); + *db = iauAnpm(b); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ltp.c b/20200721/c/src/ltp.c new file mode 100644 index 0000000..b951bf8 --- /dev/null +++ b/20200721/c/src/ltp.c @@ -0,0 +1,181 @@ +#include "sofa.h" + +void iauLtp(double epj, double rp[3][3]) +/* +** - - - - - - - +** i a u L t p +** - - - - - - - +** +** Long-term precession matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rp double[3][3] precession matrix, J2000.0 to date +** +** Notes: +** +** 1) The matrix is in the sense +** +** P_date = rp x P_J2000, +** +** where P_J2000 is a vector with respect to the J2000.0 mean +** equator and equinox and P_date is the same vector with respect to +** the equator and equinox of epoch epj. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** Called: +** iauLtpequ equator pole, long term +** iauLtpecl ecliptic pole, long term +** iauPxp vector product +** iauPn normalize vector +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2015 December 6 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double peqr[3], pecl[3], v[3], w, eqx[3]; + + +/* Equator pole (bottom row of matrix). */ + iauLtpequ(epj, peqr); + +/* Ecliptic pole. */ + iauLtpecl(epj, pecl); + +/* Equinox (top row of matrix). */ + iauPxp(peqr, pecl, v); + iauPn(v, &w, eqx); + +/* Middle row of matrix. */ + iauPxp(peqr, eqx, v); + +/* Assemble the matrix. */ + for ( i = 0; i < 3; i++ ) { + rp[0][i] = eqx[i]; + rp[1][i] = v[i]; + rp[2][i] = peqr[i]; + } + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ltpb.c b/20200721/c/src/ltpb.c new file mode 100644 index 0000000..5464f60 --- /dev/null +++ b/20200721/c/src/ltpb.c @@ -0,0 +1,174 @@ +#include "sofa.h" + +void iauLtpb(double epj, double rpb[3][3]) +/* +** - - - - - - - - +** i a u L t p b +** - - - - - - - - +** +** Long-term precession matrix, including ICRS frame bias. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** rpb double[3][3] precession-bias matrix, J2000.0 to date +** +** Notes: +** +** 1) The matrix is in the sense +** +** P_date = rpb x P_ICRS, +** +** where P_ICRS is a vector in the Geocentric Celestial Reference +** System, and P_date is the vector with respect to the Celestial +** Intermediate Reference System at that date but with nutation +** neglected. +** +** 2) A first order frame bias formulation is used, of sub- +** microarcsecond accuracy compared with a full 3D rotation. +** +** 3) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2015 December 6 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Frame bias (IERS Conventions 2010, Eqs. 5.21 and 5.33) */ + const double dx = -0.016617 * DAS2R, + de = -0.0068192 * DAS2R, + dr = -0.0146 * DAS2R; + + int i; + double rp[3][3]; + + +/* Precession matrix. */ + iauLtp(epj, rp); + +/* Apply the bias. */ + for ( i = 0; i < 3; i++ ) { + rpb[i][0] = rp[i][0] - rp[i][1]*dr + rp[i][2]*dx; + rpb[i][1] = rp[i][0]*dr + rp[i][1] + rp[i][2]*de; + rpb[i][2] = -rp[i][0]*dx - rp[i][1]*de + rp[i][2]; + } + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ltpecl.c b/20200721/c/src/ltpecl.c new file mode 100644 index 0000000..9ea6507 --- /dev/null +++ b/20200721/c/src/ltpecl.c @@ -0,0 +1,218 @@ +#include "sofa.h" + +void iauLtpecl(double epj, double vec[3]) +/* +** - - - - - - - - - - +** i a u L t p e c l +** - - - - - - - - - - +** +** Long-term precession of the ecliptic. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** vec double[3] ecliptic pole unit vector +** +** Notes: +** +** 1) The returned vector is with respect to the J2000.0 mean equator +** and equinox. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Obliquity at J2000.0 (radians). */ + static const double eps0 = 84381.406 * DAS2R; + +/* Polynomial coefficients */ + enum { NPOL = 4 }; + static const double pqpol[2][NPOL] = { + { 5851.607687, + -0.1189000, + -0.00028913, + 0.000000101}, + {-1600.886300, + 1.1689818, + -0.00000020, + -0.000000437} + }; + +/* Periodic coefficients */ + static const double pqper[][5] = { + { 708.15,-5486.751211,-684.661560, 667.666730,-5523.863691}, + {2309.00, -17.127623,2446.283880,-2354.886252, -549.747450}, + {1620.00, -617.517403, 399.671049, -428.152441, -310.998056}, + { 492.20, 413.442940,-356.652376, 376.202861, 421.535876}, + {1183.00, 78.614193,-186.387003, 184.778874, -36.776172}, + { 622.00, -180.732815,-316.800070, 335.321713, -145.278396}, + { 882.00, -87.676083, 198.296701, -185.138669, -34.744450}, + { 547.00, 46.140315, 101.135679, -120.972830, 22.885731} + }; + static const int NPER = (int) ( sizeof pqper / 5 / sizeof (double) ); + +/* Miscellaneous */ + int i; + double t, p, q, w, a, s, c; + + +/* Centuries since J2000. */ + t = ( epj - 2000.0 ) / 100.0; + +/* Initialize P_A and Q_A accumulators. */ + p = 0.0; + q = 0.0; + +/* Periodic terms. */ + w = D2PI*t; + for ( i = 0; i < NPER; i++ ) { + a = w/pqper[i][0]; + s = sin(a); + c = cos(a); + p += c*pqper[i][1] + s*pqper[i][3]; + q += c*pqper[i][2] + s*pqper[i][4]; + } + +/* Polynomial terms. */ + w = 1.0; + for ( i = 0; i < NPOL; i++ ) { + p += pqpol[0][i]*w; + q += pqpol[1][i]*w; + w *= t; + } + +/* P_A and Q_A (radians). */ + p *= DAS2R; + q *= DAS2R; + +/* Form the ecliptic pole vector. */ + w = 1.0 - p*p - q*q; + w = w < 0.0 ? 0.0 : sqrt(w); + s = sin(eps0); + c = cos(eps0); + vec[0] = p; + vec[1] = - q*c - w*s; + vec[2] = - q*s + w*c; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ltpequ.c b/20200721/c/src/ltpequ.c new file mode 100644 index 0000000..3c4acb3 --- /dev/null +++ b/20200721/c/src/ltpequ.c @@ -0,0 +1,218 @@ +#include "sofa.h" + +void iauLtpequ(double epj, double veq[3]) +/* +** - - - - - - - - - - +** i a u L t p e q u +** - - - - - - - - - - +** +** Long-term precession of the equator. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epj double Julian epoch (TT) +** +** Returned: +** veq double[3] equator pole unit vector +** +** Notes: +** +** 1) The returned vector is with respect to the J2000.0 mean equator +** and equinox. +** +** 2) The Vondrak et al. (2011, 2012) 400 millennia precession model +** agrees with the IAU 2006 precession at J2000.0 and stays within +** 100 microarcseconds during the 20th and 21st centuries. It is +** accurate to a few arcseconds throughout the historical period, +** worsening to a few tenths of a degree at the end of the +** +/- 200,000 year time span. +** +** References: +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2011, New precession +** expressions, valid for long time intervals, Astron.Astrophys. 534, +** A22 +** +** Vondrak, J., Capitaine, N. and Wallace, P., 2012, New precession +** expressions, valid for long time intervals (Corrigendum), +** Astron.Astrophys. 541, C1 +** +** This revision: 2016 February 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Polynomial coefficients */ + enum { NPOL = 4 }; + static const double xypol[2][NPOL] = { + { 5453.282155, + 0.4252841, + -0.00037173, + -0.000000152}, + {-73750.930350, + -0.7675452, + -0.00018725, + 0.000000231} + }; + +/* Periodic coefficients */ + static const double xyper[][5] = { + { 256.75, -819.940624,75004.344875,81491.287984, 1558.515853}, + { 708.15,-8444.676815, 624.033993, 787.163481, 7774.939698}, + { 274.20, 2600.009459, 1251.136893, 1251.296102,-2219.534038}, + { 241.45, 2755.175630,-1102.212834,-1257.950837,-2523.969396}, + {2309.00, -167.659835,-2660.664980,-2966.799730, 247.850422}, + { 492.20, 871.855056, 699.291817, 639.744522, -846.485643}, + { 396.10, 44.769698, 153.167220, 131.600209,-1393.124055}, + { 288.90, -512.313065, -950.865637, -445.040117, 368.526116}, + { 231.10, -819.415595, 499.754645, 584.522874, 749.045012}, + {1610.00, -538.071099, -145.188210, -89.756563, 444.704518}, + { 620.00, -189.793622, 558.116553, 524.429630, 235.934465}, + { 157.87, -402.922932, -23.923029, -13.549067, 374.049623}, + { 220.30, 179.516345, -165.405086, -210.157124, -171.330180}, + {1200.00, -9.814756, 9.344131, -44.919798, -22.899655} + }; + static const int NPER = (int) ( sizeof xyper / 5 / sizeof (double) ); + +/* Miscellaneous */ + int i; + double t, x, y, w, a, s, c; + + +/* Centuries since J2000. */ + t = ( epj - 2000.0 ) / 100.0; + +/* Initialize X and Y accumulators. */ + x = 0.0; + y = 0.0; + +/* Periodic terms. */ + w = D2PI * t; + for ( i = 0; i < NPER; i++ ) { + a = w / xyper[i][0]; + s = sin(a); + c = cos(a); + x += c*xyper[i][1] + s*xyper[i][3]; + y += c*xyper[i][2] + s*xyper[i][4]; + } + +/* Polynomial terms. */ + w = 1.0; + for ( i = 0; i < NPOL; i++ ) { + x += xypol[0][i]*w; + y += xypol[1][i]*w; + w *= t; + } + +/* X and Y (direction cosines). */ + x *= DAS2R; + y *= DAS2R; + +/* Form the equator pole vector. */ + veq[0] = x; + veq[1] = y; + w = 1.0 - x*x - y*y; + veq[2] = w < 0.0 ? 0.0 : sqrt(w); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/makefile b/20200721/c/src/makefile new file mode 100644 index 0000000..99d68c9 --- /dev/null +++ b/20200721/c/src/makefile @@ -0,0 +1,886 @@ +#----------------------------------------------------------------------- +# +# Description: make file for the ANSI-C version of SOFA. This +# make file creates a Unix .a library. Designed for Linux/gcc but +# can be adapted for other platforms or run in an appropriate way +# by means of the macros CCOMPC (compiler command), CFLAGF (qualifiers +# for compiling functions) and CFLAGX (qualifiers for compiling +# executables). +# +# Usage: +# +# To build the library: +# +# make +# +# To install the library and include files: +# +# make install +# +# To delete all object files: +# +# make clean +# +# To build and run the test program using the installed library: +# +# make test +# +# Also: +# make all same as make +# make uninstall deinstall the library and header files +# make check test the build +# make installcheck same as make test +# make distclean delete all generated binaries +# make realclean same as distclean +# +# Last revision: 2019 July 22 +# +# Copyright International Astronomical Union. All rights reserved. +# +#----------------------------------------------------------------------- + +#----------------------------------------------------------------------- +# +# DEFINITIONS +# +#----------------------------------------------------------------------- + +#----YOU MAY HAVE TO MODIFY THE NEXT FEW DEFINITIONS----- + +# Specify the installation home directory. + +INSTALL_DIR = $(HOME) + +# Specify the installation directory for the library. + +SOFA_LIB_DIR = $(INSTALL_DIR)/lib/ + +# Specify the installation directory for the include files. + +SOFA_INC_DIR = $(INSTALL_DIR)/include/ + +# This software is compilable only by ANSI C compilers - give the name +# of your preferred C compiler (CCOMPC) and compilation flags (CFLAGF +# for functions, CFLAGX for executables) here. + +CCOMPC = gcc +CFLAGF = -c -pedantic -Wall -W -O +CFLAGX = -pedantic -Wall -W -O + +#----YOU SHOULDN'T HAVE TO MODIFY ANYTHING BELOW THIS LINE--------- + +SHELL = /bin/sh + +# The list of installation directories. + +INSTALL_DIRS = $(SOFA_LIB_DIR) $(SOFA_INC_DIR) + +# Name the SOFA/C library in its source and target locations. + +SOFA_LIB_NAME = libsofa_c.a +SOFA_LIB = $(SOFA_LIB_DIR)$(SOFA_LIB_NAME) + +# Name the SOFA/C testbed in its source and target locations. + +SOFA_TEST_NAME = t_sofa_c.c +SOFA_TEST = t_sofa_c + +# Name the SOFA/C includes in their source and target locations. + +SOFA_INC_NAMES = sofa.h sofam.h +SOFA_INC = $(SOFA_INC_DIR)sofa.h $(SOFA_INC_DIR)sofam.h + +# The list of SOFA/C library object files. + +SOFA_OBS = iauA2af.o \ + iauA2tf.o \ + iauAb.o \ + iauAe2hd.o \ + iauAf2a.o \ + iauAnp.o \ + iauAnpm.o \ + iauApcg.o \ + iauApcg13.o \ + iauApci.o \ + iauApci13.o \ + iauApco.o \ + iauApco13.o \ + iauApcs.o \ + iauApcs13.o \ + iauAper.o \ + iauAper13.o \ + iauApio.o \ + iauApio13.o \ + iauAtci13.o \ + iauAtciq.o \ + iauAtciqn.o \ + iauAtciqz.o \ + iauAtco13.o \ + iauAtic13.o \ + iauAticq.o \ + iauAticqn.o \ + iauAtio13.o \ + iauAtioq.o \ + iauAtoc13.o \ + iauAtoi13.o \ + iauAtoiq.o \ + iauBi00.o \ + iauBp00.o \ + iauBp06.o \ + iauBpn2xy.o \ + iauC2i00a.o \ + iauC2i00b.o \ + iauC2i06a.o \ + iauC2ibpn.o \ + iauC2ixy.o \ + iauC2ixys.o \ + iauC2s.o \ + iauC2t00a.o \ + iauC2t00b.o \ + iauC2t06a.o \ + iauC2tcio.o \ + iauC2teqx.o \ + iauC2tpe.o \ + iauC2txy.o \ + iauCal2jd.o \ + iauCp.o \ + iauCpv.o \ + iauCr.o \ + iauD2dtf.o \ + iauD2tf.o \ + iauDat.o \ + iauDtdb.o \ + iauDtf2d.o \ + iauEceq06.o \ + iauEcm06.o \ + iauEe00.o \ + iauEe00a.o \ + iauEe00b.o \ + iauEe06a.o \ + iauEect00.o \ + iauEform.o \ + iauEo06a.o \ + iauEors.o \ + iauEpb.o \ + iauEpb2jd.o \ + iauEpj.o \ + iauEpj2jd.o \ + iauEpv00.o \ + iauEqec06.o \ + iauEqeq94.o \ + iauEra00.o \ + iauFad03.o \ + iauFae03.o \ + iauFaf03.o \ + iauFaju03.o \ + iauFal03.o \ + iauFalp03.o \ + iauFama03.o \ + iauFame03.o \ + iauFane03.o \ + iauFaom03.o \ + iauFapa03.o \ + iauFasa03.o \ + iauFaur03.o \ + iauFave03.o \ + iauFk425.o \ + iauFk45z.o \ + iauFk524.o \ + iauFk52h.o \ + iauFk54z.o \ + iauFk5hip.o \ + iauFk5hz.o \ + iauFw2m.o \ + iauFw2xy.o \ + iauG2icrs.o \ + iauGc2gd.o \ + iauGc2gde.o \ + iauGd2gc.o \ + iauGd2gce.o \ + iauGmst00.o \ + iauGmst06.o \ + iauGmst82.o \ + iauGst00a.o \ + iauGst00b.o \ + iauGst06.o \ + iauGst06a.o \ + iauGst94.o \ + iauH2fk5.o \ + iauHd2ae.o \ + iauHd2pa.o \ + iauHfk5z.o \ + iauIcrs2g.o \ + iauIr.o \ + iauJd2cal.o \ + iauJdcalf.o \ + iauLd.o \ + iauLdn.o \ + iauLdsun.o \ + iauLteceq.o \ + iauLtecm.o \ + iauLteqec.o \ + iauLtp.o \ + iauLtpb.o \ + iauLtpecl.o \ + iauLtpequ.o \ + iauNum00a.o \ + iauNum00b.o \ + iauNum06a.o \ + iauNumat.o \ + iauNut00a.o \ + iauNut00b.o \ + iauNut06a.o \ + iauNut80.o \ + iauNutm80.o \ + iauObl06.o \ + iauObl80.o \ + iauP06e.o \ + iauP2pv.o \ + iauP2s.o \ + iauPap.o \ + iauPas.o \ + iauPb06.o \ + iauPdp.o \ + iauPfw06.o \ + iauPlan94.o \ + iauPm.o \ + iauPmat00.o \ + iauPmat06.o \ + iauPmat76.o \ + iauPmp.o \ + iauPmpx.o \ + iauPmsafe.o \ + iauPn.o \ + iauPn00.o \ + iauPn00a.o \ + iauPn00b.o \ + iauPn06.o \ + iauPn06a.o \ + iauPnm00a.o \ + iauPnm00b.o \ + iauPnm06a.o \ + iauPnm80.o \ + iauPom00.o \ + iauPpp.o \ + iauPpsp.o \ + iauPr00.o \ + iauPrec76.o \ + iauPv2p.o \ + iauPv2s.o \ + iauPvdpv.o \ + iauPvm.o \ + iauPvmpv.o \ + iauPvppv.o \ + iauPvstar.o \ + iauPvtob.o \ + iauPvu.o \ + iauPvup.o \ + iauPvxpv.o \ + iauPxp.o \ + iauRefco.o \ + iauRm2v.o \ + iauRv2m.o \ + iauRx.o \ + iauRxp.o \ + iauRxpv.o \ + iauRxr.o \ + iauRy.o \ + iauRz.o \ + iauS00.o \ + iauS00a.o \ + iauS00b.o \ + iauS06.o \ + iauS06a.o \ + iauS2c.o \ + iauS2p.o \ + iauS2pv.o \ + iauS2xpv.o \ + iauSepp.o \ + iauSeps.o \ + iauSp00.o \ + iauStarpm.o \ + iauStarpv.o \ + iauSxp.o \ + iauSxpv.o \ + iauTaitt.o \ + iauTaiut1.o \ + iauTaiutc.o \ + iauTcbtdb.o \ + iauTcgtt.o \ + iauTdbtcb.o \ + iauTdbtt.o \ + iauTf2a.o \ + iauTf2d.o \ + iauTpors.o \ + iauTporv.o \ + iauTpsts.o \ + iauTpstv.o \ + iauTpxes.o \ + iauTpxev.o \ + iauTr.o \ + iauTrxp.o \ + iauTrxpv.o \ + iauTttai.o \ + iauTttcg.o \ + iauTttdb.o \ + iauTtut1.o \ + iauUt1tai.o \ + iauUt1tt.o \ + iauUt1utc.o \ + iauUtctai.o \ + iauUtcut1.o \ + iauXy06.o \ + iauXys00a.o \ + iauXys00b.o \ + iauXys06a.o \ + iauZp.o \ + iauZpv.o \ + iauZr.o + +#----------------------------------------------------------------------- +# +# TARGETS +# +#----------------------------------------------------------------------- + +# Build (but do not install) the library. +all : $(SOFA_LIB_NAME) + -@ echo "" + -@ echo "*** Now type 'make test'" \ + " to install the library and run tests ***" + -@ echo "" + +# Install the library and header files. +install $(SOFA_LIB) : $(INSTALL_DIRS) $(SOFA_LIB_NAME) $(SOFA_INC) + cp $(SOFA_LIB_NAME) $(SOFA_LIB_DIR) + +# Deinstall the library and header files. +uninstall: + - $(RM) $(SOFA_LIB) $(SOFA_INC) + +# Test the build. +check: $(SOFA_TEST_NAME) $(SOFA_INC_NAMES) $(SOFA_LIB_NAME) + $(CCOMPC) $(CFLAGX) $(SOFA_TEST_NAME) $(SOFA_LIB_NAME) \ + -lm -o $(SOFA_TEST) + ./$(SOFA_TEST) + +# Test the installed library. +installcheck test: $(SOFA_TEST_NAME) $(SOFA_INC) $(SOFA_LIB) + $(CCOMPC) $(CFLAGX) $(SOFA_TEST_NAME) -I$(SOFA_INC_DIR) \ + -L$(SOFA_LIB_DIR) -lsofa_c -lm -o $(SOFA_TEST) + ./$(SOFA_TEST) + +# Delete object files. +clean : + - $(RM) $(SOFA_OBS) + +# Delete all generated binaries in the current directory. +realclean distclean : clean + - $(RM) $(SOFA_LIB_NAME) $(SOFA_TEST) + +# Create the installation directories if not already present. +$(INSTALL_DIRS): + mkdir -p $@ + +# Build the library. +$(SOFA_LIB_NAME): $(SOFA_OBS) + ar ru $(SOFA_LIB_NAME) $? + +# Install the header files. +$(SOFA_INC) : $(INSTALL_DIRS) $(SOFA_INC_NAMES) + cp $(SOFA_INC_NAMES) $(SOFA_INC_DIR) + +#----------------------------------------------------------------------- + +# The list of object file dependencies + +iauA2af.o : a2af.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ a2af.c +iauA2tf.o : a2tf.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ a2tf.c +iauAb.o : ab.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ab.c +iauAe2hd.o : ae2hd.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ae2hd.c +iauAf2a.o : af2a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ af2a.c +iauAnp.o : anp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ anp.c +iauAnpm.o : anpm.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ anpm.c +iauApcg.o : apcg.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apcg.c +iauApcg13.o : apcg13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apcg13.c +iauApci.o : apci.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apci.c +iauApci13.o : apci13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apci13.c +iauApco.o : apco.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apco.c +iauApco13.o : apco13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apco13.c +iauApcs.o : apcs.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apcs.c +iauApcs13.o : apcs13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apcs13.c +iauAper.o : aper.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ aper.c +iauAper13.o : aper13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ aper13.c +iauApio.o : apio.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apio.c +iauApio13.o : apio13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ apio13.c +iauAtci13.o : atci13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atci13.c +iauAtciq.o : atciq.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atciq.c +iauAtciqn.o : atciqn.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atciqn.c +iauAtciqz.o : atciqz.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atciqz.c +iauAtco13.o : atco13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atco13.c +iauAtic13.o : atic13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atic13.c +iauAticq.o : aticq.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ aticq.c +iauAticqn.o : aticqn.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ aticqn.c +iauAtio13.o : atio13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atio13.c +iauAtioq.o : atioq.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atioq.c +iauAtoc13.o : atoc13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atoc13.c +iauAtoi13.o : atoi13.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atoi13.c +iauAtoiq.o : atoiq.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ atoiq.c +iauBi00.o : bi00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ bi00.c +iauBp00.o : bp00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ bp00.c +iauBp06.o : bp06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ bp06.c +iauBpn2xy.o : bpn2xy.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ bpn2xy.c +iauC2i00a.o : c2i00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2i00a.c +iauC2i00b.o : c2i00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2i00b.c +iauC2i06a.o : c2i06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2i06a.c +iauC2ibpn.o : c2ibpn.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2ibpn.c +iauC2ixy.o : c2ixy.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2ixy.c +iauC2ixys.o : c2ixys.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2ixys.c +iauC2s.o : c2s.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2s.c +iauC2t00a.o : c2t00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2t00a.c +iauC2t00b.o : c2t00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2t00b.c +iauC2t06a.o : c2t06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2t06a.c +iauC2tcio.o : c2tcio.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2tcio.c +iauC2teqx.o : c2teqx.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2teqx.c +iauC2tpe.o : c2tpe.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2tpe.c +iauC2txy.o : c2txy.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ c2txy.c +iauCal2jd.o : cal2jd.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ cal2jd.c +iauCp.o : cp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ cp.c +iauCpv.o : cpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ cpv.c +iauCr.o : cr.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ cr.c +iauD2dtf.o : d2dtf.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ d2dtf.c +iauD2tf.o : d2tf.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ d2tf.c +iauDat.o : dat.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ dat.c +iauDtdb.o : dtdb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ dtdb.c +iauDtf2d.o : dtf2d.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ dtf2d.c +iauEceq06.o : eceq06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eceq06.c +iauEcm06.o : ecm06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ecm06.c +iauEe00.o : ee00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ee00.c +iauEe00a.o : ee00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ee00a.c +iauEe00b.o : ee00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ee00b.c +iauEe06a.o : ee06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ee06a.c +iauEect00.o : eect00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eect00.c +iauEform.o : eform.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eform.c +iauEo06a.o : eo06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eo06a.c +iauEors.o : eors.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eors.c +iauEpb.o : epb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ epb.c +iauEpb2jd.o : epb2jd.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ epb2jd.c +iauEpj.o : epj.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ epj.c +iauEpj2jd.o : epj2jd.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ epj2jd.c +iauEpv00.o : epv00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ epv00.c +iauEqec06.o : eqec06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eqec06.c +iauEqeq94.o : eqeq94.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ eqeq94.c +iauEra00.o : era00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ era00.c +iauFad03.o : fad03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fad03.c +iauFae03.o : fae03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fae03.c +iauFaf03.o : faf03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ faf03.c +iauFaju03.o : faju03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ faju03.c +iauFal03.o : fal03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fal03.c +iauFalp03.o : falp03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ falp03.c +iauFama03.o : fama03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fama03.c +iauFame03.o : fame03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fame03.c +iauFane03.o : fane03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fane03.c +iauFaom03.o : faom03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ faom03.c +iauFapa03.o : fapa03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fapa03.c +iauFasa03.o : fasa03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fasa03.c +iauFaur03.o : faur03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ faur03.c +iauFave03.o : fave03.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fave03.c +iauFk425.o : fk425.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk425.c +iauFk45z.o : fk45z.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk45z.c +iauFk524.o : fk524.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk524.c +iauFk52h.o : fk52h.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk52h.c +iauFk54z.o : fk54z.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk54z.c +iauFk5hip.o : fk5hip.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk5hip.c +iauFk5hz.o : fk5hz.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fk5hz.c +iauFw2m.o : fw2m.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fw2m.c +iauFw2xy.o : fw2xy.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ fw2xy.c +iauG2icrs.o : g2icrs.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ g2icrs.c +iauGc2gd.o : gc2gd.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gc2gd.c +iauGc2gde.o : gc2gde.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gc2gde.c +iauGd2gc.o : gd2gc.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gd2gc.c +iauGd2gce.o : gd2gce.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gd2gce.c +iauGmst00.o : gmst00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gmst00.c +iauGmst06.o : gmst06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gmst06.c +iauGmst82.o : gmst82.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gmst82.c +iauGst00a.o : gst00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gst00a.c +iauGst00b.o : gst00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gst00b.c +iauGst06.o : gst06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gst06.c +iauGst06a.o : gst06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gst06a.c +iauGst94.o : gst94.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ gst94.c +iauH2fk5.o : h2fk5.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ h2fk5.c +iauHd2ae.o : hd2ae.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ hd2ae.c +iauHd2pa.o : hd2pa.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ hd2pa.c +iauHfk5z.o : hfk5z.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ hfk5z.c +iauIcrs2g.o : icrs2g.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ icrs2g.c +iauIr.o : ir.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ir.c +iauJd2cal.o : jd2cal.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ jd2cal.c +iauJdcalf.o : jdcalf.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ jdcalf.c +iauLd.o : ld.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ld.c +iauLdn.o : ldn.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ldn.c +iauLdsun.o : ldsun.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ldsun.c +iauLteceq.o : lteceq.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ lteceq.c +iauLtecm.o : ltecm.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ltecm.c +iauLteqec.o : lteqec.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ lteqec.c +iauLtp.o : ltp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ltp.c +iauLtpb.o : ltpb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ltpb.c +iauLtpecl.o : ltpecl.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ltpecl.c +iauLtpequ.o : ltpequ.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ltpequ.c +iauNum00a.o : num00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ num00a.c +iauNum00b.o : num00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ num00b.c +iauNum06a.o : num06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ num06a.c +iauNumat.o : numat.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ numat.c +iauNut00a.o : nut00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ nut00a.c +iauNut00b.o : nut00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ nut00b.c +iauNut06a.o : nut06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ nut06a.c +iauNut80.o : nut80.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ nut80.c +iauNutm80.o : nutm80.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ nutm80.c +iauObl06.o : obl06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ obl06.c +iauObl80.o : obl80.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ obl80.c +iauP06e.o : p06e.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ p06e.c +iauP2pv.o : p2pv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ p2pv.c +iauP2s.o : p2s.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ p2s.c +iauPap.o : pap.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pap.c +iauPas.o : pas.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pas.c +iauPb06.o : pb06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pb06.c +iauPdp.o : pdp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pdp.c +iauPfw06.o : pfw06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pfw06.c +iauPlan94.o : plan94.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ plan94.c +iauPm.o : pm.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pm.c +iauPmat00.o : pmat00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmat00.c +iauPmat06.o : pmat06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmat06.c +iauPmat76.o : pmat76.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmat76.c +iauPmp.o : pmp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmp.c +iauPmpx.o : pmpx.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmpx.c +iauPmsafe.o : pmsafe.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pmsafe.c +iauPn.o : pn.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn.c +iauPn00.o : pn00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn00.c +iauPn00a.o : pn00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn00a.c +iauPn00b.o : pn00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn00b.c +iauPn06.o : pn06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn06.c +iauPn06a.o : pn06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pn06a.c +iauPnm00a.o : pnm00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pnm00a.c +iauPnm00b.o : pnm00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pnm00b.c +iauPnm06a.o : pnm06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pnm06a.c +iauPnm80.o : pnm80.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pnm80.c +iauPom00.o : pom00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pom00.c +iauPpp.o : ppp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ppp.c +iauPpsp.o : ppsp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ppsp.c +iauPr00.o : pr00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pr00.c +iauPrec76.o : prec76.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ prec76.c +iauPv2p.o : pv2p.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pv2p.c +iauPv2s.o : pv2s.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pv2s.c +iauPvdpv.o : pvdpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvdpv.c +iauPvm.o : pvm.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvm.c +iauPvmpv.o : pvmpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvmpv.c +iauPvppv.o : pvppv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvppv.c +iauPvstar.o : pvstar.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvstar.c +iauPvtob.o : pvtob.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvtob.c +iauPvu.o : pvu.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvu.c +iauPvup.o : pvup.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvup.c +iauPvxpv.o : pvxpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pvxpv.c +iauPxp.o : pxp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ pxp.c +iauRefco.o : refco.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ refco.c +iauRm2v.o : rm2v.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rm2v.c +iauRv2m.o : rv2m.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rv2m.c +iauRx.o : rx.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rx.c +iauRxp.o : rxp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rxp.c +iauRxpv.o : rxpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rxpv.c +iauRxr.o : rxr.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rxr.c +iauRy.o : ry.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ry.c +iauRz.o : rz.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ rz.c +iauS00.o : s00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s00.c +iauS00a.o : s00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s00a.c +iauS00b.o : s00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s00b.c +iauS06.o : s06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s06.c +iauS06a.o : s06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s06a.c +iauS2c.o : s2c.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s2c.c +iauS2p.o : s2p.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s2p.c +iauS2pv.o : s2pv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s2pv.c +iauS2xpv.o : s2xpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ s2xpv.c +iauSepp.o : sepp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ sepp.c +iauSeps.o : seps.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ seps.c +iauSp00.o : sp00.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ sp00.c +iauStarpm.o : starpm.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ starpm.c +iauStarpv.o : starpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ starpv.c +iauSxp.o : sxp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ sxp.c +iauSxpv.o : sxpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ sxpv.c +iauTaitt.o : taitt.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ taitt.c +iauTaiut1.o : taiut1.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ taiut1.c +iauTaiutc.o : taiutc.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ taiutc.c +iauTcbtdb.o : tcbtdb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tcbtdb.c +iauTcgtt.o : tcgtt.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tcgtt.c +iauTdbtcb.o : tdbtcb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tdbtcb.c +iauTdbtt.o : tdbtt.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tdbtt.c +iauTf2a.o : tf2a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tf2a.c +iauTf2d.o : tf2d.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tf2d.c +iauTpors.o : tpors.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tpors.c +iauTporv.o : tporv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tporv.c +iauTpsts.o : tpsts.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tpsts.c +iauTpstv.o : tpstv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tpstv.c +iauTpxes.o : tpxes.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tpxes.c +iauTpxev.o : tpxev.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tpxev.c +iauTr.o : tr.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tr.c +iauTrxp.o : trxp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ trxp.c +iauTrxpv.o : trxpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ trxpv.c +iauTttai.o : tttai.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tttai.c +iauTttcg.o : tttcg.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tttcg.c +iauTttdb.o : tttdb.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ tttdb.c +iauTtut1.o : ttut1.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ttut1.c +iauUt1tai.o : ut1tai.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ut1tai.c +iauUt1tt.o : ut1tt.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ut1tt.c +iauUt1utc.o : ut1utc.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ ut1utc.c +iauUtctai.o : utctai.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ utctai.c +iauUtcut1.o : utcut1.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ utcut1.c +iauXy06.o : xy06.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ xy06.c +iauXys00a.o : xys00a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ xys00a.c +iauXys00b.o : xys00b.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ xys00b.c +iauXys06a.o : xys06a.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ xys06a.c +iauZp.o : zp.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ zp.c +iauZpv.o : zpv.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ zpv.c +iauZr.o : zr.c sofa.h sofam.h + $(CCOMPC) $(CFLAGF) -o $@ zr.c + +#----------------------------------------------------------------------- diff --git a/20200721/c/src/num00a.c b/20200721/c/src/num00a.c new file mode 100644 index 0000000..87c089e --- /dev/null +++ b/20200721/c/src/num00a.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +void iauNum00a(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 0 a +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauNum00b function. +** +** Called: +** iauPn00a bias/precession/nutation, IAU 2000A +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3]; + + +/* Obtain the required matrix (discarding other results). */ + iauPn00a(date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/num00b.c b/20200721/c/src/num00b.c new file mode 100644 index 0000000..6e8152a --- /dev/null +++ b/20200721/c/src/num00b.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +void iauNum00b(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 0 b +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauNum00a function. +** +** Called: +** iauPn00b bias/precession/nutation, IAU 2000B +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3]; + + +/* Obtain the required matrix (discarding other results). */ + iauPn00b(date1, date2, + &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/num06a.c b/20200721/c/src/num06a.c new file mode 100644 index 0000000..3327516 --- /dev/null +++ b/20200721/c/src/num06a.c @@ -0,0 +1,175 @@ +#include "sofa.h" + +void iauNum06a(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u m 0 6 a +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 2006/2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), where +** the p-vector V(true) is with respect to the true equatorial triad +** of date and the p-vector V(mean) is with respect to the mean +** equatorial triad of date. +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** iauNut06a nutation, IAU 2006/2000A +** iauNumat form nutation matrix +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double eps, dp, de; + + +/* Mean obliquity. */ + eps = iauObl06(date1, date2); + +/* Nutation components. */ + iauNut06a(date1, date2, &dp, &de); + +/* Nutation matrix. */ + iauNumat(eps, dp, de, rmatn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/numat.c b/20200721/c/src/numat.c new file mode 100644 index 0000000..9c190b6 --- /dev/null +++ b/20200721/c/src/numat.c @@ -0,0 +1,159 @@ +#include "sofa.h" + +void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3]) +/* +** - - - - - - - - - +** i a u N u m a t +** - - - - - - - - - +** +** Form the matrix of nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** epsa double mean obliquity of date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** rmatn double[3][3] nutation matrix (Note 3) +** +** Notes: +** +** +** 1) The supplied mean obliquity epsa, must be consistent with the +** precession-nutation models from which dpsi and deps were obtained. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. +** +** 3) The matrix operates in the sense V(true) = rmatn * V(mean), +** where the p-vector V(true) is with respect to the true +** equatorial triad of date and the p-vector V(mean) is with +** respect to the mean equatorial triad of date. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRx rotate around X-axis +** iauRz rotate around Z-axis +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222-3 (p114). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Build the rotation matrix. */ + iauIr(rmatn); + iauRx(epsa, rmatn); + iauRz(-dpsi, rmatn); + iauRx(-(epsa + deps), rmatn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/nut00a.c b/20200721/c/src/nut00a.c new file mode 100644 index 0000000..452bfa2 --- /dev/null +++ b/20200721/c/src/nut00a.c @@ -0,0 +1,2097 @@ +#include "sofa.h" + +void iauNut00a(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 0 a +** - - - - - - - - - - +** +** Nutation, IAU 2000A model (MHB2000 luni-solar and planetary nutation +** with free core nutation omitted). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the equinox and ecliptic of date. The +** obliquity at J2000.0 is assumed to be the Lieske et al. (1977) +** value of 84381.448 arcsec. +** +** Both the luni-solar and planetary nutations are included. The +** latter are due to direct planetary nutations and the +** perturbations of the lunar and terrestrial orbits. +** +** 3) The function computes the MHB2000 nutation series with the +** associated corrections for planetary nutations. It is an +** implementation of the nutation part of the IAU 2000A precession- +** nutation model, formally adopted by the IAU General Assembly in +** 2000, namely MHB2000 (Mathews et al. 2002), but with the free +** core nutation (FCN - see Note 4) omitted. +** +** 4) The full MHB2000 model also contains contributions to the +** nutations in longitude and obliquity due to the free-excitation +** of the free-core-nutation during the period 1979-2000. These FCN +** terms, which are time-dependent and unpredictable, are NOT +** included in the present function and, if required, must be +** independently computed. With the FCN corrections included, the +** present function delivers a pole which is at current epochs +** accurate to a few hundred microarcseconds. The omission of FCN +** introduces further errors of about that size. +** +** 5) The present function provides classical nutation. The MHB2000 +** algorithm, from which it is adapted, deals also with (i) the +** offsets between the GCRS and mean poles and (ii) the adjustments +** in longitude and obliquity due to the changed precession rates. +** These additional functions, namely frame bias and precession +** adjustments, are supported by the SOFA functions iauBi00 and +** iauPr00. +** +** 6) The MHB2000 algorithm also provides "total" nutations, comprising +** the arithmetic sum of the frame bias, precession adjustments, +** luni-solar nutation and planetary nutation. These total +** nutations can be used in combination with an existing IAU 1976 +** precession implementation, such as iauPmat76, to deliver GCRS- +** to-true predictions of sub-mas accuracy at current dates. +** However, there are three shortcomings in the MHB2000 model that +** must be taken into account if more accurate or definitive results +** are required (see Wallace 2002): +** +** (i) The MHB2000 total nutations are simply arithmetic sums, +** yet in reality the various components are successive Euler +** rotations. This slight lack of rigor leads to cross terms +** that exceed 1 mas after a century. The rigorous procedure +** is to form the GCRS-to-true rotation matrix by applying the +** bias, precession and nutation in that order. +** +** (ii) Although the precession adjustments are stated to be with +** respect to Lieske et al. (1977), the MHB2000 model does +** not specify which set of Euler angles are to be used and +** how the adjustments are to be applied. The most literal +** and straightforward procedure is to adopt the 4-rotation +** epsilon_0, psi_A, omega_A, xi_A option, and to add DPSIPR +** to psi_A and DEPSPR to both omega_A and eps_A. +** +** (iii) The MHB2000 model predates the determination by Chapront +** et al. (2002) of a 14.6 mas displacement between the +** J2000.0 mean equinox and the origin of the ICRS frame. It +** should, however, be noted that neglecting this displacement +** when calculating star coordinates does not lead to a +** 14.6 mas change in right ascension, only a small second- +** order distortion in the pattern of the precession-nutation +** effect. +** +** For these reasons, the SOFA functions do not generate the "total +** nutations" directly, though they can of course easily be +** generated by calling iauBi00, iauPr00 and the present function +** and adding the results. +** +** 7) The MHB2000 model contains 41 instances where the same frequency +** appears multiple times, of which 38 are duplicates and three are +** triplicates. To keep the present code close to the original MHB +** algorithm, this small inefficiency has not been corrected. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFaf03 mean argument of the latitude of the Moon +** iauFaom03 mean longitude of the Moon's ascending node +** iauFame03 mean longitude of Mercury +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFama03 mean longitude of Mars +** iauFaju03 mean longitude of Jupiter +** iauFasa03 mean longitude of Saturn +** iauFaur03 mean longitude of Uranus +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G. 2002, +** Astron.Astrophys. 387, 700 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res. +** 107, B4. The MHB_2000 code itself was obtained on 9th September +** 2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002) +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i; + double t, el, elp, f, d, om, arg, dp, de, sarg, carg, + al, af, ad, aom, alme, alve, alea, alma, + alju, alsa, alur, alne, apa, dpsils, depsls, + dpsipl, depspl; + +/* Units of 0.1 microarcsecond to radians */ + const double U2R = DAS2R / 1e7; + +/* ------------------------- */ +/* Luni-Solar nutation model */ +/* ------------------------- */ + +/* The units for the sine and cosine coefficients are */ +/* 0.1 microarcsecond and the same per Julian century */ + + static const struct { + int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */ + double sp,spt,cp; /* longitude sin, t*sin, cos coefficients */ + double ce,cet,se; /* obliquity cos, t*cos, sin coefficients */ + } xls[] = { + + /* 1- 10 */ + { 0, 0, 0, 0, 1, + -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0}, + { 0, 0, 2,-2, 2, + -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0}, + { 0, 0, 2, 0, 2,-2276413.0,-234.0,2796.0,978459.0,-485.0, 1374.0}, + { 0, 0, 0, 0, 2,2074554.0, 207.0, -698.0,-897492.0,470.0, -291.0}, + { 0, 1, 0, 0, 0,1475877.0,-3633.0,11817.0,73871.0,-184.0,-1924.0}, + { 0, 1, 2,-2, 2,-516821.0,1226.0, -524.0,224386.0,-677.0, -174.0}, + { 1, 0, 0, 0, 0, 711159.0, 73.0, -872.0, -6750.0, 0.0, 358.0}, + { 0, 0, 2, 0, 1,-387298.0,-367.0, 380.0, 200728.0, 18.0, 318.0}, + { 1, 0, 2, 0, 2,-301461.0, -36.0, 816.0, 129025.0,-63.0, 367.0}, + { 0,-1, 2,-2, 2, 215829.0,-494.0, 111.0, -95929.0,299.0, 132.0}, + + /* 11-20 */ + { 0, 0, 2,-2, 1, 128227.0, 137.0, 181.0, -68982.0, -9.0, 39.0}, + {-1, 0, 2, 0, 2, 123457.0, 11.0, 19.0, -53311.0, 32.0, -4.0}, + {-1, 0, 0, 2, 0, 156994.0, 10.0, -168.0, -1235.0, 0.0, 82.0}, + { 1, 0, 0, 0, 1, 63110.0, 63.0, 27.0, -33228.0, 0.0, -9.0}, + {-1, 0, 0, 0, 1, -57976.0, -63.0, -189.0, 31429.0, 0.0, -75.0}, + {-1, 0, 2, 2, 2, -59641.0, -11.0, 149.0, 25543.0,-11.0, 66.0}, + { 1, 0, 2, 0, 1, -51613.0, -42.0, 129.0, 26366.0, 0.0, 78.0}, + {-2, 0, 2, 0, 1, 45893.0, 50.0, 31.0, -24236.0,-10.0, 20.0}, + { 0, 0, 0, 2, 0, 63384.0, 11.0, -150.0, -1220.0, 0.0, 29.0}, + { 0, 0, 2, 2, 2, -38571.0, -1.0, 158.0, 16452.0,-11.0, 68.0}, + + /* 21-30 */ + { 0,-2, 2,-2, 2, 32481.0, 0.0, 0.0, -13870.0, 0.0, 0.0}, + {-2, 0, 0, 2, 0, -47722.0, 0.0, -18.0, 477.0, 0.0, -25.0}, + { 2, 0, 2, 0, 2, -31046.0, -1.0, 131.0, 13238.0,-11.0, 59.0}, + { 1, 0, 2,-2, 2, 28593.0, 0.0, -1.0, -12338.0, 10.0, -3.0}, + {-1, 0, 2, 0, 1, 20441.0, 21.0, 10.0, -10758.0, 0.0, -3.0}, + { 2, 0, 0, 0, 0, 29243.0, 0.0, -74.0, -609.0, 0.0, 13.0}, + { 0, 0, 2, 0, 0, 25887.0, 0.0, -66.0, -550.0, 0.0, 11.0}, + { 0, 1, 0, 0, 1, -14053.0, -25.0, 79.0, 8551.0, -2.0, -45.0}, + {-1, 0, 0, 2, 1, 15164.0, 10.0, 11.0, -8001.0, 0.0, -1.0}, + { 0, 2, 2,-2, 2, -15794.0, 72.0, -16.0, 6850.0,-42.0, -5.0}, + + /* 31-40 */ + { 0, 0,-2, 2, 0, 21783.0, 0.0, 13.0, -167.0, 0.0, 13.0}, + { 1, 0, 0,-2, 1, -12873.0, -10.0, -37.0, 6953.0, 0.0, -14.0}, + { 0,-1, 0, 0, 1, -12654.0, 11.0, 63.0, 6415.0, 0.0, 26.0}, + {-1, 0, 2, 2, 1, -10204.0, 0.0, 25.0, 5222.0, 0.0, 15.0}, + { 0, 2, 0, 0, 0, 16707.0, -85.0, -10.0, 168.0, -1.0, 10.0}, + { 1, 0, 2, 2, 2, -7691.0, 0.0, 44.0, 3268.0, 0.0, 19.0}, + {-2, 0, 2, 0, 0, -11024.0, 0.0, -14.0, 104.0, 0.0, 2.0}, + { 0, 1, 2, 0, 2, 7566.0, -21.0, -11.0, -3250.0, 0.0, -5.0}, + { 0, 0, 2, 2, 1, -6637.0, -11.0, 25.0, 3353.0, 0.0, 14.0}, + { 0,-1, 2, 0, 2, -7141.0, 21.0, 8.0, 3070.0, 0.0, 4.0}, + + /* 41-50 */ + { 0, 0, 0, 2, 1, -6302.0, -11.0, 2.0, 3272.0, 0.0, 4.0}, + { 1, 0, 2,-2, 1, 5800.0, 10.0, 2.0, -3045.0, 0.0, -1.0}, + { 2, 0, 2,-2, 2, 6443.0, 0.0, -7.0, -2768.0, 0.0, -4.0}, + {-2, 0, 0, 2, 1, -5774.0, -11.0, -15.0, 3041.0, 0.0, -5.0}, + { 2, 0, 2, 0, 1, -5350.0, 0.0, 21.0, 2695.0, 0.0, 12.0}, + { 0,-1, 2,-2, 1, -4752.0, -11.0, -3.0, 2719.0, 0.0, -3.0}, + { 0, 0, 0,-2, 1, -4940.0, -11.0, -21.0, 2720.0, 0.0, -9.0}, + {-1,-1, 0, 2, 0, 7350.0, 0.0, -8.0, -51.0, 0.0, 4.0}, + { 2, 0, 0,-2, 1, 4065.0, 0.0, 6.0, -2206.0, 0.0, 1.0}, + { 1, 0, 0, 2, 0, 6579.0, 0.0, -24.0, -199.0, 0.0, 2.0}, + + /* 51-60 */ + { 0, 1, 2,-2, 1, 3579.0, 0.0, 5.0, -1900.0, 0.0, 1.0}, + { 1,-1, 0, 0, 0, 4725.0, 0.0, -6.0, -41.0, 0.0, 3.0}, + {-2, 0, 2, 0, 2, -3075.0, 0.0, -2.0, 1313.0, 0.0, -1.0}, + { 3, 0, 2, 0, 2, -2904.0, 0.0, 15.0, 1233.0, 0.0, 7.0}, + { 0,-1, 0, 2, 0, 4348.0, 0.0, -10.0, -81.0, 0.0, 2.0}, + { 1,-1, 2, 0, 2, -2878.0, 0.0, 8.0, 1232.0, 0.0, 4.0}, + { 0, 0, 0, 1, 0, -4230.0, 0.0, 5.0, -20.0, 0.0, -2.0}, + {-1,-1, 2, 2, 2, -2819.0, 0.0, 7.0, 1207.0, 0.0, 3.0}, + {-1, 0, 2, 0, 0, -4056.0, 0.0, 5.0, 40.0, 0.0, -2.0}, + { 0,-1, 2, 2, 2, -2647.0, 0.0, 11.0, 1129.0, 0.0, 5.0}, + + /* 61-70 */ + {-2, 0, 0, 0, 1, -2294.0, 0.0, -10.0, 1266.0, 0.0, -4.0}, + { 1, 1, 2, 0, 2, 2481.0, 0.0, -7.0, -1062.0, 0.0, -3.0}, + { 2, 0, 0, 0, 1, 2179.0, 0.0, -2.0, -1129.0, 0.0, -2.0}, + {-1, 1, 0, 1, 0, 3276.0, 0.0, 1.0, -9.0, 0.0, 0.0}, + { 1, 1, 0, 0, 0, -3389.0, 0.0, 5.0, 35.0, 0.0, -2.0}, + { 1, 0, 2, 0, 0, 3339.0, 0.0, -13.0, -107.0, 0.0, 1.0}, + {-1, 0, 2,-2, 1, -1987.0, 0.0, -6.0, 1073.0, 0.0, -2.0}, + { 1, 0, 0, 0, 2, -1981.0, 0.0, 0.0, 854.0, 0.0, 0.0}, + {-1, 0, 0, 1, 0, 4026.0, 0.0, -353.0, -553.0, 0.0, -139.0}, + { 0, 0, 2, 1, 2, 1660.0, 0.0, -5.0, -710.0, 0.0, -2.0}, + + /* 71-80 */ + {-1, 0, 2, 4, 2, -1521.0, 0.0, 9.0, 647.0, 0.0, 4.0}, + {-1, 1, 0, 1, 1, 1314.0, 0.0, 0.0, -700.0, 0.0, 0.0}, + { 0,-2, 2,-2, 1, -1283.0, 0.0, 0.0, 672.0, 0.0, 0.0}, + { 1, 0, 2, 2, 1, -1331.0, 0.0, 8.0, 663.0, 0.0, 4.0}, + {-2, 0, 2, 2, 2, 1383.0, 0.0, -2.0, -594.0, 0.0, -2.0}, + {-1, 0, 0, 0, 2, 1405.0, 0.0, 4.0, -610.0, 0.0, 2.0}, + { 1, 1, 2,-2, 2, 1290.0, 0.0, 0.0, -556.0, 0.0, 0.0}, + {-2, 0, 2, 4, 2, -1214.0, 0.0, 5.0, 518.0, 0.0, 2.0}, + {-1, 0, 4, 0, 2, 1146.0, 0.0, -3.0, -490.0, 0.0, -1.0}, + { 2, 0, 2,-2, 1, 1019.0, 0.0, -1.0, -527.0, 0.0, -1.0}, + + /* 81-90 */ + { 2, 0, 2, 2, 2, -1100.0, 0.0, 9.0, 465.0, 0.0, 4.0}, + { 1, 0, 0, 2, 1, -970.0, 0.0, 2.0, 496.0, 0.0, 1.0}, + { 3, 0, 0, 0, 0, 1575.0, 0.0, -6.0, -50.0, 0.0, 0.0}, + { 3, 0, 2,-2, 2, 934.0, 0.0, -3.0, -399.0, 0.0, -1.0}, + { 0, 0, 4,-2, 2, 922.0, 0.0, -1.0, -395.0, 0.0, -1.0}, + { 0, 1, 2, 0, 1, 815.0, 0.0, -1.0, -422.0, 0.0, -1.0}, + { 0, 0,-2, 2, 1, 834.0, 0.0, 2.0, -440.0, 0.0, 1.0}, + { 0, 0, 2,-2, 3, 1248.0, 0.0, 0.0, -170.0, 0.0, 1.0}, + {-1, 0, 0, 4, 0, 1338.0, 0.0, -5.0, -39.0, 0.0, 0.0}, + { 2, 0,-2, 0, 1, 716.0, 0.0, -2.0, -389.0, 0.0, -1.0}, + + /* 91-100 */ + {-2, 0, 0, 4, 0, 1282.0, 0.0, -3.0, -23.0, 0.0, 1.0}, + {-1,-1, 0, 2, 1, 742.0, 0.0, 1.0, -391.0, 0.0, 0.0}, + {-1, 0, 0, 1, 1, 1020.0, 0.0, -25.0, -495.0, 0.0, -10.0}, + { 0, 1, 0, 0, 2, 715.0, 0.0, -4.0, -326.0, 0.0, 2.0}, + { 0, 0,-2, 0, 1, -666.0, 0.0, -3.0, 369.0, 0.0, -1.0}, + { 0,-1, 2, 0, 1, -667.0, 0.0, 1.0, 346.0, 0.0, 1.0}, + { 0, 0, 2,-1, 2, -704.0, 0.0, 0.0, 304.0, 0.0, 0.0}, + { 0, 0, 2, 4, 2, -694.0, 0.0, 5.0, 294.0, 0.0, 2.0}, + {-2,-1, 0, 2, 0, -1014.0, 0.0, -1.0, 4.0, 0.0, -1.0}, + { 1, 1, 0,-2, 1, -585.0, 0.0, -2.0, 316.0, 0.0, -1.0}, + + /* 101-110 */ + {-1, 1, 0, 2, 0, -949.0, 0.0, 1.0, 8.0, 0.0, -1.0}, + {-1, 1, 0, 1, 2, -595.0, 0.0, 0.0, 258.0, 0.0, 0.0}, + { 1,-1, 0, 0, 1, 528.0, 0.0, 0.0, -279.0, 0.0, 0.0}, + { 1,-1, 2, 2, 2, -590.0, 0.0, 4.0, 252.0, 0.0, 2.0}, + {-1, 1, 2, 2, 2, 570.0, 0.0, -2.0, -244.0, 0.0, -1.0}, + { 3, 0, 2, 0, 1, -502.0, 0.0, 3.0, 250.0, 0.0, 2.0}, + { 0, 1,-2, 2, 0, -875.0, 0.0, 1.0, 29.0, 0.0, 0.0}, + {-1, 0, 0,-2, 1, -492.0, 0.0, -3.0, 275.0, 0.0, -1.0}, + { 0, 1, 2, 2, 2, 535.0, 0.0, -2.0, -228.0, 0.0, -1.0}, + {-1,-1, 2, 2, 1, -467.0, 0.0, 1.0, 240.0, 0.0, 1.0}, + + /* 111-120 */ + { 0,-1, 0, 0, 2, 591.0, 0.0, 0.0, -253.0, 0.0, 0.0}, + { 1, 0, 2,-4, 1, -453.0, 0.0, -1.0, 244.0, 0.0, -1.0}, + {-1, 0,-2, 2, 0, 766.0, 0.0, 1.0, 9.0, 0.0, 0.0}, + { 0,-1, 2, 2, 1, -446.0, 0.0, 2.0, 225.0, 0.0, 1.0}, + { 2,-1, 2, 0, 2, -488.0, 0.0, 2.0, 207.0, 0.0, 1.0}, + { 0, 0, 0, 2, 2, -468.0, 0.0, 0.0, 201.0, 0.0, 0.0}, + { 1,-1, 2, 0, 1, -421.0, 0.0, 1.0, 216.0, 0.0, 1.0}, + {-1, 1, 2, 0, 2, 463.0, 0.0, 0.0, -200.0, 0.0, 0.0}, + { 0, 1, 0, 2, 0, -673.0, 0.0, 2.0, 14.0, 0.0, 0.0}, + { 0,-1,-2, 2, 0, 658.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 121-130 */ + { 0, 3, 2,-2, 2, -438.0, 0.0, 0.0, 188.0, 0.0, 0.0}, + { 0, 0, 0, 1, 1, -390.0, 0.0, 0.0, 205.0, 0.0, 0.0}, + {-1, 0, 2, 2, 0, 639.0, -11.0, -2.0, -19.0, 0.0, 0.0}, + { 2, 1, 2, 0, 2, 412.0, 0.0, -2.0, -176.0, 0.0, -1.0}, + { 1, 1, 0, 0, 1, -361.0, 0.0, 0.0, 189.0, 0.0, 0.0}, + { 1, 1, 2, 0, 1, 360.0, 0.0, -1.0, -185.0, 0.0, -1.0}, + { 2, 0, 0, 2, 0, 588.0, 0.0, -3.0, -24.0, 0.0, 0.0}, + { 1, 0,-2, 2, 0, -578.0, 0.0, 1.0, 5.0, 0.0, 0.0}, + {-1, 0, 0, 2, 2, -396.0, 0.0, 0.0, 171.0, 0.0, 0.0}, + { 0, 1, 0, 1, 0, 565.0, 0.0, -1.0, -6.0, 0.0, 0.0}, + + /* 131-140 */ + { 0, 1, 0,-2, 1, -335.0, 0.0, -1.0, 184.0, 0.0, -1.0}, + {-1, 0, 2,-2, 2, 357.0, 0.0, 1.0, -154.0, 0.0, 0.0}, + { 0, 0, 0,-1, 1, 321.0, 0.0, 1.0, -174.0, 0.0, 0.0}, + {-1, 1, 0, 0, 1, -301.0, 0.0, -1.0, 162.0, 0.0, 0.0}, + { 1, 0, 2,-1, 2, -334.0, 0.0, 0.0, 144.0, 0.0, 0.0}, + { 1,-1, 0, 2, 0, 493.0, 0.0, -2.0, -15.0, 0.0, 0.0}, + { 0, 0, 0, 4, 0, 494.0, 0.0, -2.0, -19.0, 0.0, 0.0}, + { 1, 0, 2, 1, 2, 337.0, 0.0, -1.0, -143.0, 0.0, -1.0}, + { 0, 0, 2, 1, 1, 280.0, 0.0, -1.0, -144.0, 0.0, 0.0}, + { 1, 0, 0,-2, 2, 309.0, 0.0, 1.0, -134.0, 0.0, 0.0}, + + /* 141-150 */ + {-1, 0, 2, 4, 1, -263.0, 0.0, 2.0, 131.0, 0.0, 1.0}, + { 1, 0,-2, 0, 1, 253.0, 0.0, 1.0, -138.0, 0.0, 0.0}, + { 1, 1, 2,-2, 1, 245.0, 0.0, 0.0, -128.0, 0.0, 0.0}, + { 0, 0, 2, 2, 0, 416.0, 0.0, -2.0, -17.0, 0.0, 0.0}, + {-1, 0, 2,-1, 1, -229.0, 0.0, 0.0, 128.0, 0.0, 0.0}, + {-2, 0, 2, 2, 1, 231.0, 0.0, 0.0, -120.0, 0.0, 0.0}, + { 4, 0, 2, 0, 2, -259.0, 0.0, 2.0, 109.0, 0.0, 1.0}, + { 2,-1, 0, 0, 0, 375.0, 0.0, -1.0, -8.0, 0.0, 0.0}, + { 2, 1, 2,-2, 2, 252.0, 0.0, 0.0, -108.0, 0.0, 0.0}, + { 0, 1, 2, 1, 2, -245.0, 0.0, 1.0, 104.0, 0.0, 0.0}, + + /* 151-160 */ + { 1, 0, 4,-2, 2, 243.0, 0.0, -1.0, -104.0, 0.0, 0.0}, + {-1,-1, 0, 0, 1, 208.0, 0.0, 1.0, -112.0, 0.0, 0.0}, + { 0, 1, 0, 2, 1, 199.0, 0.0, 0.0, -102.0, 0.0, 0.0}, + {-2, 0, 2, 4, 1, -208.0, 0.0, 1.0, 105.0, 0.0, 0.0}, + { 2, 0, 2, 0, 0, 335.0, 0.0, -2.0, -14.0, 0.0, 0.0}, + { 1, 0, 0, 1, 0, -325.0, 0.0, 1.0, 7.0, 0.0, 0.0}, + {-1, 0, 0, 4, 1, -187.0, 0.0, 0.0, 96.0, 0.0, 0.0}, + {-1, 0, 4, 0, 1, 197.0, 0.0, -1.0, -100.0, 0.0, 0.0}, + { 2, 0, 2, 2, 1, -192.0, 0.0, 2.0, 94.0, 0.0, 1.0}, + { 0, 0, 2,-3, 2, -188.0, 0.0, 0.0, 83.0, 0.0, 0.0}, + + /* 161-170 */ + {-1,-2, 0, 2, 0, 276.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 1, 0, 0, 0, -286.0, 0.0, 1.0, 6.0, 0.0, 0.0}, + { 0, 0, 4, 0, 2, 186.0, 0.0, -1.0, -79.0, 0.0, 0.0}, + { 0, 0, 0, 0, 3, -219.0, 0.0, 0.0, 43.0, 0.0, 0.0}, + { 0, 3, 0, 0, 0, 276.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 2,-4, 1, -153.0, 0.0, -1.0, 84.0, 0.0, 0.0}, + { 0,-1, 0, 2, 1, -156.0, 0.0, 0.0, 81.0, 0.0, 0.0}, + { 0, 0, 0, 4, 1, -154.0, 0.0, 1.0, 78.0, 0.0, 0.0}, + {-1,-1, 2, 4, 2, -174.0, 0.0, 1.0, 75.0, 0.0, 0.0}, + { 1, 0, 2, 4, 2, -163.0, 0.0, 2.0, 69.0, 0.0, 1.0}, + + /* 171-180 */ + {-2, 2, 0, 2, 0, -228.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-2,-1, 2, 0, 1, 91.0, 0.0, -4.0, -54.0, 0.0, -2.0}, + {-2, 0, 0, 2, 2, 175.0, 0.0, 0.0, -75.0, 0.0, 0.0}, + {-1,-1, 2, 0, 2, -159.0, 0.0, 0.0, 69.0, 0.0, 0.0}, + { 0, 0, 4,-2, 1, 141.0, 0.0, 0.0, -72.0, 0.0, 0.0}, + { 3, 0, 2,-2, 1, 147.0, 0.0, 0.0, -75.0, 0.0, 0.0}, + {-2,-1, 0, 2, 1, -132.0, 0.0, 0.0, 69.0, 0.0, 0.0}, + { 1, 0, 0,-1, 1, 159.0, 0.0, -28.0, -54.0, 0.0, 11.0}, + { 0,-2, 0, 2, 0, 213.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + {-2, 0, 0, 4, 1, 123.0, 0.0, 0.0, -64.0, 0.0, 0.0}, + + /* 181-190 */ + {-3, 0, 0, 0, 1, -118.0, 0.0, -1.0, 66.0, 0.0, 0.0}, + { 1, 1, 2, 2, 2, 144.0, 0.0, -1.0, -61.0, 0.0, 0.0}, + { 0, 0, 2, 4, 1, -121.0, 0.0, 1.0, 60.0, 0.0, 0.0}, + { 3, 0, 2, 2, 2, -134.0, 0.0, 1.0, 56.0, 0.0, 1.0}, + {-1, 1, 2,-2, 1, -105.0, 0.0, 0.0, 57.0, 0.0, 0.0}, + { 2, 0, 0,-4, 1, -102.0, 0.0, 0.0, 56.0, 0.0, 0.0}, + { 0, 0, 0,-2, 2, 120.0, 0.0, 0.0, -52.0, 0.0, 0.0}, + { 2, 0, 2,-4, 1, 101.0, 0.0, 0.0, -54.0, 0.0, 0.0}, + {-1, 1, 0, 2, 1, -113.0, 0.0, 0.0, 59.0, 0.0, 0.0}, + { 0, 0, 2,-1, 1, -106.0, 0.0, 0.0, 61.0, 0.0, 0.0}, + + /* 191-200 */ + { 0,-2, 2, 2, 2, -129.0, 0.0, 1.0, 55.0, 0.0, 0.0}, + { 2, 0, 0, 2, 1, -114.0, 0.0, 0.0, 57.0, 0.0, 0.0}, + { 4, 0, 2,-2, 2, 113.0, 0.0, -1.0, -49.0, 0.0, 0.0}, + { 2, 0, 0,-2, 2, -102.0, 0.0, 0.0, 44.0, 0.0, 0.0}, + { 0, 2, 0, 0, 1, -94.0, 0.0, 0.0, 51.0, 0.0, 0.0}, + { 1, 0, 0,-4, 1, -100.0, 0.0, -1.0, 56.0, 0.0, 0.0}, + { 0, 2, 2,-2, 1, 87.0, 0.0, 0.0, -47.0, 0.0, 0.0}, + {-3, 0, 0, 4, 0, 161.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-1, 1, 2, 0, 1, 96.0, 0.0, 0.0, -50.0, 0.0, 0.0}, + {-1,-1, 0, 4, 0, 151.0, 0.0, -1.0, -5.0, 0.0, 0.0}, + + /* 201-210 */ + {-1,-2, 2, 2, 2, -104.0, 0.0, 0.0, 44.0, 0.0, 0.0}, + {-2,-1, 2, 4, 2, -110.0, 0.0, 0.0, 48.0, 0.0, 0.0}, + { 1,-1, 2, 2, 1, -100.0, 0.0, 1.0, 50.0, 0.0, 0.0}, + {-2, 1, 0, 2, 0, 92.0, 0.0, -5.0, 12.0, 0.0, -2.0}, + {-2, 1, 2, 0, 1, 82.0, 0.0, 0.0, -45.0, 0.0, 0.0}, + { 2, 1, 0,-2, 1, 82.0, 0.0, 0.0, -45.0, 0.0, 0.0}, + {-3, 0, 2, 0, 1, -78.0, 0.0, 0.0, 41.0, 0.0, 0.0}, + {-2, 0, 2,-2, 1, -77.0, 0.0, 0.0, 43.0, 0.0, 0.0}, + {-1, 1, 0, 2, 2, 2.0, 0.0, 0.0, 54.0, 0.0, 0.0}, + { 0,-1, 2,-1, 2, 94.0, 0.0, 0.0, -40.0, 0.0, 0.0}, + + /* 211-220 */ + {-1, 0, 4,-2, 2, -93.0, 0.0, 0.0, 40.0, 0.0, 0.0}, + { 0,-2, 2, 0, 2, -83.0, 0.0, 10.0, 40.0, 0.0, -2.0}, + {-1, 0, 2, 1, 2, 83.0, 0.0, 0.0, -36.0, 0.0, 0.0}, + { 2, 0, 0, 0, 2, -91.0, 0.0, 0.0, 39.0, 0.0, 0.0}, + { 0, 0, 2, 0, 3, 128.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-2, 0, 4, 0, 2, -79.0, 0.0, 0.0, 34.0, 0.0, 0.0}, + {-1, 0,-2, 0, 1, -83.0, 0.0, 0.0, 47.0, 0.0, 0.0}, + {-1, 1, 2, 2, 1, 84.0, 0.0, 0.0, -44.0, 0.0, 0.0}, + { 3, 0, 0, 0, 1, 83.0, 0.0, 0.0, -43.0, 0.0, 0.0}, + {-1, 0, 2, 3, 2, 91.0, 0.0, 0.0, -39.0, 0.0, 0.0}, + + /* 221-230 */ + { 2,-1, 2, 0, 1, -77.0, 0.0, 0.0, 39.0, 0.0, 0.0}, + { 0, 1, 2, 2, 1, 84.0, 0.0, 0.0, -43.0, 0.0, 0.0}, + { 0,-1, 2, 4, 2, -92.0, 0.0, 1.0, 39.0, 0.0, 0.0}, + { 2,-1, 2, 2, 2, -92.0, 0.0, 1.0, 39.0, 0.0, 0.0}, + { 0, 2,-2, 2, 0, -94.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 2,-1, 1, 68.0, 0.0, 0.0, -36.0, 0.0, 0.0}, + { 0,-2, 0, 0, 1, -61.0, 0.0, 0.0, 32.0, 0.0, 0.0}, + { 1, 0, 2,-4, 2, 71.0, 0.0, 0.0, -31.0, 0.0, 0.0}, + { 1,-1, 0,-2, 1, 62.0, 0.0, 0.0, -34.0, 0.0, 0.0}, + {-1,-1, 2, 0, 1, -63.0, 0.0, 0.0, 33.0, 0.0, 0.0}, + + /* 231-240 */ + { 1,-1, 2,-2, 2, -73.0, 0.0, 0.0, 32.0, 0.0, 0.0}, + {-2,-1, 0, 4, 0, 115.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 0, 0, 3, 0, -103.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2,-1, 2, 2, 2, 63.0, 0.0, 0.0, -28.0, 0.0, 0.0}, + { 0, 2, 2, 0, 2, 74.0, 0.0, 0.0, -32.0, 0.0, 0.0}, + { 1, 1, 0, 2, 0, -103.0, 0.0, -3.0, 3.0, 0.0, -1.0}, + { 2, 0, 2,-1, 2, -69.0, 0.0, 0.0, 30.0, 0.0, 0.0}, + { 1, 0, 2, 1, 1, 57.0, 0.0, 0.0, -29.0, 0.0, 0.0}, + { 4, 0, 0, 0, 0, 94.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 2, 1, 2, 0, 1, 64.0, 0.0, 0.0, -33.0, 0.0, 0.0}, + + /* 241-250 */ + { 3,-1, 2, 0, 2, -63.0, 0.0, 0.0, 26.0, 0.0, 0.0}, + {-2, 2, 0, 2, 1, -38.0, 0.0, 0.0, 20.0, 0.0, 0.0}, + { 1, 0, 2,-3, 1, -43.0, 0.0, 0.0, 24.0, 0.0, 0.0}, + { 1, 1, 2,-4, 1, -45.0, 0.0, 0.0, 23.0, 0.0, 0.0}, + {-1,-1, 2,-2, 1, 47.0, 0.0, 0.0, -24.0, 0.0, 0.0}, + { 0,-1, 0,-1, 1, -48.0, 0.0, 0.0, 25.0, 0.0, 0.0}, + { 0,-1, 0,-2, 1, 45.0, 0.0, 0.0, -26.0, 0.0, 0.0}, + {-2, 0, 0, 0, 2, 56.0, 0.0, 0.0, -25.0, 0.0, 0.0}, + {-2, 0,-2, 2, 0, 88.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 0,-2, 4, 0, -75.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 251-260 */ + { 1,-2, 0, 0, 0, 85.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 0, 1, 1, 49.0, 0.0, 0.0, -26.0, 0.0, 0.0}, + {-1, 2, 0, 2, 0, -74.0, 0.0, -3.0, -1.0, 0.0, -1.0}, + { 1,-1, 2,-2, 1, -39.0, 0.0, 0.0, 21.0, 0.0, 0.0}, + { 1, 2, 2,-2, 2, 45.0, 0.0, 0.0, -20.0, 0.0, 0.0}, + { 2,-1, 2,-2, 2, 51.0, 0.0, 0.0, -22.0, 0.0, 0.0}, + { 1, 0, 2,-1, 1, -40.0, 0.0, 0.0, 21.0, 0.0, 0.0}, + { 2, 1, 2,-2, 1, 41.0, 0.0, 0.0, -21.0, 0.0, 0.0}, + {-2, 0, 0,-2, 1, -42.0, 0.0, 0.0, 24.0, 0.0, 0.0}, + { 1,-2, 2, 0, 2, -51.0, 0.0, 0.0, 22.0, 0.0, 0.0}, + + /* 261-270 */ + { 0, 1, 2, 1, 1, -42.0, 0.0, 0.0, 22.0, 0.0, 0.0}, + { 1, 0, 4,-2, 1, 39.0, 0.0, 0.0, -21.0, 0.0, 0.0}, + {-2, 0, 4, 2, 2, 46.0, 0.0, 0.0, -18.0, 0.0, 0.0}, + { 1, 1, 2, 1, 2, -53.0, 0.0, 0.0, 22.0, 0.0, 0.0}, + { 1, 0, 0, 4, 0, 82.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 1, 0, 2, 2, 0, 81.0, 0.0, -1.0, -4.0, 0.0, 0.0}, + { 2, 0, 2, 1, 2, 47.0, 0.0, 0.0, -19.0, 0.0, 0.0}, + { 3, 1, 2, 0, 2, 53.0, 0.0, 0.0, -23.0, 0.0, 0.0}, + { 4, 0, 2, 0, 1, -45.0, 0.0, 0.0, 22.0, 0.0, 0.0}, + {-2,-1, 2, 0, 0, -44.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 271-280 */ + { 0, 1,-2, 2, 1, -33.0, 0.0, 0.0, 16.0, 0.0, 0.0}, + { 1, 0,-2, 1, 0, -61.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 0,-1,-2, 2, 1, 28.0, 0.0, 0.0, -15.0, 0.0, 0.0}, + { 2,-1, 0,-2, 1, -38.0, 0.0, 0.0, 19.0, 0.0, 0.0}, + {-1, 0, 2,-1, 2, -33.0, 0.0, 0.0, 21.0, 0.0, 0.0}, + { 1, 0, 2,-3, 2, -60.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 2,-2, 3, 48.0, 0.0, 0.0, -10.0, 0.0, 0.0}, + { 0, 0, 2,-3, 1, 27.0, 0.0, 0.0, -14.0, 0.0, 0.0}, + {-1, 0,-2, 2, 1, 38.0, 0.0, 0.0, -20.0, 0.0, 0.0}, + { 0, 0, 2,-4, 2, 31.0, 0.0, 0.0, -13.0, 0.0, 0.0}, + + /* 281-290 */ + {-2, 1, 0, 0, 1, -29.0, 0.0, 0.0, 15.0, 0.0, 0.0}, + {-1, 0, 0,-1, 1, 28.0, 0.0, 0.0, -15.0, 0.0, 0.0}, + { 2, 0, 2,-4, 2, -32.0, 0.0, 0.0, 15.0, 0.0, 0.0}, + { 0, 0, 4,-4, 4, 45.0, 0.0, 0.0, -8.0, 0.0, 0.0}, + { 0, 0, 4,-4, 2, -44.0, 0.0, 0.0, 19.0, 0.0, 0.0}, + {-1,-2, 0, 2, 1, 28.0, 0.0, 0.0, -15.0, 0.0, 0.0}, + {-2, 0, 0, 3, 0, -51.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0,-2, 2, 1, -36.0, 0.0, 0.0, 20.0, 0.0, 0.0}, + {-3, 0, 2, 2, 2, 44.0, 0.0, 0.0, -19.0, 0.0, 0.0}, + {-3, 0, 2, 2, 1, 26.0, 0.0, 0.0, -14.0, 0.0, 0.0}, + + /* 291-300 */ + {-2, 0, 2, 2, 0, -60.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2,-1, 0, 0, 1, 35.0, 0.0, 0.0, -18.0, 0.0, 0.0}, + {-2, 1, 2, 2, 2, -27.0, 0.0, 0.0, 11.0, 0.0, 0.0}, + { 1, 1, 0, 1, 0, 47.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0, 1, 4,-2, 2, 36.0, 0.0, 0.0, -15.0, 0.0, 0.0}, + {-1, 1, 0,-2, 1, -36.0, 0.0, 0.0, 20.0, 0.0, 0.0}, + { 0, 0, 0,-4, 1, -35.0, 0.0, 0.0, 19.0, 0.0, 0.0}, + { 1,-1, 0, 2, 1, -37.0, 0.0, 0.0, 19.0, 0.0, 0.0}, + { 1, 1, 0, 2, 1, 32.0, 0.0, 0.0, -16.0, 0.0, 0.0}, + {-1, 2, 2, 2, 2, 35.0, 0.0, 0.0, -14.0, 0.0, 0.0}, + + /* 301-310 */ + { 3, 1, 2,-2, 2, 32.0, 0.0, 0.0, -13.0, 0.0, 0.0}, + { 0,-1, 0, 4, 0, 65.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2,-1, 0, 2, 0, 47.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0, 0, 4, 0, 1, 32.0, 0.0, 0.0, -16.0, 0.0, 0.0}, + { 2, 0, 4,-2, 2, 37.0, 0.0, 0.0, -16.0, 0.0, 0.0}, + {-1,-1, 2, 4, 1, -30.0, 0.0, 0.0, 15.0, 0.0, 0.0}, + { 1, 0, 0, 4, 1, -32.0, 0.0, 0.0, 16.0, 0.0, 0.0}, + { 1,-2, 2, 2, 2, -31.0, 0.0, 0.0, 13.0, 0.0, 0.0}, + { 0, 0, 2, 3, 2, 37.0, 0.0, 0.0, -16.0, 0.0, 0.0}, + {-1, 1, 2, 4, 2, 31.0, 0.0, 0.0, -13.0, 0.0, 0.0}, + + /* 311-320 */ + { 3, 0, 0, 2, 0, 49.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 0, 4, 2, 2, 32.0, 0.0, 0.0, -13.0, 0.0, 0.0}, + { 1, 1, 2, 2, 1, 23.0, 0.0, 0.0, -12.0, 0.0, 0.0}, + {-2, 0, 2, 6, 2, -43.0, 0.0, 0.0, 18.0, 0.0, 0.0}, + { 2, 1, 2, 2, 2, 26.0, 0.0, 0.0, -11.0, 0.0, 0.0}, + {-1, 0, 2, 6, 2, -32.0, 0.0, 0.0, 14.0, 0.0, 0.0}, + { 1, 0, 2, 4, 1, -29.0, 0.0, 0.0, 14.0, 0.0, 0.0}, + { 2, 0, 2, 4, 2, -27.0, 0.0, 0.0, 12.0, 0.0, 0.0}, + { 1, 1,-2, 1, 0, 30.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3, 1, 2, 1, 2, -11.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + + /* 321-330 */ + { 2, 0,-2, 0, 2, -21.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + {-1, 0, 0, 1, 2, -34.0, 0.0, 0.0, 15.0, 0.0, 0.0}, + {-4, 0, 2, 2, 1, -10.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + {-1,-1, 0, 1, 0, -36.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0,-2, 2, 2, -9.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 1, 0, 0,-1, 2, -12.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 0,-1, 2,-2, 3, -21.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + {-2, 1, 2, 0, 0, -29.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0, 0, 2,-2, 4, -15.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-2,-2, 0, 2, 0, -20.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 331-340 */ + {-2, 0,-2, 4, 0, 28.0, 0.0, 0.0, 0.0, 0.0, -2.0}, + { 0,-2,-2, 2, 0, 17.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 2, 0,-2, 1, -22.0, 0.0, 0.0, 12.0, 0.0, 0.0}, + { 3, 0, 0,-4, 1, -14.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + {-1, 1, 2,-2, 2, 24.0, 0.0, 0.0, -11.0, 0.0, 0.0}, + { 1,-1, 2,-4, 1, 11.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + { 1, 1, 0,-2, 2, 14.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + {-3, 0, 2, 0, 0, 24.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3, 0, 2, 0, 2, 18.0, 0.0, 0.0, -8.0, 0.0, 0.0}, + {-2, 0, 0, 1, 0, -38.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 341-350 */ + { 0, 0,-2, 1, 0, -31.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3, 0, 0, 2, 1, -16.0, 0.0, 0.0, 8.0, 0.0, 0.0}, + {-1,-1,-2, 2, 0, 29.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 2,-4, 1, -18.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + { 2, 1, 0,-4, 1, -10.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 0, 2, 0,-2, 1, -17.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + { 1, 0, 0,-3, 1, 9.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + {-2, 0, 2,-2, 2, 16.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + {-2,-1, 0, 0, 1, 22.0, 0.0, 0.0, -12.0, 0.0, 0.0}, + {-4, 0, 0, 2, 0, 20.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 351-360 */ + { 1, 1, 0,-4, 1, -13.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + {-1, 0, 2,-4, 1, -17.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + { 0, 0, 4,-4, 1, -14.0, 0.0, 0.0, 8.0, 0.0, 0.0}, + { 0, 3, 2,-2, 2, 0.0, 0.0, 0.0, -7.0, 0.0, 0.0}, + {-3,-1, 0, 4, 0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3, 0, 0, 4, 1, 19.0, 0.0, 0.0, -10.0, 0.0, 0.0}, + { 1,-1,-2, 2, 0, -34.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 0, 2, 2, -20.0, 0.0, 0.0, 8.0, 0.0, 0.0}, + { 1,-2, 0, 0, 1, 9.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + { 1,-1, 0, 0, 2, -18.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + + /* 361-370 */ + { 0, 0, 0, 1, 2, 13.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + {-1,-1, 2, 0, 0, 17.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1,-2, 2,-2, 2, -12.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 0,-1, 2,-1, 1, 15.0, 0.0, 0.0, -8.0, 0.0, 0.0}, + {-1, 0, 2, 0, 3, -11.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 1, 1, 0, 0, 2, 13.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + {-1, 1, 2, 0, 0, -18.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 2, 0, 0, 0, -35.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 2, 2, 0, 2, 9.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + {-1, 0, 4,-2, 1, -19.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + + /* 371-380 */ + { 3, 0, 2,-4, 2, -26.0, 0.0, 0.0, 11.0, 0.0, 0.0}, + { 1, 2, 2,-2, 1, 8.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 1, 0, 4,-4, 2, -10.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + {-2,-1, 0, 4, 1, 10.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + { 0,-1, 0, 2, 2, -21.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + {-2, 1, 0, 4, 0, -15.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2,-1, 2, 2, 1, 9.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + { 2, 0,-2, 2, 0, -29.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 0, 1, 1, -19.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + { 0, 1, 0, 2, 2, 12.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + + /* 381-390 */ + { 1,-1, 2,-1, 2, 22.0, 0.0, 0.0, -9.0, 0.0, 0.0}, + {-2, 0, 4, 0, 1, -10.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 2, 1, 0, 0, 1, -20.0, 0.0, 0.0, 11.0, 0.0, 0.0}, + { 0, 1, 2, 0, 0, -20.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0,-1, 4,-2, 2, -17.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + { 0, 0, 4,-2, 4, 15.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 0, 2, 2, 0, 1, 8.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + {-3, 0, 0, 6, 0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 0, 4, 1, -12.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + { 1,-2, 0, 2, 0, 25.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 391-400 */ + {-1, 0, 0, 4, 2, -13.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + {-1,-2, 2, 2, 1, -14.0, 0.0, 0.0, 8.0, 0.0, 0.0}, + {-1, 0, 0,-2, 2, 13.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + { 1, 0,-2,-2, 1, -17.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + { 0, 0,-2,-2, 1, -12.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + {-2, 0,-2, 0, 1, -10.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 0, 0, 0, 3, 1, 10.0, 0.0, 0.0, -6.0, 0.0, 0.0}, + { 0, 0, 0, 3, 0, -15.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 1, 0, 4, 0, -22.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 2, 2, 0, 28.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + + /* 401-410 */ + {-2, 0, 2, 3, 2, 15.0, 0.0, 0.0, -7.0, 0.0, 0.0}, + { 1, 0, 0, 2, 2, 23.0, 0.0, 0.0, -10.0, 0.0, 0.0}, + { 0,-1, 2, 1, 2, 12.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + { 3,-1, 0, 0, 0, 29.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 2, 0, 0, 1, 0, -25.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 1,-1, 2, 0, 0, 22.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0, 2, 1, 0, -18.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 2, 0, 3, 15.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 3, 1, 0, 0, 0, -23.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 3,-1, 2,-2, 2, 12.0, 0.0, 0.0, -5.0, 0.0, 0.0}, + + /* 411-420 */ + { 2, 0, 2,-1, 1, -8.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 1, 1, 2, 0, 0, -19.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0, 4,-1, 2, -10.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 1, 2, 2, 0, 2, 21.0, 0.0, 0.0, -9.0, 0.0, 0.0}, + {-2, 0, 0, 6, 0, 23.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0,-1, 0, 4, 1, -16.0, 0.0, 0.0, 8.0, 0.0, 0.0}, + {-2,-1, 2, 4, 1, -19.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + { 0,-2, 2, 2, 1, -22.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + { 0,-1, 2, 2, 0, 27.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-1, 0, 2, 3, 1, 16.0, 0.0, 0.0, -8.0, 0.0, 0.0}, + + /* 421-430 */ + {-2, 1, 2, 4, 2, 19.0, 0.0, 0.0, -8.0, 0.0, 0.0}, + { 2, 0, 0, 2, 2, 9.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 2,-2, 2, 0, 2, -9.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + {-1, 1, 2, 3, 2, -9.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 3, 0, 2,-1, 2, -8.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 4, 0, 2,-2, 1, 18.0, 0.0, 0.0, -9.0, 0.0, 0.0}, + {-1, 0, 0, 6, 0, 16.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-1,-2, 2, 4, 2, -10.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + {-3, 0, 2, 6, 2, -23.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + {-1, 0, 2, 4, 0, 16.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + + /* 431-440 */ + { 3, 0, 0, 2, 1, -12.0, 0.0, 0.0, 6.0, 0.0, 0.0}, + { 3,-1, 2, 0, 1, -8.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 3, 0, 2, 0, 0, 30.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 1, 0, 4, 0, 2, 24.0, 0.0, 0.0, -10.0, 0.0, 0.0}, + { 5, 0, 2,-2, 2, 10.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 0,-1, 2, 4, 1, -16.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + { 2,-1, 2, 2, 1, -16.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + { 0, 1, 2, 4, 2, 17.0, 0.0, 0.0, -7.0, 0.0, 0.0}, + { 1,-1, 2, 4, 2, -24.0, 0.0, 0.0, 10.0, 0.0, 0.0}, + { 3,-1, 2, 2, 2, -12.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + + /* 441-450 */ + { 3, 0, 2, 2, 1, -24.0, 0.0, 0.0, 11.0, 0.0, 0.0}, + { 5, 0, 2, 0, 2, -23.0, 0.0, 0.0, 9.0, 0.0, 0.0}, + { 0, 0, 2, 6, 2, -13.0, 0.0, 0.0, 5.0, 0.0, 0.0}, + { 4, 0, 2, 2, 2, -15.0, 0.0, 0.0, 7.0, 0.0, 0.0}, + { 0,-1, 1,-1, 1, 0.0, 0.0,-1988.0, 0.0, 0.0,-1679.0}, + {-1, 0, 1, 0, 3, 0.0, 0.0, -63.0, 0.0, 0.0, -27.0}, + { 0,-2, 2,-2, 3, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0,-1, 0, 1, 0.0, 0.0, 5.0, 0.0, 0.0, 4.0}, + { 2,-2, 0,-2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-1, 0, 1, 0, 2, 0.0, 0.0, 364.0, 0.0, 0.0, 176.0}, + + /* 451-460 */ + {-1, 0, 1, 0, 1, 0.0, 0.0,-1044.0, 0.0, 0.0, -891.0}, + {-1,-1, 2,-1, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-2, 2, 0, 2, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 0, 1, 0, 0, 0.0, 0.0, 330.0, 0.0, 0.0, 0.0}, + {-4, 1, 2, 2, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-3, 0, 2, 1, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-2,-1, 2, 0, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 1, 0,-2, 1, 1, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2,-1,-2, 0, 1, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-4, 0, 2, 2, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 461-470 */ + {-3, 1, 0, 3, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 0,-1, 2, 0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0}, + { 0,-2, 0, 0, 2, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 0,-2, 0, 0, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-3, 0, 0, 3, 0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2,-1, 0, 2, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 0,-2, 3, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-4, 0, 0, 4, 0, -12.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 1,-2, 0, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 2,-1, 0,-2, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + + /* 471-480 */ + { 0, 0, 1,-1, 0, -5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 2, 0, 1, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 1, 2, 0, 2, -7.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 1, 1, 0,-1, 1, 7.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 1, 0, 1,-2, 1, 0.0, 0.0, -12.0, 0.0, 0.0, -10.0}, + { 0, 2, 0, 0, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 1,-1, 2,-3, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 1, 2,-1, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2, 0, 4,-2, 2, -7.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-2, 0, 4,-2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + + /* 481-490 */ + {-2,-2, 0, 2, 1, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-2, 0,-2, 4, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 2, 2,-4, 1, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 1, 1, 2,-4, 2, 7.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-1, 2, 2,-2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2, 0, 0,-3, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 2, 0, 0, 1, -5.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 0, 0, 0,-2, 0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 2,-2, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 1, 0, 0, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 491-500 */ + { 0, 0, 0,-1, 2, -8.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-2, 1, 0, 1, 0, 9.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1,-2, 0,-2, 1, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 1, 0,-2, 0, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-3, 1, 0, 2, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 1,-2, 2, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 0, 0, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-3, 0, 0, 2, 0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3,-1, 0, 2, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 0, 2,-6, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + + /* 501-510 */ + { 0, 1, 2,-4, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 0, 0,-4, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-2, 1, 2,-2, 1, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0,-1, 2,-4, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 0, 1, 0,-2, 2, 9.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-1, 0, 0,-2, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 0,-2,-2, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-4, 0, 2, 0, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1,-1, 0,-1, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0,-2, 0, 2, 9.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + + /* 511-520 */ + {-3, 0, 0, 1, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 0,-2, 1, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 0,-2, 2, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 0, 0,-4, 2, 0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2,-1,-2, 2, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 2,-6, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 0, 2,-4, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 1, 0, 0,-4, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 2, 1, 2,-4, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 2, 1, 2,-4, 1, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + + /* 521-530 */ + { 0, 1, 4,-4, 4, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 4,-4, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-1,-1,-2, 4, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-3, 0, 2, 0, 9.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 0,-2, 4, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2,-1, 0, 3, 0, -3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0,-2, 3, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 0, 0, 3, 1, -5.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 0,-1, 0, 1, 0, -13.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3, 0, 2, 2, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 531-540 */ + { 1, 1,-2, 2, 0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 1, 0, 2, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 1,-2, 2,-2, 1, 10.0, 0.0, 13.0, 6.0, 0.0, -5.0}, + { 0, 0, 1, 0, 2, 0.0, 0.0, 30.0, 0.0, 0.0, 14.0}, + { 0, 0, 1, 0, 1, 0.0, 0.0, -162.0, 0.0, 0.0, -138.0}, + { 0, 0, 1, 0, 0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0}, + {-1, 2, 0, 2, 1, -7.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + { 0, 0, 2, 0, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2, 0, 2, 0, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 0, 0,-1, 1, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 541-550 */ + { 3, 0, 0,-2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 1, 0, 2,-2, 3, -3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 2, 0, 0, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2, 0, 2,-3, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 1, 4,-2, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2,-2, 0, 4, 0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0,-3, 0, 2, 0, 9.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0,-2, 4, 0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 0, 3, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 0, 0, 4, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + + /* 551-560 */ + {-1, 0, 0, 3, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2,-2, 0, 0, 0, 7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1,-1, 0, 1, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 0, 0, 2, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0,-2, 2, 0, 1, -6.0, 0.0, -3.0, 3.0, 0.0, 1.0}, + {-1, 0, 1, 2, 1, 0.0, 0.0, -3.0, 0.0, 0.0, -2.0}, + {-1, 1, 0, 3, 0, 11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-1, 2, 1, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0,-1, 2, 0, 0, 11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 1, 2, 2, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + + /* 561-570 */ + { 2,-2, 2,-2, 2, -1.0, 0.0, 3.0, 3.0, 0.0, -1.0}, + { 1, 1, 0, 1, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 1, 0, 1, 0, 1, 0.0, 0.0, -13.0, 0.0, 0.0, -11.0}, + { 1, 0, 1, 0, 0, 3.0, 0.0, 6.0, 0.0, 0.0, 0.0}, + { 0, 2, 0, 2, 0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2,-1, 2,-2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 0,-1, 4,-2, 1, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 0, 0, 4,-2, 3, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 4,-2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 4, 0, 2,-4, 2, -7.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + + /* 571-580 */ + { 2, 2, 2,-2, 2, 8.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 2, 0, 4,-4, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1,-2, 0, 4, 0, 11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1,-3, 2, 2, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-3, 0, 2, 4, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-3, 0, 2,-2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1,-1, 0,-2, 1, 8.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + {-3, 0, 0, 0, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-3, 0,-2, 2, 0, 11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 0,-4, 1, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + + /* 581-590 */ + {-2, 1, 0,-2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-4, 0, 0, 0, 1, -8.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + {-1, 0, 0,-4, 1, -7.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-3, 0, 0,-2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 0, 3, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-1, 1, 0, 4, 1, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 1,-2, 2, 0, 1, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 0, 1, 0, 3, 0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-1, 0, 2, 2, 3, 6.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 0, 0, 2, 2, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 591-600 */ + {-2, 0, 2, 2, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 1, 2, 2, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 3, 0, 0, 0, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2, 1, 0, 1, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2,-1, 2,-1, 2, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 0, 0, 2, 0, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 3, 0, 3, 0.0, 0.0, -26.0, 0.0, 0.0, -11.0}, + { 0, 0, 3, 0, 2, 0.0, 0.0, -10.0, 0.0, 0.0, -5.0}, + {-1, 2, 2, 2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-1, 0, 4, 0, 0, -13.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 601-610 */ + { 1, 2, 2, 0, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 3, 1, 2,-2, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 1, 1, 4,-2, 2, 7.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-2,-1, 0, 6, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0,-2, 0, 4, 0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-2, 0, 0, 6, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2,-2, 2, 4, 2, -6.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0,-3, 2, 2, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 0, 4, 2, -7.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-1,-1, 2, 3, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 611-620 */ + {-2, 0, 2, 4, 0, 13.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2,-1, 0, 2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 1, 0, 0, 3, 0, -3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 0, 4, 1, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 0, 1, 0, 4, 0, -11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1,-1, 2, 1, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 0, 0, 2, 2, 3, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 2, 2, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-1, 0, 2, 2, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-2, 0, 4, 2, 1, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + + /* 621-630 */ + { 2, 1, 0, 2, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 1, 0, 2, 0, -12.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2,-1, 2, 0, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 2, 1, 0, -3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 1, 2, 2, 0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 0, 2, 0, 3, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 3, 0, 2, 0, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 1, 0, 2, 0, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 1, 0, 3, 0, 3, 0.0, 0.0, -5.0, 0.0, 0.0, -2.0}, + { 1, 1, 2, 1, 1, -7.0, 0.0, 0.0, 4.0, 0.0, 0.0}, + + /* 631-640 */ + { 0, 2, 2, 2, 2, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 2, 1, 2, 0, 0, -3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 0, 4,-2, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 4, 1, 2,-2, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + {-1,-1, 0, 6, 0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {-3,-1, 2, 6, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + {-1, 0, 0, 6, 1, -5.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-3, 0, 2, 6, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 1,-1, 0, 4, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 1,-1, 0, 4, 0, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 641-650 */ + {-2, 0, 2, 5, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 1,-2, 2, 2, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 3,-1, 0, 2, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1,-1, 2, 2, 0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0, 2, 3, 1, 5.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + {-1, 1, 2, 4, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 0, 1, 2, 3, 2, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-1, 0, 4, 2, 1, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 0, 2, 1, 1, 6.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 5, 0, 0, 0, 0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 651-660 */ + { 2, 1, 2, 1, 2, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 1, 0, 4, 0, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 3, 1, 2, 0, 1, 7.0, 0.0, 0.0, -4.0, 0.0, 0.0}, + { 3, 0, 4,-2, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + {-2,-1, 2, 6, 2, -5.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 0, 6, 0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0,-2, 2, 4, 2, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + {-2, 0, 2, 6, 1, -6.0, 0.0, 0.0, 3.0, 0.0, 0.0}, + { 2, 0, 0, 4, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 2, 0, 0, 4, 0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + + /* 661-670 */ + { 2,-2, 2, 2, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 0, 0, 2, 4, 0, 7.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 1, 0, 2, 3, 2, 7.0, 0.0, 0.0, -3.0, 0.0, 0.0}, + { 4, 0, 0, 2, 0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 2, 0, 2, 2, 0, 11.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + { 0, 0, 4, 2, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 4,-1, 2, 0, 2, -6.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 3, 0, 2, 1, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 2, 1, 2, 2, 1, 3.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 4, 1, 2, 0, 2, 5.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + + /* 671-678 */ + {-1,-1, 2, 6, 2, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + {-1, 0, 2, 6, 1, -4.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 1,-1, 2, 4, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0}, + { 1, 1, 2, 4, 2, 4.0, 0.0, 0.0, -2.0, 0.0, 0.0}, + { 3, 1, 2, 2, 2, 3.0, 0.0, 0.0, -1.0, 0.0, 0.0}, + { 5, 0, 2, 0, 1, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 2,-1, 2, 4, 2, -3.0, 0.0, 0.0, 1.0, 0.0, 0.0}, + { 2, 0, 2, 4, 1, -3.0, 0.0, 0.0, 2.0, 0.0, 0.0} + }; + +/* Number of terms in the luni-solar nutation model */ + const int NLS = (int) (sizeof xls / sizeof xls[0]); + +/* ------------------------ */ +/* Planetary nutation model */ +/* ------------------------ */ + +/* The units for the sine and cosine coefficients are */ +/* 0.1 microarcsecond */ + + static const struct { + int nl, /* coefficients of l, F, D and Omega */ + nf, + nd, + nom, + nme, /* coefficients of planetary longitudes */ + nve, + nea, + nma, + nju, + nsa, + nur, + nne, + npa; /* coefficient of general precession */ + int sp,cp; /* longitude sin, cos coefficients */ + int se,ce; /* obliquity sin, cos coefficients */ + } xpl[] = { + + /* 1-10 */ + { 0, 0, 0, 0, 0, 0, 8,-16, 4, 5, 0, 0, 0, 1440, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, -8, 16,-4,-5, 0, 0, 2, 56,-117, -42, -40}, + { 0, 0, 0, 0, 0, 0, 8,-16, 4, 5, 0, 0, 2, 125, -43, 0, -54}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 2, 2, 0, 5, 0, 0}, + { 0, 0, 0, 0, 0, 0, -4, 8,-1,-5, 0, 0, 2, 3, -7, -3, 0}, + { 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 1, 3, 0, 0, -2}, + { 0, 1,-1, 1, 0, 0, 3, -8, 3, 0, 0, 0, 0, -114, 0, 0, 61}, + {-1, 0, 0, 0, 0, 10, -3, 0, 0, 0, 0, 0, 0, -219, 89, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0,-2, 6,-3, 0, 2, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, -462,1604, 0, 0}, + + /* 11-20 */ + { 0, 1,-1, 1, 0, 0, -5, 8,-3, 0, 0, 0, 0, 99, 0, 0, -53}, + { 0, 0, 0, 0, 0, 0, -4, 8,-3, 0, 0, 0, 1, -3, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 4, -8, 1, 5, 0, 0, 2, 0, 6, 2, 0}, + { 0, 0, 0, 0, 0, -5, 6, 4, 0, 0, 0, 0, 2, 3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2,-5, 0, 0, 2, -12, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2,-5, 0, 0, 1, 14,-218, 117, 8}, + { 0, 1,-1, 1, 0, 0, -1, 0, 2,-5, 0, 0, 0, 31,-481, -257, -17}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2,-5, 0, 0, 0, -491, 128, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0,-2, 5, 0, 0, 0,-3084,5123, 2735,1647}, + { 0, 0, 0, 0, 0, 0, 0, 0,-2, 5, 0, 0, 1,-1444,2409,-1286,-771}, + + /* 21-30 */ + { 0, 0, 0, 0, 0, 0, 0, 0,-2, 5, 0, 0, 2, 11, -24, -11, -9}, + { 2,-1,-1, 0, 0, 0, 3, -7, 0, 0, 0, 0, 0, 26, -9, 0, 0}, + { 1, 0,-2, 0, 0, 19,-21, 3, 0, 0, 0, 0, 0, 103, -60, 0, 0}, + { 0, 1,-1, 1, 0, 2, -4, 0,-3, 0, 0, 0, 0, 0, -13, -7, 0}, + { 1, 0,-1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0, -26, -29, -16, 14}, + { 0, 1,-1, 1, 0, 0, -1, 0,-4,10, 0, 0, 0, 9, -27, -14, -5}, + {-2, 0, 2, 1, 0, 0, 2, 0, 0,-5, 0, 0, 0, 12, 0, 0, -6}, + { 0, 0, 0, 0, 0, 3, -7, 4, 0, 0, 0, 0, 0, -7, 0, 0, 0}, + { 0,-1, 1, 0, 0, 0, 1, 0, 1,-1, 0, 0, 0, 0, 24, 0, 0}, + {-2, 0, 2, 1, 0, 0, 2, 0,-2, 0, 0, 0, 0, 284, 0, 0,-151}, + + /* 31-40 */ + {-1, 0, 0, 0, 0, 18,-16, 0, 0, 0, 0, 0, 0, 226, 101, 0, 0}, + {-2, 1, 1, 2, 0, 0, 1, 0,-2, 0, 0, 0, 0, 0, -8, -2, 0}, + {-1, 1,-1, 1, 0, 18,-17, 0, 0, 0, 0, 0, 0, 0, -6, -3, 0}, + {-1, 0, 1, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0, 5, 0, 0, -3}, + { 0, 0, 0, 0, 0, -8, 13, 0, 0, 0, 0, 0, 2, -41, 175, 76, 17}, + { 0, 2,-2, 2, 0, -8, 11, 0, 0, 0, 0, 0, 0, 0, 15, 6, 0}, + { 0, 0, 0, 0, 0, -8, 13, 0, 0, 0, 0, 0, 1, 425, 212, -133, 269}, + { 0, 1,-1, 1, 0, -8, 12, 0, 0, 0, 0, 0, 0, 1200, 598, 319,-641}, + { 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, 0, 235, 334, 0, 0}, + { 0, 1,-1, 1, 0, 8,-14, 0, 0, 0, 0, 0, 0, 11, -12, -7, -6}, + + /* 41-50 */ + { 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, 1, 5, -6, 3, 3}, + {-2, 0, 2, 1, 0, 0, 2, 0,-4, 5, 0, 0, 0, -5, 0, 0, 3}, + {-2, 0, 2, 2, 0, 3, -3, 0, 0, 0, 0, 0, 0, 6, 0, 0, -3}, + {-2, 0, 2, 0, 0, 0, 2, 0,-3, 1, 0, 0, 0, 15, 0, 0, 0}, + { 0, 0, 0, 1, 0, 3, -5, 0, 2, 0, 0, 0, 0, 13, 0, 0, -7}, + {-2, 0, 2, 0, 0, 0, 2, 0,-4, 3, 0, 0, 0, -6, -9, 0, 0}, + { 0,-1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 266, -78, 0, 0}, + { 0, 0, 0, 1, 0, 0, -1, 2, 0, 0, 0, 0, 0, -460,-435, -232, 246}, + { 0, 1,-1, 2, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 15, 7, 0}, + {-1, 1, 0, 1, 0, 3, -5, 0, 0, 0, 0, 0, 0, -3, 0, 0, 2}, + + /* 51-60 */ + {-1, 0, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0}, + {-2, 0, 2, 0, 0, 0, 2, 0,-2,-2, 0, 0, 0, 4, 0, 0, 0}, + {-2, 2, 0, 2, 0, 0, -5, 9, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 0,-1, 0, 0, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 0, 0, 2, 0, -17, -19, -10, 9}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, -9, -11, 6, -5}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, -6, 0, 0, 3}, + {-1, 0, 1, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, -16, 8, 0, 0}, + { 0,-1, 1, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0}, + + /* 61-70 */ + { 0, 1,-1, 2, 0, 0, -1, 0, 0, 2, 0, 0, 0, 11, 24, 11, -5}, + { 0, 0, 0, 1, 0, 0, -9, 17, 0, 0, 0, 0, 0, -3, -4, -2, 1}, + { 0, 0, 0, 2, 0, -3, 5, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 1,-1, 1, 0, 0, -1, 0,-1, 2, 0, 0, 0, 0, -8, -4, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 1,-2, 0, 0, 0, 0, 3, 0, 0}, + { 1, 0,-2, 0, 0, 17,-16, 0,-2, 0, 0, 0, 0, 0, 5, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0, 1,-3, 0, 0, 0, 0, 3, 2, 0}, + {-2, 0, 2, 1, 0, 0, 5, -6, 0, 0, 0, 0, 0, -6, 4, 2, 3}, + { 0,-2, 2, 0, 0, 0, 9,-13, 0, 0, 0, 0, 0, -3, -5, 0, 0}, + { 0, 1,-1, 2, 0, 0, -1, 0, 0, 1, 0, 0, 0, -5, 0, 0, 2}, + + /* 71-80 */ + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 24, 13, -2}, + { 0,-1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, -42, 20, 0, 0}, + { 0,-2, 2, 0, 0, 5, -6, 0, 0, 0, 0, 0, 0, -10, 233, 0, 0}, + { 0,-1, 1, 1, 0, 5, -7, 0, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + {-2, 0, 2, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0, 78, -18, 0, 0}, + { 2, 1,-3, 1, 0, -6, 7, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -3, -1, 0}, + { 0,-1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, -4, -2, 1}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 0, 2, 0, 0, 0, -8, -4, -1}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, -5, 3, 0}, + + /* 81-90 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, -7, 0, 0, 3}, + { 0, 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 2, -14, 8, 3, 6}, + { 0, 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 1, 0, 8, -4, 0}, + { 0, 1,-1, 1, 0, 0, -9, 15, 0, 0, 0, 0, 0, 0, 19, 10, 0}, + { 0, 0, 0, 0, 0, 0, 8,-15, 0, 0, 0, 0, 0, 45, -22, 0, 0}, + { 1,-1,-1, 0, 0, 0, 8,-15, 0, 0, 0, 0, 0, -3, 0, 0, 0}, + { 2, 0,-2, 0, 0, 2, -5, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0}, + {-2, 0, 2, 0, 0, 0, 2, 0,-5, 5, 0, 0, 0, 0, 3, 0, 0}, + { 2, 0,-2, 1, 0, 0, -6, 8, 0, 0, 0, 0, 0, 3, 5, 3, -2}, + { 2, 0,-2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0, 89, -16, -9, -48}, + + /* 91-100 */ + {-2, 1, 1, 0, 0, 0, 1, 0,-3, 0, 0, 0, 0, 0, 3, 0, 0}, + {-2, 1, 1, 1, 0, 0, 1, 0,-3, 0, 0, 0, 0, -3, 7, 4, 2}, + {-2, 0, 2, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, -349, -62, 0, 0}, + {-2, 0, 2, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, -15, 22, 0, 0}, + {-2, 0, 2, 0, 0, 0, 2, 0,-1,-5, 0, 0, 0, -3, 0, 0, 0}, + {-1, 0, 1, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, -53, 0, 0, 0}, + {-1, 1, 1, 1, 0,-20, 20, 0, 0, 0, 0, 0, 0, 5, 0, 0, -3}, + { 1, 0,-2, 0, 0, 20,-21, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0}, + { 0, 0, 0, 1, 0, 0, 8,-15, 0, 0, 0, 0, 0, 15, -7, -4, -8}, + { 0, 2,-2, 1, 0, 0,-10, 15, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + + /* 101-110 */ + { 0,-1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, -21, -78, 0, 0}, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 20, -70, -37, -11}, + { 0, 1,-1, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, 6, 3, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0,-2, 4, 0, 0, 0, 5, 3, 2, -2}, + { 2, 0,-2, 1, 0, -6, 8, 0, 0, 0, 0, 0, 0, -17, -4, -2, 9}, + { 0,-2, 2, 1, 0, 5, -6, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 1, 32, 15, -8, 17}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0,-1, 0, 0, 0, 174, 84, 45, -93}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 56, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, -66, -12, -6, 35}, + + /* 111-120 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 47, 8, 4, -25}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 8, 4, 0}, + { 0, 2,-2, 1, 0, 0, -9, 13, 0, 0, 0, 0, 0, 10, -22, -12, -5}, + { 0, 0, 0, 1, 0, 0, 7,-13, 0, 0, 0, 0, 0, -3, 0, 0, 2}, + {-2, 0, 2, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, -24, 12, 0, 0}, + { 0, 0, 0, 0, 0, 0, 9,-17, 0, 0, 0, 0, 0, 5, -6, 0, 0}, + { 0, 0, 0, 0, 0, 0, -9, 17, 0, 0, 0, 0, 2, 3, 0, 0, -2}, + { 1, 0,-1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0, 4, 3, 1, -2}, + { 1, 0,-1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0, 0, 29, 15, 0}, + { 0, 0, 0, 2, 0, 0, -1, 2, 0, 0, 0, 0, 0, -5, -4, -2, 2}, + + /* 121-130 */ + { 0,-1, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 8, -3, -1, -5}, + { 0,-2, 2, 0, 1, 0, -2, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0}, + { 0, 0, 0, 0, 0, 3, -5, 0, 2, 0, 0, 0, 0, 10, 0, 0, 0}, + {-2, 0, 2, 1, 0, 0, 2, 0,-3, 1, 0, 0, 0, 3, 0, 0, -2}, + {-2, 0, 2, 1, 0, 3, -3, 0, 0, 0, 0, 0, 0, -5, 0, 0, 3}, + { 0, 0, 0, 1, 0, 8,-13, 0, 0, 0, 0, 0, 0, 46, 66, 35, -25}, + { 0,-1, 1, 0, 0, 8,-12, 0, 0, 0, 0, 0, 0, -14, 7, 0, 0}, + { 0, 2,-2, 1, 0, -8, 11, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0}, + {-1, 0, 1, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, -5, 0, 0, 0}, + {-1, 0, 0, 1, 0, 18,-16, 0, 0, 0, 0, 0, 0, -68, -34, -18, 36}, + + /* 131-140 */ + { 0, 1,-1, 1, 0, 0, -1, 0,-1, 1, 0, 0, 0, 0, 14, 7, 0}, + { 0, 0, 0, 1, 0, 3, -7, 4, 0, 0, 0, 0, 0, 10, -6, -3, -5}, + {-2, 1, 1, 1, 0, 0, -3, 7, 0, 0, 0, 0, 0, -5, -4, -2, 3}, + { 0, 1,-1, 2, 0, 0, -1, 0,-2, 5, 0, 0, 0, -3, 5, 2, 1}, + { 0, 0, 0, 1, 0, 0, 0, 0,-2, 5, 0, 0, 0, 76, 17, 9, -41}, + { 0, 0, 0, 1, 0, 0, -4, 8,-3, 0, 0, 0, 0, 84, 298, 159, -45}, + { 1, 0, 0, 1, 0,-10, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 2,-2, 1, 0, 0, -2, 0, 0, 0, 0, 0, 0, -3, 0, 0, 2}, + {-1, 0, 0, 1, 0, 10, -3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + { 0, 0, 0, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0, -82, 292, 156, 44}, + + /* 141-150 */ + { 0, 0, 0, 1, 0, 0, 0, 0, 2,-5, 0, 0, 0, -73, 17, 9, 39}, + { 0,-1, 1, 0, 0, 0, 1, 0, 2,-5, 0, 0, 0, -9, -16, 0, 0}, + { 2,-1,-1, 1, 0, 0, 3, -7, 0, 0, 0, 0, 0, 3, 0, -1, -2}, + {-2, 0, 2, 0, 0, 0, 2, 0, 0,-5, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 1, 0, -3, 7, -4, 0, 0, 0, 0, 0, -9, -5, -3, 5}, + {-2, 0, 2, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, -439, 0, 0, 0}, + { 1, 0, 0, 1, 0,-18, 16, 0, 0, 0, 0, 0, 0, 57, -28, -15, -30}, + {-2, 1, 1, 1, 0, 0, 1, 0,-2, 0, 0, 0, 0, 0, -6, -3, 0}, + { 0, 1,-1, 2, 0, -8, 12, 0, 0, 0, 0, 0, 0, -4, 0, 0, 2}, + { 0, 0, 0, 1, 0, -8, 13, 0, 0, 0, 0, 0, 0, -40, 57, 30, 21}, + + /* 151-160 */ + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 1, 23, 7, 3, -13}, + { 0, 1,-1, 1, 0, 0, 0, -2, 0, 0, 0, 0, 0, 273, 80, 43,-146}, + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, -449, 430, 0, 0}, + { 0, 1,-1, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0, -8, -47, -25, 4}, + { 0, 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 1, 6, 47, 25, -3}, + {-1, 0, 1, 1, 0, 3, -4, 0, 0, 0, 0, 0, 0, 0, 23, 13, 0}, + {-1, 0, 1, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0, -3, 0, 0, 2}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0,-2, 0, 0, 0, 3, -4, -2, -2}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 2, 0, 0, 0, -48,-110, -59, 26}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 51, 114, 61, -27}, + + /* 161-170 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, -133, 0, 0, 57}, + { 0, 1,-1, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0}, + { 0, 0, 0, 1, 0, -3, 5, 0, 0, 0, 0, 0, 0, -21, -6, -3, 11}, + { 0, 1,-1, 2, 0, -3, 4, 0, 0, 0, 0, 0, 0, 0, -3, -1, 0}, + { 0, 0, 0, 1, 0, 0, -2, 4, 0, 0, 0, 0, 0, -11, -21, -11, 6}, + { 0, 2,-2, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0, -18,-436, -233, 9}, + { 0,-1, 1, 0, 0, 5, -7, 0, 0, 0, 0, 0, 0, 35, -7, 0, 0}, + { 0, 0, 0, 1, 0, 5, -8, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0}, + {-2, 0, 2, 1, 0, 6, -8, 0, 0, 0, 0, 0, 0, 11, -3, -1, -6}, + { 0, 0, 0, 1, 0, 0, -8, 15, 0, 0, 0, 0, 0, -5, -3, -1, 3}, + + /* 171-180 */ + {-2, 0, 2, 1, 0, 0, 2, 0,-3, 0, 0, 0, 0, -53, -9, -5, 28}, + {-2, 0, 2, 1, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0, 3, 2, 1}, + { 1, 0,-1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0, 4, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 0, 0, 3,-5, 0, 0, 0, 0, -4, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0,-1, 0, 0, 0, 0, -50, 194, 103, 27}, + { 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 1, -13, 52, 28, 7}, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, -91, 248, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 6, 49, 26, -3}, + { 0, 1,-1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0, -6, -47, -25, 3}, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 3, 0}, + + /* 181-190 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 52, 23, 10, -23}, + { 0, 1,-1, 2, 0, 0, -1, 0, 0,-1, 0, 0, 0, -3, 0, 0, 1}, + { 0, 0, 0, 1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 5, 3, 0}, + { 0,-1, 1, 0, 0, 0, 1, 0, 0,-1, 0, 0, 0, -4, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, -7, 13, 0, 0, 0, 0, 2, -4, 8, 3, 2}, + { 0, 0, 0, 0, 0, 0, 7,-13, 0, 0, 0, 0, 0, 10, 0, 0, 0}, + { 2, 0,-2, 1, 0, 0, -5, 6, 0, 0, 0, 0, 0, 3, 0, 0, -2}, + { 0, 2,-2, 1, 0, 0, -8, 11, 0, 0, 0, 0, 0, 0, 8, 4, 0}, + { 0, 2,-2, 1,-1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 8, 4, 1}, + {-2, 0, 2, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, -4, 0, 0, 0}, + + /* 191-200 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 0, -4, 0, 0, 0}, + { 0, 1,-1, 1, 0, 0, -1, 0, 0, 3, 0, 0, 0, -8, 4, 2, 4}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 8, -4, -2, -4}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 15, 7, 0}, + {-2, 0, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0, -138, 0, 0, 0}, + { 0, 0, 0, 2, 0, 0, -4, 8,-3, 0, 0, 0, 0, 0, -7, -3, 0}, + { 0, 0, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, -7, -3, 0}, + { 2, 0,-2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0, 54, 0, 0, -29}, + { 0, 1,-1, 2, 0, 0, -1, 0, 2, 0, 0, 0, 0, 0, 10, 4, 0}, + { 0, 1,-1, 2, 0, 0, 0, -2, 0, 0, 0, 0, 0, -7, 0, 0, 3}, + + /* 201-210 */ + { 0, 0, 0, 1, 0, 0, 1, -2, 0, 0, 0, 0, 0, -37, 35, 19, 20}, + { 0,-1, 1, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, 4, 0, 0}, + { 0,-1, 1, 0, 0, 0, 1, 0, 0,-2, 0, 0, 0, -4, 9, 0, 0}, + { 0, 2,-2, 1, 0, 0, -2, 0, 0, 2, 0, 0, 0, 8, 0, 0, -4}, + { 0, 1,-1, 1, 0, 3, -6, 0, 0, 0, 0, 0, 0, -9, -14, -8, 5}, + { 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 1, -3, -9, -5, 3}, + { 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 0, -145, 47, 0, 0}, + { 0, 1,-1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0, -10, 40, 21, 5}, + { 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 1, 11, -49, -26, -7}, + { 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 2,-2150, 0, 0, 932}, + + /* 211-220 */ + { 0, 2,-2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0, -12, 0, 0, 5}, + { 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 2, 85, 0, 0, -37}, + { 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 1, 4, 0, 0, -2}, + { 0, 1,-1, 1, 0, 0, 1, -4, 0, 0, 0, 0, 0, 3, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, -86, 153, 0, 0}, + { 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 1, -6, 9, 5, 3}, + { 0, 1,-1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0, 9, -13, -7, -5}, + { 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 1, -8, 12, 6, 4}, + { 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 2, -51, 0, 0, 22}, + { 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 2, -11,-268, -116, 5}, + + /* 221-230 */ + { 0, 2,-2, 2, 0, -5, 6, 0, 0, 0, 0, 0, 0, 0, 12, 5, 0}, + { 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 2, 0, 7, 3, 0}, + { 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 1, 31, 6, 3, -17}, + { 0, 1,-1, 1, 0, -5, 7, 0, 0, 0, 0, 0, 0, 140, 27, 14, -75}, + { 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 1, 57, 11, 6, -30}, + { 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, 0, -14, -39, 0, 0}, + { 0, 1,-1, 2, 0, 0, -1, 0,-1, 0, 0, 0, 0, 0, -6, -2, 0}, + { 0, 0, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0, 0, 4, 15, 8, -2}, + { 0,-1, 1, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, 0, 4, 0, 0}, + { 0, 2,-2, 1, 0, 0, -2, 0, 1, 0, 0, 0, 0, -3, 0, 0, 1}, + + /* 231-240 */ + { 0, 0, 0, 0, 0, 0, -6, 11, 0, 0, 0, 0, 2, 0, 11, 5, 0}, + { 0, 0, 0, 0, 0, 0, 6,-11, 0, 0, 0, 0, 0, 9, 6, 0, 0}, + { 0, 0, 0, 0,-1, 0, 4, 0, 0, 0, 0, 0, 2, -4, 10, 4, 2}, + { 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0}, + { 2, 0,-2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, -9}, + {-2, 0, 2, 0, 0, 0, 2, 0, 0,-2, 0, 0, 0, -3, 0, 0, 0}, + { 0, 2,-2, 1, 0, 0, -7, 9, 0, 0, 0, 0, 0, 0, 3, 2, -1}, + { 0, 0, 0, 0, 0, 0, 0, 0, 4,-5, 0, 0, 2, 7, 0, 0, -3}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, -25, 22, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 42, 223, 119, -22}, + + /* 241-250 */ + { 0, 1,-1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0, -27,-143, -77, 14}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 9, 49, 26, -5}, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2,-1166, 0, 0, 505}, + { 0, 2,-2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0, -5, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2, -6, 0, 0, 3}, + { 0, 0, 0, 1, 0, 3, -5, 0, 0, 0, 0, 0, 0, -8, 0, 1, 4}, + { 0,-1, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0}, + { 0, 2,-2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0, 117, 0, 0, -63}, + { 0, 0, 0, 1, 0, 0, 2, -4, 0, 0, 0, 0, 0, -4, 8, 4, 2}, + { 0, 2,-2, 1, 0, 0, -4, 4, 0, 0, 0, 0, 0, 3, 0, 0, -2}, + + /* 251-260 */ + { 0, 1,-1, 2, 0, -5, 7, 0, 0, 0, 0, 0, 0, -5, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0, 31, 0, 0}, + { 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 1, -5, 0, 1, 3}, + { 0, 1,-1, 1, 0, 0, -4, 6, 0, 0, 0, 0, 0, 4, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 1, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 2, -24, -13, -6, 10}, + { 0,-1, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0}, + { 0, 0, 0, 1, 0, 2, -3, 0, 0, 0, 0, 0, 0, 0, -32, -17, 0}, + { 0, 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 2, 8, 12, 5, -3}, + { 0, 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 1, 3, 0, 0, -1}, + + /* 261-270 */ + { 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, 0, 7, 13, 0, 0}, + { 0,-1, 1, 0, 0, 0, 1, 0,-2, 0, 0, 0, 0, -3, 16, 0, 0}, + { 0, 2,-2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0, 50, 0, 0, -27}, + {-2, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -5, -3, 0}, + { 0,-2, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0}, + { 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0, 1, 0, 5, 3, 1}, + { 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0, 2, 24, 5, 2, -11}, + { 0, 0, 0, 0, 0, -2, 3, 0, 0, 0, 0, 0, 2, 5, -11, -5, -2}, + { 0, 0, 0, 0, 0, -2, 3, 0, 0, 0, 0, 0, 1, 30, -3, -2, -16}, + { 0, 1,-1, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0, 18, 0, 0, -9}, + + /* 271-280 */ + { 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 0, 8, 614, 0, 0}, + { 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 1, 3, -3, -1, -2}, + { 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 6, 17, 9, -3}, + { 0, 1,-1, 1, 0, 0, -1, 0, 3, 0, 0, 0, 0, -3, -9, -5, 2}, + { 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 6, 3, -1}, + { 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, -127, 21, 9, 55}, + { 0, 0, 0, 0, 0, 0, 4, -8, 0, 0, 0, 0, 0, 3, 5, 0, 0}, + { 0, 0, 0, 0, 0, 0, -4, 8, 0, 0, 0, 0, 2, -6, -10, -4, 3}, + { 0,-2, 2, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 5, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 2, 16, 9, 4, -7}, + + /* 281-290 */ + { 0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 1, 3, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, 0, 0, 22, 0, 0}, + { 0, 0, 0, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0, 0, 19, 10, 0}, + { 0, 2,-2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0, 7, 0, 0, -4}, + { 0, 0, 0, 0, 0, 0, -5, 10, 0, 0, 0, 0, 2, 0, -5, -2, 0}, + { 0, 0, 0, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, -9, 3, 1, 4}, + { 0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 2, 17, 0, 0, -7}, + { 0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 1, 0, -3, -2, -1}, + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, -20, 34, 0, 0}, + + /* 291-300 */ + { 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 1, -10, 0, 1, 5}, + { 0, 1,-1, 1, 0, 1, -3, 0, 0, 0, 0, 0, 0, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 0, 22, -87, 0, 0}, + { 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 1, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 2, -3, -6, -2, 1}, + { 0, 0, 0, 0, 0, -7, 11, 0, 0, 0, 0, 0, 2, -16, -3, -1, 7}, + { 0, 0, 0, 0, 0, -7, 11, 0, 0, 0, 0, 0, 1, 0, -3, -2, 0}, + { 0,-2, 2, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, -68, 39, 0, 0}, + { 0, 2,-2, 1, 0, -4, 4, 0, 0, 0, 0, 0, 0, 27, 0, 0, -14}, + + /* 301-310 */ + { 0,-1, 1, 0, 0, 4, -5, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, -25, 0, 0, 0}, + { 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 0, 1, -12, -3, -2, 6}, + { 0, 1,-1, 1, 0, -4, 6, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 0, 2, 3, 66, 29, -1}, + { 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 2, 490, 0, 0,-213}, + { 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 1, -22, 93, 49, 12}, + { 0, 1,-1, 1, 0, -4, 5, 0, 0, 0, 0, 0, 0, -7, 28, 15, 4}, + { 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 1, -3, 13, 7, 2}, + { 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, 0, -46, 14, 0, 0}, + + /* 311-320 */ + {-2, 0, 2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 0}, + { 0,-1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0}, + { 0, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, -28, 0, 0, 15}, + { 0, 0, 0, 0, 0, 0, -1, 0, 5, 0, 0, 0, 2, 5, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + { 0, 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 2, -11, 0, 0, 5}, + { 0, 0, 0, 0, 0, 0, -7, 12, 0, 0, 0, 0, 2, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 1, 25, 106, 57, -13}, + + /* 321-330 */ + { 0, 1,-1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 5, 21, 11, -3}, + { 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 1485, 0, 0, 0}, + { 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 1, -7, -32, -17, 4}, + { 0, 1,-1, 1, 0, 1, -2, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0}, + { 0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 2, -6, -3, -2, 3}, + { 0, 0, 0, 0, 0, 0, -1, 0, 4, 0, 0, 0, 2, 30, -6, -2, -13}, + { 0, 0, 0, 0, 0, 0, 1, 0,-4, 0, 0, 0, 0, -4, 4, 0, 0}, + { 0, 0, 0, 1, 0, -1, 1, 0, 0, 0, 0, 0, 0, -19, 0, 0, 10}, + { 0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 2, 0, 4, 2, -1}, + { 0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + + /* 331-340 */ + { 0, 2,-2, 1, 0, 0, -3, 0, 3, 0, 0, 0, 0, 4, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, -3, 7, 0, 0, 0, 0, 2, 0, -3, -1, 0}, + {-2, 0, 2, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 2, 5, 3, 1, -2}, + { 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, 0, 11, 0, 0}, + { 0, 0, 0, 0, 0, 0, -1, 0, 3, 0, 0, 0, 2, 118, 0, 0, -52}, + { 0, 0, 0, 0, 0, 0, -1, 0, 3, 0, 0, 0, 1, 0, -5, -3, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0,-3, 0, 0, 0, 0, -28, 36, 0, 0}, + { 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, 0, 5, -5, 0, 0}, + { 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 0, 1, 14, -59, -31, -8}, + + /* 341-350 */ + { 0, 1,-1, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0, 0, 9, 5, 1}, + { 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 0, 2, -458, 0, 0, 198}, + { 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 0, 2, 0, -45, -20, 0}, + { 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 0, 1, 9, 0, 0, -5}, + { 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0}, + { 0, 0, 0, 1, 0, 0, 1, 0,-2, 0, 0, 0, 0, 0, -4, -2, -1}, + { 0, 2,-2, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0, 11, 0, 0, -6}, + { 0, 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 2, 6, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, -16, 23, 0, 0}, + { 0, 0, 0, 1, 0, 3, -4, 0, 0, 0, 0, 0, 0, 0, -4, -2, 0}, + + /* 351-360 */ + { 0, 0, 0, 0, 0, 0, -1, 0, 2, 0, 0, 0, 2, -5, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 1, 0,-2, 0, 0, 0, 0, -166, 269, 0, 0}, + { 0, 0, 0, 1, 0, 0, 1, 0,-1, 0, 0, 0, 0, 15, 0, 0, -8}, + { 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 0, 2, 10, 0, 0, -4}, + { 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, -78, 45, 0, 0}, + { 0, 0, 0, 0, 0, -3, 4, 0, 0, 0, 0, 0, 2, 0, -5, -2, 0}, + { 0, 0, 0, 0, 0, -3, 4, 0, 0, 0, 0, 0, 1, 7, 0, 0, -4}, + { 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0, -5, 328, 0, 0}, + { 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 1, 3, 0, 0, -2}, + { 0, 0, 0, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0, 5, 0, 0, -2}, + + /* 361-370 */ + { 0, 0, 0, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 0,-3, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 1,-5, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, -4, -2, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0,-1223, -26, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 1, 0, 7, 3, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0,-3, 5, 0, 0, 0, 3, 0, 0, 0}, + { 0, 0, 0, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 0,-2, 0, 0, 0, -6, 20, 0, 0}, + { 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, -368, 0, 0, 0}, + + /* 371-380 */ + { 0, 0, 0, 0, 0, 0, 1, 0, 0,-1, 0, 0, 0, -75, 0, 0, 0}, + { 0, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0, 11, 0, 0, -6}, + { 0, 0, 0, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0, 3, 0, 0, -2}, + { 0, 0, 0, 0, 0, -8, 14, 0, 0, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, 0, 1, 0, 2,-5, 0, 0, 0, -13, -30, 0, 0}, + { 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 0, 21, 3, 0, 0}, + { 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, -27, 0, 0}, + { 0, 0, 0, 0, 0, 0, 3, -8, 3, 0, 0, 0, 0, -19, -11, 0, 0}, + + /* 381-390 */ + { 0, 0, 0, 0, 0, 0, -3, 8,-3, 0, 0, 0, 2, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 1, 0,-2, 5, 0, 0, 2, 0, 5, 2, 0}, + { 0, 0, 0, 0, 0, -8, 12, 0, 0, 0, 0, 0, 2, -6, 0, 0, 2}, + { 0, 0, 0, 0, 0, -8, 12, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 1,-2, 0, 0, 0, -1, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 2, -14, 0, 0, 6}, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, -74, 0, 0, 32}, + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 2, 0, -3, -1, 0}, + { 0, 2,-2, 1, 0, -5, 5, 0, 0, 0, 0, 0, 0, 4, 0, 0, -2}, + + /* 391-400 */ + { 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 8, 11, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 3, 2, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, -262, 0, 0, 114}, + { 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0}, + { 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 0, 1, -7, 0, 0, 4}, + { 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 0, 2, 0, -27, -12, 0}, + { 0, 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 2, -19, -8, -4, 8}, + { 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 0, 2, 202, 0, 0, -87}, + { 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 0, 1, -8, 35, 19, 5}, + { 0, 1,-1, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0}, + + /* 401-410 */ + { 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, 0, 16, -5, 0, 0}, + { 0, 2,-2, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0, 5, 0, 0, -3}, + { 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, -3, 0, 0}, + { 0, 0, 0, 0,-1, 0, 3, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, -35, -48, -21, 15}, + { 0, 0, 0, 0, 0, 0, -2, 6, 0, 0, 0, 0, 2, -3, -5, -2, 1}, + { 0, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0, 6, 0, 0, -3}, + { 0, 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 2, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, 0, -5, 0, 0}, + { 0, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 1, 12, 55, 29, -6}, + + /* 411-420 */ + { 0, 1,-1, 1, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0}, + { 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, -598, 0, 0, 0}, + { 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 1, -3, -13, -7, 1}, + { 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 2, -5, -7, -3, 2}, + { 0, 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 2, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, 5, -7, 0, 0}, + { 0, 0, 0, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0, 4, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, 16, -6, 0, 0}, + { 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, 0, 8, -3, 0, 0}, + { 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 0, 1, 8, -31, -16, -4}, + + /* 421-430 */ + { 0, 1,-1, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 0, 2, 113, 0, 0, -49}, + { 0, 0, 0, 0, 0, -7, 10, 0, 0, 0, 0, 0, 2, 0, -24, -10, 0}, + { 0, 0, 0, 0, 0, -7, 10, 0, 0, 0, 0, 0, 1, 4, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 27, 0, 0, 0}, + { 0, 0, 0, 0, 0, -4, 8, 0, 0, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, -4, 5, 0, 0, 0, 0, 0, 2, 0, -4, -2, 0}, + { 0, 0, 0, 0, 0, -4, 5, 0, 0, 0, 0, 0, 1, 5, 0, 0, -2}, + { 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0}, + { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2, -13, 0, 0, 6}, + + /* 431-440 */ + { 0, 0, 0, 0, 0, 0, -2, 0, 5, 0, 0, 0, 2, 5, 0, 0, -2}, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -18, -10, -4, 8}, + { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -4, -28, 0, 0}, + { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, -5, 6, 3, 2}, + { 0, 0, 0, 0, 0, -9, 13, 0, 0, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, 0, -1, 5, 0, 0, 0, 0, 2, -5, -9, -4, 2}, + { 0, 0, 0, 0, 0, 0, -2, 0, 4, 0, 0, 0, 2, 17, 0, 0, -7}, + { 0, 0, 0, 0, 0, 0, 2, 0,-4, 0, 0, 0, 0, 11, 4, 0, 0}, + { 0, 0, 0, 0, 0, 0, -2, 7, 0, 0, 0, 0, 2, 0, -6, -2, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, 83, 15, 0, 0}, + + /* 441-450 */ + { 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 0, 1, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 0, 2, 0,-114, -49, 0}, + { 0, 0, 0, 0, 0, -6, 8, 0, 0, 0, 0, 0, 2, 117, 0, 0, -51}, + { 0, 0, 0, 0, 0, -6, 8, 0, 0, 0, 0, 0, 1, -5, 19, 10, 2}, + { 0, 0, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 1, 0, 0, 2, 0,-2, 0, 0, 0, 0, -3, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, -3, 9, 0, 0, 0, 0, 2, 0, -3, -1, 0}, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 2, 0, -6, -2, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 393, 3, 0, 0}, + + /* 451-460 */ + { 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 1, -4, 21, 11, 2}, + { 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 2, -6, 0, -1, 3}, + { 0, 0, 0, 0, 0, -5, 10, 0, 0, 0, 0, 0, 2, -3, 8, 4, 1}, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 8, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 2, 18, -29, -13, -8}, + { 0, 0, 0, 0, 0, -3, 3, 0, 0, 0, 0, 0, 1, 8, 34, 18, -4}, + { 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0}, + { 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 1, 3, 12, 6, -1}, + { 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 2, 54, -15, -7, -24}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0,-3, 0, 0, 0, 0, 3, 0, 0}, + + /* 461-470 */ + { 0, 0, 0, 0, 0, 0, -5, 13, 0, 0, 0, 0, 2, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 0, 2, 0,-1, 0, 0, 0, 0, 0, 35, 0, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0,-1, 0, 0, 0, 2, -154, -30, -13, 67}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0,-2, 0, 0, 0, 15, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0,-2, 0, 0, 1, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 0, 9, 0, 0}, + { 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 2, 80, -71, -31, -35}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0,-1, 0, 0, 2, 0, -20, -9, 0}, + { 0, 0, 0, 0, 0, 0, -6, 15, 0, 0, 0, 0, 2, 11, 5, 2, -5}, + { 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 0, 2, 61, -96, -42, -27}, + + /* 471-480 */ + { 0, 0, 0, 0, 0, -3, 9, -4, 0, 0, 0, 0, 2, 14, 9, 4, -6}, + { 0, 0, 0, 0, 0, 0, 2, 0, 2,-5, 0, 0, 2, -11, -6, -3, 5}, + { 0, 0, 0, 0, 0, 0, -2, 8,-1,-5, 0, 0, 2, 0, -3, -1, 0}, + { 0, 0, 0, 0, 0, 0, 6, -8, 3, 0, 0, 0, 2, 123,-415, -180, -53}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -35}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 7, -32, -17, -4}, + { 0, 1,-1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -9, -5, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, -4, 2, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, -89, 0, 0, 38}, + + /* 481-490 */ + { 0, 0, 0, 0, 0, 0, -6, 16,-4,-5, 0, 0, 2, 0, -86, -19, -6}, + { 0, 0, 0, 0, 0, 0, -2, 8,-3, 0, 0, 0, 2, 0, 0, -19, 6}, + { 0, 0, 0, 0, 0, 0, -2, 8,-3, 0, 0, 0, 2, -123,-416, -180, 53}, + { 0, 0, 0, 0, 0, 0, 6, -8, 1, 5, 0, 0, 2, 0, -3, -1, 0}, + { 0, 0, 0, 0, 0, 0, 2, 0,-2, 5, 0, 0, 2, 12, -6, -3, -5}, + { 0, 0, 0, 0, 0, 3, -5, 4, 0, 0, 0, 0, 2, -13, 9, 4, 6}, + { 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 2, 0, -15, -7, 0}, + { 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 1, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 2, -62, -97, -42, 27}, + { 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 2, -11, 5, 2, 5}, + + /* 491-500 */ + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, -19, -8, 0}, + { 0, 0, 0, 0, 0, 3, -3, 0, 2, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 2,-2, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, 4, 2, 0}, + { 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + { 0, 2,-2, 1, 0, 0, -4, 8,-3, 0, 0, 0, 0, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 2, -85, -70, -31, 37}, + { 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 163, -12, -5, -72}, + { 0, 0, 0, 0, 0, -3, 7, 0, 0, 0, 0, 0, 2, -63, -16, -7, 28}, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, -21, -32, -14, 9}, + { 0, 0, 0, 0, 0, -5, 6, 0, 0, 0, 0, 0, 2, 0, -3, -1, 0}, + + /* 501-510 */ + { 0, 0, 0, 0, 0, -5, 6, 0, 0, 0, 0, 0, 1, 3, 0, 0, -2}, + { 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0}, + { 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 2, 3, 10, 4, -1}, + { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 0, -1, 6, 0, 0, 0, 0, 2, 0, -7, -3, 0}, + { 0, 0, 0, 0, 0, 0, 7, -9, 0, 0, 0, 0, 2, 0, -4, -2, 0}, + { 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 6, 19, 0, 0}, + { 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 2, 5,-173, -75, -2}, + { 0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 2, 0, -7, -3, 0}, + { 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 2, 7, -12, -5, -3}, + + /* 511-520 */ + { 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 1, -3, 0, 0, 2}, + { 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 2, 3, -4, -2, -1}, + { 0, 0, 0, 0, 0, -7, 9, 0, 0, 0, 0, 0, 2, 74, 0, 0, -32}, + { 0, 0, 0, 0, 0, -7, 9, 0, 0, 0, 0, 0, 1, -3, 12, 6, 2}, + { 0, 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 2, 26, -14, -6, -11}, + { 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 2, 19, 0, 0, -8}, + { 0, 0, 0, 0, 0, -4, 4, 0, 0, 0, 0, 0, 1, 6, 24, 13, -3}, + { 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0}, + { 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 1, 0, -10, -5, 0}, + { 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 2, 11, -3, -1, -5}, + + /* 521-530 */ + { 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 3, 0, 1, -1}, + { 0, 0, 0, 0, 0, 0, -3, 0, 5, 0, 0, 0, 2, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0}, + { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 5, -23, -12, -3}, + { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2, -339, 0, 0, 147}, + { 0, 0, 0, 0, 0, -9, 12, 0, 0, 0, 0, 0, 2, 0, -10, -5, 0}, + { 0, 0, 0, 0, 0, 0, 3, 0,-4, 0, 0, 0, 0, 5, 0, 0, 0}, + { 0, 2,-2, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 2, 0, -4, -2, 0}, + { 0, 0, 0, 0, 0, 0, 3, 0,-3, 0, 0, 0, 0, 18, -3, 0, 0}, + + /* 531-540 */ + { 0, 0, 0, 0, 0, 0, 3, 0,-3, 0, 0, 0, 2, 9, -11, -5, -4}, + { 0, 0, 0, 0, 0, -2, 6, 0, 0, 0, 0, 0, 2, -8, 0, 0, 4}, + { 0, 0, 0, 0, 0, -6, 7, 0, 0, 0, 0, 0, 1, 3, 0, 0, -1}, + { 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0}, + { 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 2, 6, -9, -4, -2}, + { 0, 0, 0, 0, 0, 0, 3, 0,-2, 0, 0, 0, 0, -4, -12, 0, 0}, + { 0, 0, 0, 0, 0, 0, 3, 0,-2, 0, 0, 0, 2, 67, -91, -39, -29}, + { 0, 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 2, 30, -18, -8, -13}, + { 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 2, 0,-114, -50, 0}, + + /* 541-550 */ + { 0, 0, 0, 0, 0, 0, 3, 0,-1, 0, 0, 0, 2, 0, 0, 0, 23}, + { 0, 0, 0, 0, 0, 0, 3, 0,-1, 0, 0, 0, 2, 517, 16, 7,-224}, + { 0, 0, 0, 0, 0, 0, 3, 0, 0,-2, 0, 0, 2, 0, -7, -3, 0}, + { 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 2, 143, -3, -1, -62}, + { 0, 0, 0, 0, 0, 0, 3, 0, 0,-1, 0, 0, 2, 29, 0, 0, -13}, + { 0, 2,-2, 1, 0, 0, 1, 0,-1, 0, 0, 0, 0, -4, 0, 0, 2}, + { 0, 0, 0, 0, 0, -8, 16, 0, 0, 0, 0, 0, 2, -6, 0, 0, 3}, + { 0, 0, 0, 0, 0, 0, 3, 0, 2,-5, 0, 0, 2, 5, 12, 5, -2}, + { 0, 0, 0, 0, 0, 0, 7, -8, 3, 0, 0, 0, 2, -25, 0, 0, 11}, + { 0, 0, 0, 0, 0, 0, -5, 16,-4,-5, 0, 0, 2, -3, 0, 0, 1}, + + /* 551-560 */ + { 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, 0, -1, 8,-3, 0, 0, 0, 2, -22, 12, 5, 10}, + { 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 2, 50, 0, 0, -22}, + { 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 1, 0, 7, 4, 0}, + { 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, -4, 4, 2, 2}, + { 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2, -5, -11, -5, 2}, + { 0, 0, 0, 0, 0, -3, 8, 0, 0, 0, 0, 0, 2, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, -5, 5, 0, 0, 0, 0, 0, 1, 4, 17, 9, -2}, + { 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0}, + + /* 561-570 */ + { 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 1, 0, -4, -2, 0}, + { 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 2, -8, 0, 0, 4}, + { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 4, -15, -8, -2}, + { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 370, -8, 0,-160}, + { 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 2, 0, 0, -3, 0}, + { 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 2, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, 0, 6, -5, 0, 0, 0, 0, 2, -6, 3, 1, 3}, + { 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0}, + { 0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 2, -10, 0, 0, 4}, + + /* 571-580 */ + { 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 0, 2, 0, 9, 4, 0}, + { 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 2, 4, 17, 7, -2}, + { 0, 0, 0, 0, 0, -9, 11, 0, 0, 0, 0, 0, 2, 34, 0, 0, -15}, + { 0, 0, 0, 0, 0, -9, 11, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0}, + { 0, 0, 0, 0, 0, 0, 4, 0,-4, 0, 0, 0, 2, -5, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 4, 0,-3, 0, 0, 0, 2, -37, -7, -3, 16}, + { 0, 0, 0, 0, 0, -6, 6, 0, 0, 0, 0, 0, 1, 3, 13, 7, -2}, + { 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0}, + { 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 1, 0, -3, -2, 0}, + { 0, 0, 0, 0, 0, 0, 4, 0,-2, 0, 0, 0, 2, -184, -3, -1, 80}, + + /* 581-590 */ + { 0, 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 2, -3, 0, 0, 1}, + { 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0}, + { 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 1, 0, -10, -6, -1}, + { 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 2, 31, -6, 0, -13}, + { 0, 0, 0, 0, 0, 0, 4, 0,-1, 0, 0, 0, 2, -3, -32, -14, 1}, + { 0, 0, 0, 0, 0, 0, 4, 0, 0,-2, 0, 0, 2, -7, 0, 0, 3}, + { 0, 0, 0, 0, 0, 0, 5, -2, 0, 0, 0, 0, 2, 0, -8, -4, 0}, + { 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 3, -4, 0, 0}, + { 0, 0, 0, 0, 0, 8, -9, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0}, + { 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0}, + + /* 591-600 */ + { 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 2, 19, -23, -10, 2}, + { 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, -10}, + { 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0}, + { 0, 0, 0, 0, 0, -7, 7, 0, 0, 0, 0, 0, 1, 0, 9, 5, -1}, + { 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0}, + { 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 1, 0, -7, -4, 0}, + { 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 2, 8, -4, 0, -4}, + { 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0}, + { 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + { 0, 0, 0, 0, 0, 0, 5, 0,-4, 0, 0, 0, 2, -3, 0, 0, 1}, + + /* 601-610 */ + { 0, 0, 0, 0, 0, 0, 5, 0,-3, 0, 0, 0, 2, -9, 0, 1, 4}, + { 0, 0, 0, 0, 0, 0, 5, 0,-2, 0, 0, 0, 2, 3, 12, 5, -1}, + { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 17, -3, -1, 0}, + { 0, 0, 0, 0, 0, -8, 8, 0, 0, 0, 0, 0, 1, 0, 7, 4, 0}, + { 0, 0, 0, 0, 0, 8, -8, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0}, + { 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 1, 0, -5, -3, 0}, + { 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 2, 14, -3, 0, -1}, + { 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0}, + { 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, -5}, + { 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0}, + + /* 611-620 */ + { 0, 0, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0}, + { 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 0, 1, 0, -3, -2, 0}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 2, 9, 4, 3}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 4, 2, 0}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 6, 0, 0, -3}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0}, + { 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 5, 0, 0, -2}, + + /* 621-630 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, -1}, + { 1, 0,-2, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, -3, 0, 0, 0}, + { 1, 0,-2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0}, + { 1, 0,-2, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, 7, 0, 0, 0}, + { 1, 0,-2, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0}, + {-1, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0}, + {-1, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 6, 0, 0, 0}, + {-1, 0, 2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, -4, 0, 0}, + { 1, 0,-2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, -4, 0, 0}, + {-2, 0, 2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, 5, 0, 0, 0}, + + /* 631-640 */ + {-1, 0, 0, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, -3, 0, 0, 0}, + {-1, 0, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, 4, 0, 0, 0}, + {-1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0}, + {-1, 0, 2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0}, + { 1,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0}, + {-1, 0, 2, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, 13, 0, 0, 0}, + {-2, 0, 0, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, 21, 11, 0, 0}, + { 1, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, -5, 0, 0}, + {-1, 1,-1, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -5, -2, 0}, + { 1, 1,-1, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0}, + + /* 641-650 */ + {-1, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, -5, 0, 0}, + {-1, 0, 2, 1, 0, 0, 2, 0,-2, 0, 0, 0, 0, -3, 0, 0, 2}, + { 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 20, 10, 0, 0}, + {-1, 0, 2, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, -34, 0, 0, 0}, + {-1, 0, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0}, + { 1, 0,-2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0, 3, 0, 0, -2}, + { 1, 2,-2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + { 1, 2,-2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0, -6, 0, 0, 3}, + { 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0}, + { 1, 0, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, 3, 0, 0, 0}, + + /* 651-660 */ + { 0, 0,-2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0}, + { 0, 0,-2, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0, 4, 0, 0, 0}, + { 0, 2, 0, 2, 0, -2, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 2, 0, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0, 6, 0, 0, -3}, + { 0, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0, -8, 0, 0, 3}, + { 0, 2, 0, 2, 0, -2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 0, 2, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, -3, 0, 0, 0}, + { 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -3, -2, 0}, + { 1, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 126, -63, -27, -55}, + {-1, 2, 0, 2, 0, 10, -3, 0, 0, 0, 0, 0, 0, -5, 0, 1, 2}, + + /* 661-670 */ + { 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -3, 28, 15, 2}, + { 1, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5, 0, 1, -2}, + { 0, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, 9, 4, 1}, + { 0, 2, 0, 2, 0, 0, -4, 8,-3, 0, 0, 0, 0, 0, 9, 4, -1}, + {-1, 2, 0, 2, 0, 0, -4, 8,-3, 0, 0, 0, 0, -126, -63, -27, 55}, + { 2, 2,-2, 2, 0, 0, -2, 0, 3, 0, 0, 0, 0, 3, 0, 0, -1}, + { 1, 2, 0, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0, 21, -11, -6, -11}, + { 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0}, + {-1, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -21, -11, -6, 11}, + {-2, 2, 2, 2, 0, 0, 2, 0,-2, 0, 0, 0, 0, -3, 0, 0, 1}, + + /* 671-680 */ + { 0, 2, 0, 2, 0, 2, -3, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0}, + { 0, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0, 8, 0, 0, -4}, + { 0, 2, 0, 2, 0, 0, 1, 0,-1, 0, 0, 0, 0, -6, 0, 0, 3}, + { 0, 2, 0, 2, 0, 2, -2, 0, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + {-1, 2, 2, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0, 3, 0, 0, -1}, + { 1, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0, -3, 0, 0, 1}, + {-1, 2, 2, 2, 0, 0, 2, 0,-3, 0, 0, 0, 0, -5, 0, 0, 2}, + { 2, 2, 0, 2, 0, 0, 2, 0,-3, 0, 0, 0, 0, 24, -12, -5, -11}, + { 1, 2, 0, 2, 0, 0, -4, 8,-3, 0, 0, 0, 0, 0, 3, 1, 0}, + { 1, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0, 0, 3, 1, 0}, + + /* 681-687 */ + { 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0}, + { 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, -24, -12, -5, 10}, + { 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4, 0, -1, -2}, + {-1, 2, 2, 2, 0, 0, 2, 0,-2, 0, 0, 0, 0, 13, 0, 0, -6}, + {-1, 2, 2, 2, 0, 3, -3, 0, 0, 0, 0, 0, 0, 7, 0, 0, -3}, + { 1, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1}, + { 0, 2, 2, 2, 0, 0, 2, 0,-2, 0, 0, 0, 0, 3, 0, 0, -1} + }; + +/* Number of terms in the planetary nutation model */ + const int NPL = (int) (sizeof xpl / sizeof xpl[0]); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* ------------------- */ +/* LUNI-SOLAR NUTATION */ +/* ------------------- */ + +/* Fundamental (Delaunay) arguments */ + +/* Mean anomaly of the Moon (IERS 2003). */ + el = iauFal03(t); + +/* Mean anomaly of the Sun (MHB2000). */ + elp = fmod(1287104.79305 + + t * (129596581.0481 + + t * (-0.5532 + + t * (0.000136 + + t * (-0.00001149)))), TURNAS) * DAS2R; + +/* Mean longitude of the Moon minus that of the ascending node */ +/* (IERS 2003. */ + f = iauFaf03(t); + +/* Mean elongation of the Moon from the Sun (MHB2000). */ + d = fmod(1072260.70369 + + t * (1602961601.2090 + + t * (-6.3706 + + t * (0.006593 + + t * (-0.00003169)))), TURNAS) * DAS2R; + +/* Mean longitude of the ascending node of the Moon (IERS 2003). */ + om = iauFaom03(t); + +/* Initialize the nutation values. */ + dp = 0.0; + de = 0.0; + +/* Summation of luni-solar nutation series (in reverse order). */ + for (i = NLS-1; i >= 0; i--) { + + /* Argument and functions. */ + arg = fmod((double)xls[i].nl * el + + (double)xls[i].nlp * elp + + (double)xls[i].nf * f + + (double)xls[i].nd * d + + (double)xls[i].nom * om, D2PI); + sarg = sin(arg); + carg = cos(arg); + + /* Term. */ + dp += (xls[i].sp + xls[i].spt * t) * sarg + xls[i].cp * carg; + de += (xls[i].ce + xls[i].cet * t) * carg + xls[i].se * sarg; + } + +/* Convert from 0.1 microarcsec units to radians. */ + dpsils = dp * U2R; + depsls = de * U2R; + +/* ------------------ */ +/* PLANETARY NUTATION */ +/* ------------------ */ + +/* n.b. The MHB2000 code computes the luni-solar and planetary nutation */ +/* in different functions, using slightly different Delaunay */ +/* arguments in the two cases. This behaviour is faithfully */ +/* reproduced here. Use of the IERS 2003 expressions for both */ +/* cases leads to negligible changes, well below */ +/* 0.1 microarcsecond. */ + +/* Mean anomaly of the Moon (MHB2000). */ + al = fmod(2.35555598 + 8328.6914269554 * t, D2PI); + +/* Mean longitude of the Moon minus that of the ascending node */ +/*(MHB2000). */ + af = fmod(1.627905234 + 8433.466158131 * t, D2PI); + +/* Mean elongation of the Moon from the Sun (MHB2000). */ + ad = fmod(5.198466741 + 7771.3771468121 * t, D2PI); + +/* Mean longitude of the ascending node of the Moon (MHB2000). */ + aom = fmod(2.18243920 - 33.757045 * t, D2PI); + +/* General accumulated precession in longitude (IERS 2003). */ + apa = iauFapa03(t); + +/* Planetary longitudes, Mercury through Uranus (IERS 2003). */ + alme = iauFame03(t); + alve = iauFave03(t); + alea = iauFae03(t); + alma = iauFama03(t); + alju = iauFaju03(t); + alsa = iauFasa03(t); + alur = iauFaur03(t); + +/* Neptune longitude (MHB2000). */ + alne = fmod(5.321159000 + 3.8127774000 * t, D2PI); + +/* Initialize the nutation values. */ + dp = 0.0; + de = 0.0; + +/* Summation of planetary nutation series (in reverse order). */ + for (i = NPL-1; i >= 0; i--) { + + /* Argument and functions. */ + arg = fmod((double)xpl[i].nl * al + + (double)xpl[i].nf * af + + (double)xpl[i].nd * ad + + (double)xpl[i].nom * aom + + (double)xpl[i].nme * alme + + (double)xpl[i].nve * alve + + (double)xpl[i].nea * alea + + (double)xpl[i].nma * alma + + (double)xpl[i].nju * alju + + (double)xpl[i].nsa * alsa + + (double)xpl[i].nur * alur + + (double)xpl[i].nne * alne + + (double)xpl[i].npa * apa, D2PI); + sarg = sin(arg); + carg = cos(arg); + + /* Term. */ + dp += (double)xpl[i].sp * sarg + (double)xpl[i].cp * carg; + de += (double)xpl[i].se * sarg + (double)xpl[i].ce * carg; + + } + +/* Convert from 0.1 microarcsec units to radians. */ + dpsipl = dp * U2R; + depspl = de * U2R; + +/* ------- */ +/* RESULTS */ +/* ------- */ + +/* Add luni-solar and planetary components. */ + *dpsi = dpsils + dpsipl; + *deps = depsls + depspl; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/nut00b.c b/20200721/c/src/nut00b.c new file mode 100644 index 0000000..6d1df2c --- /dev/null +++ b/20200721/c/src/nut00b.c @@ -0,0 +1,422 @@ +#include "sofa.h" + +void iauNut00b(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 0 b +** - - - - - - - - - - +** +** Nutation, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the equinox and ecliptic of date. The +** obliquity at J2000.0 is assumed to be the Lieske et al. (1977) +** value of 84381.448 arcsec. (The errors that result from using +** this function with the IAU 2006 value of 84381.406 arcsec can be +** neglected.) +** +** The nutation model consists only of luni-solar terms, but +** includes also a fixed offset which compensates for certain long- +** period planetary terms (Note 7). +** +** 3) This function is an implementation of the IAU 2000B abridged +** nutation model formally adopted by the IAU General Assembly in +** 2000. The function computes the MHB_2000_SHORT luni-solar +** nutation series (Luzum 2001), but without the associated +** corrections for the precession rate adjustments and the offset +** between the GCRS and J2000.0 mean poles. +** +** 4) The full IAU 2000A (MHB2000) nutation model contains nearly 1400 +** terms. The IAU 2000B model (McCarthy & Luzum 2003) contains only +** 77 terms, plus additional simplifications, yet still delivers +** results of 1 mas accuracy at present epochs. This combination of +** accuracy and size makes the IAU 2000B abridged nutation model +** suitable for most practical applications. +** +** The function delivers a pole accurate to 1 mas from 1900 to 2100 +** (usually better than 1 mas, very occasionally just outside +** 1 mas). The full IAU 2000A model, which is implemented in the +** function iauNut00a (q.v.), delivers considerably greater accuracy +** at current dates; however, to realize this improved accuracy, +** corrections for the essentially unpredictable free-core-nutation +** (FCN) must also be included. +** +** 5) The present function provides classical nutation. The +** MHB_2000_SHORT algorithm, from which it is adapted, deals also +** with (i) the offsets between the GCRS and mean poles and (ii) the +** adjustments in longitude and obliquity due to the changed +** precession rates. These additional functions, namely frame bias +** and precession adjustments, are supported by the SOFA functions +** iauBi00 and iauPr00. +** +** 6) The MHB_2000_SHORT algorithm also provides "total" nutations, +** comprising the arithmetic sum of the frame bias, precession +** adjustments, and nutation (luni-solar + planetary). These total +** nutations can be used in combination with an existing IAU 1976 +** precession implementation, such as iauPmat76, to deliver GCRS- +** to-true predictions of mas accuracy at current epochs. However, +** for symmetry with the iauNut00a function (q.v. for the reasons), +** the SOFA functions do not generate the "total nutations" +** directly. Should they be required, they could of course easily +** be generated by calling iauBi00, iauPr00 and the present function +** and adding the results. +** +** 7) The IAU 2000B model includes "planetary bias" terms that are +** fixed in size but compensate for long-period nutations. The +** amplitudes quoted in McCarthy & Luzum (2003), namely +** Dpsi = -1.5835 mas and Depsilon = +1.6339 mas, are optimized for +** the "total nutations" method described in Note 6. The Luzum +** (2001) values used in this SOFA implementation, namely -0.135 mas +** and +0.388 mas, are optimized for the "rigorous" method, where +** frame bias, precession and nutation are applied separately and in +** that order. During the interval 1995-2050, the SOFA +** implementation delivers a maximum error of 1.001 mas (not +** including FCN). +** +** References: +** +** Lieske, J.H., Lederle, T., Fricke, W., Morando, B., "Expressions +** for the precession quantities based upon the IAU /1976/ system of +** astronomical constants", Astron.Astrophys. 58, 1-2, 1-16. (1977) +** +** Luzum, B., private communication, 2001 (Fortran code +** MHB_2000_SHORT) +** +** McCarthy, D.D. & Luzum, B.J., "An abridged model of the +** precession-nutation of the celestial pole", Cel.Mech.Dyn.Astron. +** 85, 37-49 (2003) +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J., Astron.Astrophys. 282, 663-683 (1994) +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, el, elp, f, d, om, arg, dp, de, sarg, carg, + dpsils, depsls, dpsipl, depspl; + int i; + +/* Units of 0.1 microarcsecond to radians */ + static const double U2R = DAS2R / 1e7; + +/* ---------------------------------------- */ +/* Fixed offsets in lieu of planetary terms */ +/* ---------------------------------------- */ + + static const double DPPLAN = -0.135 * DMAS2R; + static const double DEPLAN = 0.388 * DMAS2R; + +/* --------------------------------------------------- */ +/* Luni-solar nutation: argument and term coefficients */ +/* --------------------------------------------------- */ + +/* The units for the sine and cosine coefficients are */ +/* 0.1 microarcsec and the same per Julian century */ + + static const struct { + int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */ + double ps,pst,pc; /* longitude sin, t*sin, cos coefficients */ + double ec,ect,es; /* obliquity cos, t*cos, sin coefficients */ + + } x[] = { + + /* 1-10 */ + { 0, 0, 0, 0,1, + -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0}, + { 0, 0, 2,-2,2, + -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0}, + { 0, 0, 2, 0,2,-2276413.0,-234.0, 2796.0, 978459.0,-485.0,1374.0}, + { 0, 0, 0, 0,2,2074554.0, 207.0, -698.0,-897492.0, 470.0,-291.0}, + { 0, 1, 0, 0,0,1475877.0,-3633.0,11817.0, 73871.0,-184.0,-1924.0}, + { 0, 1, 2,-2,2,-516821.0, 1226.0, -524.0, 224386.0,-677.0,-174.0}, + { 1, 0, 0, 0,0, 711159.0, 73.0, -872.0, -6750.0, 0.0, 358.0}, + { 0, 0, 2, 0,1,-387298.0, -367.0, 380.0, 200728.0, 18.0, 318.0}, + { 1, 0, 2, 0,2,-301461.0, -36.0, 816.0, 129025.0, -63.0, 367.0}, + { 0,-1, 2,-2,2, 215829.0, -494.0, 111.0, -95929.0, 299.0, 132.0}, + + /* 11-20 */ + { 0, 0, 2,-2,1, 128227.0, 137.0, 181.0, -68982.0, -9.0, 39.0}, + {-1, 0, 2, 0,2, 123457.0, 11.0, 19.0, -53311.0, 32.0, -4.0}, + {-1, 0, 0, 2,0, 156994.0, 10.0, -168.0, -1235.0, 0.0, 82.0}, + { 1, 0, 0, 0,1, 63110.0, 63.0, 27.0, -33228.0, 0.0, -9.0}, + {-1, 0, 0, 0,1, -57976.0, -63.0, -189.0, 31429.0, 0.0, -75.0}, + {-1, 0, 2, 2,2, -59641.0, -11.0, 149.0, 25543.0, -11.0, 66.0}, + { 1, 0, 2, 0,1, -51613.0, -42.0, 129.0, 26366.0, 0.0, 78.0}, + {-2, 0, 2, 0,1, 45893.0, 50.0, 31.0, -24236.0, -10.0, 20.0}, + { 0, 0, 0, 2,0, 63384.0, 11.0, -150.0, -1220.0, 0.0, 29.0}, + { 0, 0, 2, 2,2, -38571.0, -1.0, 158.0, 16452.0, -11.0, 68.0}, + + /* 21-30 */ + { 0,-2, 2,-2,2, 32481.0, 0.0, 0.0, -13870.0, 0.0, 0.0}, + {-2, 0, 0, 2,0, -47722.0, 0.0, -18.0, 477.0, 0.0, -25.0}, + { 2, 0, 2, 0,2, -31046.0, -1.0, 131.0, 13238.0, -11.0, 59.0}, + { 1, 0, 2,-2,2, 28593.0, 0.0, -1.0, -12338.0, 10.0, -3.0}, + {-1, 0, 2, 0,1, 20441.0, 21.0, 10.0, -10758.0, 0.0, -3.0}, + { 2, 0, 0, 0,0, 29243.0, 0.0, -74.0, -609.0, 0.0, 13.0}, + { 0, 0, 2, 0,0, 25887.0, 0.0, -66.0, -550.0, 0.0, 11.0}, + { 0, 1, 0, 0,1, -14053.0, -25.0, 79.0, 8551.0, -2.0, -45.0}, + {-1, 0, 0, 2,1, 15164.0, 10.0, 11.0, -8001.0, 0.0, -1.0}, + { 0, 2, 2,-2,2, -15794.0, 72.0, -16.0, 6850.0, -42.0, -5.0}, + + /* 31-40 */ + { 0, 0,-2, 2,0, 21783.0, 0.0, 13.0, -167.0, 0.0, 13.0}, + { 1, 0, 0,-2,1, -12873.0, -10.0, -37.0, 6953.0, 0.0, -14.0}, + { 0,-1, 0, 0,1, -12654.0, 11.0, 63.0, 6415.0, 0.0, 26.0}, + {-1, 0, 2, 2,1, -10204.0, 0.0, 25.0, 5222.0, 0.0, 15.0}, + { 0, 2, 0, 0,0, 16707.0, -85.0, -10.0, 168.0, -1.0, 10.0}, + { 1, 0, 2, 2,2, -7691.0, 0.0, 44.0, 3268.0, 0.0, 19.0}, + {-2, 0, 2, 0,0, -11024.0, 0.0, -14.0, 104.0, 0.0, 2.0}, + { 0, 1, 2, 0,2, 7566.0, -21.0, -11.0, -3250.0, 0.0, -5.0}, + { 0, 0, 2, 2,1, -6637.0, -11.0, 25.0, 3353.0, 0.0, 14.0}, + { 0,-1, 2, 0,2, -7141.0, 21.0, 8.0, 3070.0, 0.0, 4.0}, + + /* 41-50 */ + { 0, 0, 0, 2,1, -6302.0, -11.0, 2.0, 3272.0, 0.0, 4.0}, + { 1, 0, 2,-2,1, 5800.0, 10.0, 2.0, -3045.0, 0.0, -1.0}, + { 2, 0, 2,-2,2, 6443.0, 0.0, -7.0, -2768.0, 0.0, -4.0}, + {-2, 0, 0, 2,1, -5774.0, -11.0, -15.0, 3041.0, 0.0, -5.0}, + { 2, 0, 2, 0,1, -5350.0, 0.0, 21.0, 2695.0, 0.0, 12.0}, + { 0,-1, 2,-2,1, -4752.0, -11.0, -3.0, 2719.0, 0.0, -3.0}, + { 0, 0, 0,-2,1, -4940.0, -11.0, -21.0, 2720.0, 0.0, -9.0}, + {-1,-1, 0, 2,0, 7350.0, 0.0, -8.0, -51.0, 0.0, 4.0}, + { 2, 0, 0,-2,1, 4065.0, 0.0, 6.0, -2206.0, 0.0, 1.0}, + { 1, 0, 0, 2,0, 6579.0, 0.0, -24.0, -199.0, 0.0, 2.0}, + + /* 51-60 */ + { 0, 1, 2,-2,1, 3579.0, 0.0, 5.0, -1900.0, 0.0, 1.0}, + { 1,-1, 0, 0,0, 4725.0, 0.0, -6.0, -41.0, 0.0, 3.0}, + {-2, 0, 2, 0,2, -3075.0, 0.0, -2.0, 1313.0, 0.0, -1.0}, + { 3, 0, 2, 0,2, -2904.0, 0.0, 15.0, 1233.0, 0.0, 7.0}, + { 0,-1, 0, 2,0, 4348.0, 0.0, -10.0, -81.0, 0.0, 2.0}, + { 1,-1, 2, 0,2, -2878.0, 0.0, 8.0, 1232.0, 0.0, 4.0}, + { 0, 0, 0, 1,0, -4230.0, 0.0, 5.0, -20.0, 0.0, -2.0}, + {-1,-1, 2, 2,2, -2819.0, 0.0, 7.0, 1207.0, 0.0, 3.0}, + {-1, 0, 2, 0,0, -4056.0, 0.0, 5.0, 40.0, 0.0, -2.0}, + { 0,-1, 2, 2,2, -2647.0, 0.0, 11.0, 1129.0, 0.0, 5.0}, + + /* 61-70 */ + {-2, 0, 0, 0,1, -2294.0, 0.0, -10.0, 1266.0, 0.0, -4.0}, + { 1, 1, 2, 0,2, 2481.0, 0.0, -7.0, -1062.0, 0.0, -3.0}, + { 2, 0, 0, 0,1, 2179.0, 0.0, -2.0, -1129.0, 0.0, -2.0}, + {-1, 1, 0, 1,0, 3276.0, 0.0, 1.0, -9.0, 0.0, 0.0}, + { 1, 1, 0, 0,0, -3389.0, 0.0, 5.0, 35.0, 0.0, -2.0}, + { 1, 0, 2, 0,0, 3339.0, 0.0, -13.0, -107.0, 0.0, 1.0}, + {-1, 0, 2,-2,1, -1987.0, 0.0, -6.0, 1073.0, 0.0, -2.0}, + { 1, 0, 0, 0,2, -1981.0, 0.0, 0.0, 854.0, 0.0, 0.0}, + {-1, 0, 0, 1,0, 4026.0, 0.0, -353.0, -553.0, 0.0,-139.0}, + { 0, 0, 2, 1,2, 1660.0, 0.0, -5.0, -710.0, 0.0, -2.0}, + + /* 71-77 */ + {-1, 0, 2, 4,2, -1521.0, 0.0, 9.0, 647.0, 0.0, 4.0}, + {-1, 1, 0, 1,1, 1314.0, 0.0, 0.0, -700.0, 0.0, 0.0}, + { 0,-2, 2,-2,1, -1283.0, 0.0, 0.0, 672.0, 0.0, 0.0}, + { 1, 0, 2, 2,1, -1331.0, 0.0, 8.0, 663.0, 0.0, 4.0}, + {-2, 0, 2, 2,2, 1383.0, 0.0, -2.0, -594.0, 0.0, -2.0}, + {-1, 0, 0, 0,2, 1405.0, 0.0, 4.0, -610.0, 0.0, 2.0}, + { 1, 1, 2,-2,2, 1290.0, 0.0, 0.0, -556.0, 0.0, 0.0} + }; + +/* Number of terms in the series */ + const int NLS = (int) (sizeof x / sizeof x[0]); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental epoch J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* --------------------*/ +/* LUNI-SOLAR NUTATION */ +/* --------------------*/ + +/* Fundamental (Delaunay) arguments from Simon et al. (1994) */ + +/* Mean anomaly of the Moon. */ + el = fmod(485868.249036 + (1717915923.2178) * t, TURNAS) * DAS2R; + +/* Mean anomaly of the Sun. */ + elp = fmod(1287104.79305 + (129596581.0481) * t, TURNAS) * DAS2R; + +/* Mean argument of the latitude of the Moon. */ + f = fmod(335779.526232 + (1739527262.8478) * t, TURNAS) * DAS2R; + +/* Mean elongation of the Moon from the Sun. */ + d = fmod(1072260.70369 + (1602961601.2090) * t, TURNAS) * DAS2R; + +/* Mean longitude of the ascending node of the Moon. */ + om = fmod(450160.398036 + (-6962890.5431) * t, TURNAS) * DAS2R; + +/* Initialize the nutation values. */ + dp = 0.0; + de = 0.0; + +/* Summation of luni-solar nutation series (smallest terms first). */ + for (i = NLS-1; i >= 0; i--) { + + /* Argument and functions. */ + arg = fmod( (double)x[i].nl * el + + (double)x[i].nlp * elp + + (double)x[i].nf * f + + (double)x[i].nd * d + + (double)x[i].nom * om, D2PI ); + sarg = sin(arg); + carg = cos(arg); + + /* Term. */ + dp += (x[i].ps + x[i].pst * t) * sarg + x[i].pc * carg; + de += (x[i].ec + x[i].ect * t) * carg + x[i].es * sarg; + } + +/* Convert from 0.1 microarcsec units to radians. */ + dpsils = dp * U2R; + depsls = de * U2R; + +/* ------------------------------*/ +/* IN LIEU OF PLANETARY NUTATION */ +/* ------------------------------*/ + +/* Fixed offset to correct for missing terms in truncated series. */ + dpsipl = DPPLAN; + depspl = DEPLAN; + +/* --------*/ +/* RESULTS */ +/* --------*/ + +/* Add luni-solar and planetary components. */ + *dpsi = dpsils + dpsipl; + *deps = depsls + depspl; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/nut06a.c b/20200721/c/src/nut06a.c new file mode 100644 index 0000000..96e1724 --- /dev/null +++ b/20200721/c/src/nut06a.c @@ -0,0 +1,200 @@ +#include "sofa.h" + +void iauNut06a(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - - +** i a u N u t 0 6 a +** - - - - - - - - - - +** +** IAU 2000A nutation with adjustments to match the IAU 2006 +** precession. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation, luni-solar + planetary (Note 2) +** +** Status: canonical model. +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components in longitude and obliquity are in radians +** and with respect to the mean equinox and ecliptic of date, +** IAU 2006 precession model (Hilton et al. 2006, Capitaine et al. +** 2005). +** +** 3) The function first computes the IAU 2000A nutation, then applies +** adjustments for (i) the consequences of the change in obliquity +** from the IAU 1980 ecliptic to the IAU 2006 ecliptic and (ii) the +** secular variation in the Earth's dynamical form factor J2. +** +** 4) The present function provides classical nutation, complementing +** the IAU 2000 frame bias and IAU 2006 precession. It delivers a +** pole which is at current epochs accurate to a few tens of +** microarcseconds, apart from the free core nutation. +** +** Called: +** iauNut00a nutation, IAU 2000A +** +** References: +** +** Chapront, J., Chapront-Touze, M. & Francou, G. 2002, +** Astron.Astrophys. 387, 700 +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977, +** Astron.Astrophys. 58, 1-16 +** +** Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res. +** 107, B4. The MHB_2000 code itself was obtained on 9th September +** 2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, fj2, dp, de; + + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Factor correcting for secular variation of J2. */ + fj2 = -2.7774e-6 * t; + +/* Obtain IAU 2000A nutation. */ + iauNut00a(date1, date2, &dp, &de); + +/* Apply P03 adjustments (Wallace & Capitaine, 2006, Eqs.5). */ + *dpsi = dp + dp * (0.4697e-6 + fj2); + *deps = de + de * fj2; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/nut80.c b/20200721/c/src/nut80.c new file mode 100644 index 0000000..80ba6d3 --- /dev/null +++ b/20200721/c/src/nut80.c @@ -0,0 +1,375 @@ +#include "sofa.h" + +void iauNut80(double date1, double date2, double *dpsi, double *deps) +/* +** - - - - - - - - - +** i a u N u t 8 0 +** - - - - - - - - - +** +** Nutation, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi double nutation in longitude (radians) +** deps double nutation in obliquity (radians) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components are with respect to the ecliptic of +** date. +** +** Called: +** iauAnpm normalize angle into range +/- pi +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.222 (p111). +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, el, elp, f, d, om, dp, de, arg, s, c; + int j; + +/* Units of 0.1 milliarcsecond to radians */ + const double U2R = DAS2R / 1e4; + +/* ------------------------------------------------ */ +/* Table of multiples of arguments and coefficients */ +/* ------------------------------------------------ */ + +/* The units for the sine and cosine coefficients are 0.1 mas and */ +/* the same per Julian century */ + + static const struct { + int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */ + double sp,spt; /* longitude sine, 1 and t coefficients */ + double ce,cet; /* obliquity cosine, 1 and t coefficients */ + } x[] = { + + /* 1-10 */ + { 0, 0, 0, 0, 1, -171996.0, -174.2, 92025.0, 8.9 }, + { 0, 0, 0, 0, 2, 2062.0, 0.2, -895.0, 0.5 }, + { -2, 0, 2, 0, 1, 46.0, 0.0, -24.0, 0.0 }, + { 2, 0, -2, 0, 0, 11.0, 0.0, 0.0, 0.0 }, + { -2, 0, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 }, + { 1, -1, 0, -1, 0, -3.0, 0.0, 0.0, 0.0 }, + { 0, -2, 2, -2, 1, -2.0, 0.0, 1.0, 0.0 }, + { 2, 0, -2, 0, 1, 1.0, 0.0, 0.0, 0.0 }, + { 0, 0, 2, -2, 2, -13187.0, -1.6, 5736.0, -3.1 }, + { 0, 1, 0, 0, 0, 1426.0, -3.4, 54.0, -0.1 }, + + /* 11-20 */ + { 0, 1, 2, -2, 2, -517.0, 1.2, 224.0, -0.6 }, + { 0, -1, 2, -2, 2, 217.0, -0.5, -95.0, 0.3 }, + { 0, 0, 2, -2, 1, 129.0, 0.1, -70.0, 0.0 }, + { 2, 0, 0, -2, 0, 48.0, 0.0, 1.0, 0.0 }, + { 0, 0, 2, -2, 0, -22.0, 0.0, 0.0, 0.0 }, + { 0, 2, 0, 0, 0, 17.0, -0.1, 0.0, 0.0 }, + { 0, 1, 0, 0, 1, -15.0, 0.0, 9.0, 0.0 }, + { 0, 2, 2, -2, 2, -16.0, 0.1, 7.0, 0.0 }, + { 0, -1, 0, 0, 1, -12.0, 0.0, 6.0, 0.0 }, + { -2, 0, 0, 2, 1, -6.0, 0.0, 3.0, 0.0 }, + + /* 21-30 */ + { 0, -1, 2, -2, 1, -5.0, 0.0, 3.0, 0.0 }, + { 2, 0, 0, -2, 1, 4.0, 0.0, -2.0, 0.0 }, + { 0, 1, 2, -2, 1, 4.0, 0.0, -2.0, 0.0 }, + { 1, 0, 0, -1, 0, -4.0, 0.0, 0.0, 0.0 }, + { 2, 1, 0, -2, 0, 1.0, 0.0, 0.0, 0.0 }, + { 0, 0, -2, 2, 1, 1.0, 0.0, 0.0, 0.0 }, + { 0, 1, -2, 2, 0, -1.0, 0.0, 0.0, 0.0 }, + { 0, 1, 0, 0, 2, 1.0, 0.0, 0.0, 0.0 }, + { -1, 0, 0, 1, 1, 1.0, 0.0, 0.0, 0.0 }, + { 0, 1, 2, -2, 0, -1.0, 0.0, 0.0, 0.0 }, + + /* 31-40 */ + { 0, 0, 2, 0, 2, -2274.0, -0.2, 977.0, -0.5 }, + { 1, 0, 0, 0, 0, 712.0, 0.1, -7.0, 0.0 }, + { 0, 0, 2, 0, 1, -386.0, -0.4, 200.0, 0.0 }, + { 1, 0, 2, 0, 2, -301.0, 0.0, 129.0, -0.1 }, + { 1, 0, 0, -2, 0, -158.0, 0.0, -1.0, 0.0 }, + { -1, 0, 2, 0, 2, 123.0, 0.0, -53.0, 0.0 }, + { 0, 0, 0, 2, 0, 63.0, 0.0, -2.0, 0.0 }, + { 1, 0, 0, 0, 1, 63.0, 0.1, -33.0, 0.0 }, + { -1, 0, 0, 0, 1, -58.0, -0.1, 32.0, 0.0 }, + { -1, 0, 2, 2, 2, -59.0, 0.0, 26.0, 0.0 }, + + /* 41-50 */ + { 1, 0, 2, 0, 1, -51.0, 0.0, 27.0, 0.0 }, + { 0, 0, 2, 2, 2, -38.0, 0.0, 16.0, 0.0 }, + { 2, 0, 0, 0, 0, 29.0, 0.0, -1.0, 0.0 }, + { 1, 0, 2, -2, 2, 29.0, 0.0, -12.0, 0.0 }, + { 2, 0, 2, 0, 2, -31.0, 0.0, 13.0, 0.0 }, + { 0, 0, 2, 0, 0, 26.0, 0.0, -1.0, 0.0 }, + { -1, 0, 2, 0, 1, 21.0, 0.0, -10.0, 0.0 }, + { -1, 0, 0, 2, 1, 16.0, 0.0, -8.0, 0.0 }, + { 1, 0, 0, -2, 1, -13.0, 0.0, 7.0, 0.0 }, + { -1, 0, 2, 2, 1, -10.0, 0.0, 5.0, 0.0 }, + + /* 51-60 */ + { 1, 1, 0, -2, 0, -7.0, 0.0, 0.0, 0.0 }, + { 0, 1, 2, 0, 2, 7.0, 0.0, -3.0, 0.0 }, + { 0, -1, 2, 0, 2, -7.0, 0.0, 3.0, 0.0 }, + { 1, 0, 2, 2, 2, -8.0, 0.0, 3.0, 0.0 }, + { 1, 0, 0, 2, 0, 6.0, 0.0, 0.0, 0.0 }, + { 2, 0, 2, -2, 2, 6.0, 0.0, -3.0, 0.0 }, + { 0, 0, 0, 2, 1, -6.0, 0.0, 3.0, 0.0 }, + { 0, 0, 2, 2, 1, -7.0, 0.0, 3.0, 0.0 }, + { 1, 0, 2, -2, 1, 6.0, 0.0, -3.0, 0.0 }, + { 0, 0, 0, -2, 1, -5.0, 0.0, 3.0, 0.0 }, + + /* 61-70 */ + { 1, -1, 0, 0, 0, 5.0, 0.0, 0.0, 0.0 }, + { 2, 0, 2, 0, 1, -5.0, 0.0, 3.0, 0.0 }, + { 0, 1, 0, -2, 0, -4.0, 0.0, 0.0, 0.0 }, + { 1, 0, -2, 0, 0, 4.0, 0.0, 0.0, 0.0 }, + { 0, 0, 0, 1, 0, -4.0, 0.0, 0.0, 0.0 }, + { 1, 1, 0, 0, 0, -3.0, 0.0, 0.0, 0.0 }, + { 1, 0, 2, 0, 0, 3.0, 0.0, 0.0, 0.0 }, + { 1, -1, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 }, + { -1, -1, 2, 2, 2, -3.0, 0.0, 1.0, 0.0 }, + { -2, 0, 0, 0, 1, -2.0, 0.0, 1.0, 0.0 }, + + /* 71-80 */ + { 3, 0, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 }, + { 0, -1, 2, 2, 2, -3.0, 0.0, 1.0, 0.0 }, + { 1, 1, 2, 0, 2, 2.0, 0.0, -1.0, 0.0 }, + { -1, 0, 2, -2, 1, -2.0, 0.0, 1.0, 0.0 }, + { 2, 0, 0, 0, 1, 2.0, 0.0, -1.0, 0.0 }, + { 1, 0, 0, 0, 2, -2.0, 0.0, 1.0, 0.0 }, + { 3, 0, 0, 0, 0, 2.0, 0.0, 0.0, 0.0 }, + { 0, 0, 2, 1, 2, 2.0, 0.0, -1.0, 0.0 }, + { -1, 0, 0, 0, 2, 1.0, 0.0, -1.0, 0.0 }, + { 1, 0, 0, -4, 0, -1.0, 0.0, 0.0, 0.0 }, + + /* 81-90 */ + { -2, 0, 2, 2, 2, 1.0, 0.0, -1.0, 0.0 }, + { -1, 0, 2, 4, 2, -2.0, 0.0, 1.0, 0.0 }, + { 2, 0, 0, -4, 0, -1.0, 0.0, 0.0, 0.0 }, + { 1, 1, 2, -2, 2, 1.0, 0.0, -1.0, 0.0 }, + { 1, 0, 2, 2, 1, -1.0, 0.0, 1.0, 0.0 }, + { -2, 0, 2, 4, 2, -1.0, 0.0, 1.0, 0.0 }, + { -1, 0, 4, 0, 2, 1.0, 0.0, 0.0, 0.0 }, + { 1, -1, 0, -2, 0, 1.0, 0.0, 0.0, 0.0 }, + { 2, 0, 2, -2, 1, 1.0, 0.0, -1.0, 0.0 }, + { 2, 0, 2, 2, 2, -1.0, 0.0, 0.0, 0.0 }, + + /* 91-100 */ + { 1, 0, 0, 2, 1, -1.0, 0.0, 0.0, 0.0 }, + { 0, 0, 4, -2, 2, 1.0, 0.0, 0.0, 0.0 }, + { 3, 0, 2, -2, 2, 1.0, 0.0, 0.0, 0.0 }, + { 1, 0, 2, -2, 0, -1.0, 0.0, 0.0, 0.0 }, + { 0, 1, 2, 0, 1, 1.0, 0.0, 0.0, 0.0 }, + { -1, -1, 0, 2, 1, 1.0, 0.0, 0.0, 0.0 }, + { 0, 0, -2, 0, 1, -1.0, 0.0, 0.0, 0.0 }, + { 0, 0, 2, -1, 2, -1.0, 0.0, 0.0, 0.0 }, + { 0, 1, 0, 2, 0, -1.0, 0.0, 0.0, 0.0 }, + { 1, 0, -2, -2, 0, -1.0, 0.0, 0.0, 0.0 }, + + /* 101-106 */ + { 0, -1, 2, 0, 1, -1.0, 0.0, 0.0, 0.0 }, + { 1, 1, 0, -2, 1, -1.0, 0.0, 0.0, 0.0 }, + { 1, 0, -2, 2, 0, -1.0, 0.0, 0.0, 0.0 }, + { 2, 0, 0, 2, 0, 1.0, 0.0, 0.0, 0.0 }, + { 0, 0, 2, 4, 2, -1.0, 0.0, 0.0, 0.0 }, + { 0, 1, 0, 1, 0, 1.0, 0.0, 0.0, 0.0 } + }; + +/* Number of terms in the series */ + const int NT = (int) (sizeof x / sizeof x[0]); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental epoch J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* --------------------- */ +/* Fundamental arguments */ +/* --------------------- */ + +/* Mean longitude of Moon minus mean longitude of Moon's perigee. */ + el = iauAnpm( + (485866.733 + (715922.633 + (31.310 + 0.064 * t) * t) * t) + * DAS2R + fmod(1325.0 * t, 1.0) * D2PI); + +/* Mean longitude of Sun minus mean longitude of Sun's perigee. */ + elp = iauAnpm( + (1287099.804 + (1292581.224 + (-0.577 - 0.012 * t) * t) * t) + * DAS2R + fmod(99.0 * t, 1.0) * D2PI); + +/* Mean longitude of Moon minus mean longitude of Moon's node. */ + f = iauAnpm( + (335778.877 + (295263.137 + (-13.257 + 0.011 * t) * t) * t) + * DAS2R + fmod(1342.0 * t, 1.0) * D2PI); + +/* Mean elongation of Moon from Sun. */ + d = iauAnpm( + (1072261.307 + (1105601.328 + (-6.891 + 0.019 * t) * t) * t) + * DAS2R + fmod(1236.0 * t, 1.0) * D2PI); + +/* Longitude of the mean ascending node of the lunar orbit on the */ +/* ecliptic, measured from the mean equinox of date. */ + om = iauAnpm( + (450160.280 + (-482890.539 + (7.455 + 0.008 * t) * t) * t) + * DAS2R + fmod(-5.0 * t, 1.0) * D2PI); + +/* --------------- */ +/* Nutation series */ +/* --------------- */ + +/* Initialize nutation components. */ + dp = 0.0; + de = 0.0; + +/* Sum the nutation terms, ending with the biggest. */ + for (j = NT-1; j >= 0; j--) { + + /* Form argument for current term. */ + arg = (double)x[j].nl * el + + (double)x[j].nlp * elp + + (double)x[j].nf * f + + (double)x[j].nd * d + + (double)x[j].nom * om; + + /* Accumulate current nutation term. */ + s = x[j].sp + x[j].spt * t; + c = x[j].ce + x[j].cet * t; + if (s != 0.0) dp += s * sin(arg); + if (c != 0.0) de += c * cos(arg); + } + +/* Convert results from 0.1 mas units to radians. */ + *dpsi = dp * U2R; + *deps = de * U2R; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/nutm80.c b/20200721/c/src/nutm80.c new file mode 100644 index 0000000..19431e0 --- /dev/null +++ b/20200721/c/src/nutm80.c @@ -0,0 +1,167 @@ +#include "sofa.h" + +void iauNutm80(double date1, double date2, double rmatn[3][3]) +/* +** - - - - - - - - - - +** i a u N u t m 8 0 +** - - - - - - - - - - +** +** Form the matrix of nutation for a given date, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** rmatn double[3][3] nutation matrix +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(true) = rmatn * V(mean), +** where the p-vector V(true) is with respect to the true +** equatorial triad of date and the p-vector V(mean) is with +** respect to the mean equatorial triad of date. +** +** Called: +** iauNut80 nutation, IAU 1980 +** iauObl80 mean obliquity, IAU 1980 +** iauNumat form nutation matrix +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsi, deps, epsa; + + +/* Nutation components and mean obliquity. */ + iauNut80(date1, date2, &dpsi, &deps); + epsa = iauObl80(date1, date2); + +/* Build the rotation matrix. */ + iauNumat(epsa, dpsi, deps, rmatn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/obl06.c b/20200721/c/src/obl06.c new file mode 100644 index 0000000..bd793f5 --- /dev/null +++ b/20200721/c/src/obl06.c @@ -0,0 +1,168 @@ +#include "sofa.h" + +double iauObl06(double date1, double date2) +/* +** - - - - - - - - - +** i a u O b l 0 6 +** - - - - - - - - - +** +** Mean obliquity of the ecliptic, IAU 2006 precession model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double obliquity of the ecliptic (radians, Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result is the angle between the ecliptic and mean equator of +** date date1+date2. +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, eps0; + + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Mean obliquity. */ + eps0 = (84381.406 + + (-46.836769 + + ( -0.0001831 + + ( 0.00200340 + + ( -0.000000576 + + ( -0.0000000434) * t) * t) * t) * t) * t) * DAS2R; + + return eps0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/obl80.c b/20200721/c/src/obl80.c new file mode 100644 index 0000000..81b449a --- /dev/null +++ b/20200721/c/src/obl80.c @@ -0,0 +1,168 @@ +#include "sofa.h" + +double iauObl80(double date1, double date2) +/* +** - - - - - - - - - +** i a u O b l 8 0 +** - - - - - - - - - +** +** Mean obliquity of the ecliptic, IAU 1980 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double obliquity of the ecliptic (radians, Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The result is the angle between the ecliptic and mean equator of +** date date1+date2. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Expression 3.222-1 (p114). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, eps0; + + +/* Interval between fundamental epoch J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Mean obliquity of date. */ + eps0 = DAS2R * (84381.448 + + (-46.8150 + + (-0.00059 + + ( 0.001813) * t) * t) * t); + + return eps0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/p06e.c b/20200721/c/src/p06e.c new file mode 100644 index 0000000..7c951dd --- /dev/null +++ b/20200721/c/src/p06e.c @@ -0,0 +1,378 @@ +#include "sofa.h" + +void iauP06e(double date1, double date2, + double *eps0, double *psia, double *oma, double *bpa, + double *bqa, double *pia, double *bpia, + double *epsa, double *chia, double *za, double *zetaa, + double *thetaa, double *pa, + double *gam, double *phi, double *psi) +/* +** - - - - - - - - +** i a u P 0 6 e +** - - - - - - - - +** +** Precession angles, IAU 2006, equinox based. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical models. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (see Note 2): +** eps0 double epsilon_0 +** psia double psi_A +** oma double omega_A +** bpa double P_A +** bqa double Q_A +** pia double pi_A +** bpia double Pi_A +** epsa double obliquity epsilon_A +** chia double chi_A +** za double z_A +** zetaa double zeta_A +** thetaa double theta_A +** pa double p_A +** gam double F-W angle gamma_J2000 +** phi double F-W angle phi_J2000 +** psi double F-W angle psi_J2000 +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) This function returns the set of equinox based angles for the +** Capitaine et al. "P03" precession theory, adopted by the IAU in +** 2006. The angles are set out in Table 1 of Hilton et al. (2006): +** +** eps0 epsilon_0 obliquity at J2000.0 +** psia psi_A luni-solar precession +** oma omega_A inclination of equator wrt J2000.0 ecliptic +** bpa P_A ecliptic pole x, J2000.0 ecliptic triad +** bqa Q_A ecliptic pole -y, J2000.0 ecliptic triad +** pia pi_A angle between moving and J2000.0 ecliptics +** bpia Pi_A longitude of ascending node of the ecliptic +** epsa epsilon_A obliquity of the ecliptic +** chia chi_A planetary precession +** za z_A equatorial precession: -3rd 323 Euler angle +** zetaa zeta_A equatorial precession: -1st 323 Euler angle +** thetaa theta_A equatorial precession: 2nd 323 Euler angle +** pa p_A general precession (n.b. see below) +** gam gamma_J2000 J2000.0 RA difference of ecliptic poles +** phi phi_J2000 J2000.0 codeclination of ecliptic pole +** psi psi_J2000 longitude difference of equator poles, J2000.0 +** +** The returned values are all radians. +** +** Note that the t^5 coefficient in the series for p_A from +** Capitaine et al. (2003) is incorrectly signed in Hilton et al. +** (2006). +** +** 3) Hilton et al. (2006) Table 1 also contains angles that depend on +** models distinct from the P03 precession theory itself, namely the +** IAU 2000A frame bias and nutation. The quoted polynomials are +** used in other SOFA functions: +** +** . iauXy06 contains the polynomial parts of the X and Y series. +** +** . iauS06 contains the polynomial part of the s+XY/2 series. +** +** . iauPfw06 implements the series for the Fukushima-Williams +** angles that are with respect to the GCRS pole (i.e. the variants +** that include frame bias). +** +** 4) The IAU resolution stipulated that the choice of parameterization +** was left to the user, and so an IAU compliant precession +** implementation can be constructed using various combinations of +** the angles returned by the present function. +** +** 5) The parameterization used by SOFA is the version of the Fukushima- +** Williams angles that refers directly to the GCRS pole. These +** angles may be calculated by calling the function iauPfw06. SOFA +** also supports the direct computation of the CIP GCRS X,Y by +** series, available by calling iauXy06. +** +** 6) The agreement between the different parameterizations is at the +** 1 microarcsecond level in the present era. +** +** 7) When constructing a precession formulation that refers to the GCRS +** pole rather than the dynamical pole, it may (depending on the +** choice of angles) be necessary to introduce the frame bias +** explicitly. +** +** 8) It is permissible to re-use the same variable in the returned +** arguments. The quantities are stored in the stated order. +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, +** Astron.Astrophys., 412, 567 +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** +** This revision: 2020 June 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t; + + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Obliquity at J2000.0. */ + + *eps0 = 84381.406 * DAS2R; + +/* Luni-solar precession. */ + + *psia = ( 5038.481507 + + ( -1.0790069 + + ( -0.00114045 + + ( 0.000132851 + + ( -0.0000000951 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Inclination of mean equator with respect to the J2000.0 ecliptic. */ + + *oma = *eps0 + ( -0.025754 + + ( 0.0512623 + + ( -0.00772503 + + ( -0.000000467 + + ( 0.0000003337 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Ecliptic pole x, J2000.0 ecliptic triad. */ + + *bpa = ( 4.199094 + + ( 0.1939873 + + ( -0.00022466 + + ( -0.000000912 + + ( 0.0000000120 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Ecliptic pole -y, J2000.0 ecliptic triad. */ + + *bqa = ( -46.811015 + + ( 0.0510283 + + ( 0.00052413 + + ( -0.000000646 + + ( -0.0000000172 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Angle between moving and J2000.0 ecliptics. */ + + *pia = ( 46.998973 + + ( -0.0334926 + + ( -0.00012559 + + ( 0.000000113 + + ( -0.0000000022 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Longitude of ascending node of the moving ecliptic. */ + + *bpia = ( 629546.7936 + + ( -867.95758 + + ( 0.157992 + + ( -0.0005371 + + ( -0.00004797 + + ( 0.000000072 ) + * t) * t) * t) * t) * t) * DAS2R; + +/* Mean obliquity of the ecliptic. */ + + *epsa = iauObl06(date1, date2); + +/* Planetary precession. */ + + *chia = ( 10.556403 + + ( -2.3814292 + + ( -0.00121197 + + ( 0.000170663 + + ( -0.0000000560 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Equatorial precession: minus the third of the 323 Euler angles. */ + + *za = ( -2.650545 + + ( 2306.077181 + + ( 1.0927348 + + ( 0.01826837 + + ( -0.000028596 + + ( -0.0000002904 ) + * t) * t) * t) * t) * t) * DAS2R; + +/* Equatorial precession: minus the first of the 323 Euler angles. */ + + *zetaa = ( 2.650545 + + ( 2306.083227 + + ( 0.2988499 + + ( 0.01801828 + + ( -0.000005971 + + ( -0.0000003173 ) + * t) * t) * t) * t) * t) * DAS2R; + +/* Equatorial precession: second of the 323 Euler angles. */ + + *thetaa = ( 2004.191903 + + ( -0.4294934 + + ( -0.04182264 + + ( -0.000007089 + + ( -0.0000001274 ) + * t) * t) * t) * t) * t * DAS2R; + +/* General precession. */ + + *pa = ( 5028.796195 + + ( 1.1054348 + + ( 0.00007964 + + ( -0.000023857 + + ( -0.0000000383 ) + * t) * t) * t) * t) * t * DAS2R; + +/* Fukushima-Williams angles for precession. */ + + *gam = ( 10.556403 + + ( 0.4932044 + + ( -0.00031238 + + ( -0.000002788 + + ( 0.0000000260 ) + * t) * t) * t) * t) * t * DAS2R; + + *phi = *eps0 + ( -46.811015 + + ( 0.0511269 + + ( 0.00053289 + + ( -0.000000440 + + ( -0.0000000176 ) + * t) * t) * t) * t) * t * DAS2R; + + *psi = ( 5038.481507 + + ( 1.5584176 + + ( -0.00018522 + + ( -0.000026452 + + ( -0.0000000148 ) + * t) * t) * t) * t) * t * DAS2R; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/p2pv.c b/20200721/c/src/p2pv.c new file mode 100644 index 0000000..a8d3327 --- /dev/null +++ b/20200721/c/src/p2pv.c @@ -0,0 +1,133 @@ +#include "sofa.h" + +void iauP2pv(double p[3], double pv[2][3]) +/* +** - - - - - - - - +** i a u P 2 p v +** - - - - - - - - +** +** Extend a p-vector to a pv-vector by appending a zero velocity. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** pv double[2][3] pv-vector +** +** Called: +** iauCp copy p-vector +** iauZp zero p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauCp(p, pv[0]); + iauZp(pv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/p2s.c b/20200721/c/src/p2s.c new file mode 100644 index 0000000..8dc5f3b --- /dev/null +++ b/20200721/c/src/p2s.c @@ -0,0 +1,141 @@ +#include "sofa.h" + +void iauP2s(double p[3], double *theta, double *phi, double *r) +/* +** - - - - - - - +** i a u P 2 s +** - - - - - - - +** +** P-vector to spherical polar coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** +** Notes: +** +** 1) If P is null, zero theta, phi and r are returned. +** +** 2) At either pole, zero theta is returned. +** +** Called: +** iauC2s p-vector to spherical +** iauPm modulus of p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauC2s(p, theta, phi); + *r = iauPm(p); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pap.c b/20200721/c/src/pap.c new file mode 100644 index 0000000..c7c9dd9 --- /dev/null +++ b/20200721/c/src/pap.c @@ -0,0 +1,189 @@ +#include "sofa.h" + +double iauPap(double a[3], double b[3]) +/* +** - - - - - - - +** i a u P a p +** - - - - - - - +** +** Position-angle from two p-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] direction of reference point +** b double[3] direction of point whose PA is required +** +** Returned (function value): +** double position angle of b with respect to a (radians) +** +** Notes: +** +** 1) The result is the position angle, in radians, of direction b with +** respect to direction a. It is in the range -pi to +pi. The +** sense is such that if b is a small distance "north" of a the +** position angle is approximately zero, and if b is a small +** distance "east" of a the position angle is approximately +pi/2. +** +** 2) The vectors a and b need not be of unit length. +** +** 3) Zero is returned if the two directions are the same or if either +** vector is null. +** +** 4) If vector a is at a pole, the result is ill-defined. +** +** Called: +** iauPn decompose p-vector into modulus and direction +** iauPm modulus of p-vector +** iauPxp vector product of two p-vectors +** iauPmp p-vector minus p-vector +** iauPdp scalar product of two p-vectors +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double am, au[3], bm, st, ct, xa, ya, za, eta[3], xi[3], a2b[3], pa; + + +/* Modulus and direction of the a vector. */ + iauPn(a, &am, au); + +/* Modulus of the b vector. */ + bm = iauPm(b); + +/* Deal with the case of a null vector. */ + if ((am == 0.0) || (bm == 0.0)) { + st = 0.0; + ct = 1.0; + } else { + + /* The "north" axis tangential from a (arbitrary length). */ + xa = a[0]; + ya = a[1]; + za = a[2]; + eta[0] = -xa * za; + eta[1] = -ya * za; + eta[2] = xa*xa + ya*ya; + + /* The "east" axis tangential from a (same length). */ + iauPxp(eta, au, xi); + + /* The vector from a to b. */ + iauPmp(b, a, a2b); + + /* Resolve into components along the north and east axes. */ + st = iauPdp(a2b, xi); + ct = iauPdp(a2b, eta); + + /* Deal with degenerate cases. */ + if ((st == 0.0) && (ct == 0.0)) ct = 1.0; + } + +/* Position angle. */ + pa = atan2(st, ct); + + return pa; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pas.c b/20200721/c/src/pas.c new file mode 100644 index 0000000..f7ac164 --- /dev/null +++ b/20200721/c/src/pas.c @@ -0,0 +1,146 @@ +#include "sofa.h" + +double iauPas(double al, double ap, double bl, double bp) +/* +** - - - - - - - +** i a u P a s +** - - - - - - - +** +** Position-angle from spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** al double longitude of point A (e.g. RA) in radians +** ap double latitude of point A (e.g. Dec) in radians +** bl double longitude of point B +** bp double latitude of point B +** +** Returned (function value): +** double position angle of B with respect to A +** +** Notes: +** +** 1) The result is the bearing (position angle), in radians, of point +** B with respect to point A. It is in the range -pi to +pi. The +** sense is such that if B is a small distance "east" of point A, +** the bearing is approximately +pi/2. +** +** 2) Zero is returned if the two points are coincident. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dl, x, y, pa; + + + dl = bl - al; + y = sin(dl) * cos(bp); + x = sin(bp) * cos(ap) - cos(bp) * sin(ap) * cos(dl); + pa = ((x != 0.0) || (y != 0.0)) ? atan2(y, x) : 0.0; + + return pa; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pb06.c b/20200721/c/src/pb06.c new file mode 100644 index 0000000..6bd6a7f --- /dev/null +++ b/20200721/c/src/pb06.c @@ -0,0 +1,200 @@ +#include "sofa.h" + +void iauPb06(double date1, double date2, + double *bzeta, double *bz, double *btheta) +/* +** - - - - - - - - +** i a u P b 0 6 +** - - - - - - - - +** +** This function forms three Euler angles which implement general +** precession from epoch J2000.0, using the IAU 2006 model. Frame +** bias (the offset between ICRS and mean J2000.0) is included. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** bzeta double 1st rotation: radians cw around z +** bz double 3rd rotation: radians cw around z +** btheta double 2nd rotation: radians ccw around y +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The traditional accumulated precession angles zeta_A, z_A, +** theta_A cannot be obtained in the usual way, namely through +** polynomial expressions, because of the frame bias. The latter +** means that two of the angles undergo rapid changes near this +** date. They are instead the results of decomposing the +** precession-bias matrix obtained by using the Fukushima-Williams +** method, which does not suffer from the problem. The +** decomposition returns values which can be used in the +** conventional formulation and which include frame bias. +** +** 3) The three angles are returned in the conventional order, which +** is not the same as the order of the corresponding Euler +** rotations. The precession-bias matrix is +** R_3(-z) x R_2(+theta) x R_3(-zeta). +** +** 4) Should zeta_A, z_A, theta_A angles be required that do not +** contain frame bias, they are available by calling the SOFA +** function iauP06e. +** +** Called: +** iauPmat06 PB matrix, IAU 2006 +** iauRz rotate around Z-axis +** +** This revision: 2020 May 27 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r[3][3], y, x; + + +/* Precession matrix via Fukushima-Williams angles. */ + iauPmat06(date1, date2, r); + +/* Solve for z, choosing the +/- pi alternative. */ + y = r[1][2]; + x = -r[0][2]; + if ( x < 0.0 ) { + y = -y; + x = -x; + } + *bz = ( x != 0.0 || y != 0.0 ) ? - atan2(y,x) : 0.0; + +/* Derotate it out of the matrix. */ + iauRz ( *bz, r ); + +/* Solve for the remaining two angles. */ + y = r[0][2]; + x = r[2][2]; + *btheta = ( x != 0.0 || y != 0.0 ) ? - atan2(y,x) : 0.0; + + y = -r[1][0]; + x = r[1][1]; + *bzeta = ( x != 0.0 || y != 0.0 ) ? - atan2(y,x) : 0.0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pdp.c b/20200721/c/src/pdp.c new file mode 100644 index 0000000..a5a21c1 --- /dev/null +++ b/20200721/c/src/pdp.c @@ -0,0 +1,134 @@ +#include "sofa.h" + +double iauPdp(double a[3], double b[3]) +/* +** - - - - - - - +** i a u P d p +** - - - - - - - +** +** p-vector inner (=scalar=dot) product. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned (function value): +** double a . b +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double w; + + + w = a[0] * b[0] + + a[1] * b[1] + + a[2] * b[2]; + + return w; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pfw06.c b/20200721/c/src/pfw06.c new file mode 100644 index 0000000..f1ac7b2 --- /dev/null +++ b/20200721/c/src/pfw06.c @@ -0,0 +1,215 @@ +#include "sofa.h" + +void iauPfw06(double date1, double date2, + double *gamb, double *phib, double *psib, double *epsa) +/* +** - - - - - - - - - +** i a u P f w 0 6 +** - - - - - - - - - +** +** Precession angles, IAU 2006 (Fukushima-Williams 4-angle formulation). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** gamb double F-W angle gamma_bar (radians) +** phib double F-W angle phi_bar (radians) +** psib double F-W angle psi_bar (radians) +** epsa double F-W angle epsilon_A (radians) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) Naming the following points: +** +** e = J2000.0 ecliptic pole, +** p = GCRS pole, +** E = mean ecliptic pole of date, +** and P = mean pole of date, +** +** the four Fukushima-Williams angles are as follows: +** +** gamb = gamma_bar = epE +** phib = phi_bar = pE +** psib = psi_bar = pEP +** epsa = epsilon_A = EP +** +** 3) The matrix representing the combined effects of frame bias and +** precession is: +** +** PxB = R_1(-epsa).R_3(-psib).R_1(phib).R_3(gamb) +** +** 4) The matrix representing the combined effects of frame bias, +** precession and nutation is simply: +** +** NxPxB = R_1(-epsa-dE).R_3(-psib-dP).R_1(phib).R_3(gamb) +** +** where dP and dE are the nutation components with respect to the +** ecliptic of date. +** +** Reference: +** +** Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351 +** +** Called: +** iauObl06 mean obliquity, IAU 2006 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t; + + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* P03 bias+precession angles. */ + *gamb = ( -0.052928 + + ( 10.556378 + + ( 0.4932044 + + ( -0.00031238 + + ( -0.000002788 + + ( 0.0000000260 ) + * t) * t) * t) * t) * t) * DAS2R; + *phib = ( 84381.412819 + + ( -46.811016 + + ( 0.0511268 + + ( 0.00053289 + + ( -0.000000440 + + ( -0.0000000176 ) + * t) * t) * t) * t) * t) * DAS2R; + *psib = ( -0.041775 + + ( 5038.481484 + + ( 1.5584175 + + ( -0.00018522 + + ( -0.000026452 + + ( -0.0000000148 ) + * t) * t) * t) * t) * t) * DAS2R; + *epsa = iauObl06(date1, date2); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/plan94.c b/20200721/c/src/plan94.c new file mode 100644 index 0000000..49347fb --- /dev/null +++ b/20200721/c/src/plan94.c @@ -0,0 +1,564 @@ +#include "sofa.h" + +int iauPlan94(double date1, double date2, int np, double pv[2][3]) +/* +** - - - - - - - - - - +** i a u P l a n 9 4 +** - - - - - - - - - - +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Approximate heliocentric position and velocity of a nominated major +** planet: Mercury, Venus, EMB, Mars, Jupiter, Saturn, Uranus or +** Neptune (but not the Earth itself). +** +** Given: +** date1 double TDB date part A (Note 1) +** date2 double TDB date part B (Note 1) +** np int planet (1=Mercury, 2=Venus, 3=EMB, 4=Mars, +** 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune) +** +** Returned (argument): +** pv double[2][3] planet p,v (heliocentric, J2000.0, au,au/d) +** +** Returned (function value): +** int status: -1 = illegal NP (outside 1-8) +** 0 = OK +** +1 = warning: year outside 1000-3000 +** +2 = warning: failed to converge +** +** Notes: +** +** 1) The date date1+date2 is in the TDB time scale (in practice TT can +** be used) and is a Julian Date, apportioned in any convenient way +** between the two arguments. For example, JD(TDB)=2450123.7 could +** be expressed in any of these ways, among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. The limited +** accuracy of the present algorithm is such that any of the methods +** is satisfactory. +** +** 2) If an np value outside the range 1-8 is supplied, an error status +** (function value -1) is returned and the pv vector set to zeroes. +** +** 3) For np=3 the result is for the Earth-Moon Barycenter. To obtain +** the heliocentric position and velocity of the Earth, use instead +** the SOFA function iauEpv00. +** +** 4) On successful return, the array pv contains the following: +** +** pv[0][0] x } +** pv[0][1] y } heliocentric position, au +** pv[0][2] z } +** +** pv[1][0] xdot } +** pv[1][1] ydot } heliocentric velocity, au/d +** pv[1][2] zdot } +** +** The reference frame is equatorial and is with respect to the +** mean equator and equinox of epoch J2000.0. +** +** 5) The algorithm is due to J.L. Simon, P. Bretagnon, J. Chapront, +** M. Chapront-Touze, G. Francou and J. Laskar (Bureau des +** Longitudes, Paris, France). From comparisons with JPL +** ephemeris DE102, they quote the following maximum errors +** over the interval 1800-2050: +** +** L (arcsec) B (arcsec) R (km) +** +** Mercury 4 1 300 +** Venus 5 1 800 +** EMB 6 1 1000 +** Mars 17 1 7700 +** Jupiter 71 5 76000 +** Saturn 81 13 267000 +** Uranus 86 7 712000 +** Neptune 11 1 253000 +** +** Over the interval 1000-3000, they report that the accuracy is no +** worse than 1.5 times that over 1800-2050. Outside 1000-3000 the +** accuracy declines. +** +** Comparisons of the present function with the JPL DE200 ephemeris +** give the following RMS errors over the interval 1960-2025: +** +** position (km) velocity (m/s) +** +** Mercury 334 0.437 +** Venus 1060 0.855 +** EMB 2010 0.815 +** Mars 7690 1.98 +** Jupiter 71700 7.70 +** Saturn 199000 19.4 +** Uranus 564000 16.4 +** Neptune 158000 14.4 +** +** Comparisons against DE200 over the interval 1800-2100 gave the +** following maximum absolute differences. (The results using +** DE406 were essentially the same.) +** +** L (arcsec) B (arcsec) R (km) Rdot (m/s) +** +** Mercury 7 1 500 0.7 +** Venus 7 1 1100 0.9 +** EMB 9 1 1300 1.0 +** Mars 26 1 9000 2.5 +** Jupiter 78 6 82000 8.2 +** Saturn 87 14 263000 24.6 +** Uranus 86 7 661000 27.4 +** Neptune 11 2 248000 21.4 +** +** 6) The present SOFA re-implementation of the original Simon et al. +** Fortran code differs from the original in the following respects: +** +** * C instead of Fortran. +** +** * The date is supplied in two parts. +** +** * The result is returned only in equatorial Cartesian form; +** the ecliptic longitude, latitude and radius vector are not +** returned. +** +** * The result is in the J2000.0 equatorial frame, not ecliptic. +** +** * More is done in-line: there are fewer calls to subroutines. +** +** * Different error/warning status values are used. +** +** * A different Kepler's-equation-solver is used (avoiding +** use of double precision complex). +** +** * Polynomials in t are nested to minimize rounding errors. +** +** * Explicit double constants are used to avoid mixed-mode +** expressions. +** +** None of the above changes affects the result significantly. +** +** 7) The returned status indicates the most serious condition +** encountered during execution of the function. Illegal np is +** considered the most serious, overriding failure to converge, +** which in turn takes precedence over the remote date warning. +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: Simon, J.L, Bretagnon, P., Chapront, J., +** Chapront-Touze, M., Francou, G., and Laskar, J., +** Astron.Astrophys., 282, 663 (1994). +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Gaussian constant */ + static const double GK = 0.017202098950; + +/* Sin and cos of J2000.0 mean obliquity (IAU 1976) */ + static const double SINEPS = 0.3977771559319137; + static const double COSEPS = 0.9174820620691818; + +/* Maximum number of iterations allowed to solve Kepler's equation */ + static const int KMAX = 10; + + int jstat, i, k; + double t, da, dl, de, dp, di, dom, dmu, arga, argl, am, + ae, dae, ae2, at, r, v, si2, xq, xp, tl, xsw, + xcw, xm2, xf, ci2, xms, xmc, xpxq2, x, y, z; + +/* Planetary inverse masses */ + static const double amas[] = { 6023600.0, /* Mercury */ + 408523.5, /* Venus */ + 328900.5, /* EMB */ + 3098710.0, /* Mars */ + 1047.355, /* Jupiter */ + 3498.5, /* Saturn */ + 22869.0, /* Uranus */ + 19314.0 }; /* Neptune */ + +/* +** Tables giving the mean Keplerian elements, limited to t^2 terms: +** +** a semi-major axis (au) +** dlm mean longitude (degree and arcsecond) +** e eccentricity +** pi longitude of the perihelion (degree and arcsecond) +** dinc inclination (degree and arcsecond) +** omega longitude of the ascending node (degree and arcsecond) +*/ + + static const double a[][3] = { + { 0.3870983098, 0.0, 0.0 }, /* Mercury */ + { 0.7233298200, 0.0, 0.0 }, /* Venus */ + { 1.0000010178, 0.0, 0.0 }, /* EMB */ + { 1.5236793419, 3e-10, 0.0 }, /* Mars */ + { 5.2026032092, 19132e-10, -39e-10 }, /* Jupiter */ + { 9.5549091915, -0.0000213896, 444e-10 }, /* Saturn */ + { 19.2184460618, -3716e-10, 979e-10 }, /* Uranus */ + { 30.1103868694, -16635e-10, 686e-10 } /* Neptune */ + }; + + static const double dlm[][3] = { + { 252.25090552, 5381016286.88982, -1.92789 }, + { 181.97980085, 2106641364.33548, 0.59381 }, + { 100.46645683, 1295977422.83429, -2.04411 }, + { 355.43299958, 689050774.93988, 0.94264 }, + { 34.35151874, 109256603.77991, -30.60378 }, + { 50.07744430, 43996098.55732, 75.61614 }, + { 314.05500511, 15424811.93933, -1.75083 }, + { 304.34866548, 7865503.20744, 0.21103 } + }; + + static const double e[][3] = { + { 0.2056317526, 0.0002040653, -28349e-10 }, + { 0.0067719164, -0.0004776521, 98127e-10 }, + { 0.0167086342, -0.0004203654, -0.0000126734 }, + { 0.0934006477, 0.0009048438, -80641e-10 }, + { 0.0484979255, 0.0016322542, -0.0000471366 }, + { 0.0555481426, -0.0034664062, -0.0000643639 }, + { 0.0463812221, -0.0002729293, 0.0000078913 }, + { 0.0094557470, 0.0000603263, 0.0 } + }; + + static const double pi[][3] = { + { 77.45611904, 5719.11590, -4.83016 }, + { 131.56370300, 175.48640, -498.48184 }, + { 102.93734808, 11612.35290, 53.27577 }, + { 336.06023395, 15980.45908, -62.32800 }, + { 14.33120687, 7758.75163, 259.95938 }, + { 93.05723748, 20395.49439, 190.25952 }, + { 173.00529106, 3215.56238, -34.09288 }, + { 48.12027554, 1050.71912, 27.39717 } + }; + + static const double dinc[][3] = { + { 7.00498625, -214.25629, 0.28977 }, + { 3.39466189, -30.84437, -11.67836 }, + { 0.0, 469.97289, -3.35053 }, + { 1.84972648, -293.31722, -8.11830 }, + { 1.30326698, -71.55890, 11.95297 }, + { 2.48887878, 91.85195, -17.66225 }, + { 0.77319689, -60.72723, 1.25759 }, + { 1.76995259, 8.12333, 0.08135 } + }; + + static const double omega[][3] = { + { 48.33089304, -4515.21727, -31.79892 }, + { 76.67992019, -10008.48154, -51.32614 }, + { 174.87317577, -8679.27034, 15.34191 }, + { 49.55809321, -10620.90088, -230.57416 }, + { 100.46440702, 6362.03561, 326.52178 }, + { 113.66550252, -9240.19942, -66.23743 }, + { 74.00595701, 2669.15033, 145.93964 }, + { 131.78405702, -221.94322, -0.78728 } + }; + +/* Tables for trigonometric terms to be added to the mean elements of */ +/* the semi-major axes */ + + static const double kp[][9] = { + { 69613, 75645, 88306, 59899, 15746, 71087, 142173, 3086, 0 }, + { 21863, 32794, 26934, 10931, 26250, 43725, 53867, 28939, 0 }, + { 16002, 21863, 32004, 10931, 14529, 16368, 15318, 32794, 0 }, + { 6345, 7818, 15636, 7077, 8184, 14163, 1107, 4872, 0 }, + { 1760, 1454, 1167, 880, 287, 2640, 19, 2047, 1454 }, + { 574, 0, 880, 287, 19, 1760, 1167, 306, 574 }, + { 204, 0, 177, 1265, 4, 385, 200, 208, 204 }, + { 0, 102, 106, 4, 98, 1367, 487, 204, 0 } + }; + + static const double ca[][9] = { + { 4, -13, 11, -9, -9, -3, -1, 4, 0 }, + { -156, 59, -42, 6, 19, -20, -10, -12, 0 }, + { 64, -152, 62, -8, 32, -41, 19, -11, 0 }, + { 124, 621, -145, 208, 54, -57, 30, 15, 0 }, + { -23437, -2634, 6601, 6259, -1507,-1821, 2620, -2115, -1489 }, + { 62911,-119919, 79336,17814,-24241,12068, 8306, -4893, 8902 }, + { 389061,-262125,-44088, 8387,-22976,-2093, -615, -9720, 6633 }, + { -412235,-157046,-31430,37817, -9740, -13, -7449, 9644, 0 } + }; + + static const double sa[][9] = { + { -29, -1, 9, 6, -6, 5, 4, 0, 0 }, + { -48, -125, -26, -37, 18, -13, -20, -2, 0 }, + { -150, -46, 68, 54, 14, 24, -28, 22, 0 }, + { -621, 532, -694, -20, 192, -94, 71, -73, 0 }, + { -14614,-19828, -5869, 1881, -4372, -2255, 782, 930, 913 }, + { 139737, 0, 24667, 51123, -5102, 7429, -4095, -1976, -9566 }, + { -138081, 0, 37205,-49039,-41901,-33872,-27037,-12474, 18797 }, + { 0, 28492,133236, 69654, 52322,-49577,-26430, -3593, 0 } + }; + +/* Tables giving the trigonometric terms to be added to the mean */ +/* elements of the mean longitudes */ + + static const double kq[][10] = { + { 3086,15746,69613,59899,75645,88306, 12661, 2658, 0, 0 }, + { 21863,32794,10931, 73, 4387,26934, 1473, 2157, 0, 0 }, + { 10,16002,21863,10931, 1473,32004, 4387, 73, 0, 0 }, + { 10, 6345, 7818, 1107,15636, 7077, 8184, 532, 10, 0 }, + { 19, 1760, 1454, 287, 1167, 880, 574, 2640, 19, 1454 }, + { 19, 574, 287, 306, 1760, 12, 31, 38, 19, 574 }, + { 4, 204, 177, 8, 31, 200, 1265, 102, 4, 204 }, + { 4, 102, 106, 8, 98, 1367, 487, 204, 4, 102 } + }; + + static const double cl[][10] = { + { 21, -95, -157, 41, -5, 42, 23, 30, 0, 0 }, + { -160, -313, -235, 60, -74, -76, -27, 34, 0, 0 }, + { -325, -322, -79, 232, -52, 97, 55, -41, 0, 0 }, + { 2268, -979, 802, 602, -668, -33, 345, 201, -55, 0 }, + { 7610, -4997,-7689,-5841,-2617, 1115,-748,-607, 6074, 354 }, + { -18549, 30125,20012, -730, 824, 23,1289,-352, -14767, -2062 }, + { -135245,-14594, 4197,-4030,-5630,-2898,2540,-306, 2939, 1986 }, + { 89948, 2103, 8963, 2695, 3682, 1648, 866,-154, -1963, -283 } + }; + + static const double sl[][10] = { + { -342, 136, -23, 62, 66, -52, -33, 17, 0, 0 }, + { 524, -149, -35, 117, 151, 122, -71, -62, 0, 0 }, + { -105, -137, 258, 35, -116, -88,-112, -80, 0, 0 }, + { 854, -205, -936, -240, 140, -341, -97, -232, 536, 0 }, + { -56980, 8016, 1012, 1448,-3024,-3710, 318, 503, 3767, 577 }, + { 138606,-13478,-4964, 1441,-1319,-1482, 427, 1236, -9167, -1918 }, + { 71234,-41116, 5334,-4935,-1848, 66, 434, -1748, 3780, -701 }, + { -47645, 11647, 2166, 3194, 679, 0,-244, -419, -2531, 48 } + }; + +/* ------------------------------------------------------------------ */ + +/* Validate the planet number. */ + if ((np < 1) || (np > 8)) { + jstat = -1; + + /* Reset the result in case of failure. */ + for (k = 0; k < 2; k++) { + for (i = 0; i < 3; i++) { + pv[k][i] = 0.0; + } + } + + } else { + + /* Decrement the planet number to start at zero. */ + np--; + + /* Time: Julian millennia since J2000.0. */ + t = ((date1 - DJ00) + date2) / DJM; + + /* OK status unless remote date. */ + jstat = fabs(t) <= 1.0 ? 0 : 1; + + /* Compute the mean elements. */ + da = a[np][0] + + (a[np][1] + + a[np][2] * t) * t; + dl = (3600.0 * dlm[np][0] + + (dlm[np][1] + + dlm[np][2] * t) * t) * DAS2R; + de = e[np][0] + + ( e[np][1] + + e[np][2] * t) * t; + dp = iauAnpm((3600.0 * pi[np][0] + + (pi[np][1] + + pi[np][2] * t) * t) * DAS2R); + di = (3600.0 * dinc[np][0] + + (dinc[np][1] + + dinc[np][2] * t) * t) * DAS2R; + dom = iauAnpm((3600.0 * omega[np][0] + + (omega[np][1] + + omega[np][2] * t) * t) * DAS2R); + + /* Apply the trigonometric terms. */ + dmu = 0.35953620 * t; + for (k = 0; k < 8; k++) { + arga = kp[np][k] * dmu; + argl = kq[np][k] * dmu; + da += (ca[np][k] * cos(arga) + + sa[np][k] * sin(arga)) * 1e-7; + dl += (cl[np][k] * cos(argl) + + sl[np][k] * sin(argl)) * 1e-7; + } + arga = kp[np][8] * dmu; + da += t * (ca[np][8] * cos(arga) + + sa[np][8] * sin(arga)) * 1e-7; + for (k = 8; k < 10; k++) { + argl = kq[np][k] * dmu; + dl += t * (cl[np][k] * cos(argl) + + sl[np][k] * sin(argl)) * 1e-7; + } + dl = fmod(dl, D2PI); + + /* Iterative soln. of Kepler's equation to get eccentric anomaly. */ + am = dl - dp; + ae = am + de * sin(am); + k = 0; + dae = 1.0; + while (k < KMAX && fabs(dae) > 1e-12) { + dae = (am - ae + de * sin(ae)) / (1.0 - de * cos(ae)); + ae += dae; + k++; + if (k == KMAX-1) jstat = 2; + } + + /* True anomaly. */ + ae2 = ae / 2.0; + at = 2.0 * atan2(sqrt((1.0 + de) / (1.0 - de)) * sin(ae2), + cos(ae2)); + + /* Distance (au) and speed (radians per day). */ + r = da * (1.0 - de * cos(ae)); + v = GK * sqrt((1.0 + 1.0 / amas[np]) / (da * da * da)); + + si2 = sin(di / 2.0); + xq = si2 * cos(dom); + xp = si2 * sin(dom); + tl = at + dp; + xsw = sin(tl); + xcw = cos(tl); + xm2 = 2.0 * (xp * xcw - xq * xsw); + xf = da / sqrt(1 - de * de); + ci2 = cos(di / 2.0); + xms = (de * sin(dp) + xsw) * xf; + xmc = (de * cos(dp) + xcw) * xf; + xpxq2 = 2 * xp * xq; + + /* Position (J2000.0 ecliptic x,y,z in au). */ + x = r * (xcw - xm2 * xp); + y = r * (xsw + xm2 * xq); + z = r * (-xm2 * ci2); + + /* Rotate to equatorial. */ + pv[0][0] = x; + pv[0][1] = y * COSEPS - z * SINEPS; + pv[0][2] = y * SINEPS + z * COSEPS; + + /* Velocity (J2000.0 ecliptic xdot,ydot,zdot in au/d). */ + x = v * (( -1.0 + 2.0 * xp * xp) * xms + xpxq2 * xmc); + y = v * (( 1.0 - 2.0 * xq * xq) * xmc - xpxq2 * xms); + z = v * (2.0 * ci2 * (xp * xms + xq * xmc)); + + /* Rotate to equatorial. */ + pv[1][0] = x; + pv[1][1] = y * COSEPS - z * SINEPS; + pv[1][2] = y * SINEPS + z * COSEPS; + + } + +/* Return the status. */ + return jstat; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pm.c b/20200721/c/src/pm.c new file mode 100644 index 0000000..1dfd8f7 --- /dev/null +++ b/20200721/c/src/pm.c @@ -0,0 +1,126 @@ +#include "sofa.h" + +double iauPm(double p[3]) +/* +** - - - - - - +** i a u P m +** - - - - - - +** +** Modulus of p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned (function value): +** double modulus +** +** This revision: 2013 August 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + return sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] ); + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmat00.c b/20200721/c/src/pmat00.c new file mode 100644 index 0000000..2a7f848 --- /dev/null +++ b/20200721/c/src/pmat00.c @@ -0,0 +1,168 @@ +#include "sofa.h" + +void iauPmat00(double date1, double date2, double rbp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 0 0 +** - - - - - - - - - - +** +** Precession matrix (including frame bias) from GCRS to a specified +** date, IAU 2000 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbp double[3][3] bias-precession matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbp * V(GCRS), where +** the p-vector V(GCRS) is with respect to the Geocentric Celestial +** Reference System (IAU, 2000) and the p-vector V(date) is with +** respect to the mean equatorial triad of the given date. +** +** Called: +** iauBp00 frame bias and precession matrices, IAU 2000 +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rb[3][3], rp[3][3]; + + +/* Obtain the required matrix (discarding others). */ + iauBp00(date1, date2, rb, rp, rbp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmat06.c b/20200721/c/src/pmat06.c new file mode 100644 index 0000000..3b6a0b3 --- /dev/null +++ b/20200721/c/src/pmat06.c @@ -0,0 +1,172 @@ +#include "sofa.h" + +void iauPmat06(double date1, double date2, double rbp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 0 6 +** - - - - - - - - - - +** +** Precession matrix (including frame bias) from GCRS to a specified +** date, IAU 2006 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbp double[3][3] bias-precession matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbp * V(GCRS), where +** the p-vector V(GCRS) is with respect to the Geocentric Celestial +** Reference System (IAU, 2000) and the p-vector V(date) is with +** respect to the mean equatorial triad of the given date. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gamb, phib, psib, epsa; + + +/* Bias-precession Fukushima-Williams angles. */ + iauPfw06(date1, date2, &gamb, &phib, &psib, &epsa); + +/* Form the matrix. */ + iauFw2m(gamb, phib, psib, epsa, rbp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmat76.c b/20200721/c/src/pmat76.c new file mode 100644 index 0000000..a500ffa --- /dev/null +++ b/20200721/c/src/pmat76.c @@ -0,0 +1,191 @@ +#include "sofa.h" + +void iauPmat76(double date1, double date2, double rmatp[3][3]) +/* +** - - - - - - - - - - +** i a u P m a t 7 6 +** - - - - - - - - - - +** +** Precession matrix from J2000.0 to a specified date, IAU 1976 model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double ending date, TT (Note 1) +** +** Returned: +** rmatp double[3][3] precession matrix, J2000.0 -> date1+date2 +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = RMATP * V(J2000), +** where the p-vector V(J2000) is with respect to the mean +** equatorial triad of epoch J2000.0 and the p-vector V(date) +** is with respect to the mean equatorial triad of the given +** date. +** +** 3) Though the matrix method itself is rigorous, the precession +** angles are expressed through canonical polynomials which are +** valid only for a limited time span. In addition, the IAU 1976 +** precession rate is known to be imperfect. The absolute accuracy +** of the present formulation is better than 0.1 arcsec from +** 1960AD to 2040AD, better than 1 arcsec from 1640AD to 2360AD, +** and remains below 3 arcsec for the whole of the period +** 500BC to 3000AD. The errors exceed 10 arcsec outside the +** range 1200BC to 3900AD, exceed 100 arcsec outside 4200BC to +** 5600AD and exceed 1000 arcsec outside 6800BC to 8200AD. +** +** Called: +** iauPrec76 accumulated precession angles, IAU 1976 +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** iauCr copy r-matrix +** +** References: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282. +** equations (6) & (7), p283. +** +** Kaplan,G.H., 1981. USNO circular no. 163, pA2. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double zeta, z, theta, wmat[3][3]; + + +/* Precession Euler angles, J2000.0 to specified date. */ + iauPrec76(DJ00, 0.0, date1, date2, &zeta, &z, &theta); + +/* Form the rotation matrix. */ + iauIr( wmat); + iauRz( -zeta, wmat); + iauRy( theta, wmat); + iauRz( -z, wmat); + iauCr( wmat, rmatp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmp.c b/20200721/c/src/pmp.c new file mode 100644 index 0000000..1f03e6f --- /dev/null +++ b/20200721/c/src/pmp.c @@ -0,0 +1,135 @@ +#include "sofa.h" + +void iauPmp(double a[3], double b[3], double amb[3]) +/* +** - - - - - - - +** i a u P m p +** - - - - - - - +** +** P-vector subtraction. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** amb double[3] a - b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + amb[0] = a[0] - b[0]; + amb[1] = a[1] - b[1]; + amb[2] = a[2] - b[2]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmpx.c b/20200721/c/src/pmpx.c new file mode 100644 index 0000000..786c3a9 --- /dev/null +++ b/20200721/c/src/pmpx.c @@ -0,0 +1,194 @@ +#include "sofa.h" + +void iauPmpx(double rc, double dc, double pr, double pd, + double px, double rv, double pmt, double pob[3], + double pco[3]) +/* +** - - - - - - - - +** i a u P m p x +** - - - - - - - - +** +** Proper motion and parallax. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** rc,dc double ICRS RA,Dec at catalog epoch (radians) +** pr double RA proper motion (radians/year; Note 1) +** pd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, +ve if receding) +** pmt double proper motion time interval (SSB, Julian years) +** pob double[3] SSB to observer vector (au) +** +** Returned: +** pco double[3] coordinate direction (BCRS unit vector) +** +** Notes: +** +** 1) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. +** +** 2) The proper motion time interval is for when the starlight +** reaches the solar system barycenter. +** +** 3) To avoid the need for iteration, the Roemer effect (i.e. the +** small annual modulation of the proper motion coming from the +** changing light time) is applied approximately, using the +** direction of the star at the catalog epoch. +** +** References: +** +** 1984 Astronomical Almanac, pp B39-B41. +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.2. +** +** Called: +** iauPdp scalar product of two p-vectors +** iauPn decompose p-vector into modulus and direction +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Km/s to au/year */ + const double VF = DAYSEC*DJM/DAU; + +/* Light time for 1 au, Julian years */ + const double AULTY = AULT/DAYSEC/DJY; + + int i; + double sr, cr, sd, cd, x, y, z, p[3], dt, pxr, w, pdz, pm[3]; + + +/* Spherical coordinates to unit vector (and useful functions). */ + sr = sin(rc); + cr = cos(rc); + sd = sin(dc); + cd = cos(dc); + p[0] = x = cr*cd; + p[1] = y = sr*cd; + p[2] = z = sd; + +/* Proper motion time interval (y) including Roemer effect. */ + dt = pmt + iauPdp(p,pob)*AULTY; + +/* Space motion (radians per year). */ + pxr = px * DAS2R; + w = VF * rv * pxr; + pdz = pd * z; + pm[0] = - pr*y - pdz*cr + w*x; + pm[1] = pr*x - pdz*sr + w*y; + pm[2] = pd*cd + w*z; + +/* Coordinate direction of star (unit vector, BCRS). */ + for (i = 0; i < 3; i++) { + p[i] += dt*pm[i] - pxr*pob[i]; + } + iauPn(p, &w, pco); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pmsafe.c b/20200721/c/src/pmsafe.c new file mode 100644 index 0000000..a473cb7 --- /dev/null +++ b/20200721/c/src/pmsafe.c @@ -0,0 +1,247 @@ +#include "sofa.h" + +int iauPmsafe(double ra1, double dec1, double pmr1, double pmd1, + double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, double *pmr2, double *pmd2, + double *px2, double *rv2) +/* +** - - - - - - - - - - +** i a u P m s a f e +** - - - - - - - - - - +** +** Star proper motion: update star catalog data for space motion, with +** special handling to handle the zero parallax case. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ra1 double right ascension (radians), before +** dec1 double declination (radians), before +** pmr1 double RA proper motion (radians/year), before +** pmd1 double Dec proper motion (radians/year), before +** px1 double parallax (arcseconds), before +** rv1 double radial velocity (km/s, +ve = receding), before +** ep1a double "before" epoch, part A (Note 1) +** ep1b double "before" epoch, part B (Note 1) +** ep2a double "after" epoch, part A (Note 1) +** ep2b double "after" epoch, part B (Note 1) +** +** Returned: +** ra2 double right ascension (radians), after +** dec2 double declination (radians), after +** pmr2 double RA proper motion (radians/year), after +** pmd2 double Dec proper motion (radians/year), after +** px2 double parallax (arcseconds), after +** rv2 double radial velocity (km/s, +ve = receding), after +** +** Returned (function value): +** int status: +** -1 = system error (should not occur) +** 0 = no warnings or errors +** 1 = distance overridden (Note 6) +** 2 = excessive velocity (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above warnings +** +** Notes: +** +** 1) The starting and ending TDB epochs ep1a+ep1b and ep2a+ep2b are +** Julian Dates, apportioned in any convenient way between the two +** parts (A and B). For example, JD(TDB)=2450123.7 could be +** expressed in any of these ways, among others: +** +** epNa epNb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** resolution. The MJD method and the date & time methods are both +** good compromises between resolution and convenience. +** +** 2) In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per TDB +** Julian year. +** +** The parallax and radial velocity are in the same frame. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, is +** assumed. +** +** 6) An extremely small (or zero or negative) parallax is overridden +** to ensure that the object is at a finite but very large distance, +** but not so large that the proper motion is equivalent to a large +** but safe speed (about 0.1c using the chosen constant). A warning +** status of 1 is added to the status if this action has been taken. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX in the function iauStarpv), it is arbitrarily set +** to zero. When this action occurs, 2 is added to the status. +** +** 8) The relativistic adjustment carried out in the iauStarpv function +** involves an iterative calculation. If the process fails to +** converge within a set number of iterations, 4 is added to the +** status. +** +** Called: +** iauSeps angle between two points +** iauStarpm update star catalog data for space motion +** +** This revision: 2014 July 1 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Minimum allowed parallax (arcsec) */ + const double PXMIN = 5e-7; + +/* Factor giving maximum allowed transverse speed of about 1% c */ + const double F = 326.0; + + int jpx, j; + double pm, px1a; + + +/* Proper motion in one year (radians). */ + pm = iauSeps(ra1, dec1, ra1+pmr1, dec1+pmd1); + +/* Override the parallax to reduce the chances of a warning status. */ + jpx = 0; + px1a = px1; + pm *= F; + if (px1a < pm) {jpx = 1; px1a = pm;} + if (px1a < PXMIN) {jpx = 1; px1a = PXMIN;} + +/* Carry out the transformation using the modified parallax. */ + j = iauStarpm(ra1, dec1, pmr1, pmd1, px1a, rv1, + ep1a, ep1b, ep2a, ep2b, + ra2, dec2, pmr2, pmd2, px2, rv2); + +/* Revise and return the status. */ + if ( !(j%2) ) j += jpx; + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn.c b/20200721/c/src/pn.c new file mode 100644 index 0000000..ee45bea --- /dev/null +++ b/20200721/c/src/pn.c @@ -0,0 +1,159 @@ +#include "sofa.h" + +void iauPn(double p[3], double *r, double u[3]) +/* +** - - - - - - +** i a u P n +** - - - - - - +** +** Convert a p-vector into modulus and unit vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** p double[3] p-vector +** +** Returned: +** r double modulus +** u double[3] unit vector +** +** Notes: +** +** 1) If p is null, the result is null. Otherwise the result is a unit +** vector. +** +** 2) It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPm modulus of p-vector +** iauZp zero p-vector +** iauSxp multiply p-vector by scalar +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double w; + + +/* Obtain the modulus and test for zero. */ + w = iauPm(p); + if (w == 0.0) { + + /* Null vector. */ + iauZp(u); + + } else { + + /* Unit vector. */ + iauSxp(1.0/w, p, u); + } + +/* Return the modulus. */ + *r = w; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn00.c b/20200721/c/src/pn00.c new file mode 100644 index 0000000..9bffbb1 --- /dev/null +++ b/20200721/c/src/pn00.c @@ -0,0 +1,227 @@ +#include "sofa.h" + +void iauPn00(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - +** i a u P n 0 0 +** - - - - - - - - +** +** Precession-nutation, IAU 2000 model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Note 8) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The returned mean obliquity is consistent with the IAU 2000 +** precession-nutation models. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox of +** date to true equator and equinox of date by applying the nutation +** (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauPr00 IAU 2000 precession adjustments +** iauObl80 mean obliquity, IAU 1980 +** iauBp00 frame bias and precession matrices, IAU 2000 +** iauCr copy r-matrix +** iauNumat form nutation matrix +** iauRxr product of two r-matrices +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsipr, depspr, rbpw[3][3], rnw[3][3]; + + +/* IAU 2000 precession-rate adjustments. */ + iauPr00(date1, date2, &dpsipr, &depspr); + +/* Mean obliquity, consistent with IAU 2000 precession-nutation. */ + *epsa = iauObl80(date1, date2) + depspr; + +/* Frame bias and precession matrices and their product. */ + iauBp00(date1, date2, rb, rp, rbpw); + iauCr(rbpw, rbp); + +/* Nutation matrix. */ + iauNumat(*epsa, dpsi, deps, rnw); + iauCr(rnw, rn); + +/* Bias-precession-nutation matrix (classical). */ + iauRxr(rnw, rbpw, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn00a.c b/20200721/c/src/pn00a.c new file mode 100644 index 0000000..cc4dc63 --- /dev/null +++ b/20200721/c/src/pn00a.c @@ -0,0 +1,213 @@ +#include "sofa.h" + +void iauPn00a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 0 a +** - - - - - - - - - +** +** Precession-nutation, IAU 2000A model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000A) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. Free core nutation is omitted; +** for the utmost accuracy, use the iauPn00 function, where the +** nutation components are caller-specified. For faster but +** slightly less accurate results, use the iauPn00b function. +** +** 3) The mean obliquity is consistent with the IAU 2000 precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2000A Celestial Intermediate +** Pole are elements (3,1-3) of the GCRS-to-true matrix, +** i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the order given. +** +** Called: +** iauNut00a nutation, IAU 2000A +** iauPn00 bias/precession/nutation results, IAU 2000 +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** This revision: 2013 November 14 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Nutation. */ + iauNut00a(date1, date2, dpsi, deps); + +/* Remaining results. */ + iauPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn00b.c b/20200721/c/src/pn00b.c new file mode 100644 index 0000000..a1ebd1e --- /dev/null +++ b/20200721/c/src/pn00b.c @@ -0,0 +1,213 @@ +#include "sofa.h" + +void iauPn00b(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 0 b +** - - - - - - - - - +** +** Precession-nutation, IAU 2000B model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based +** use indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000B) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. For more accurate results, but +** at the cost of increased computation, use the iauPn00a function. +** For the utmost accuracy, use the iauPn00 function, where the +** nutation components are caller-specified. +** +** 3) The mean obliquity is consistent with the IAU 2000 precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate +** Pole are elements (3,1-3) of the GCRS-to-true matrix, +** i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauNut00b nutation, IAU 2000B +** iauPn00 bias/precession/nutation results, IAU 2000 +** +** Reference: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003). +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** This revision: 2013 November 13 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Nutation. */ + iauNut00b(date1, date2, dpsi, deps); + +/* Remaining results. */ + iauPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn06.c b/20200721/c/src/pn06.c new file mode 100644 index 0000000..8142869 --- /dev/null +++ b/20200721/c/src/pn06.c @@ -0,0 +1,237 @@ +#include "sofa.h" + +void iauPn06(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - +** i a u P n 0 6 +** - - - - - - - - +** +** Precession-nutation, IAU 2006 model: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based use +** indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** dpsi,deps double nutation (Note 2) +** +** Returned: +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Note 8) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The caller is responsible for providing the nutation components; +** they are in longitude and obliquity, in radians and are with +** respect to the equinox and ecliptic of date. For high-accuracy +** applications, free core nutation should be included as well as +** any other relevant corrections to the position of the CIP. +** +** 3) The returned mean obliquity is consistent with the IAU 2006 +** precession. +** +** 4) The matrix rb transforms vectors from GCRS to J2000.0 mean +** equator and equinox by applying frame bias. +** +** 5) The matrix rp transforms vectors from J2000.0 mean equator and +** equinox to mean equator and equinox of date by applying +** precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean equator and +** equinox of date by applying frame bias then precession. It is +** the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean equator and equinox +** of date to true equator and equinox of date by applying the +** nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true equator and +** equinox of date. It is the product rn x rbp, applying frame +** bias, precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the Celestial Intermediate Pole are +** elements (3,1-3) of the GCRS-to-true matrix, i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauFw2m F-W angles to r-matrix +** iauCr copy r-matrix +** iauTr transpose r-matrix +** iauRxr product of two r-matrices +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 November 14 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gamb, phib, psib, eps, r1[3][3], r2[3][3], rt[3][3]; + + +/* Bias-precession Fukushima-Williams angles of J2000.0 = frame bias. */ + iauPfw06(DJM0, DJM00, &gamb, &phib, &psib, &eps); + +/* B matrix. */ + iauFw2m(gamb, phib, psib, eps, r1); + iauCr(r1, rb); + +/* Bias-precession Fukushima-Williams angles of date. */ + iauPfw06(date1, date2, &gamb, &phib, &psib, &eps); + +/* Bias-precession matrix. */ + iauFw2m(gamb, phib, psib, eps, r2); + iauCr(r2, rbp); + +/* Solve for precession matrix. */ + iauTr(r1, rt); + iauRxr(r2, rt, rp); + +/* Equinox-based bias-precession-nutation matrix. */ + iauFw2m(gamb, phib, psib + dpsi, eps + deps, r1); + iauCr(r1, rbpn); + +/* Solve for nutation matrix. */ + iauTr(r2, rt); + iauRxr(r1, rt, rn); + +/* Obliquity, mean of date. */ + *epsa = eps; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pn06a.c b/20200721/c/src/pn06a.c new file mode 100644 index 0000000..c3d0d7d --- /dev/null +++ b/20200721/c/src/pn06a.c @@ -0,0 +1,203 @@ +#include "sofa.h" + +void iauPn06a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]) +/* +** - - - - - - - - - +** i a u P n 0 6 a +** - - - - - - - - - +** +** Precession-nutation, IAU 2006/2000A models: a multi-purpose function, +** supporting classical (equinox-based) use directly and CIO-based use +** indirectly. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsi,deps double nutation (Note 2) +** epsa double mean obliquity (Note 3) +** rb double[3][3] frame bias matrix (Note 4) +** rp double[3][3] precession matrix (Note 5) +** rbp double[3][3] bias-precession matrix (Note 6) +** rn double[3][3] nutation matrix (Note 7) +** rbpn double[3][3] GCRS-to-true matrix (Notes 8,9) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The nutation components (luni-solar + planetary, IAU 2000A) in +** longitude and obliquity are in radians and with respect to the +** equinox and ecliptic of date. Free core nutation is omitted; +** for the utmost accuracy, use the iauPn06 function, where the +** nutation components are caller-specified. +** +** 3) The mean obliquity is consistent with the IAU 2006 precession. +** +** 4) The matrix rb transforms vectors from GCRS to mean J2000.0 by +** applying frame bias. +** +** 5) The matrix rp transforms vectors from mean J2000.0 to mean of +** date by applying precession. +** +** 6) The matrix rbp transforms vectors from GCRS to mean of date by +** applying frame bias then precession. It is the product rp x rb. +** +** 7) The matrix rn transforms vectors from mean of date to true of +** date by applying the nutation (luni-solar + planetary). +** +** 8) The matrix rbpn transforms vectors from GCRS to true of date +** (CIP/equinox). It is the product rn x rbp, applying frame bias, +** precession and nutation in that order. +** +** 9) The X,Y,Z coordinates of the IAU 2006/2000A Celestial +** Intermediate Pole are elements (3,1-3) of the GCRS-to-true +** matrix, i.e. rbpn[2][0-2]. +** +** 10) It is permissible to re-use the same array in the returned +** arguments. The arrays are filled in the stated order. +** +** Called: +** iauNut06a nutation, IAU 2006/2000A +** iauPn06 bias/precession/nutation results, IAU 2006 +** +** Reference: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** This revision: 2013 November 13 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Nutation. */ + iauNut06a(date1, date2, dpsi, deps); + +/* Remaining results. */ + iauPn06(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pnm00a.c b/20200721/c/src/pnm00a.c new file mode 100644 index 0000000..ed61a56 --- /dev/null +++ b/20200721/c/src/pnm00a.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +void iauPnm00a(double date1, double date2, double rbpn[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 0 a +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), equinox-based, IAU 2000A model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbpn double[3][3] classical NPB matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** 3) A faster, but slightly less accurate result (about 1 mas), can be +** obtained by using instead the iauPnm00b function. +** +** Called: +** iauPn00a bias/precession/nutation, IAU 2000A +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3]; + + +/* Obtain the required matrix (discarding other results). */ + iauPn00a(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pnm00b.c b/20200721/c/src/pnm00b.c new file mode 100644 index 0000000..ef67db9 --- /dev/null +++ b/20200721/c/src/pnm00b.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +void iauPnm00b(double date1, double date2, double rbpn[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 0 b +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), equinox-based, IAU 2000B model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rbpn double[3][3] bias-precession-nutation matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** 3) The present function is faster, but slightly less accurate (about +** 1 mas), than the iauPnm00a function. +** +** Called: +** iauPn00b bias/precession/nutation, IAU 2000B +** +** Reference: +** +** IAU: Trans. International Astronomical Union, Vol. XXIVB; Proc. +** 24th General Assembly, Manchester, UK. Resolutions B1.3, B1.6. +** (2000) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3]; + + +/* Obtain the required matrix (discarding other results). */ + iauPn00b(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pnm06a.c b/20200721/c/src/pnm06a.c new file mode 100644 index 0000000..ac3404b --- /dev/null +++ b/20200721/c/src/pnm06a.c @@ -0,0 +1,174 @@ +#include "sofa.h" + +void iauPnm06a(double date1, double date2, double rnpb[3][3]) +/* +** - - - - - - - - - - +** i a u P n m 0 6 a +** - - - - - - - - - - +** +** Form the matrix of precession-nutation for a given date (including +** frame bias), IAU 2006 precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** rnpb double[3][3] bias-precession-nutation matrix (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rnpb * V(GCRS), where +** the p-vector V(date) is with respect to the true equatorial triad +** of date date1+date2 and the p-vector V(GCRS) is with respect to +** the Geocentric Celestial Reference System (IAU, 2000). +** +** Called: +** iauPfw06 bias-precession F-W angles, IAU 2006 +** iauNut06a nutation, IAU 2006/2000A +** iauFw2m F-W angles to r-matrix +** +** Reference: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double gamb, phib, psib, epsa, dp, de; + + +/* Fukushima-Williams angles for frame bias and precession. */ + iauPfw06(date1, date2, &gamb, &phib, &psib, &epsa); + +/* Nutation components. */ + iauNut06a(date1, date2, &dp, &de); + +/* Equinox based nutation x precession x bias matrix. */ + iauFw2m(gamb, phib, psib + dp, epsa + de, rnpb); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pnm80.c b/20200721/c/src/pnm80.c new file mode 100644 index 0000000..12d11f4 --- /dev/null +++ b/20200721/c/src/pnm80.c @@ -0,0 +1,176 @@ +#include "sofa.h" + +void iauPnm80(double date1, double date2, double rmatpn[3][3]) +/* +** - - - - - - - - - +** i a u P n m 8 0 +** - - - - - - - - - +** +** Form the matrix of precession/nutation for a given date, IAU 1976 +** precession model, IAU 1980 nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TDB date (Note 1) +** +** Returned: +** rmatpn double[3][3] combined precession/nutation matrix +** +** Notes: +** +** 1) The TDB date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TDB)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The matrix operates in the sense V(date) = rmatpn * V(J2000), +** where the p-vector V(date) is with respect to the true equatorial +** triad of date date1+date2 and the p-vector V(J2000) is with +** respect to the mean equatorial triad of epoch J2000.0. +** +** Called: +** iauPmat76 precession matrix, IAU 1976 +** iauNutm80 nutation matrix, IAU 1980 +** iauRxr product of two r-matrices +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992), +** Section 3.3 (p145). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rmatp[3][3], rmatn[3][3]; + + +/* Precession matrix, J2000.0 to date. */ + iauPmat76(date1, date2, rmatp); + +/* Nutation matrix. */ + iauNutm80(date1, date2, rmatn); + +/* Combine the matrices: PN = N x P. */ + iauRxr(rmatn, rmatp, rmatpn); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pom00.c b/20200721/c/src/pom00.c new file mode 100644 index 0000000..96e74c5 --- /dev/null +++ b/20200721/c/src/pom00.c @@ -0,0 +1,165 @@ +#include "sofa.h" + +void iauPom00(double xp, double yp, double sp, double rpom[3][3]) +/* +** - - - - - - - - - - +** i a u P o m 0 0 +** - - - - - - - - - - +** +** Form the matrix of polar motion for a given date, IAU 2000. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xp,yp double coordinates of the pole (radians, Note 1) +** sp double the TIO locator s' (radians, Note 2) +** +** Returned: +** rpom double[3][3] polar-motion matrix (Note 3) +** +** Notes: +** +** 1) The arguments xp and yp are the coordinates (in radians) of the +** Celestial Intermediate Pole with respect to the International +** Terrestrial Reference System (see IERS Conventions 2003), +** measured along the meridians to 0 and 90 deg west respectively. +** +** 2) The argument sp is the TIO locator s', in radians, which +** positions the Terrestrial Intermediate Origin on the equator. It +** is obtained from polar motion observations by numerical +** integration, and so is in essence unpredictable. However, it is +** dominated by a secular drift of about 47 microarcseconds per +** century, and so can be taken into account by using s' = -47*t, +** where t is centuries since J2000.0. The function iauSp00 +** implements this approximation. +** +** 3) The matrix operates in the sense V(TRS) = rpom * V(CIP), meaning +** that it is the final rotation when computing the pointing +** direction to a celestial source. +** +** Called: +** iauIr initialize r-matrix to identity +** iauRz rotate around Z-axis +** iauRy rotate around Y-axis +** iauRx rotate around X-axis +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Construct the matrix. */ + iauIr(rpom); + iauRz(sp, rpom); + iauRy(-xp, rpom); + iauRx(-yp, rpom); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ppp.c b/20200721/c/src/ppp.c new file mode 100644 index 0000000..1f788d1 --- /dev/null +++ b/20200721/c/src/ppp.c @@ -0,0 +1,135 @@ +#include "sofa.h" + +void iauPpp(double a[3], double b[3], double apb[3]) +/* +** - - - - - - - +** i a u P p p +** - - - - - - - +** +** P-vector addition. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** apb double[3] a + b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + apb[0] = a[0] + b[0]; + apb[1] = a[1] + b[1]; + apb[2] = a[2] + b[2]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ppsp.c b/20200721/c/src/ppsp.c new file mode 100644 index 0000000..5024e2e --- /dev/null +++ b/20200721/c/src/ppsp.c @@ -0,0 +1,144 @@ +#include "sofa.h" + +void iauPpsp(double a[3], double s, double b[3], double apsb[3]) +/* +** - - - - - - - - +** i a u P p s p +** - - - - - - - - +** +** P-vector plus scaled p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** s double scalar (multiplier for b) +** b double[3] second p-vector +** +** Returned: +** apsb double[3] a + s*b +** +** Note: +** It is permissible for any of a, b and apsb to be the same array. +** +** Called: +** iauSxp multiply p-vector by scalar +** iauPpp p-vector plus p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sb[3]; + + +/* s*b. */ + iauSxp(s, b, sb); + +/* a + s*b. */ + iauPpp(a, sb, apsb); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pr00.c b/20200721/c/src/pr00.c new file mode 100644 index 0000000..3176b73 --- /dev/null +++ b/20200721/c/src/pr00.c @@ -0,0 +1,192 @@ +#include "sofa.h" + +void iauPr00(double date1, double date2, double *dpsipr, double *depspr) +/* +** - - - - - - - - +** i a u P r 0 0 +** - - - - - - - - +** +** Precession-rate part of the IAU 2000 precession-nutation models +** (part of MHB2000). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** dpsipr,depspr double precession corrections (Notes 2,3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The precession adjustments are expressed as "nutation +** components", corrections in longitude and obliquity with respect +** to the J2000.0 equinox and ecliptic. +** +** 3) Although the precession adjustments are stated to be with respect +** to Lieske et al. (1977), the MHB2000 model does not specify which +** set of Euler angles are to be used and how the adjustments are to +** be applied. The most literal and straightforward procedure is to +** adopt the 4-rotation epsilon_0, psi_A, omega_A, xi_A option, and +** to add dpsipr to psi_A and depspr to both omega_A and eps_A. +** +** 4) This is an implementation of one aspect of the IAU 2000A nutation +** model, formally adopted by the IAU General Assembly in 2000, +** namely MHB2000 (Mathews et al. 2002). +** +** References: +** +** Lieske, J.H., Lederle, T., Fricke, W. & Morando, B., "Expressions +** for the precession quantities based upon the IAU (1976) System of +** Astronomical Constants", Astron.Astrophys., 58, 1-16 (1977) +** +** Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation +** and precession New nutation series for nonrigid Earth and +** insights into the Earth's interior", J.Geophys.Res., 107, B4, +** 2002. The MHB2000 code itself was obtained on 9th September 2002 +** from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A. +** +** Wallace, P.T., "Software for Implementing the IAU 2000 +** Resolutions", in IERS Workshop 5.1 (2002). +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t; + +/* Precession and obliquity corrections (radians per century) */ + static const double PRECOR = -0.29965 * DAS2R, + OBLCOR = -0.02524 * DAS2R; + + +/* Interval between fundamental epoch J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Precession rate contributions with respect to IAU 1976/80. */ + *dpsipr = PRECOR * t; + *depspr = OBLCOR * t; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/prec76.c b/20200721/c/src/prec76.c new file mode 100644 index 0000000..ffcbd02 --- /dev/null +++ b/20200721/c/src/prec76.c @@ -0,0 +1,198 @@ +#include "sofa.h" + +void iauPrec76(double date01, double date02, double date11, double date12, + double *zeta, double *z, double *theta) +/* +** - - - - - - - - - - +** i a u P r e c 7 6 +** - - - - - - - - - - +** +** IAU 1976 precession model. +** +** This function forms the three Euler angles which implement general +** precession between two dates, using the IAU 1976 model (as for the +** FK5 catalog). +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date01,date02 double TDB starting date (Note 1) +** date11,date12 double TDB ending date (Note 1) +** +** Returned: +** zeta double 1st rotation: radians cw around z +** z double 3rd rotation: radians cw around z +** theta double 2nd rotation: radians ccw around y +** +** Notes: +** +** 1) The dates date01+date02 and date11+date12 are Julian Dates, +** apportioned in any convenient way between the arguments daten1 +** and daten2. For example, JD(TDB)=2450123.7 could be expressed in +** any of these ways, among others: +** +** daten1 daten2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in cases +** where the loss of several decimal digits of resolution is +** acceptable. The J2000 method is best matched to the way the +** argument is handled internally and will deliver the optimum +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** The two dates may be expressed using different methods, but at +** the risk of losing some resolution. +** +** 2) The accumulated precession angles zeta, z, theta are expressed +** through canonical polynomials which are valid only for a limited +** time span. In addition, the IAU 1976 precession rate is known to +** be imperfect. The absolute accuracy of the present formulation +** is better than 0.1 arcsec from 1960AD to 2040AD, better than +** 1 arcsec from 1640AD to 2360AD, and remains below 3 arcsec for +** the whole of the period 500BC to 3000AD. The errors exceed +** 10 arcsec outside the range 1200BC to 3900AD, exceed 100 arcsec +** outside 4200BC to 5600AD and exceed 1000 arcsec outside 6800BC to +** 8200AD. +** +** 3) The three angles are returned in the conventional order, which +** is not the same as the order of the corresponding Euler +** rotations. The precession matrix is +** R_3(-z) x R_2(+theta) x R_3(-zeta). +** +** Reference: +** +** Lieske, J.H., 1979, Astron.Astrophys. 73, 282, equations +** (6) & (7), p283. +** +** This revision: 2013 November 19 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t0, t, tas2r, w; + + +/* Interval between fundamental epoch J2000.0 and start date (JC). */ + t0 = ((date01 - DJ00) + date02) / DJC; + +/* Interval over which precession required (JC). */ + t = ((date11 - date01) + (date12 - date02)) / DJC; + +/* Euler angles. */ + tas2r = t * DAS2R; + w = 2306.2181 + (1.39656 - 0.000139 * t0) * t0; + + *zeta = (w + ((0.30188 - 0.000344 * t0) + 0.017998 * t) * t) * tas2r; + + *z = (w + ((1.09468 + 0.000066 * t0) + 0.018203 * t) * t) * tas2r; + + *theta = ((2004.3109 + (-0.85330 - 0.000217 * t0) * t0) + + ((-0.42665 - 0.000217 * t0) - 0.041833 * t) * t) * tas2r; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pv2p.c b/20200721/c/src/pv2p.c new file mode 100644 index 0000000..c117469 --- /dev/null +++ b/20200721/c/src/pv2p.c @@ -0,0 +1,131 @@ +#include "sofa.h" + +void iauPv2p(double pv[2][3], double p[3]) +/* +** - - - - - - - - +** i a u P v 2 p +** - - - - - - - - +** +** Discard velocity component of a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** p double[3] p-vector +** +** Called: +** iauCp copy p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauCp(pv[0], p); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pv2s.c b/20200721/c/src/pv2s.c new file mode 100644 index 0000000..267e6b8 --- /dev/null +++ b/20200721/c/src/pv2s.c @@ -0,0 +1,194 @@ +#include "sofa.h" + +void iauPv2s(double pv[2][3], + double *theta, double *phi, double *r, + double *td, double *pd, double *rd) +/* +** - - - - - - - - +** i a u P v 2 s +** - - - - - - - - +** +** Convert position/velocity from Cartesian to spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** td double rate of change of theta +** pd double rate of change of phi +** rd double rate of change of r +** +** Notes: +** +** 1) If the position part of pv is null, theta, phi, td and pd +** are indeterminate. This is handled by extrapolating the +** position through unit time by using the velocity part of +** pv. This moves the origin without changing the direction +** of the velocity component. If the position and velocity +** components of pv are both null, zeroes are returned for all +** six results. +** +** 2) If the position is a pole, theta, td and pd are indeterminate. +** In such cases zeroes are returned for all three. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, xd, yd, zd, rxy2, rxy, r2, rtrue, rw, xyp; + + +/* Components of position/velocity vector. */ + x = pv[0][0]; + y = pv[0][1]; + z = pv[0][2]; + xd = pv[1][0]; + yd = pv[1][1]; + zd = pv[1][2]; + +/* Component of r in XY plane squared. */ + rxy2 = x*x + y*y; + +/* Modulus squared. */ + r2 = rxy2 + z*z; + +/* Modulus. */ + rtrue = sqrt(r2); + +/* If null vector, move the origin along the direction of movement. */ + rw = rtrue; + if (rtrue == 0.0) { + x = xd; + y = yd; + z = zd; + rxy2 = x*x + y*y; + r2 = rxy2 + z*z; + rw = sqrt(r2); + } + +/* Position and velocity in spherical coordinates. */ + rxy = sqrt(rxy2); + xyp = x*xd + y*yd; + if (rxy2 != 0.0) { + *theta = atan2(y, x); + *phi = atan2(z, rxy); + *td = (x*yd - y*xd) / rxy2; + *pd = (zd*rxy2 - z*xyp) / (r2*rxy); + } else { + *theta = 0.0; + *phi = (z != 0.0) ? atan2(z, rxy) : 0.0; + *td = 0.0; + *pd = 0.0; + } + *r = rtrue; + *rd = (rw != 0.0) ? (xyp + z*zd) / rw : 0.0; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvdpv.c b/20200721/c/src/pvdpv.c new file mode 100644 index 0000000..0f3f0bd --- /dev/null +++ b/20200721/c/src/pvdpv.c @@ -0,0 +1,152 @@ +#include "sofa.h" + +void iauPvdpv(double a[2][3], double b[2][3], double adb[2]) +/* +** - - - - - - - - - +** i a u P v d p v +** - - - - - - - - - +** +** Inner (=scalar=dot) product of two pv-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** adb double[2] a . b (see note) +** +** Note: +** +** If the position and velocity components of the two pv-vectors are +** ( ap, av ) and ( bp, bv ), the result, a . b, is the pair of +** numbers ( ap . bp , ap . bv + av . bp ). The two numbers are the +** dot-product of the two p-vectors and its derivative. +** +** Called: +** iauPdp scalar product of two p-vectors +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double adbd, addb; + + +/* a . b = constant part of result. */ + adb[0] = iauPdp(a[0], b[0]); + +/* a . bdot */ + adbd = iauPdp(a[0], b[1]); + +/* adot . b */ + addb = iauPdp(a[1], b[0]); + +/* Velocity part of result. */ + adb[1] = adbd + addb; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvm.c b/20200721/c/src/pvm.c new file mode 100644 index 0000000..7726281 --- /dev/null +++ b/20200721/c/src/pvm.c @@ -0,0 +1,136 @@ +#include "sofa.h" + +void iauPvm(double pv[2][3], double *r, double *s) +/* +** - - - - - - - +** i a u P v m +** - - - - - - - +** +** Modulus of pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** pv double[2][3] pv-vector +** +** Returned: +** r double modulus of position component +** s double modulus of velocity component +** +** Called: +** iauPm modulus of p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Distance. */ + *r = iauPm(pv[0]); + +/* Speed. */ + *s = iauPm(pv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvmpv.c b/20200721/c/src/pvmpv.c new file mode 100644 index 0000000..efd78be --- /dev/null +++ b/20200721/c/src/pvmpv.c @@ -0,0 +1,137 @@ +#include "sofa.h" + +void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3]) +/* +** - - - - - - - - - +** i a u P v m p v +** - - - - - - - - - +** +** Subtract one pv-vector from another. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** amb double[2][3] a - b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPmp p-vector minus p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauPmp(a[0], b[0], amb[0]); + iauPmp(a[1], b[1], amb[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvppv.c b/20200721/c/src/pvppv.c new file mode 100644 index 0000000..dad3052 --- /dev/null +++ b/20200721/c/src/pvppv.c @@ -0,0 +1,137 @@ +#include "sofa.h" + +void iauPvppv(double a[2][3], double b[2][3], double apb[2][3]) +/* +** - - - - - - - - - +** i a u P v p p v +** - - - - - - - - - +** +** Add one pv-vector to another. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** apb double[2][3] a + b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauPpp p-vector plus p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauPpp(a[0], b[0], apb[0]); + iauPpp(a[1], b[1], apb[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvstar.c b/20200721/c/src/pvstar.c new file mode 100644 index 0000000..bde411d --- /dev/null +++ b/20200721/c/src/pvstar.c @@ -0,0 +1,257 @@ +#include "sofa.h" + +int iauPvstar(double pv[2][3], double *ra, double *dec, + double *pmr, double *pmd, double *px, double *rv) +/* +** - - - - - - - - - - +** i a u P v s t a r +** - - - - - - - - - - +** +** Convert star position+velocity vector to catalog coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (Note 1): +** pv double[2][3] pv-vector (au, au/day) +** +** Returned (Note 2): +** ra double right ascension (radians) +** dec double declination (radians) +** pmr double RA proper motion (radians/year) +** pmd double Dec proper motion (radians/year) +** px double parallax (arcsec) +** rv double radial velocity (km/s, positive = receding) +** +** Returned (function value): +** int status: +** 0 = OK +** -1 = superluminal speed (Note 5) +** -2 = null position vector +** +** Notes: +** +** 1) The specified pv-vector is the coordinate direction (and its rate +** of change) for the date at which the light leaving the star +** reached the solar-system barycenter. +** +** 2) The star data returned by this function are "observables" for an +** imaginary observer at the solar-system barycenter. Proper motion +** and radial velocity are, strictly, in terms of barycentric +** coordinate time, TCB. For most practical applications, it is +** permissible to neglect the distinction between TCB and ordinary +** "proper" time on Earth (TT/TAI). The result will, as a rule, be +** limited by the intrinsic accuracy of the proper-motion and +** radial-velocity data; moreover, the supplied pv-vector is likely +** to be merely an intermediate result (for example generated by the +** function iauStarpv), so that a change of time unit will cancel +** out overall. +** +** In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** Summarizing, the specified pv-vector is for most stars almost +** identical to the result of applying the standard geometrical +** "space motion" transformation to the catalog data. The +** differences, which are the subject of the Stumpff paper cited +** below, are: +** +** (i) In stars with significant radial velocity and proper motion, +** the constantly changing light-time distorts the apparent proper +** motion. Note that this is a classical, not a relativistic, +** effect. +** +** (ii) The transformation complies with special relativity. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds; the radial velocity is in km/s, but +** the pv-vector result is in au and au/day. +** +** 4) The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per Julian +** year. The RA proper motion is in terms of coordinate angle, not +** true angle, and will thus be numerically larger at high +** declinations. +** +** 5) Straight-line motion at constant speed in the inertial frame is +** assumed. If the speed is greater than or equal to the speed of +** light, the function aborts with an error status. +** +** 6) The inverse transformation is performed by the function iauStarpv. +** +** Called: +** iauPn decompose p-vector into modulus and direction +** iauPdp scalar product of two p-vectors +** iauSxp multiply p-vector by scalar +** iauPmp p-vector minus p-vector +** iauPm modulus of p-vector +** iauPpp p-vector plus p-vector +** iauPv2s pv-vector to spherical +** iauAnp normalize angle into range 0 to 2pi +** +** Reference: +** +** Stumpff, P., 1985, Astron.Astrophys. 144, 232-240. +** +** This revision: 2017 March 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double r, x[3], vr, ur[3], vt, ut[3], bett, betr, d, w, del, + usr[3], ust[3], a, rad, decd, rd; + + +/* Isolate the radial component of the velocity (au/day, inertial). */ + iauPn(pv[0], &r, x); + vr = iauPdp(x, pv[1]); + iauSxp(vr, x, ur); + +/* Isolate the transverse component of the velocity (au/day, inertial). */ + iauPmp(pv[1], ur, ut); + vt = iauPm(ut); + +/* Special-relativity dimensionless parameters. */ + bett = vt / DC; + betr = vr / DC; + +/* The inertial-to-observed correction terms. */ + d = 1.0 + betr; + w = betr*betr + bett*bett; + if (d == 0.0 || w > 1.0) return -1; + del = - w / (sqrt(1.0-w) + 1.0); + +/* Apply relativistic correction factor to radial velocity component. */ + w = (betr != 0) ? (betr - del) / (betr * d) : 1.0; + iauSxp(w, ur, usr); + +/* Apply relativistic correction factor to tangential velocity */ +/* component. */ + iauSxp(1.0/d, ut, ust); + +/* Combine the two to obtain the observed velocity vector (au/day). */ + iauPpp(usr, ust, pv[1]); + +/* Cartesian to spherical. */ + iauPv2s(pv, &a, dec, &r, &rad, &decd, &rd); + if (r == 0.0) return -2; + +/* Return RA in range 0 to 2pi. */ + *ra = iauAnp(a); + +/* Return proper motions in radians per year. */ + *pmr = rad * DJY; + *pmd = decd * DJY; + +/* Return parallax in arcsec. */ + *px = DR2AS / r; + +/* Return radial velocity in km/s. */ + *rv = 1e-3 * rd * DAU / DAYSEC; + +/* OK status. */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvtob.c b/20200721/c/src/pvtob.c new file mode 100644 index 0000000..1590c6a --- /dev/null +++ b/20200721/c/src/pvtob.c @@ -0,0 +1,203 @@ +#include "sofa.h" + +void iauPvtob(double elong, double phi, double hm, + double xp, double yp, double sp, double theta, + double pv[2][3]) +/* +** - - - - - - - - - +** i a u P v t o b +** - - - - - - - - - +** +** Position and velocity of a terrestrial observing station. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** elong double longitude (radians, east +ve, Note 1) +** phi double latitude (geodetic, radians, Note 1) +** hm double height above ref. ellipsoid (geodetic, m) +** xp,yp double coordinates of the pole (radians, Note 2) +** sp double the TIO locator s' (radians, Note 2) +** theta double Earth rotation angle (radians, Note 3) +** +** Returned: +** pv double[2][3] position/velocity vector (m, m/s, CIRS) +** +** Notes: +** +** 1) The terrestrial coordinates are with respect to the WGS84 +** reference ellipsoid. +** +** 2) xp and yp are the coordinates (in radians) of the Celestial +** Intermediate Pole with respect to the International Terrestrial +** Reference System (see IERS Conventions), measured along the +** meridians 0 and 90 deg west respectively. sp is the TIO locator +** s', in radians, which positions the Terrestrial Intermediate +** Origin on the equator. For many applications, xp, yp and +** (especially) sp can be set to zero. +** +** 3) If theta is Greenwich apparent sidereal time instead of Earth +** rotation angle, the result is with respect to the true equator +** and equinox of date, i.e. with the x-axis at the equinox rather +** than the celestial intermediate origin. +** +** 4) The velocity units are meters per UT1 second, not per SI second. +** This is unlikely to have any practical consequences in the modern +** era. +** +** 5) No validation is performed on the arguments. Error cases that +** could lead to arithmetic exceptions are trapped by the iauGd2gc +** function, and the result set to zeros. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Urban, S. & Seidelmann, P. K. (eds), Explanatory Supplement to +** the Astronomical Almanac, 3rd ed., University Science Books +** (2013), Section 7.4.3.3. +** +** Called: +** iauGd2gc geodetic to geocentric transformation +** iauPom00 polar motion matrix +** iauTrxp product of transpose of r-matrix and p-vector +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Earth rotation rate in radians per UT1 second */ + const double OM = 1.00273781191135448 * D2PI / DAYSEC; + + double xyzm[3], rpm[3][3], xyz[3], x, y, z, s, c; + + +/* Geodetic to geocentric transformation (WGS84). */ + (void) iauGd2gc(1, elong, phi, hm, xyzm); + +/* Polar motion and TIO position. */ + iauPom00(xp, yp, sp, rpm); + iauTrxp(rpm, xyzm, xyz); + x = xyz[0]; + y = xyz[1]; + z = xyz[2]; + +/* Functions of ERA. */ + s = sin(theta); + c = cos(theta); + +/* Position. */ + pv[0][0] = c*x - s*y; + pv[0][1] = s*x + c*y; + pv[0][2] = z; + +/* Velocity. */ + pv[1][0] = OM * ( -s*x - c*y ); + pv[1][1] = OM * ( c*x - s*y ); + pv[1][2] = 0.0; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvu.c b/20200721/c/src/pvu.c new file mode 100644 index 0000000..013fafa --- /dev/null +++ b/20200721/c/src/pvu.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +void iauPvu(double dt, double pv[2][3], double upv[2][3]) +/* +** - - - - - - - +** i a u P v u +** - - - - - - - +** +** Update a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** dt double time interval +** pv double[2][3] pv-vector +** +** Returned: +** upv double[2][3] p updated, v unchanged +** +** Notes: +** +** 1) "Update" means "refer the position component of the vector +** to a new date dt time units from the existing date". +** +** 2) The time units of dt must match those of the velocity. +** +** 3) It is permissible for pv and upv to be the same array. +** +** Called: +** iauPpsp p-vector plus scaled p-vector +** iauCp copy p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauPpsp(pv[0], dt, pv[1], upv[0]); + iauCp(pv[1], upv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvup.c b/20200721/c/src/pvup.c new file mode 100644 index 0000000..413f735 --- /dev/null +++ b/20200721/c/src/pvup.c @@ -0,0 +1,138 @@ +#include "sofa.h" + +void iauPvup(double dt, double pv[2][3], double p[3]) +/* +** - - - - - - - - +** i a u P v u p +** - - - - - - - - +** +** Update a pv-vector, discarding the velocity component. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** dt double time interval +** pv double[2][3] pv-vector +** +** Returned: +** p double[3] p-vector +** +** Notes: +** +** 1) "Update" means "refer the position component of the vector to a +** new date dt time units from the existing date". +** +** 2) The time units of dt must match those of the velocity. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + p[0] = pv[0][0] + dt * pv[1][0]; + p[1] = pv[0][1] + dt * pv[1][1]; + p[2] = pv[0][2] + dt * pv[1][2]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pvxpv.c b/20200721/c/src/pvxpv.c new file mode 100644 index 0000000..94e6174 --- /dev/null +++ b/20200721/c/src/pvxpv.c @@ -0,0 +1,157 @@ +#include "sofa.h" + +void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3]) +/* +** - - - - - - - - - +** i a u P v x p v +** - - - - - - - - - +** +** Outer (=vector=cross) product of two pv-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[2][3] first pv-vector +** b double[2][3] second pv-vector +** +** Returned: +** axb double[2][3] a x b +** +** Notes: +** +** 1) If the position and velocity components of the two pv-vectors are +** ( ap, av ) and ( bp, bv ), the result, a x b, is the pair of +** vectors ( ap x bp, ap x bv + av x bp ). The two vectors are the +** cross-product of the two p-vectors and its derivative. +** +** 2) It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauCpv copy pv-vector +** iauPxp vector product of two p-vectors +** iauPpp p-vector plus p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double wa[2][3], wb[2][3], axbd[3], adxb[3]; + + +/* Make copies of the inputs. */ + iauCpv(a, wa); + iauCpv(b, wb); + +/* a x b = position part of result. */ + iauPxp(wa[0], wb[0], axb[0]); + +/* a x bdot + adot x b = velocity part of result. */ + iauPxp(wa[0], wb[1], axbd); + iauPxp(wa[1], wb[0], adxb); + iauPpp(axbd, adxb, axb[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/pxp.c b/20200721/c/src/pxp.c new file mode 100644 index 0000000..10e9508 --- /dev/null +++ b/20200721/c/src/pxp.c @@ -0,0 +1,144 @@ +#include "sofa.h" + +void iauPxp(double a[3], double b[3], double axb[3]) +/* +** - - - - - - - +** i a u P x p +** - - - - - - - +** +** p-vector outer (=vector=cross) product. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector +** b double[3] second p-vector +** +** Returned: +** axb double[3] a x b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double xa, ya, za, xb, yb, zb; + + + xa = a[0]; + ya = a[1]; + za = a[2]; + xb = b[0]; + yb = b[1]; + zb = b[2]; + axb[0] = ya*zb - za*yb; + axb[1] = za*xb - xa*zb; + axb[2] = xa*yb - ya*xb; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/refco.c b/20200721/c/src/refco.c new file mode 100644 index 0000000..7964c44 --- /dev/null +++ b/20200721/c/src/refco.c @@ -0,0 +1,303 @@ +#include "sofa.h" + +void iauRefco(double phpa, double tc, double rh, double wl, + double *refa, double *refb) +/* +** - - - - - - - - - +** i a u R e f c o +** - - - - - - - - - +** +** Determine the constants A and B in the atmospheric refraction model +** dZ = A tan Z + B tan^3 Z. +** +** Z is the "observed" zenith distance (i.e. affected by refraction) +** and dZ is what to add to Z to give the "topocentric" (i.e. in vacuo) +** zenith distance. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** phpa double pressure at the observer (hPa = millibar) +** tc double ambient temperature at the observer (deg C) +** rh double relative humidity at the observer (range 0-1) +** wl double wavelength (micrometers) +** +** Returned: +** refa double* tan Z coefficient (radians) +** refb double* tan^3 Z coefficient (radians) +** +** Notes: +** +** 1) The model balances speed and accuracy to give good results in +** applications where performance at low altitudes is not paramount. +** Performance is maintained across a range of conditions, and +** applies to both optical/IR and radio. +** +** 2) The model omits the effects of (i) height above sea level (apart +** from the reduced pressure itself), (ii) latitude (i.e. the +** flattening of the Earth), (iii) variations in tropospheric lapse +** rate and (iv) dispersive effects in the radio. +** +** The model was tested using the following range of conditions: +** +** lapse rates 0.0055, 0.0065, 0.0075 deg/meter +** latitudes 0, 25, 50, 75 degrees +** heights 0, 2500, 5000 meters ASL +** pressures mean for height -10% to +5% in steps of 5% +** temperatures -10 deg to +20 deg with respect to 280 deg at SL +** relative humidity 0, 0.5, 1 +** wavelengths 0.4, 0.6, ... 2 micron, + radio +** zenith distances 15, 45, 75 degrees +** +** The accuracy with respect to raytracing through a model +** atmosphere was as follows: +** +** worst RMS +** +** optical/IR 62 mas 8 mas +** radio 319 mas 49 mas +** +** For this particular set of conditions: +** +** lapse rate 0.0065 K/meter +** latitude 50 degrees +** sea level +** pressure 1005 mb +** temperature 280.15 K +** humidity 80% +** wavelength 5740 Angstroms +** +** the results were as follows: +** +** ZD raytrace iauRefco Saastamoinen +** +** 10 10.27 10.27 10.27 +** 20 21.19 21.20 21.19 +** 30 33.61 33.61 33.60 +** 40 48.82 48.83 48.81 +** 45 58.16 58.18 58.16 +** 50 69.28 69.30 69.27 +** 55 82.97 82.99 82.95 +** 60 100.51 100.54 100.50 +** 65 124.23 124.26 124.20 +** 70 158.63 158.68 158.61 +** 72 177.32 177.37 177.31 +** 74 200.35 200.38 200.32 +** 76 229.45 229.43 229.42 +** 78 267.44 267.29 267.41 +** 80 319.13 318.55 319.10 +** +** deg arcsec arcsec arcsec +** +** The values for Saastamoinen's formula (which includes terms +** up to tan^5) are taken from Hohenkerk and Sinclair (1985). +** +** 3) A wl value in the range 0-100 selects the optical/IR case and is +** wavelength in micrometers. Any value outside this range selects +** the radio case. +** +** 4) Outlandish input parameters are silently limited to +** mathematically safe values. Zero pressure is permissible, and +** causes zeroes to be returned. +** +** 5) The algorithm draws on several sources, as follows: +** +** a) The formula for the saturation vapour pressure of water as +** a function of temperature and temperature is taken from +** Equations (A4.5-A4.7) of Gill (1982). +** +** b) The formula for the water vapour pressure, given the +** saturation pressure and the relative humidity, is from +** Crane (1976), Equation (2.5.5). +** +** c) The refractivity of air is a function of temperature, +** total pressure, water-vapour pressure and, in the case +** of optical/IR, wavelength. The formulae for the two cases are +** developed from Hohenkerk & Sinclair (1985) and Rueger (2002). +** +** d) The formula for beta, the ratio of the scale height of the +** atmosphere to the geocentric distance of the observer, is +** an adaption of Equation (9) from Stone (1996). The +** adaptations, arrived at empirically, consist of (i) a small +** adjustment to the coefficient and (ii) a humidity term for the +** radio case only. +** +** e) The formulae for the refraction constants as a function of +** n-1 and beta are from Green (1987), Equation (4.31). +** +** References: +** +** Crane, R.K., Meeks, M.L. (ed), "Refraction Effects in the Neutral +** Atmosphere", Methods of Experimental Physics: Astrophysics 12B, +** Academic Press, 1976. +** +** Gill, Adrian E., "Atmosphere-Ocean Dynamics", Academic Press, +** 1982. +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987. +** +** Hohenkerk, C.Y., & Sinclair, A.T., NAO Technical Note No. 63, +** 1985. +** +** Rueger, J.M., "Refractive Index Formulae for Electronic Distance +** Measurement with Radio and Millimetre Waves", in Unisurv Report +** S-68, School of Surveying and Spatial Information Systems, +** University of New South Wales, Sydney, Australia, 2002. +** +** Stone, Ronald C., P.A.S.P. 108, 1051-1058, 1996. +** +** This revision: 2013 October 9 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int optic; + double p, t, r, w, ps, pw, tk, wlsq, gamma, beta; + + +/* Decide whether optical/IR or radio case: switch at 100 microns. */ + optic = ( wl <= 100.0 ); + +/* Restrict parameters to safe values. */ + t = gmax ( tc, -150.0 ); + t = gmin ( t, 200.0 ); + p = gmax ( phpa, 0.0 ); + p = gmin ( p, 10000.0 ); + r = gmax ( rh, 0.0 ); + r = gmin ( r, 1.0 ); + w = gmax ( wl, 0.1 ); + w = gmin ( w, 1e6 ); + +/* Water vapour pressure at the observer. */ + if ( p > 0.0 ) { + ps = pow ( 10.0, ( 0.7859 + 0.03477*t ) / + ( 1.0 + 0.00412*t ) ) * + ( 1.0 + p * ( 4.5e-6 + 6e-10*t*t ) ); + pw = r * ps / ( 1.0 - (1.0-r)*ps/p ); + } else { + pw = 0.0; + } + +/* Refractive index minus 1 at the observer. */ + tk = t + 273.15; + if ( optic ) { + wlsq = w * w; + gamma = ( ( 77.53484e-6 + + ( 4.39108e-7 + 3.666e-9/wlsq ) / wlsq ) * p + - 11.2684e-6*pw ) / tk; + } else { + gamma = ( 77.6890e-6*p - ( 6.3938e-6 - 0.375463/tk ) * pw ) / tk; + } + +/* Formula for beta from Stone, with empirical adjustments. */ + beta = 4.4474e-6 * tk; + if ( ! optic ) beta -= 0.0074 * pw * beta; + +/* Refraction constants from Green. */ + *refa = gamma * ( 1.0 - beta ); + *refb = - gamma * ( beta - gamma / 2.0 ); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rm2v.c b/20200721/c/src/rm2v.c new file mode 100644 index 0000000..f405315 --- /dev/null +++ b/20200721/c/src/rm2v.c @@ -0,0 +1,161 @@ +#include "sofa.h" + +void iauRm2v(double r[3][3], double w[3]) +/* +** - - - - - - - - +** i a u R m 2 v +** - - - - - - - - +** +** Express an r-matrix as an r-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] rotation matrix +** +** Returned: +** w double[3] rotation vector (Note 1) +** +** Notes: +** +** 1) A rotation matrix describes a rotation through some angle about +** some arbitrary axis called the Euler axis. The "rotation vector" +** returned by this function has the same direction as the Euler axis, +** and its magnitude is the angle in radians. (The magnitude and +** direction can be separated by means of the function iauPn.) +** +** 2) If r is null, so is the result. If r is not a rotation matrix +** the result is undefined; r must be proper (i.e. have a positive +** determinant) and real orthogonal (inverse = transpose). +** +** 3) The reference frame rotates clockwise as seen looking along +** the rotation vector from the origin. +** +** This revision: 2015 January 30 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, s2, c2, phi, f; + + + x = r[1][2] - r[2][1]; + y = r[2][0] - r[0][2]; + z = r[0][1] - r[1][0]; + s2 = sqrt(x*x + y*y + z*z); + if (s2 > 0) { + c2 = r[0][0] + r[1][1] + r[2][2] - 1.0; + phi = atan2(s2, c2); + f = phi / s2; + w[0] = x * f; + w[1] = y * f; + w[2] = z * f; + } else { + w[0] = 0.0; + w[1] = 0.0; + w[2] = 0.0; + } + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rv2m.c b/20200721/c/src/rv2m.c new file mode 100644 index 0000000..5fd6895 --- /dev/null +++ b/20200721/c/src/rv2m.c @@ -0,0 +1,168 @@ +#include "sofa.h" + +void iauRv2m(double w[3], double r[3][3]) +/* +** - - - - - - - - +** i a u R v 2 m +** - - - - - - - - +** +** Form the r-matrix corresponding to a given r-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** w double[3] rotation vector (Note 1) +** +** Returned: +** r double[3][3] rotation matrix +** +** Notes: +** +** 1) A rotation matrix describes a rotation through some angle about +** some arbitrary axis called the Euler axis. The "rotation vector" +** supplied to This function has the same direction as the Euler +** axis, and its magnitude is the angle in radians. +** +** 2) If w is null, the unit matrix is returned. +** +** 3) The reference frame rotates clockwise as seen looking along the +** rotation vector from the origin. +** +** This revision: 2015 January 30 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, phi, s, c, f; + + +/* Euler angle (magnitude of rotation vector) and functions. */ + x = w[0]; + y = w[1]; + z = w[2]; + phi = sqrt(x*x + y*y + z*z); + s = sin(phi); + c = cos(phi); + f = 1.0 - c; + +/* Euler axis (direction of rotation vector), perhaps null. */ + if (phi > 0.0) { + x /= phi; + y /= phi; + z /= phi; + } + +/* Form the rotation matrix. */ + r[0][0] = x*x*f + c; + r[0][1] = x*y*f + z*s; + r[0][2] = x*z*f - y*s; + r[1][0] = y*x*f - z*s; + r[1][1] = y*y*f + c; + r[1][2] = y*z*f + x*s; + r[2][0] = z*x*f + y*s; + r[2][1] = z*y*f - x*s; + r[2][2] = z*z*f + c; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rx.c b/20200721/c/src/rx.c new file mode 100644 index 0000000..4869ea4 --- /dev/null +++ b/20200721/c/src/rx.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +void iauRx(double phi, double r[3][3]) +/* +** - - - - - - +** i a u R x +** - - - - - - +** +** Rotate an r-matrix about the x-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** phi double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive phi incorporates in the +** supplied r-matrix r an additional rotation, about the x-axis, +** anticlockwise as seen looking towards the origin from positive x. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( 1 0 0 ) +** ( ) +** ( 0 + cos(phi) + sin(phi) ) +** ( ) +** ( 0 - sin(phi) + cos(phi) ) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double s, c, a10, a11, a12, a20, a21, a22; + + + s = sin(phi); + c = cos(phi); + + a10 = c*r[1][0] + s*r[2][0]; + a11 = c*r[1][1] + s*r[2][1]; + a12 = c*r[1][2] + s*r[2][2]; + a20 = - s*r[1][0] + c*r[2][0]; + a21 = - s*r[1][1] + c*r[2][1]; + a22 = - s*r[1][2] + c*r[2][2]; + + r[1][0] = a10; + r[1][1] = a11; + r[1][2] = a12; + r[2][0] = a20; + r[2][1] = a21; + r[2][2] = a22; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rxp.c b/20200721/c/src/rxp.c new file mode 100644 index 0000000..32e1af7 --- /dev/null +++ b/20200721/c/src/rxp.c @@ -0,0 +1,149 @@ +#include "sofa.h" + +void iauRxp(double r[3][3], double p[3], double rp[3]) +/* +** - - - - - - - +** i a u R x p +** - - - - - - - +** +** Multiply a p-vector by an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** p double[3] p-vector +** +** Returned: +** rp double[3] r * p +** +** Note: +** It is permissible for p and rp to be the same array. +** +** Called: +** iauCp copy p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double w, wrp[3]; + int i, j; + + +/* Matrix r * vector p. */ + for (j = 0; j < 3; j++) { + w = 0.0; + for (i = 0; i < 3; i++) { + w += r[j][i] * p[i]; + } + wrp[j] = w; + } + +/* Return the result. */ + iauCp(wrp, rp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rxpv.c b/20200721/c/src/rxpv.c new file mode 100644 index 0000000..8680550 --- /dev/null +++ b/20200721/c/src/rxpv.c @@ -0,0 +1,136 @@ +#include "sofa.h" + +void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3]) +/* +** - - - - - - - - +** i a u R x p v +** - - - - - - - - +** +** Multiply a pv-vector by an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** pv double[2][3] pv-vector +** +** Returned: +** rpv double[2][3] r * pv +** +** Note: +** It is permissible for pv and rpv to be the same array. +** +** Called: +** iauRxp product of r-matrix and p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauRxp(r, pv[0], rpv[0]); + iauRxp(r, pv[1], rpv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rxr.c b/20200721/c/src/rxr.c new file mode 100644 index 0000000..e9070ca --- /dev/null +++ b/20200721/c/src/rxr.c @@ -0,0 +1,149 @@ +#include "sofa.h" + +void iauRxr(double a[3][3], double b[3][3], double atb[3][3]) +/* +** - - - - - - - +** i a u R x r +** - - - - - - - +** +** Multiply two r-matrices. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3][3] first r-matrix +** b double[3][3] second r-matrix +** +** Returned: +** atb double[3][3] a * b +** +** Note: +** It is permissible to re-use the same array for any of the +** arguments. +** +** Called: +** iauCr copy r-matrix +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int i, j, k; + double w, wm[3][3]; + + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + w = 0.0; + for (k = 0; k < 3; k++) { + w += a[i][k] * b[k][j]; + } + wm[i][j] = w; + } + } + iauCr(wm, atb); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ry.c b/20200721/c/src/ry.c new file mode 100644 index 0000000..14bd98c --- /dev/null +++ b/20200721/c/src/ry.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +void iauRy(double theta, double r[3][3]) +/* +** - - - - - - +** i a u R y +** - - - - - - +** +** Rotate an r-matrix about the y-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive theta incorporates in the +** supplied r-matrix r an additional rotation, about the y-axis, +** anticlockwise as seen looking towards the origin from positive y. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( + cos(theta) 0 - sin(theta) ) +** ( ) +** ( 0 1 0 ) +** ( ) +** ( + sin(theta) 0 + cos(theta) ) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double s, c, a00, a01, a02, a20, a21, a22; + + + s = sin(theta); + c = cos(theta); + + a00 = c*r[0][0] - s*r[2][0]; + a01 = c*r[0][1] - s*r[2][1]; + a02 = c*r[0][2] - s*r[2][2]; + a20 = s*r[0][0] + c*r[2][0]; + a21 = s*r[0][1] + c*r[2][1]; + a22 = s*r[0][2] + c*r[2][2]; + + r[0][0] = a00; + r[0][1] = a01; + r[0][2] = a02; + r[2][0] = a20; + r[2][1] = a21; + r[2][2] = a22; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/rz.c b/20200721/c/src/rz.c new file mode 100644 index 0000000..815c207 --- /dev/null +++ b/20200721/c/src/rz.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +void iauRz(double psi, double r[3][3]) +/* +** - - - - - - +** i a u R z +** - - - - - - +** +** Rotate an r-matrix about the z-axis. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** psi double angle (radians) +** +** Given and returned: +** r double[3][3] r-matrix, rotated +** +** Notes: +** +** 1) Calling this function with positive psi incorporates in the +** supplied r-matrix r an additional rotation, about the z-axis, +** anticlockwise as seen looking towards the origin from positive z. +** +** 2) The additional rotation can be represented by this matrix: +** +** ( + cos(psi) + sin(psi) 0 ) +** ( ) +** ( - sin(psi) + cos(psi) 0 ) +** ( ) +** ( 0 0 1 ) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double s, c, a00, a01, a02, a10, a11, a12; + + + s = sin(psi); + c = cos(psi); + + a00 = c*r[0][0] + s*r[1][0]; + a01 = c*r[0][1] + s*r[1][1]; + a02 = c*r[0][2] + s*r[1][2]; + a10 = - s*r[0][0] + c*r[1][0]; + a11 = - s*r[0][1] + c*r[1][1]; + a12 = - s*r[0][2] + c*r[1][2]; + + r[0][0] = a00; + r[0][1] = a01; + r[0][2] = a02; + r[1][0] = a10; + r[1][1] = a11; + r[1][2] = a12; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s00.c b/20200721/c/src/s00.c new file mode 100644 index 0000000..808fc37 --- /dev/null +++ b/20200721/c/src/s00.c @@ -0,0 +1,421 @@ +#include "sofa.h" + +double iauS00(double date1, double date2, double x, double y) +/* +** - - - - - - - +** i a u S 0 0 +** - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, given the CIP's X,Y +** coordinates. Compatible with IAU 2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double CIP coordinates (Note 3) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems: the two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The quantity s remains below 0.1 arcsecond +** throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. This +** function requires X,Y to be supplied by the caller, who is +** responsible for providing values that are consistent with the +** supplied date. +** +** 4) The model is consistent with the IAU 2000A precession-nutation. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Time since J2000.0, in Julian centuries */ + double t; + +/* Miscellaneous */ + int i, j; + double a, w0, w1, w2, w3, w4, w5; + +/* Fundamental arguments */ + double fa[8]; + +/* Returned value */ + double s; + +/* --------------------- */ +/* The series for s+XY/2 */ +/* --------------------- */ + + typedef struct { + int nfa[8]; /* coefficients of l,l',F,D,Om,LVe,LE,pA */ + double s, c; /* sine and cosine coefficients */ + } TERM; + +/* Polynomial coefficients */ + static const double sp[] = { + + /* 1-6 */ + 94.00e-6, + 3808.35e-6, + -119.94e-6, + -72574.09e-6, + 27.70e-6, + 15.61e-6 + }; + +/* Terms of order t^0 */ + static const TERM s0[] = { + + /* 1-10 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, -2640.73e-6, 0.39e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -63.53e-6, 0.02e-6 }, + {{ 0, 0, 2, -2, 3, 0, 0, 0}, -11.75e-6, -0.01e-6 }, + {{ 0, 0, 2, -2, 1, 0, 0, 0}, -11.21e-6, -0.01e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, 4.57e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 3, 0, 0, 0}, -2.02e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 1, 0, 0, 0}, -1.98e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 3, 0, 0, 0}, 1.72e-6, 0.00e-6 }, + {{ 0, 1, 0, 0, 1, 0, 0, 0}, 1.41e-6, 0.01e-6 }, + {{ 0, 1, 0, 0, -1, 0, 0, 0}, 1.26e-6, 0.01e-6 }, + + /* 11-20 */ + {{ 1, 0, 0, 0, -1, 0, 0, 0}, 0.63e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, 1, 0, 0, 0}, 0.63e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 3, 0, 0, 0}, -0.46e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 1, 0, 0, 0}, -0.45e-6, 0.00e-6 }, + {{ 0, 0, 4, -4, 4, 0, 0, 0}, -0.36e-6, 0.00e-6 }, + {{ 0, 0, 1, -1, 1, -8, 12, 0}, 0.24e-6, 0.12e-6 }, + {{ 0, 0, 2, 0, 0, 0, 0, 0}, -0.32e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, -0.28e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 3, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 1, 0, 0, 0}, -0.26e-6, 0.00e-6 }, + + /* 21-30 */ + {{ 0, 0, 2, -2, 0, 0, 0, 0}, 0.21e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -3, 0, 0, 0}, -0.19e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -1, 0, 0, 0}, -0.18e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 0, 8,-13, -1}, 0.10e-6, -0.05e-6 }, + {{ 0, 0, 0, 2, 0, 0, 0, 0}, -0.15e-6, 0.00e-6 }, + {{ 2, 0, -2, 0, -1, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 2, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, 1, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, -1, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 0, 0, 4, -2, 4, 0, 0, 0}, -0.13e-6, 0.00e-6 }, + + /* 31-33 */ + {{ 0, 0, 2, -2, 4, 0, 0, 0}, 0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -3, 0, 0, 0}, -0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -1, 0, 0, 0}, -0.11e-6, 0.00e-6 } + }; + +/* Terms of order t^1 */ + static const TERM s1[] ={ + + /* 1-3 */ + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -0.07e-6, 3.57e-6 }, + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 1.71e-6, -0.03e-6 }, + {{ 0, 0, 2, -2, 3, 0, 0, 0}, 0.00e-6, 0.48e-6 } + }; + +/* Terms of order t^2 */ + static const TERM s2[] ={ + + /* 1-10 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 743.53e-6, -0.17e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, 56.91e-6, 0.06e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, 9.84e-6, -0.01e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -8.85e-6, 0.01e-6 }, + {{ 0, 1, 0, 0, 0, 0, 0, 0}, -6.38e-6, -0.05e-6 }, + {{ 1, 0, 0, 0, 0, 0, 0, 0}, -3.07e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 2, 0, 0, 0}, 2.23e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 1, 0, 0, 0}, 1.67e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 2, 0, 0, 0}, 1.30e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -2, 0, 0, 0}, 0.93e-6, 0.00e-6 }, + + /* 11-20 */ + {{ 1, 0, 0, -2, 0, 0, 0, 0}, 0.68e-6, 0.00e-6 }, + {{ 0, 0, 2, -2, 1, 0, 0, 0}, -0.55e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -2, 0, 0, 0}, 0.53e-6, 0.00e-6 }, + {{ 0, 0, 0, 2, 0, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, 1, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, -2, -2, -2, 0, 0, 0}, -0.26e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, -1, 0, 0, 0}, -0.25e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 1, 0, 0, 0}, 0.22e-6, 0.00e-6 }, + {{ 2, 0, 0, -2, 0, 0, 0, 0}, -0.21e-6, 0.00e-6 }, + {{ 2, 0, -2, 0, -1, 0, 0, 0}, 0.20e-6, 0.00e-6 }, + + /* 21-25 */ + {{ 0, 0, 2, 2, 2, 0, 0, 0}, 0.17e-6, 0.00e-6 }, + {{ 2, 0, 2, 0, 2, 0, 0, 0}, 0.13e-6, 0.00e-6 }, + {{ 2, 0, 0, 0, 0, 0, 0, 0}, -0.13e-6, 0.00e-6 }, + {{ 1, 0, 2, -2, 2, 0, 0, 0}, -0.12e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 0, 0, 0, 0}, -0.11e-6, 0.00e-6 } + }; + +/* Terms of order t^3 */ + static const TERM s3[] ={ + + /* 1-4 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 0.30e-6, -23.51e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, -0.03e-6, -1.39e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, -0.01e-6, -0.24e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, 0.00e-6, 0.22e-6 } + }; + +/* Terms of order t^4 */ + static const TERM s4[] ={ + + /* 1-1 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, -0.26e-6, -0.01e-6 } + }; + +/* Number of terms in the series */ + const int NS0 = (int) (sizeof s0 / sizeof (TERM)); + const int NS1 = (int) (sizeof s1 / sizeof (TERM)); + const int NS2 = (int) (sizeof s2 / sizeof (TERM)); + const int NS3 = (int) (sizeof s3 / sizeof (TERM)); + const int NS4 = (int) (sizeof s4 / sizeof (TERM)); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental epoch J2000.0 and current date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Fundamental Arguments (from IERS Conventions 2003) */ + +/* Mean anomaly of the Moon. */ + fa[0] = iauFal03(t); + +/* Mean anomaly of the Sun. */ + fa[1] = iauFalp03(t); + +/* Mean longitude of the Moon minus that of the ascending node. */ + fa[2] = iauFaf03(t); + +/* Mean elongation of the Moon from the Sun. */ + fa[3] = iauFad03(t); + +/* Mean longitude of the ascending node of the Moon. */ + fa[4] = iauFaom03(t); + +/* Mean longitude of Venus. */ + fa[5] = iauFave03(t); + +/* Mean longitude of Earth. */ + fa[6] = iauFae03(t); + +/* General precession in longitude. */ + fa[7] = iauFapa03(t); + +/* Evaluate s. */ + w0 = sp[0]; + w1 = sp[1]; + w2 = sp[2]; + w3 = sp[3]; + w4 = sp[4]; + w5 = sp[5]; + + for (i = NS0-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s0[i].nfa[j] * fa[j]; + } + w0 += s0[i].s * sin(a) + s0[i].c * cos(a); + } + + for (i = NS1-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s1[i].nfa[j] * fa[j]; + } + w1 += s1[i].s * sin(a) + s1[i].c * cos(a); + } + + for (i = NS2-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s2[i].nfa[j] * fa[j]; + } + w2 += s2[i].s * sin(a) + s2[i].c * cos(a); + } + + for (i = NS3-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s3[i].nfa[j] * fa[j]; + } + w3 += s3[i].s * sin(a) + s3[i].c * cos(a); + } + + for (i = NS4-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s4[i].nfa[j] * fa[j]; + } + w4 += s4[i].s * sin(a) + s4[i].c * cos(a); + } + + s = (w0 + + (w1 + + (w2 + + (w3 + + (w4 + + w5 * t) * t) * t) * t) * t) * DAS2R - x*y/2.0; + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s00a.c b/20200721/c/src/s00a.c new file mode 100644 index 0000000..026e1b4 --- /dev/null +++ b/20200721/c/src/s00a.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +double iauS00a(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 0 a +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2000A +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. The present +** function uses the full IAU 2000A nutation model when predicting +** the CIP position. Faster results, with no significant loss of +** accuracy, can be obtained via the function iauS00b, which uses +** instead the IAU 2000B truncated model. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauBnp2xy extract CIP X,Y from the BPN matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3], x, y, s; + + +/* Bias-precession-nutation-matrix, IAU 2000A. */ + iauPnm00a(date1, date2, rbpn); + +/* Extract the CIP coordinates. */ + iauBpn2xy(rbpn, &x, &y); + +/* Compute the CIO locator s, given the CIP coordinates. */ + s = iauS00(date1, date2, x, y); + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s00b.c b/20200721/c/src/s00b.c new file mode 100644 index 0000000..36bcd55 --- /dev/null +++ b/20200721/c/src/s00b.c @@ -0,0 +1,193 @@ +#include "sofa.h" + +double iauS00b(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 0 b +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2000B +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. The present +** function uses the IAU 2000B truncated nutation model when +** predicting the CIP position. The function iauS00a uses instead +** the full IAU 2000A model, but with no significant increase in +** accuracy and at some cost in speed. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauBnp2xy extract CIP X,Y from the BPN matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3], x, y, s; + + +/* Bias-precession-nutation-matrix, IAU 2000B. */ + iauPnm00b(date1, date2, rbpn); + +/* Extract the CIP coordinates. */ + iauBpn2xy(rbpn, &x, &y); + +/* Compute the CIO locator s, given the CIP coordinates. */ + s = iauS00(date1, date2, x, y); + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s06.c b/20200721/c/src/s06.c new file mode 100644 index 0000000..1de4e8b --- /dev/null +++ b/20200721/c/src/s06.c @@ -0,0 +1,418 @@ +#include "sofa.h" + +double iauS06(double date1, double date2, double x, double y) +/* +** - - - - - - - +** i a u S 0 6 +** - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, given the CIP's X,Y +** coordinates. Compatible with IAU 2006/2000A precession-nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** x,y double CIP coordinates (Note 3) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems: the two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The quantity s remains below 0.1 arcsecond +** throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series +** is more compact than a direct series for s would be. This +** function requires X,Y to be supplied by the caller, who is +** responsible for providing values that are consistent with the +** supplied date. +** +** 4) The model is consistent with the "P03" precession (Capitaine et +** al. 2003), adopted by IAU 2006 Resolution 1, 2006, and the +** IAU 2000A nutation (with P03 adjustments). +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, Astron. +** Astrophys. 432, 355 +** +** McCarthy, D.D., Petit, G. (eds.) 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Time since J2000.0, in Julian centuries */ + double t; + +/* Miscellaneous */ + int i, j; + double a, w0, w1, w2, w3, w4, w5; + +/* Fundamental arguments */ + double fa[8]; + +/* Returned value */ + double s; + +/* --------------------- */ +/* The series for s+XY/2 */ +/* --------------------- */ + + typedef struct { + int nfa[8]; /* coefficients of l,l',F,D,Om,LVe,LE,pA */ + double s, c; /* sine and cosine coefficients */ + } TERM; + +/* Polynomial coefficients */ + static const double sp[] = { + + /* 1-6 */ + 94.00e-6, + 3808.65e-6, + -122.68e-6, + -72574.11e-6, + 27.98e-6, + 15.62e-6 + }; + +/* Terms of order t^0 */ + static const TERM s0[] = { + + /* 1-10 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, -2640.73e-6, 0.39e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -63.53e-6, 0.02e-6 }, + {{ 0, 0, 2, -2, 3, 0, 0, 0}, -11.75e-6, -0.01e-6 }, + {{ 0, 0, 2, -2, 1, 0, 0, 0}, -11.21e-6, -0.01e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, 4.57e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 3, 0, 0, 0}, -2.02e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 1, 0, 0, 0}, -1.98e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 3, 0, 0, 0}, 1.72e-6, 0.00e-6 }, + {{ 0, 1, 0, 0, 1, 0, 0, 0}, 1.41e-6, 0.01e-6 }, + {{ 0, 1, 0, 0, -1, 0, 0, 0}, 1.26e-6, 0.01e-6 }, + + /* 11-20 */ + {{ 1, 0, 0, 0, -1, 0, 0, 0}, 0.63e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, 1, 0, 0, 0}, 0.63e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 3, 0, 0, 0}, -0.46e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 1, 0, 0, 0}, -0.45e-6, 0.00e-6 }, + {{ 0, 0, 4, -4, 4, 0, 0, 0}, -0.36e-6, 0.00e-6 }, + {{ 0, 0, 1, -1, 1, -8, 12, 0}, 0.24e-6, 0.12e-6 }, + {{ 0, 0, 2, 0, 0, 0, 0, 0}, -0.32e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, -0.28e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 3, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 1, 0, 0, 0}, -0.26e-6, 0.00e-6 }, + + /* 21-30 */ + {{ 0, 0, 2, -2, 0, 0, 0, 0}, 0.21e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -3, 0, 0, 0}, -0.19e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -1, 0, 0, 0}, -0.18e-6, 0.00e-6 }, + {{ 0, 0, 0, 0, 0, 8,-13, -1}, 0.10e-6, -0.05e-6 }, + {{ 0, 0, 0, 2, 0, 0, 0, 0}, -0.15e-6, 0.00e-6 }, + {{ 2, 0, -2, 0, -1, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 2, 0, 0, 0}, 0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, 1, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 1, 0, 0, -2, -1, 0, 0, 0}, -0.14e-6, 0.00e-6 }, + {{ 0, 0, 4, -2, 4, 0, 0, 0}, -0.13e-6, 0.00e-6 }, + + /* 31-33 */ + {{ 0, 0, 2, -2, 4, 0, 0, 0}, 0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -3, 0, 0, 0}, -0.11e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -1, 0, 0, 0}, -0.11e-6, 0.00e-6 } + }; + +/* Terms of order t^1 */ + static const TERM s1[] = { + + /* 1 - 3 */ + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -0.07e-6, 3.57e-6 }, + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 1.73e-6, -0.03e-6 }, + {{ 0, 0, 2, -2, 3, 0, 0, 0}, 0.00e-6, 0.48e-6 } + }; + +/* Terms of order t^2 */ + static const TERM s2[] = { + + /* 1-10 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 743.52e-6, -0.17e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, 56.91e-6, 0.06e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, 9.84e-6, -0.01e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, -8.85e-6, 0.01e-6 }, + {{ 0, 1, 0, 0, 0, 0, 0, 0}, -6.38e-6, -0.05e-6 }, + {{ 1, 0, 0, 0, 0, 0, 0, 0}, -3.07e-6, 0.00e-6 }, + {{ 0, 1, 2, -2, 2, 0, 0, 0}, 2.23e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 1, 0, 0, 0}, 1.67e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 2, 0, 0, 0}, 1.30e-6, 0.00e-6 }, + {{ 0, 1, -2, 2, -2, 0, 0, 0}, 0.93e-6, 0.00e-6 }, + + /* 11-20 */ + {{ 1, 0, 0, -2, 0, 0, 0, 0}, 0.68e-6, 0.00e-6 }, + {{ 0, 0, 2, -2, 1, 0, 0, 0}, -0.55e-6, 0.00e-6 }, + {{ 1, 0, -2, 0, -2, 0, 0, 0}, 0.53e-6, 0.00e-6 }, + {{ 0, 0, 0, 2, 0, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, 1, 0, 0, 0}, -0.27e-6, 0.00e-6 }, + {{ 1, 0, -2, -2, -2, 0, 0, 0}, -0.26e-6, 0.00e-6 }, + {{ 1, 0, 0, 0, -1, 0, 0, 0}, -0.25e-6, 0.00e-6 }, + {{ 1, 0, 2, 0, 1, 0, 0, 0}, 0.22e-6, 0.00e-6 }, + {{ 2, 0, 0, -2, 0, 0, 0, 0}, -0.21e-6, 0.00e-6 }, + {{ 2, 0, -2, 0, -1, 0, 0, 0}, 0.20e-6, 0.00e-6 }, + + /* 21-25 */ + {{ 0, 0, 2, 2, 2, 0, 0, 0}, 0.17e-6, 0.00e-6 }, + {{ 2, 0, 2, 0, 2, 0, 0, 0}, 0.13e-6, 0.00e-6 }, + {{ 2, 0, 0, 0, 0, 0, 0, 0}, -0.13e-6, 0.00e-6 }, + {{ 1, 0, 2, -2, 2, 0, 0, 0}, -0.12e-6, 0.00e-6 }, + {{ 0, 0, 2, 0, 0, 0, 0, 0}, -0.11e-6, 0.00e-6 } + }; + +/* Terms of order t^3 */ + static const TERM s3[] = { + + /* 1-4 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, 0.30e-6, -23.42e-6 }, + {{ 0, 0, 2, -2, 2, 0, 0, 0}, -0.03e-6, -1.46e-6 }, + {{ 0, 0, 2, 0, 2, 0, 0, 0}, -0.01e-6, -0.25e-6 }, + {{ 0, 0, 0, 0, 2, 0, 0, 0}, 0.00e-6, 0.23e-6 } + }; + +/* Terms of order t^4 */ + static const TERM s4[] = { + + /* 1-1 */ + {{ 0, 0, 0, 0, 1, 0, 0, 0}, -0.26e-6, -0.01e-6 } + }; + +/* Number of terms in the series */ + static const int NS0 = (int) (sizeof s0 / sizeof (TERM)); + static const int NS1 = (int) (sizeof s1 / sizeof (TERM)); + static const int NS2 = (int) (sizeof s2 / sizeof (TERM)); + static const int NS3 = (int) (sizeof s3 / sizeof (TERM)); + static const int NS4 = (int) (sizeof s4 / sizeof (TERM)); + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental epoch J2000.0 and current date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Fundamental Arguments (from IERS Conventions 2003) */ + +/* Mean anomaly of the Moon. */ + fa[0] = iauFal03(t); + +/* Mean anomaly of the Sun. */ + fa[1] = iauFalp03(t); + +/* Mean longitude of the Moon minus that of the ascending node. */ + fa[2] = iauFaf03(t); + +/* Mean elongation of the Moon from the Sun. */ + fa[3] = iauFad03(t); + +/* Mean longitude of the ascending node of the Moon. */ + fa[4] = iauFaom03(t); + +/* Mean longitude of Venus. */ + fa[5] = iauFave03(t); + +/* Mean longitude of Earth. */ + fa[6] = iauFae03(t); + +/* General precession in longitude. */ + fa[7] = iauFapa03(t); + +/* Evaluate s. */ + w0 = sp[0]; + w1 = sp[1]; + w2 = sp[2]; + w3 = sp[3]; + w4 = sp[4]; + w5 = sp[5]; + + for (i = NS0-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s0[i].nfa[j] * fa[j]; + } + w0 += s0[i].s * sin(a) + s0[i].c * cos(a); + } + + for (i = NS1-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s1[i].nfa[j] * fa[j]; + } + w1 += s1[i].s * sin(a) + s1[i].c * cos(a); + } + + for (i = NS2-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s2[i].nfa[j] * fa[j]; + } + w2 += s2[i].s * sin(a) + s2[i].c * cos(a); + } + + for (i = NS3-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s3[i].nfa[j] * fa[j]; + } + w3 += s3[i].s * sin(a) + s3[i].c * cos(a); + } + + for (i = NS4-1; i >= 0; i--) { + a = 0.0; + for (j = 0; j < 8; j++) { + a += (double)s4[i].nfa[j] * fa[j]; + } + w4 += s4[i].s * sin(a) + s4[i].c * cos(a); + } + + s = (w0 + + (w1 + + (w2 + + (w3 + + (w4 + + w5 * t) * t) * t) * t) * t) * DAS2R - x*y/2.0; + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s06a.c b/20200721/c/src/s06a.c new file mode 100644 index 0000000..f987e03 --- /dev/null +++ b/20200721/c/src/s06a.c @@ -0,0 +1,195 @@ +#include "sofa.h" + +double iauS06a(double date1, double date2) +/* +** - - - - - - - - +** i a u S 0 6 a +** - - - - - - - - +** +** The CIO locator s, positioning the Celestial Intermediate Origin on +** the equator of the Celestial Intermediate Pole, using the IAU 2006 +** precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the CIO locator s in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The CIO locator s is the difference between the right ascensions +** of the same point in two systems. The two systems are the GCRS +** and the CIP,CIO, and the point is the ascending node of the +** CIP equator. The CIO locator s remains a small fraction of +** 1 arcsecond throughout 1900-2100. +** +** 3) The series used to compute s is in fact for s+XY/2, where X and Y +** are the x and y components of the CIP unit vector; this series is +** more compact than a direct series for s would be. The present +** function uses the full IAU 2000A nutation model when predicting +** the CIP position. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** +** References: +** +** Capitaine, N., Chapront, J., Lambert, S. and Wallace, P., +** "Expressions for the Celestial Intermediate Pole and Celestial +** Ephemeris Origin consistent with the IAU 2000A precession- +** nutation model", Astron.Astrophys. 400, 1145-1154 (2003) +** +** n.b. The celestial ephemeris origin (CEO) was renamed "celestial +** intermediate origin" (CIO) by IAU 2006 Resolution 2. +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rnpb[3][3], x, y, s; + + +/* Bias-precession-nutation-matrix, IAU 20006/2000A. */ + iauPnm06a(date1, date2, rnpb); + +/* Extract the CIP coordinates. */ + iauBpn2xy(rnpb, &x, &y); + +/* Compute the CIO locator s, given the CIP coordinates. */ + s = iauS06(date1, date2, x, y); + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s2c.c b/20200721/c/src/s2c.c new file mode 100644 index 0000000..a48a060 --- /dev/null +++ b/20200721/c/src/s2c.c @@ -0,0 +1,135 @@ +#include "sofa.h" + +void iauS2c(double theta, double phi, double c[3]) +/* +** - - - - - - - +** i a u S 2 c +** - - - - - - - +** +** Convert spherical coordinates to Cartesian. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** +** Returned: +** c double[3] direction cosines +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double cp; + + + cp = cos(phi); + c[0] = cos(theta) * cp; + c[1] = sin(theta) * cp; + c[2] = sin(phi); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s2p.c b/20200721/c/src/s2p.c new file mode 100644 index 0000000..9d5e0b8 --- /dev/null +++ b/20200721/c/src/s2p.c @@ -0,0 +1,138 @@ +#include "sofa.h" + +void iauS2p(double theta, double phi, double r, double p[3]) +/* +** - - - - - - - +** i a u S 2 p +** - - - - - - - +** +** Convert spherical polar coordinates to p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** +** Returned: +** p double[3] Cartesian coordinates +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauSxp multiply p-vector by scalar +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double u[3]; + + + iauS2c(theta, phi, u); + iauSxp(r, u, p); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s2pv.c b/20200721/c/src/s2pv.c new file mode 100644 index 0000000..e88fb24 --- /dev/null +++ b/20200721/c/src/s2pv.c @@ -0,0 +1,153 @@ +#include "sofa.h" + +void iauS2pv(double theta, double phi, double r, + double td, double pd, double rd, + double pv[2][3]) +/* +** - - - - - - - - +** i a u S 2 p v +** - - - - - - - - +** +** Convert position/velocity from spherical to Cartesian coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** theta double longitude angle (radians) +** phi double latitude angle (radians) +** r double radial distance +** td double rate of change of theta +** pd double rate of change of phi +** rd double rate of change of r +** +** Returned: +** pv double[2][3] pv-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double st, ct, sp, cp, rcp, x, y, rpd, w; + + + st = sin(theta); + ct = cos(theta); + sp = sin(phi); + cp = cos(phi); + rcp = r * cp; + x = rcp * ct; + y = rcp * st; + rpd = r * pd; + w = rpd*sp - cp*rd; + + pv[0][0] = x; + pv[0][1] = y; + pv[0][2] = r * sp; + pv[1][0] = -y*td - w*ct; + pv[1][1] = x*td - w*st; + pv[1][2] = rpd*cp + sp*rd; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/s2xpv.c b/20200721/c/src/s2xpv.c new file mode 100644 index 0000000..28a3d0d --- /dev/null +++ b/20200721/c/src/s2xpv.c @@ -0,0 +1,137 @@ +#include "sofa.h" + +void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]) +/* +** - - - - - - - - - +** i a u S 2 x p v +** - - - - - - - - - +** +** Multiply a pv-vector by two scalars. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s1 double scalar to multiply position component by +** s2 double scalar to multiply velocity component by +** pv double[2][3] pv-vector +** +** Returned: +** spv double[2][3] pv-vector: p scaled by s1, v scaled by s2 +** +** Note: +** It is permissible for pv and spv to be the same array. +** +** Called: +** iauSxp multiply p-vector by scalar +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauSxp(s1, pv[0], spv[0]); + iauSxp(s2, pv[1], spv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/sepp.c b/20200721/c/src/sepp.c new file mode 100644 index 0000000..54ef2ab --- /dev/null +++ b/20200721/c/src/sepp.c @@ -0,0 +1,155 @@ +#include "sofa.h" + +double iauSepp(double a[3], double b[3]) +/* +** - - - - - - - - +** i a u S e p p +** - - - - - - - - +** +** Angular separation between two p-vectors. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** a double[3] first p-vector (not necessarily unit length) +** b double[3] second p-vector (not necessarily unit length) +** +** Returned (function value): +** double angular separation (radians, always positive) +** +** Notes: +** +** 1) If either vector is null, a zero result is returned. +** +** 2) The angular separation is most simply formulated in terms of +** scalar product. However, this gives poor accuracy for angles +** near zero and pi. The present algorithm uses both cross product +** and dot product, to deliver full accuracy whatever the size of +** the angle. +** +** Called: +** iauPxp vector product of two p-vectors +** iauPm modulus of p-vector +** iauPdp scalar product of two p-vectors +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double axb[3], ss, cs, s; + + +/* Sine of angle between the vectors, multiplied by the two moduli. */ + iauPxp(a, b, axb); + ss = iauPm(axb); + +/* Cosine of the angle, multiplied by the two moduli. */ + cs = iauPdp(a, b); + +/* The angle. */ + s = ((ss != 0.0) || (cs != 0.0)) ? atan2(ss, cs) : 0.0; + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/seps.c b/20200721/c/src/seps.c new file mode 100644 index 0000000..57318d9 --- /dev/null +++ b/20200721/c/src/seps.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +double iauSeps(double al, double ap, double bl, double bp) +/* +** - - - - - - - - +** i a u S e p s +** - - - - - - - - +** +** Angular separation between two sets of spherical coordinates. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** al double first longitude (radians) +** ap double first latitude (radians) +** bl double second longitude (radians) +** bp double second latitude (radians) +** +** Returned (function value): +** double angular separation (radians) +** +** Called: +** iauS2c spherical coordinates to unit vector +** iauSepp angular separation between two p-vectors +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double ac[3], bc[3], s; + + +/* Spherical to Cartesian. */ + iauS2c(al, ap, ac); + iauS2c(bl, bp, bc); + +/* Angle between the vectors. */ + s = iauSepp(ac, bc); + + return s; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/sofa.h b/20200721/c/src/sofa.h new file mode 100644 index 0000000..68c160e --- /dev/null +++ b/20200721/c/src/sofa.h @@ -0,0 +1,592 @@ +#ifndef SOFAHDEF +#define SOFAHDEF + +/* +** - - - - - - - +** s o f a . h +** - - - - - - - +** +** Prototype function declarations for SOFA library. +** +** This file is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** This revision: 2018 December 5 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +#include "sofam.h" +#include "math.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Astronomy/Calendars */ +int iauCal2jd(int iy, int im, int id, double *djm0, double *djm); +double iauEpb(double dj1, double dj2); +void iauEpb2jd(double epb, double *djm0, double *djm); +double iauEpj(double dj1, double dj2); +void iauEpj2jd(double epj, double *djm0, double *djm); +int iauJd2cal(double dj1, double dj2, + int *iy, int *im, int *id, double *fd); +int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4]); + +/* Astronomy/Astrometry */ +void iauAb(double pnat[3], double v[3], double s, double bm1, + double ppr[3]); +void iauApcg(double date1, double date2, + double ebpv[2][3], double ehp[3], + iauASTROM *astrom); +void iauApcg13(double date1, double date2, iauASTROM *astrom); +void iauApci(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, + iauASTROM *astrom); +void iauApci13(double date1, double date2, + iauASTROM *astrom, double *eo); +void iauApco(double date1, double date2, + double ebpv[2][3], double ehp[3], + double x, double y, double s, double theta, + double elong, double phi, double hm, + double xp, double yp, double sp, + double refa, double refb, + iauASTROM *astrom); +int iauApco13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom, double *eo); +void iauApcs(double date1, double date2, double pv[2][3], + double ebpv[2][3], double ehp[3], + iauASTROM *astrom); +void iauApcs13(double date1, double date2, double pv[2][3], + iauASTROM *astrom); +void iauAper(double theta, iauASTROM *astrom); +void iauAper13(double ut11, double ut12, iauASTROM *astrom); +void iauApio(double sp, double theta, + double elong, double phi, double hm, double xp, double yp, + double refa, double refb, + iauASTROM *astrom); +int iauApio13(double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + iauASTROM *astrom); +void iauAtci13(double rc, double dc, + double pr, double pd, double px, double rv, + double date1, double date2, + double *ri, double *di, double *eo); +void iauAtciq(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + double *ri, double *di); +void iauAtciqn(double rc, double dc, double pr, double pd, + double px, double rv, iauASTROM *astrom, + int n, iauLDBODY b[], double *ri, double *di); +void iauAtciqz(double rc, double dc, iauASTROM *astrom, + double *ri, double *di); +int iauAtco13(double rc, double dc, + double pr, double pd, double px, double rv, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob, double *eo); +void iauAtic13(double ri, double di, + double date1, double date2, + double *rc, double *dc, double *eo); +void iauAticq(double ri, double di, iauASTROM *astrom, + double *rc, double *dc); +void iauAticqn(double ri, double di, iauASTROM *astrom, + int n, iauLDBODY b[], double *rc, double *dc); +int iauAtio13(double ri, double di, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *aob, double *zob, double *hob, + double *dob, double *rob); +void iauAtioq(double ri, double di, iauASTROM *astrom, + double *aob, double *zob, + double *hob, double *dob, double *rob); +int iauAtoc13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *rc, double *dc); +int iauAtoi13(const char *type, double ob1, double ob2, + double utc1, double utc2, double dut1, + double elong, double phi, double hm, double xp, double yp, + double phpa, double tc, double rh, double wl, + double *ri, double *di); +void iauAtoiq(const char *type, + double ob1, double ob2, iauASTROM *astrom, + double *ri, double *di); +void iauLd(double bm, double p[3], double q[3], double e[3], + double em, double dlim, double p1[3]); +void iauLdn(int n, iauLDBODY b[], double ob[3], double sc[3], + double sn[3]); +void iauLdsun(double p[3], double e[3], double em, double p1[3]); +void iauPmpx(double rc, double dc, double pr, double pd, + double px, double rv, double pmt, double pob[3], + double pco[3]); +int iauPmsafe(double ra1, double dec1, double pmr1, double pmd1, + double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, double *pmr2, double *pmd2, + double *px2, double *rv2); +void iauPvtob(double elong, double phi, double height, double xp, + double yp, double sp, double theta, double pv[2][3]); +void iauRefco(double phpa, double tc, double rh, double wl, + double *refa, double *refb); + +/* Astronomy/Ephemerides */ +int iauEpv00(double date1, double date2, + double pvh[2][3], double pvb[2][3]); +int iauPlan94(double date1, double date2, int np, double pv[2][3]); + +/* Astronomy/FundamentalArgs */ +double iauFad03(double t); +double iauFae03(double t); +double iauFaf03(double t); +double iauFaju03(double t); +double iauFal03(double t); +double iauFalp03(double t); +double iauFama03(double t); +double iauFame03(double t); +double iauFane03(double t); +double iauFaom03(double t); +double iauFapa03(double t); +double iauFasa03(double t); +double iauFaur03(double t); +double iauFave03(double t); + +/* Astronomy/PrecNutPolar */ +void iauBi00(double *dpsibi, double *depsbi, double *dra); +void iauBp00(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]); +void iauBp06(double date1, double date2, + double rb[3][3], double rp[3][3], double rbp[3][3]); +void iauBpn2xy(double rbpn[3][3], double *x, double *y); +void iauC2i00a(double date1, double date2, double rc2i[3][3]); +void iauC2i00b(double date1, double date2, double rc2i[3][3]); +void iauC2i06a(double date1, double date2, double rc2i[3][3]); +void iauC2ibpn(double date1, double date2, double rbpn[3][3], + double rc2i[3][3]); +void iauC2ixy(double date1, double date2, double x, double y, + double rc2i[3][3]); +void iauC2ixys(double x, double y, double s, double rc2i[3][3]); +void iauC2t00a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2t00b(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2t06a(double tta, double ttb, double uta, double utb, + double xp, double yp, double rc2t[3][3]); +void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3], + double rc2t[3][3]); +void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3], + double rc2t[3][3]); +void iauC2tpe(double tta, double ttb, double uta, double utb, + double dpsi, double deps, double xp, double yp, + double rc2t[3][3]); +void iauC2txy(double tta, double ttb, double uta, double utb, + double x, double y, double xp, double yp, + double rc2t[3][3]); +double iauEo06a(double date1, double date2); +double iauEors(double rnpb[3][3], double s); +void iauFw2m(double gamb, double phib, double psi, double eps, + double r[3][3]); +void iauFw2xy(double gamb, double phib, double psi, double eps, + double *x, double *y); +void iauLtp(double epj, double rp[3][3]); +void iauLtpb(double epj, double rpb[3][3]); +void iauLtpecl(double epj, double vec[3]); +void iauLtpequ(double epj, double veq[3]); +void iauNum00a(double date1, double date2, double rmatn[3][3]); +void iauNum00b(double date1, double date2, double rmatn[3][3]); +void iauNum06a(double date1, double date2, double rmatn[3][3]); +void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3]); +void iauNut00a(double date1, double date2, double *dpsi, double *deps); +void iauNut00b(double date1, double date2, double *dpsi, double *deps); +void iauNut06a(double date1, double date2, double *dpsi, double *deps); +void iauNut80(double date1, double date2, double *dpsi, double *deps); +void iauNutm80(double date1, double date2, double rmatn[3][3]); +double iauObl06(double date1, double date2); +double iauObl80(double date1, double date2); +void iauP06e(double date1, double date2, + double *eps0, double *psia, double *oma, double *bpa, + double *bqa, double *pia, double *bpia, + double *epsa, double *chia, double *za, double *zetaa, + double *thetaa, double *pa, + double *gam, double *phi, double *psi); +void iauPb06(double date1, double date2, + double *bzeta, double *bz, double *btheta); +void iauPfw06(double date1, double date2, + double *gamb, double *phib, double *psib, double *epsa); +void iauPmat00(double date1, double date2, double rbp[3][3]); +void iauPmat06(double date1, double date2, double rbp[3][3]); +void iauPmat76(double date1, double date2, double rmatp[3][3]); +void iauPn00(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn00a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn00b(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn06(double date1, double date2, double dpsi, double deps, + double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPn06a(double date1, double date2, + double *dpsi, double *deps, double *epsa, + double rb[3][3], double rp[3][3], double rbp[3][3], + double rn[3][3], double rbpn[3][3]); +void iauPnm00a(double date1, double date2, double rbpn[3][3]); +void iauPnm00b(double date1, double date2, double rbpn[3][3]); +void iauPnm06a(double date1, double date2, double rnpb[3][3]); +void iauPnm80(double date1, double date2, double rmatpn[3][3]); +void iauPom00(double xp, double yp, double sp, double rpom[3][3]); +void iauPr00(double date1, double date2, + double *dpsipr, double *depspr); +void iauPrec76(double date01, double date02, + double date11, double date12, + double *zeta, double *z, double *theta); +double iauS00(double date1, double date2, double x, double y); +double iauS00a(double date1, double date2); +double iauS00b(double date1, double date2); +double iauS06(double date1, double date2, double x, double y); +double iauS06a(double date1, double date2); +double iauSp00(double date1, double date2); +void iauXy06(double date1, double date2, double *x, double *y); +void iauXys00a(double date1, double date2, + double *x, double *y, double *s); +void iauXys00b(double date1, double date2, + double *x, double *y, double *s); +void iauXys06a(double date1, double date2, + double *x, double *y, double *s); + +/* Astronomy/RotationAndTime */ +double iauEe00(double date1, double date2, double epsa, double dpsi); +double iauEe00a(double date1, double date2); +double iauEe00b(double date1, double date2); +double iauEe06a(double date1, double date2); +double iauEect00(double date1, double date2); +double iauEqeq94(double date1, double date2); +double iauEra00(double dj1, double dj2); +double iauGmst00(double uta, double utb, double tta, double ttb); +double iauGmst06(double uta, double utb, double tta, double ttb); +double iauGmst82(double dj1, double dj2); +double iauGst00a(double uta, double utb, double tta, double ttb); +double iauGst00b(double uta, double utb); +double iauGst06(double uta, double utb, double tta, double ttb, + double rnpb[3][3]); +double iauGst06a(double uta, double utb, double tta, double ttb); +double iauGst94(double uta, double utb); + +/* Astronomy/SpaceMotion */ +int iauPvstar(double pv[2][3], double *ra, double *dec, + double *pmr, double *pmd, double *px, double *rv); +int iauStarpv(double ra, double dec, + double pmr, double pmd, double px, double rv, + double pv[2][3]); + +/* Astronomy/StarCatalogs */ + +void iauFk425(double r1950, double d1950, + double dr1950, double dd1950, + double p1950, double v1950, + double *r2000, double *d2000, + double *dr2000, double *dd2000, + double *p2000, double *v2000); +void iauFk45z(double r1950, double d1950, double bepoch, + double *r2000, double *d2000); +void iauFk524(double r2000, double d2000, + double dr2000, double dd2000, + double p2000, double v2000, + double *r1950, double *d1950, + double *dr1950, double *dd1950, + double *p1950, double *v1950); +void iauFk52h(double r5, double d5, + double dr5, double dd5, double px5, double rv5, + double *rh, double *dh, + double *drh, double *ddh, double *pxh, double *rvh); +void iauFk54z(double r2000, double d2000, double bepoch, + double *r1950, double *d1950, + double *dr1950, double *dd1950); +void iauFk5hip(double r5h[3][3], double s5h[3]); +void iauFk5hz(double r5, double d5, double date1, double date2, + double *rh, double *dh); +void iauH2fk5(double rh, double dh, + double drh, double ddh, double pxh, double rvh, + double *r5, double *d5, + double *dr5, double *dd5, double *px5, double *rv5); +void iauHfk5z(double rh, double dh, double date1, double date2, + double *r5, double *d5, double *dr5, double *dd5); +int iauStarpm(double ra1, double dec1, + double pmr1, double pmd1, double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, + double *pmr2, double *pmd2, double *px2, double *rv2); + +/* Astronomy/EclipticCoordinates */ +void iauEceq06(double date1, double date2, double dl, double db, + double *dr, double *dd); +void iauEcm06(double date1, double date2, double rm[3][3]); +void iauEqec06(double date1, double date2, double dr, double dd, + double *dl, double *db); +void iauLteceq(double epj, double dl, double db, double *dr, double *dd); +void iauLtecm(double epj, double rm[3][3]); +void iauLteqec(double epj, double dr, double dd, double *dl, double *db); + +/* Astronomy/GalacticCoordinates */ +void iauG2icrs(double dl, double db, double *dr, double *dd); +void iauIcrs2g(double dr, double dd, double *dl, double *db); + +/* Astronomy/GeodeticGeocentric */ +int iauEform(int n, double *a, double *f); +int iauGc2gd(int n, double xyz[3], + double *elong, double *phi, double *height); +int iauGc2gde(double a, double f, double xyz[3], + double *elong, double *phi, double *height); +int iauGd2gc(int n, double elong, double phi, double height, + double xyz[3]); +int iauGd2gce(double a, double f, + double elong, double phi, double height, double xyz[3]); + +/* Astronomy/Timescales */ +int iauD2dtf(const char *scale, int ndp, double d1, double d2, + int *iy, int *im, int *id, int ihmsf[4]); +int iauDat(int iy, int im, int id, double fd, double *deltat); +double iauDtdb(double date1, double date2, + double ut, double elong, double u, double v); +int iauDtf2d(const char *scale, int iy, int im, int id, + int ihr, int imn, double sec, double *d1, double *d2); +int iauTaitt(double tai1, double tai2, double *tt1, double *tt2); +int iauTaiut1(double tai1, double tai2, double dta, + double *ut11, double *ut12); +int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2); +int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2); +int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2); +int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2); +int iauTdbtt(double tdb1, double tdb2, double dtr, + double *tt1, double *tt2); +int iauTttai(double tt1, double tt2, double *tai1, double *tai2); +int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2); +int iauTttdb(double tt1, double tt2, double dtr, + double *tdb1, double *tdb2); +int iauTtut1(double tt1, double tt2, double dt, + double *ut11, double *ut12); +int iauUt1tai(double ut11, double ut12, double dta, + double *tai1, double *tai2); +int iauUt1tt(double ut11, double ut12, double dt, + double *tt1, double *tt2); +int iauUt1utc(double ut11, double ut12, double dut1, + double *utc1, double *utc2); +int iauUtctai(double utc1, double utc2, double *tai1, double *tai2); +int iauUtcut1(double utc1, double utc2, double dut1, + double *ut11, double *ut12); + +/* Astronomy/HorizonEquatorial */ +void iauAe2hd(double az, double el, double phi, + double *ha, double *dec); +void iauHd2ae(double ha, double dec, double phi, + double *az, double *el); +double iauHd2pa(double ha, double dec, double phi); + +/* Astronomy/Gnomonic */ +int iauTpors(double xi, double eta, double a, double b, + double *a01, double *b01, double *a02, double *b02); +int iauTporv(double xi, double eta, double v[3], + double v01[3], double v02[3]); +void iauTpsts(double xi, double eta, double a0, double b0, + double *a, double *b); +void iauTpstv(double xi, double eta, double v0[3], double v[3]); +int iauTpxes(double a, double b, double a0, double b0, + double *xi, double *eta); +int iauTpxev(double v[3], double v0[3], double *xi, double *eta); + +/* VectorMatrix/AngleOps */ +void iauA2af(int ndp, double angle, char *sign, int idmsf[4]); +void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4]); +int iauAf2a(char s, int ideg, int iamin, double asec, double *rad); +double iauAnp(double a); +double iauAnpm(double a); +void iauD2tf(int ndp, double days, char *sign, int ihmsf[4]); +int iauTf2a(char s, int ihour, int imin, double sec, double *rad); +int iauTf2d(char s, int ihour, int imin, double sec, double *days); + +/* VectorMatrix/BuildRotations */ +void iauRx(double phi, double r[3][3]); +void iauRy(double theta, double r[3][3]); +void iauRz(double psi, double r[3][3]); + +/* VectorMatrix/CopyExtendExtract */ +void iauCp(double p[3], double c[3]); +void iauCpv(double pv[2][3], double c[2][3]); +void iauCr(double r[3][3], double c[3][3]); +void iauP2pv(double p[3], double pv[2][3]); +void iauPv2p(double pv[2][3], double p[3]); + +/* VectorMatrix/Initialization */ +void iauIr(double r[3][3]); +void iauZp(double p[3]); +void iauZpv(double pv[2][3]); +void iauZr(double r[3][3]); + +/* VectorMatrix/MatrixOps */ +void iauRxr(double a[3][3], double b[3][3], double atb[3][3]); +void iauTr(double r[3][3], double rt[3][3]); + +/* VectorMatrix/MatrixVectorProducts */ +void iauRxp(double r[3][3], double p[3], double rp[3]); +void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3]); +void iauTrxp(double r[3][3], double p[3], double trp[3]); +void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]); + +/* VectorMatrix/RotationVectors */ +void iauRm2v(double r[3][3], double w[3]); +void iauRv2m(double w[3], double r[3][3]); + +/* VectorMatrix/SeparationAndAngle */ +double iauPap(double a[3], double b[3]); +double iauPas(double al, double ap, double bl, double bp); +double iauSepp(double a[3], double b[3]); +double iauSeps(double al, double ap, double bl, double bp); + +/* VectorMatrix/SphericalCartesian */ +void iauC2s(double p[3], double *theta, double *phi); +void iauP2s(double p[3], double *theta, double *phi, double *r); +void iauPv2s(double pv[2][3], + double *theta, double *phi, double *r, + double *td, double *pd, double *rd); +void iauS2c(double theta, double phi, double c[3]); +void iauS2p(double theta, double phi, double r, double p[3]); +void iauS2pv(double theta, double phi, double r, + double td, double pd, double rd, + double pv[2][3]); + +/* VectorMatrix/VectorOps */ +double iauPdp(double a[3], double b[3]); +double iauPm(double p[3]); +void iauPmp(double a[3], double b[3], double amb[3]); +void iauPn(double p[3], double *r, double u[3]); +void iauPpp(double a[3], double b[3], double apb[3]); +void iauPpsp(double a[3], double s, double b[3], double apsb[3]); +void iauPvdpv(double a[2][3], double b[2][3], double adb[2]); +void iauPvm(double pv[2][3], double *r, double *s); +void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3]); +void iauPvppv(double a[2][3], double b[2][3], double apb[2][3]); +void iauPvu(double dt, double pv[2][3], double upv[2][3]); +void iauPvup(double dt, double pv[2][3], double p[3]); +void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3]); +void iauPxp(double a[3], double b[3], double axb[3]); +void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]); +void iauSxp(double s, double p[3], double sp[3]); +void iauSxpv(double s, double pv[2][3], double spv[2][3]); + +#ifdef __cplusplus +} +#endif + +#endif + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ diff --git a/20200721/c/src/sofam.h b/20200721/c/src/sofam.h new file mode 100644 index 0000000..be6b7a7 --- /dev/null +++ b/20200721/c/src/sofam.h @@ -0,0 +1,251 @@ +#ifndef SOFAMHDEF +#define SOFAMHDEF + +/* +** - - - - - - - - +** s o f a m . h +** - - - - - - - - +** +** Macros used by SOFA library. +** +** This file is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Please note that the constants defined below are to be used only in +** the context of the SOFA software, and have no other official IAU +** status. In addition, self consistency is not guaranteed. +** +** This revision: 2020 June 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +/* Star-independent astrometry parameters */ +typedef struct { + double pmt; /* PM time interval (SSB, Julian years) */ + double eb[3]; /* SSB to observer (vector, au) */ + double eh[3]; /* Sun to observer (unit vector) */ + double em; /* distance from Sun to observer (au) */ + double v[3]; /* barycentric observer velocity (vector, c) */ + double bm1; /* sqrt(1-|v|^2): reciprocal of Lorenz factor */ + double bpn[3][3]; /* bias-precession-nutation matrix */ + double along; /* longitude + s' + dERA(DUT) (radians) */ + double phi; /* geodetic latitude (radians) */ + double xpl; /* polar motion xp wrt local meridian (radians) */ + double ypl; /* polar motion yp wrt local meridian (radians) */ + double sphi; /* sine of geodetic latitude */ + double cphi; /* cosine of geodetic latitude */ + double diurab; /* magnitude of diurnal aberration vector */ + double eral; /* "local" Earth rotation angle (radians) */ + double refa; /* refraction constant A (radians) */ + double refb; /* refraction constant B (radians) */ +} iauASTROM; +/* (Vectors eb, eh, em and v are all with respect to BCRS axes.) */ + +/* Body parameters for light deflection */ +typedef struct { + double bm; /* mass of the body (solar masses) */ + double dl; /* deflection limiter (radians^2/2) */ + double pv[2][3]; /* barycentric PV of the body (au, au/day) */ +} iauLDBODY; + +/* Pi */ +#define DPI (3.141592653589793238462643) + +/* 2Pi */ +#define D2PI (6.283185307179586476925287) + +/* Radians to degrees */ +#define DR2D (57.29577951308232087679815) + +/* Degrees to radians */ +#define DD2R (1.745329251994329576923691e-2) + +/* Radians to arcseconds */ +#define DR2AS (206264.8062470963551564734) + +/* Arcseconds to radians */ +#define DAS2R (4.848136811095359935899141e-6) + +/* Seconds of time to radians */ +#define DS2R (7.272205216643039903848712e-5) + +/* Arcseconds in a full circle */ +#define TURNAS (1296000.0) + +/* Milliarcseconds to radians */ +#define DMAS2R (DAS2R / 1e3) + +/* Length of tropical year B1900 (days) */ +#define DTY (365.242198781) + +/* Seconds per day. */ +#define DAYSEC (86400.0) + +/* Days per Julian year */ +#define DJY (365.25) + +/* Days per Julian century */ +#define DJC (36525.0) + +/* Days per Julian millennium */ +#define DJM (365250.0) + +/* Reference epoch (J2000.0), Julian Date */ +#define DJ00 (2451545.0) + +/* Julian Date of Modified Julian Date zero */ +#define DJM0 (2400000.5) + +/* Reference epoch (J2000.0), Modified Julian Date */ +#define DJM00 (51544.5) + +/* 1977 Jan 1.0 as MJD */ +#define DJM77 (43144.0) + +/* TT minus TAI (s) */ +#define TTMTAI (32.184) + +/* Astronomical unit (m, IAU 2012) */ +#define DAU (149597870.7e3) + +/* Speed of light (m/s) */ +#define CMPS 299792458.0 + +/* Light time for 1 au (s) */ +#define AULT (DAU/CMPS) + +/* Speed of light (au per day) */ +#define DC (DAYSEC/AULT) + +/* L_G = 1 - d(TT)/d(TCG) */ +#define ELG (6.969290134e-10) + +/* L_B = 1 - d(TDB)/d(TCB), and TDB (s) at TAI 1977/1/1.0 */ +#define ELB (1.550519768e-8) +#define TDB0 (-6.55e-5) + +/* Schwarzschild radius of the Sun (au) */ +/* = 2 * 1.32712440041e20 / (2.99792458e8)^2 / 1.49597870700e11 */ +#define SRS 1.97412574336e-8 + +/* dint(A) - truncate to nearest whole number towards zero (double) */ +#define dint(A) ((A)<0.0?ceil(A):floor(A)) + +/* dnint(A) - round to nearest whole number (double) */ +#define dnint(A) (fabs(A)<0.5?0.0\ + :((A)<0.0?ceil((A)-0.5):floor((A)+0.5))) + +/* dsign(A,B) - magnitude of A with sign of B (double) */ +#define dsign(A,B) ((B)<0.0?-fabs(A):fabs(A)) + +/* max(A,B) - larger (most +ve) of two numbers (generic) */ +#define gmax(A,B) (((A)>(B))?(A):(B)) + +/* min(A,B) - smaller (least +ve) of two numbers (generic) */ +#define gmin(A,B) (((A)<(B))?(A):(B)) + +/* Reference ellipsoids */ +#define WGS84 1 +#define GRS80 2 +#define WGS72 3 + +#endif + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ diff --git a/20200721/c/src/sp00.c b/20200721/c/src/sp00.c new file mode 100644 index 0000000..c0987c4 --- /dev/null +++ b/20200721/c/src/sp00.c @@ -0,0 +1,168 @@ +#include "sofa.h" + +double iauSp00(double date1, double date2) +/* +** - - - - - - - - +** i a u S p 0 0 +** - - - - - - - - +** +** The TIO locator s', positioning the Terrestrial Intermediate Origin +** on the equator of the Celestial Intermediate Pole. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned (function value): +** double the TIO locator s' in radians (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The TIO locator s' is obtained from polar motion observations by +** numerical integration, and so is in essence unpredictable. +** However, it is dominated by a secular drift of about +** 47 microarcseconds per century, which is the approximation +** evaluated by the present function. +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double t, sp; + + +/* Interval between fundamental epoch J2000.0 and current date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Approximate s'. */ + sp = -47e-6 * t * DAS2R; + + return sp; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/starpm.c b/20200721/c/src/starpm.c new file mode 100644 index 0000000..db6235c --- /dev/null +++ b/20200721/c/src/starpm.c @@ -0,0 +1,255 @@ +#include "sofa.h" + +int iauStarpm(double ra1, double dec1, + double pmr1, double pmd1, double px1, double rv1, + double ep1a, double ep1b, double ep2a, double ep2b, + double *ra2, double *dec2, + double *pmr2, double *pmd2, double *px2, double *rv2) +/* +** - - - - - - - - - - +** i a u S t a r p m +** - - - - - - - - - - +** +** Star proper motion: update star catalog data for space motion. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** ra1 double right ascension (radians), before +** dec1 double declination (radians), before +** pmr1 double RA proper motion (radians/year), before +** pmd1 double Dec proper motion (radians/year), before +** px1 double parallax (arcseconds), before +** rv1 double radial velocity (km/s, +ve = receding), before +** ep1a double "before" epoch, part A (Note 1) +** ep1b double "before" epoch, part B (Note 1) +** ep2a double "after" epoch, part A (Note 1) +** ep2b double "after" epoch, part B (Note 1) +** +** Returned: +** ra2 double right ascension (radians), after +** dec2 double declination (radians), after +** pmr2 double RA proper motion (radians/year), after +** pmd2 double Dec proper motion (radians/year), after +** px2 double parallax (arcseconds), after +** rv2 double radial velocity (km/s, +ve = receding), after +** +** Returned (function value): +** int status: +** -1 = system error (should not occur) +** 0 = no warnings or errors +** 1 = distance overridden (Note 6) +** 2 = excessive velocity (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above warnings +** +** Notes: +** +** 1) The starting and ending TDB dates ep1a+ep1b and ep2a+ep2b are +** Julian Dates, apportioned in any convenient way between the two +** parts (A and B). For example, JD(TDB)=2450123.7 could be +** expressed in any of these ways, among others: +** +** epna epnb +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** The proper motions are the rate of change of the right ascension +** and declination at the catalog epoch and are in radians per TDB +** Julian year. +** +** The parallax and radial velocity are in the same frame. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, +** is assumed. +** +** 6) An extremely small (or zero or negative) parallax is interpreted +** to mean that the object is on the "celestial sphere", the radius +** of which is an arbitrary (large) value (see the iauStarpv +** function for the value used). When the distance is overridden in +** this way, the status, initially zero, has 1 added to it. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX in the function iauStarpv), it is arbitrarily set +** to zero. When this action occurs, 2 is added to the status. +** +** 8) The relativistic adjustment carried out in the iauStarpv function +** involves an iterative calculation. If the process fails to +** converge within a set number of iterations, 4 is added to the +** status. +** +** Called: +** iauStarpv star catalog data to space motion pv-vector +** iauPvu update a pv-vector +** iauPdp scalar product of two p-vectors +** iauPvstar space motion pv-vector to star catalog data +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double pv1[2][3], tl1, dt, pv[2][3], r2, rdv, v2, c2mv2, tl2, + pv2[2][3]; + int j1, j2, j; + + +/* RA,Dec etc. at the "before" epoch to space motion pv-vector. */ + j1 = iauStarpv(ra1, dec1, pmr1, pmd1, px1, rv1, pv1); + +/* Light time when observed (days). */ + tl1 = iauPm(pv1[0]) / DC; + +/* Time interval, "before" to "after" (days). */ + dt = (ep2a - ep1a) + (ep2b - ep1b); + +/* Move star along track from the "before" observed position to the */ +/* "after" geometric position. */ + iauPvu(dt + tl1, pv1, pv); + +/* From this geometric position, deduce the observed light time (days) */ +/* at the "after" epoch (with theoretically unneccessary error check). */ + r2 = iauPdp(pv[0], pv[0]); + rdv = iauPdp(pv[0], pv[1]); + v2 = iauPdp(pv[1], pv[1]); + c2mv2 = DC*DC - v2; + if (c2mv2 <= 0) return -1; + tl2 = (-rdv + sqrt(rdv*rdv + c2mv2*r2)) / c2mv2; + +/* Move the position along track from the observed place at the */ +/* "before" epoch to the observed place at the "after" epoch. */ + iauPvu(dt + (tl1 - tl2), pv1, pv2); + +/* Space motion pv-vector to RA,Dec etc. at the "after" epoch. */ + j2 = iauPvstar(pv2, ra2, dec2, pmr2, pmd2, px2, rv2); + +/* Final status. */ + j = (j2 == 0) ? j1 : -1; + + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/starpv.c b/20200721/c/src/starpv.c new file mode 100644 index 0000000..e3008e4 --- /dev/null +++ b/20200721/c/src/starpv.c @@ -0,0 +1,315 @@ +#include "sofa.h" + +int iauStarpv(double ra, double dec, + double pmr, double pmd, double px, double rv, + double pv[2][3]) +/* +** - - - - - - - - - - +** i a u S t a r p v +** - - - - - - - - - - +** +** Convert star catalog coordinates to position+velocity vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given (Note 1): +** ra double right ascension (radians) +** dec double declination (radians) +** pmr double RA proper motion (radians/year) +** pmd double Dec proper motion (radians/year) +** px double parallax (arcseconds) +** rv double radial velocity (km/s, positive = receding) +** +** Returned (Note 2): +** pv double[2][3] pv-vector (au, au/day) +** +** Returned (function value): +** int status: +** 0 = no warnings +** 1 = distance overridden (Note 6) +** 2 = excessive speed (Note 7) +** 4 = solution didn't converge (Note 8) +** else = binary logical OR of the above +** +** Notes: +** +** 1) The star data accepted by this function are "observables" for an +** imaginary observer at the solar-system barycenter. Proper motion +** and radial velocity are, strictly, in terms of barycentric +** coordinate time, TCB. For most practical applications, it is +** permissible to neglect the distinction between TCB and ordinary +** "proper" time on Earth (TT/TAI). The result will, as a rule, be +** limited by the intrinsic accuracy of the proper-motion and +** radial-velocity data; moreover, the pv-vector is likely to be +** merely an intermediate result, so that a change of time unit +** would cancel out overall. +** +** In accordance with normal star-catalog conventions, the object's +** right ascension and declination are freed from the effects of +** secular aberration. The frame, which is aligned to the catalog +** equator and equinox, is Lorentzian and centered on the SSB. +** +** 2) The resulting position and velocity pv-vector is with respect to +** the same frame and, like the catalog coordinates, is freed from +** the effects of secular aberration. Should the "coordinate +** direction", where the object was located at the catalog epoch, be +** required, it may be obtained by calculating the magnitude of the +** position vector pv[0][0-2] dividing by the speed of light in +** au/day to give the light-time, and then multiplying the space +** velocity pv[1][0-2] by this light-time and adding the result to +** pv[0][0-2]. +** +** Summarizing, the pv-vector returned is for most stars almost +** identical to the result of applying the standard geometrical +** "space motion" transformation. The differences, which are the +** subject of the Stumpff paper referenced below, are: +** +** (i) In stars with significant radial velocity and proper motion, +** the constantly changing light-time distorts the apparent proper +** motion. Note that this is a classical, not a relativistic, +** effect. +** +** (ii) The transformation complies with special relativity. +** +** 3) Care is needed with units. The star coordinates are in radians +** and the proper motions in radians per Julian year, but the +** parallax is in arcseconds; the radial velocity is in km/s, but +** the pv-vector result is in au and au/day. +** +** 4) The RA proper motion is in terms of coordinate angle, not true +** angle. If the catalog uses arcseconds for both RA and Dec proper +** motions, the RA proper motion will need to be divided by cos(Dec) +** before use. +** +** 5) Straight-line motion at constant speed, in the inertial frame, +** is assumed. +** +** 6) An extremely small (or zero or negative) parallax is interpreted +** to mean that the object is on the "celestial sphere", the radius +** of which is an arbitrary (large) value (see the constant PXMIN). +** When the distance is overridden in this way, the status, +** initially zero, has 1 added to it. +** +** 7) If the space velocity is a significant fraction of c (see the +** constant VMAX), it is arbitrarily set to zero. When this action +** occurs, 2 is added to the status. +** +** 8) The relativistic adjustment involves an iterative calculation. +** If the process fails to converge within a set number (IMAX) of +** iterations, 4 is added to the status. +** +** 9) The inverse transformation is performed by the function +** iauPvstar. +** +** Called: +** iauS2pv spherical coordinates to pv-vector +** iauPm modulus of p-vector +** iauZp zero p-vector +** iauPn decompose p-vector into modulus and direction +** iauPdp scalar product of two p-vectors +** iauSxp multiply p-vector by scalar +** iauPmp p-vector minus p-vector +** iauPpp p-vector plus p-vector +** +** Reference: +** +** Stumpff, P., 1985, Astron.Astrophys. 144, 232-240. +** +** This revision: 2017 March 16 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ +/* Smallest allowed parallax */ + static const double PXMIN = 1e-7; + +/* Largest allowed speed (fraction of c) */ + static const double VMAX = 0.5; + +/* Maximum number of iterations for relativistic solution */ + static const int IMAX = 100; + + int i, iwarn; + double w, r, rd, rad, decd, v, x[3], usr[3], ust[3], + vsr, vst, betst, betsr, bett, betr, + dd, ddel, ur[3], ut[3], + d = 0.0, del = 0.0, /* to prevent */ + odd = 0.0, oddel = 0.0, /* compiler */ + od = 0.0, odel = 0.0; /* warnings */ + + +/* Distance (au). */ + if (px >= PXMIN) { + w = px; + iwarn = 0; + } else { + w = PXMIN; + iwarn = 1; + } + r = DR2AS / w; + +/* Radial velocity (au/day). */ + rd = DAYSEC * rv * 1e3 / DAU; + +/* Proper motion (radian/day). */ + rad = pmr / DJY; + decd = pmd / DJY; + +/* To pv-vector (au,au/day). */ + iauS2pv(ra, dec, r, rad, decd, rd, pv); + +/* If excessive velocity, arbitrarily set it to zero. */ + v = iauPm(pv[1]); + if (v / DC > VMAX) { + iauZp(pv[1]); + iwarn += 2; + } + +/* Isolate the radial component of the velocity (au/day). */ + iauPn(pv[0], &w, x); + vsr = iauPdp(x, pv[1]); + iauSxp(vsr, x, usr); + +/* Isolate the transverse component of the velocity (au/day). */ + iauPmp(pv[1], usr, ust); + vst = iauPm(ust); + +/* Special-relativity dimensionless parameters. */ + betsr = vsr / DC; + betst = vst / DC; + +/* Determine the inertial-to-observed relativistic correction terms. */ + bett = betst; + betr = betsr; + for (i = 0; i < IMAX; i++) { + d = 1.0 + betr; + w = betr*betr + bett*bett; + del = - w / (sqrt(1.0 - w) + 1.0); + betr = d * betsr + del; + bett = d * betst; + if (i > 0) { + dd = fabs(d - od); + ddel = fabs(del - odel); + if ((i > 1) && (dd >= odd) && (ddel >= oddel)) break; + odd = dd; + oddel = ddel; + } + od = d; + odel = del; + } + if (i >= IMAX) iwarn += 4; + +/* Replace observed radial velocity with inertial value. */ + w = (betsr != 0.0) ? d + del / betsr : 1.0; + iauSxp(w, usr, ur); + +/* Replace observed tangential velocity with inertial value. */ + iauSxp(d, ust, ut); + +/* Combine the two to obtain the inertial space velocity. */ + iauPpp(ur, ut, pv[1]); + +/* Return the status. */ + return iwarn; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/sxp.c b/20200721/c/src/sxp.c new file mode 100644 index 0000000..bbb3c50 --- /dev/null +++ b/20200721/c/src/sxp.c @@ -0,0 +1,134 @@ +#include "sofa.h" + +void iauSxp(double s, double p[3], double sp[3]) +/* +** - - - - - - - +** i a u S x p +** - - - - - - - +** +** Multiply a p-vector by a scalar. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s double scalar +** p double[3] p-vector +** +** Returned: +** sp double[3] s * p +** +** Note: +** It is permissible for p and sp to be the same array. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + sp[0] = s * p[0]; + sp[1] = s * p[1]; + sp[2] = s * p[2]; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/sxpv.c b/20200721/c/src/sxpv.c new file mode 100644 index 0000000..1567a60 --- /dev/null +++ b/20200721/c/src/sxpv.c @@ -0,0 +1,135 @@ +#include "sofa.h" + +void iauSxpv(double s, double pv[2][3], double spv[2][3]) +/* +** - - - - - - - - +** i a u S x p v +** - - - - - - - - +** +** Multiply a pv-vector by a scalar. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** s double scalar +** pv double[2][3] pv-vector +** +** Returned: +** spv double[2][3] s * pv +** +** Note: +** It is permissible for pv and spv to be the same array +** +** Called: +** iauS2xpv multiply pv-vector by two scalars +** +** This revision: 2013 August 7 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauS2xpv(s, s, pv, spv); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/t_sofa_c.c b/20200721/c/src/t_sofa_c.c new file mode 100644 index 0000000..c4e701d --- /dev/null +++ b/20200721/c/src/t_sofa_c.c @@ -0,0 +1,10252 @@ +#include +#include + +static int verbose = 0; + +/* +** - - - - - - - - - +** t _ s o f a _ c +** - - - - - - - - - +** +** Validate the SOFA C functions. +** +** Each SOFA function is at least called and a usually quite basic test +** is performed. Successful completion is signalled by a confirming +** message. Failure of a given function or group of functions results +** in error messages. +** +** All messages go to stdout. +** +** This revision: 2020 May 30 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ + +static void viv(int ival, int ivalok, + const char *func, const char *test, int *status) +/* +** - - - - +** v i v +** - - - - +** +** Validate an integer result. +** +** Internal function used by t_sofa_c program. +** +** Given: +** ival int value computed by function under test +** ivalok int correct value +** func char[] name of function under test +** test char[] name of individual test +** +** Given and returned: +** status int set to TRUE if test fails +** +** This revision: 2013 August 7 +*/ +{ + if (ival != ivalok) { + *status = 1; + printf("%s failed: %s want %d got %d\n", + func, test, ivalok, ival); + } else if (verbose) { + printf("%s passed: %s want %d got %d\n", + func, test, ivalok, ival); + } + +} + +static void vvd(double val, double valok, double dval, + const char *func, const char *test, int *status) +/* +** - - - - +** v v d +** - - - - +** +** Validate a double result. +** +** Internal function used by t_sofa_c program. +** +** Given: +** val double value computed by function under test +** valok double expected value +** dval double maximum allowable error +** func char[] name of function under test +** test char[] name of individual test +** +** Given and returned: +** status int set to TRUE if test fails +** +** This revision: 2016 April 21 +*/ +{ + double a, f; /* absolute and fractional error */ + + + a = val - valok; + if (a != 0.0 && fabs(a) > fabs(dval)) { + f = fabs(valok / a); + *status = 1; + printf("%s failed: %s want %.20g got %.20g (1/%.3g)\n", + func, test, valok, val, f); + } else if (verbose) { + printf("%s passed: %s want %.20g got %.20g\n", + func, test, valok, val); + } + +} + +static void t_a2af(int *status) +/* +** - - - - - - - +** t _ a 2 a f +** - - - - - - - +** +** Test iauA2af function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauA2af, viv +** +** This revision: 2013 August 7 +*/ +{ + int idmsf[4]; + char s; + + + iauA2af(4, 2.345, &s, idmsf); + + viv(s, '+', "iauA2af", "s", status); + + viv(idmsf[0], 134, "iauA2af", "0", status); + viv(idmsf[1], 21, "iauA2af", "1", status); + viv(idmsf[2], 30, "iauA2af", "2", status); + viv(idmsf[3], 9706, "iauA2af", "3", status); + +} + +static void t_a2tf(int *status) +/* +** - - - - - - - +** t _ a 2 t f +** - - - - - - - +** +** Test iauA2tf function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauA2tf, viv +** +** This revision: 2013 August 7 +*/ +{ + int ihmsf[4]; + char s; + + + iauA2tf(4, -3.01234, &s, ihmsf); + + viv((int)s, '-', "iauA2tf", "s", status); + + viv(ihmsf[0], 11, "iauA2tf", "0", status); + viv(ihmsf[1], 30, "iauA2tf", "1", status); + viv(ihmsf[2], 22, "iauA2tf", "2", status); + viv(ihmsf[3], 6484, "iauA2tf", "3", status); + +} + +static void t_ab(int *status) +/* +** - - - - - +** t _ a b +** - - - - - +** +** Test iauAb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAb, vvd +** +** This revision: 2013 October 1 +*/ +{ + double pnat[3], v[3], s, bm1, ppr[3]; + + + pnat[0] = -0.76321968546737951; + pnat[1] = -0.60869453983060384; + pnat[2] = -0.21676408580639883; + v[0] = 2.1044018893653786e-5; + v[1] = -8.9108923304429319e-5; + v[2] = -3.8633714797716569e-5; + s = 0.99980921395708788; + bm1 = 0.99999999506209258; + + iauAb(pnat, v, s, bm1, ppr); + + vvd(ppr[0], -0.7631631094219556269, 1e-12, "iauAb", "1", status); + vvd(ppr[1], -0.6087553082505590832, 1e-12, "iauAb", "2", status); + vvd(ppr[2], -0.2167926269368471279, 1e-12, "iauAb", "3", status); + +} + +static void t_ae2hd(int *status) +/* +** - - - - - - - - +** t _ a e 2 h d +** - - - - - - - - +** +** Test iauAe2hd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAe2hd and vvd +** +** This revision: 2017 October 21 +*/ +{ + double a, e, p, h, d; + + + a = 5.5; + e = 1.1; + p = 0.7; + + iauAe2hd(a, e, p, &h, &d); + + vvd(h, 0.5933291115507309663, 1e-14, "iauAe2hd", "h", status); + vvd(d, 0.9613934761647817620, 1e-14, "iauAe2hd", "d", status); + +} + +static void t_af2a(int *status) +/* +** - - - - - - - +** t _ a f 2 a +** - - - - - - - +** +** Test iauAf2a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAf2a, viv +** +** This revision: 2013 August 7 +*/ +{ + double a; + int j; + + + j = iauAf2a('-', 45, 13, 27.2, &a); + + vvd(a, -0.7893115794313644842, 1e-12, "iauAf2a", "a", status); + viv(j, 0, "iauAf2a", "j", status); + +} + +static void t_anp(int *status) +/* +** - - - - - - +** t _ a n p +** - - - - - - +** +** Test iauAnp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAnp, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauAnp(-0.1), 6.183185307179586477, 1e-12, "iauAnp", "", status); +} + +static void t_anpm(int *status) +/* +** - - - - - - - +** t _ a n p m +** - - - - - - - +** +** Test iauAnpm function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAnpm, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauAnpm(-4.0), 2.283185307179586477, 1e-12, "iauAnpm", "", status); +} + +static void t_apcg(int *status) +/* +** - - - - - - - +** t _ a p c g +** - - - - - - - +** +** Test iauApcg function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApcg, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, ebpv[2][3], ehp[3]; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + ebpv[0][0] = 0.901310875; + ebpv[0][1] = -0.417402664; + ebpv[0][2] = -0.180982288; + ebpv[1][0] = 0.00742727954; + ebpv[1][1] = 0.0140507459; + ebpv[1][2] = 0.00609045792; + ehp[0] = 0.903358544; + ehp[1] = -0.415395237; + ehp[2] = -0.180084014; + + iauApcg(date1, date2, ebpv, ehp, &astrom); + + vvd(astrom.pmt, 12.65133794027378508, 1e-11, + "iauApcg", "pmt", status); + vvd(astrom.eb[0], 0.901310875, 1e-12, + "iauApcg", "eb(1)", status); + vvd(astrom.eb[1], -0.417402664, 1e-12, + "iauApcg", "eb(2)", status); + vvd(astrom.eb[2], -0.180982288, 1e-12, + "iauApcg", "eb(3)", status); + vvd(astrom.eh[0], 0.8940025429324143045, 1e-12, + "iauApcg", "eh(1)", status); + vvd(astrom.eh[1], -0.4110930268679817955, 1e-12, + "iauApcg", "eh(2)", status); + vvd(astrom.eh[2], -0.1782189004872870264, 1e-12, + "iauApcg", "eh(3)", status); + vvd(astrom.em, 1.010465295811013146, 1e-12, + "iauApcg", "em", status); + vvd(astrom.v[0], 0.4289638913597693554e-4, 1e-16, + "iauApcg", "v(1)", status); + vvd(astrom.v[1], 0.8115034051581320575e-4, 1e-16, + "iauApcg", "v(2)", status); + vvd(astrom.v[2], 0.3517555136380563427e-4, 1e-16, + "iauApcg", "v(3)", status); + vvd(astrom.bm1, 0.9999999951686012981, 1e-12, + "iauApcg", "bm1", status); + vvd(astrom.bpn[0][0], 1.0, 0.0, + "iauApcg", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.0, 0.0, + "iauApcg", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.0, 0.0, + "iauApcg", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], 0.0, 0.0, + "iauApcg", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 1.0, 0.0, + "iauApcg", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], 0.0, 0.0, + "iauApcg", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], 0.0, 0.0, + "iauApcg", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.0, 0.0, + "iauApcg", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 1.0, 0.0, + "iauApcg", "bpn(3,3)", status); + +} + +static void t_apcg13(int *status) +/* +** - - - - - - - - - +** t _ a p c g 1 3 +** - - - - - - - - - +** +** Test iauApcg13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApcg13, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + + iauApcg13(date1, date2, &astrom); + + vvd(astrom.pmt, 12.65133794027378508, 1e-11, + "iauApcg13", "pmt", status); + vvd(astrom.eb[0], 0.9013108747340644755, 1e-12, + "iauApcg13", "eb(1)", status); + vvd(astrom.eb[1], -0.4174026640406119957, 1e-12, + "iauApcg13", "eb(2)", status); + vvd(astrom.eb[2], -0.1809822877867817771, 1e-12, + "iauApcg13", "eb(3)", status); + vvd(astrom.eh[0], 0.8940025429255499549, 1e-12, + "iauApcg13", "eh(1)", status); + vvd(astrom.eh[1], -0.4110930268331896318, 1e-12, + "iauApcg13", "eh(2)", status); + vvd(astrom.eh[2], -0.1782189006019749850, 1e-12, + "iauApcg13", "eh(3)", status); + vvd(astrom.em, 1.010465295964664178, 1e-12, + "iauApcg13", "em", status); + vvd(astrom.v[0], 0.4289638912941341125e-4, 1e-16, + "iauApcg13", "v(1)", status); + vvd(astrom.v[1], 0.8115034032405042132e-4, 1e-16, + "iauApcg13", "v(2)", status); + vvd(astrom.v[2], 0.3517555135536470279e-4, 1e-16, + "iauApcg13", "v(3)", status); + vvd(astrom.bm1, 0.9999999951686013142, 1e-12, + "iauApcg13", "bm1", status); + vvd(astrom.bpn[0][0], 1.0, 0.0, + "iauApcg13", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.0, 0.0, + "iauApcg13", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.0, 0.0, + "iauApcg13", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], 0.0, 0.0, + "iauApcg13", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 1.0, 0.0, + "iauApcg13", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], 0.0, 0.0, + "iauApcg13", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], 0.0, 0.0, + "iauApcg13", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.0, 0.0, + "iauApcg13", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 1.0, 0.0, + "iauApcg13", "bpn(3,3)", status); + +} + +static void t_apci(int *status) +/* +** - - - - - - - +** t _ a p c i +** - - - - - - - +** +** Test iauApci function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, ebpv[2][3], ehp[3], x, y, s; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + ebpv[0][0] = 0.901310875; + ebpv[0][1] = -0.417402664; + ebpv[0][2] = -0.180982288; + ebpv[1][0] = 0.00742727954; + ebpv[1][1] = 0.0140507459; + ebpv[1][2] = 0.00609045792; + ehp[0] = 0.903358544; + ehp[1] = -0.415395237; + ehp[2] = -0.180084014; + x = 0.0013122272; + y = -2.92808623e-5; + s = 3.05749468e-8; + + iauApci(date1, date2, ebpv, ehp, x, y, s, &astrom); + + vvd(astrom.pmt, 12.65133794027378508, 1e-11, + "iauApci", "pmt", status); + vvd(astrom.eb[0], 0.901310875, 1e-12, + "iauApci", "eb(1)", status); + vvd(astrom.eb[1], -0.417402664, 1e-12, + "iauApci", "eb(2)", status); + vvd(astrom.eb[2], -0.180982288, 1e-12, + "iauApci", "eb(3)", status); + vvd(astrom.eh[0], 0.8940025429324143045, 1e-12, + "iauApci", "eh(1)", status); + vvd(astrom.eh[1], -0.4110930268679817955, 1e-12, + "iauApci", "eh(2)", status); + vvd(astrom.eh[2], -0.1782189004872870264, 1e-12, + "iauApci", "eh(3)", status); + vvd(astrom.em, 1.010465295811013146, 1e-12, + "iauApci", "em", status); + vvd(astrom.v[0], 0.4289638913597693554e-4, 1e-16, + "iauApci", "v(1)", status); + vvd(astrom.v[1], 0.8115034051581320575e-4, 1e-16, + "iauApci", "v(2)", status); + vvd(astrom.v[2], 0.3517555136380563427e-4, 1e-16, + "iauApci", "v(3)", status); + vvd(astrom.bm1, 0.9999999951686012981, 1e-12, + "iauApci", "bm1", status); + vvd(astrom.bpn[0][0], 0.9999991390295159156, 1e-12, + "iauApci", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.4978650072505016932e-7, 1e-12, + "iauApci", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.1312227200000000000e-2, 1e-12, + "iauApci", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], -0.1136336653771609630e-7, 1e-12, + "iauApci", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 0.9999999995713154868, 1e-12, + "iauApci", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], -0.2928086230000000000e-4, 1e-12, + "iauApci", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], -0.1312227200895260194e-2, 1e-12, + "iauApci", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.2928082217872315680e-4, 1e-12, + "iauApci", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 0.9999991386008323373, 1e-12, + "iauApci", "bpn(3,3)", status); + +} + +static void t_apci13(int *status) +/* +** - - - - - - - - - +** t _ a p c i 1 3 +** - - - - - - - - - +** +** Test iauApci13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, eo; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + + iauApci13(date1, date2, &astrom, &eo); + + vvd(astrom.pmt, 12.65133794027378508, 1e-11, + "iauApci13", "pmt", status); + vvd(astrom.eb[0], 0.9013108747340644755, 1e-12, + "iauApci13", "eb(1)", status); + vvd(astrom.eb[1], -0.4174026640406119957, 1e-12, + "iauApci13", "eb(2)", status); + vvd(astrom.eb[2], -0.1809822877867817771, 1e-12, + "iauApci13", "eb(3)", status); + vvd(astrom.eh[0], 0.8940025429255499549, 1e-12, + "iauApci13", "eh(1)", status); + vvd(astrom.eh[1], -0.4110930268331896318, 1e-12, + "iauApci13", "eh(2)", status); + vvd(astrom.eh[2], -0.1782189006019749850, 1e-12, + "iauApci13", "eh(3)", status); + vvd(astrom.em, 1.010465295964664178, 1e-12, + "iauApci13", "em", status); + vvd(astrom.v[0], 0.4289638912941341125e-4, 1e-16, + "iauApci13", "v(1)", status); + vvd(astrom.v[1], 0.8115034032405042132e-4, 1e-16, + "iauApci13", "v(2)", status); + vvd(astrom.v[2], 0.3517555135536470279e-4, 1e-16, + "iauApci13", "v(3)", status); + vvd(astrom.bm1, 0.9999999951686013142, 1e-12, + "iauApci13", "bm1", status); + vvd(astrom.bpn[0][0], 0.9999992060376761710, 1e-12, + "iauApci13", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.4124244860106037157e-7, 1e-12, + "iauApci13", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.1260128571051709670e-2, 1e-12, + "iauApci13", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], -0.1282291987222130690e-7, 1e-12, + "iauApci13", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 0.9999999997456835325, 1e-12, + "iauApci13", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], -0.2255288829420524935e-4, 1e-12, + "iauApci13", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], -0.1260128571661374559e-2, 1e-12, + "iauApci13", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.2255285422953395494e-4, 1e-12, + "iauApci13", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 0.9999992057833604343, 1e-12, + "iauApci13", "bpn(3,3)", status); + vvd(eo, -0.2900618712657375647e-2, 1e-12, + "iauApci13", "eo", status); + +} + +static void t_apco(int *status) +/* +** - - - - - - - +** t _ a p c o +** - - - - - - - +** +** Test iauApco function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApco, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, ebpv[2][3], ehp[3], x, y, s, + theta, elong, phi, hm, xp, yp, sp, refa, refb; + iauASTROM astrom; + + + date1 = 2456384.5; + date2 = 0.970031644; + ebpv[0][0] = -0.974170438; + ebpv[0][1] = -0.211520082; + ebpv[0][2] = -0.0917583024; + ebpv[1][0] = 0.00364365824; + ebpv[1][1] = -0.0154287319; + ebpv[1][2] = -0.00668922024; + ehp[0] = -0.973458265; + ehp[1] = -0.209215307; + ehp[2] = -0.0906996477; + x = 0.0013122272; + y = -2.92808623e-5; + s = 3.05749468e-8; + theta = 3.14540971; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + sp = -3.01974337e-11; + refa = 0.000201418779; + refb = -2.36140831e-7; + + iauApco(date1, date2, ebpv, ehp, x, y, s, + theta, elong, phi, hm, xp, yp, sp, + refa, refb, &astrom); + + vvd(astrom.pmt, 13.25248468622587269, 1e-11, + "iauApco", "pmt", status); + vvd(astrom.eb[0], -0.9741827110630322720, 1e-12, + "iauApco", "eb(1)", status); + vvd(astrom.eb[1], -0.2115130190135344832, 1e-12, + "iauApco", "eb(2)", status); + vvd(astrom.eb[2], -0.09179840186949532298, 1e-12, + "iauApco", "eb(3)", status); + vvd(astrom.eh[0], -0.9736425571689739035, 1e-12, + "iauApco", "eh(1)", status); + vvd(astrom.eh[1], -0.2092452125849330936, 1e-12, + "iauApco", "eh(2)", status); + vvd(astrom.eh[2], -0.09075578152243272599, 1e-12, + "iauApco", "eh(3)", status); + vvd(astrom.em, 0.9998233241709957653, 1e-12, + "iauApco", "em", status); + vvd(astrom.v[0], 0.2078704992916728762e-4, 1e-16, + "iauApco", "v(1)", status); + vvd(astrom.v[1], -0.8955360107151952319e-4, 1e-16, + "iauApco", "v(2)", status); + vvd(astrom.v[2], -0.3863338994288951082e-4, 1e-16, + "iauApco", "v(3)", status); + vvd(astrom.bm1, 0.9999999950277561236, 1e-12, + "iauApco", "bm1", status); + vvd(astrom.bpn[0][0], 0.9999991390295159156, 1e-12, + "iauApco", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.4978650072505016932e-7, 1e-12, + "iauApco", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.1312227200000000000e-2, 1e-12, + "iauApco", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], -0.1136336653771609630e-7, 1e-12, + "iauApco", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 0.9999999995713154868, 1e-12, + "iauApco", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], -0.2928086230000000000e-4, 1e-12, + "iauApco", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], -0.1312227200895260194e-2, 1e-12, + "iauApco", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.2928082217872315680e-4, 1e-12, + "iauApco", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 0.9999991386008323373, 1e-12, + "iauApco", "bpn(3,3)", status); + vvd(astrom.along, -0.5278008060301974337, 1e-12, + "iauApco", "along", status); + vvd(astrom.xpl, 0.1133427418174939329e-5, 1e-17, + "iauApco", "xpl", status); + vvd(astrom.ypl, 0.1453347595745898629e-5, 1e-17, + "iauApco", "ypl", status); + vvd(astrom.sphi, -0.9440115679003211329, 1e-12, + "iauApco", "sphi", status); + vvd(astrom.cphi, 0.3299123514971474711, 1e-12, + "iauApco", "cphi", status); + vvd(astrom.diurab, 0, 0, + "iauApco", "diurab", status); + vvd(astrom.eral, 2.617608903969802566, 1e-12, + "iauApco", "eral", status); + vvd(astrom.refa, 0.2014187790000000000e-3, 1e-15, + "iauApco", "refa", status); + vvd(astrom.refb, -0.2361408310000000000e-6, 1e-18, + "iauApco", "refb", status); + +} + +static void t_apco13(int *status) +/* +** - - - - - - - - - +** t _ a p c o 1 3 +** - - - - - - - - - +** +** Test iauApco13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApco13, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, eo; + iauASTROM astrom; + int j; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + j = iauApco13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom, &eo); + + vvd(astrom.pmt, 13.25248468622475727, 1e-11, + "iauApco13", "pmt", status); + vvd(astrom.eb[0], -0.9741827107320875162, 1e-12, + "iauApco13", "eb(1)", status); + vvd(astrom.eb[1], -0.2115130190489716682, 1e-12, + "iauApco13", "eb(2)", status); + vvd(astrom.eb[2], -0.09179840189496755339, 1e-12, + "iauApco13", "eb(3)", status); + vvd(astrom.eh[0], -0.9736425572586935247, 1e-12, + "iauApco13", "eh(1)", status); + vvd(astrom.eh[1], -0.2092452121603336166, 1e-12, + "iauApco13", "eh(2)", status); + vvd(astrom.eh[2], -0.09075578153885665295, 1e-12, + "iauApco13", "eh(3)", status); + vvd(astrom.em, 0.9998233240913898141, 1e-12, + "iauApco13", "em", status); + vvd(astrom.v[0], 0.2078704994520489246e-4, 1e-16, + "iauApco13", "v(1)", status); + vvd(astrom.v[1], -0.8955360133238868938e-4, 1e-16, + "iauApco13", "v(2)", status); + vvd(astrom.v[2], -0.3863338993055887398e-4, 1e-16, + "iauApco13", "v(3)", status); + vvd(astrom.bm1, 0.9999999950277561004, 1e-12, + "iauApco13", "bm1", status); + vvd(astrom.bpn[0][0], 0.9999991390295147999, 1e-12, + "iauApco13", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0.4978650075315529277e-7, 1e-12, + "iauApco13", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0.001312227200850293372, 1e-12, + "iauApco13", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], -0.1136336652812486604e-7, 1e-12, + "iauApco13", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 0.9999999995713154865, 1e-12, + "iauApco13", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], -0.2928086230975367296e-4, 1e-12, + "iauApco13", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], -0.001312227201745553566, 1e-12, + "iauApco13", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0.2928082218847679162e-4, 1e-12, + "iauApco13", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 0.9999991386008312212, 1e-12, + "iauApco13", "bpn(3,3)", status); + vvd(astrom.along, -0.5278008060301974337, 1e-12, + "iauApco13", "along", status); + vvd(astrom.xpl, 0.1133427418174939329e-5, 1e-17, + "iauApco13", "xpl", status); + vvd(astrom.ypl, 0.1453347595745898629e-5, 1e-17, + "iauApco13", "ypl", status); + vvd(astrom.sphi, -0.9440115679003211329, 1e-12, + "iauApco13", "sphi", status); + vvd(astrom.cphi, 0.3299123514971474711, 1e-12, + "iauApco13", "cphi", status); + vvd(astrom.diurab, 0, 0, + "iauApco13", "diurab", status); + vvd(astrom.eral, 2.617608909189066140, 1e-12, + "iauApco13", "eral", status); + vvd(astrom.refa, 0.2014187785940396921e-3, 1e-15, + "iauApco13", "refa", status); + vvd(astrom.refb, -0.2361408314943696227e-6, 1e-18, + "iauApco13", "refb", status); + vvd(eo, -0.003020548354802412839, 1e-14, + "iauApco13", "eo", status); + viv(j, 0, "iauApco13", "j", status); + +} + +static void t_apcs(int *status) +/* +** - - - - - - - +** t _ a p c s +** - - - - - - - +** +** Test iauApcs function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApcs, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, pv[2][3], ebpv[2][3], ehp[3]; + iauASTROM astrom; + + + date1 = 2456384.5; + date2 = 0.970031644; + pv[0][0] = -1836024.09; + pv[0][1] = 1056607.72; + pv[0][2] = -5998795.26; + pv[1][0] = -77.0361767; + pv[1][1] = -133.310856; + pv[1][2] = 0.0971855934; + ebpv[0][0] = -0.974170438; + ebpv[0][1] = -0.211520082; + ebpv[0][2] = -0.0917583024; + ebpv[1][0] = 0.00364365824; + ebpv[1][1] = -0.0154287319; + ebpv[1][2] = -0.00668922024; + ehp[0] = -0.973458265; + ehp[1] = -0.209215307; + ehp[2] = -0.0906996477; + + iauApcs(date1, date2, pv, ebpv, ehp, &astrom); + + vvd(astrom.pmt, 13.25248468622587269, 1e-11, + "iauApcs", "pmt", status); + vvd(astrom.eb[0], -0.9741827110629881886, 1e-12, + "iauApcs", "eb(1)", status); + vvd(astrom.eb[1], -0.2115130190136415986, 1e-12, + "iauApcs", "eb(2)", status); + vvd(astrom.eb[2], -0.09179840186954412099, 1e-12, + "iauApcs", "eb(3)", status); + vvd(astrom.eh[0], -0.9736425571689454706, 1e-12, + "iauApcs", "eh(1)", status); + vvd(astrom.eh[1], -0.2092452125850435930, 1e-12, + "iauApcs", "eh(2)", status); + vvd(astrom.eh[2], -0.09075578152248299218, 1e-12, + "iauApcs", "eh(3)", status); + vvd(astrom.em, 0.9998233241709796859, 1e-12, + "iauApcs", "em", status); + vvd(astrom.v[0], 0.2078704993282685510e-4, 1e-16, + "iauApcs", "v(1)", status); + vvd(astrom.v[1], -0.8955360106989405683e-4, 1e-16, + "iauApcs", "v(2)", status); + vvd(astrom.v[2], -0.3863338994289409097e-4, 1e-16, + "iauApcs", "v(3)", status); + vvd(astrom.bm1, 0.9999999950277561237, 1e-12, + "iauApcs", "bm1", status); + vvd(astrom.bpn[0][0], 1, 0, + "iauApcs", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0, 0, + "iauApcs", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0, 0, + "iauApcs", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], 0, 0, + "iauApcs", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 1, 0, + "iauApcs", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], 0, 0, + "iauApcs", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], 0, 0, + "iauApcs", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0, 0, + "iauApcs", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 1, 0, + "iauApcs", "bpn(3,3)", status); + +} + +static void t_apcs13(int *status) +/* +** - - - - - - - - - +** t _ a p c s 1 3 +** - - - - - - - - - +** +** Test iauApcs13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApcs13, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, pv[2][3]; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + pv[0][0] = -6241497.16; + pv[0][1] = 401346.896; + pv[0][2] = -1251136.04; + pv[1][0] = -29.264597; + pv[1][1] = -455.021831; + pv[1][2] = 0.0266151194; + + iauApcs13(date1, date2, pv, &astrom); + + vvd(astrom.pmt, 12.65133794027378508, 1e-11, + "iauApcs13", "pmt", status); + vvd(astrom.eb[0], 0.9012691529025250644, 1e-12, + "iauApcs13", "eb(1)", status); + vvd(astrom.eb[1], -0.4173999812023194317, 1e-12, + "iauApcs13", "eb(2)", status); + vvd(astrom.eb[2], -0.1809906511146429670, 1e-12, + "iauApcs13", "eb(3)", status); + vvd(astrom.eh[0], 0.8939939101760130792, 1e-12, + "iauApcs13", "eh(1)", status); + vvd(astrom.eh[1], -0.4111053891734021478, 1e-12, + "iauApcs13", "eh(2)", status); + vvd(astrom.eh[2], -0.1782336880636997374, 1e-12, + "iauApcs13", "eh(3)", status); + vvd(astrom.em, 1.010428384373491095, 1e-12, + "iauApcs13", "em", status); + vvd(astrom.v[0], 0.4279877294121697570e-4, 1e-16, + "iauApcs13", "v(1)", status); + vvd(astrom.v[1], 0.7963255087052120678e-4, 1e-16, + "iauApcs13", "v(2)", status); + vvd(astrom.v[2], 0.3517564013384691531e-4, 1e-16, + "iauApcs13", "v(3)", status); + vvd(astrom.bm1, 0.9999999952947980978, 1e-12, + "iauApcs13", "bm1", status); + vvd(astrom.bpn[0][0], 1, 0, + "iauApcs13", "bpn(1,1)", status); + vvd(astrom.bpn[1][0], 0, 0, + "iauApcs13", "bpn(2,1)", status); + vvd(astrom.bpn[2][0], 0, 0, + "iauApcs13", "bpn(3,1)", status); + vvd(astrom.bpn[0][1], 0, 0, + "iauApcs13", "bpn(1,2)", status); + vvd(astrom.bpn[1][1], 1, 0, + "iauApcs13", "bpn(2,2)", status); + vvd(astrom.bpn[2][1], 0, 0, + "iauApcs13", "bpn(3,2)", status); + vvd(astrom.bpn[0][2], 0, 0, + "iauApcs13", "bpn(1,3)", status); + vvd(astrom.bpn[1][2], 0, 0, + "iauApcs13", "bpn(2,3)", status); + vvd(astrom.bpn[2][2], 1, 0, + "iauApcs13", "bpn(3,3)", status); + +} + +static void t_aper(int *status) +/* +** - - - - - - - +** t _ a p e r +** - - - - - - - +* +** Test iauAper function. +* +** Returned: +** status int FALSE = success, TRUE = fail +* +** Called: iauAper, vvd +* +** This revision: 2013 October 3 +*/ +{ + double theta; + iauASTROM astrom; + + + astrom.along = 1.234; + theta = 5.678; + + iauAper(theta, &astrom); + + vvd(astrom.eral, 6.912000000000000000, 1e-12, + "iauAper", "pmt", status); + +} + +static void t_aper13(int *status) +/* +** - - - - - - - - - +** t _ a p e r 1 3 +** - - - - - - - - - +** +** Test iauAper13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAper13, vvd +** +** This revision: 2013 October 3 +*/ +{ + double ut11, ut12; + iauASTROM astrom; + + + astrom.along = 1.234; + ut11 = 2456165.5; + ut12 = 0.401182685; + + iauAper13(ut11, ut12, &astrom); + + vvd(astrom.eral, 3.316236661789694933, 1e-12, + "iauAper13", "pmt", status); + +} + +static void t_apio(int *status) +/* +** - - - - - - - +** t _ a p i o +** - - - - - - - +** +** Test iauApio function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApio, vvd +** +** This revision: 2013 October 3 +*/ +{ + double sp, theta, elong, phi, hm, xp, yp, refa, refb; + iauASTROM astrom; + + + sp = -3.01974337e-11; + theta = 3.14540971; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + refa = 0.000201418779; + refb = -2.36140831e-7; + + iauApio(sp, theta, elong, phi, hm, xp, yp, refa, refb, &astrom); + + vvd(astrom.along, -0.5278008060301974337, 1e-12, + "iauApio", "along", status); + vvd(astrom.xpl, 0.1133427418174939329e-5, 1e-17, + "iauApio", "xpl", status); + vvd(astrom.ypl, 0.1453347595745898629e-5, 1e-17, + "iauApio", "ypl", status); + vvd(astrom.sphi, -0.9440115679003211329, 1e-12, + "iauApio", "sphi", status); + vvd(astrom.cphi, 0.3299123514971474711, 1e-12, + "iauApio", "cphi", status); + vvd(astrom.diurab, 0.5135843661699913529e-6, 1e-12, + "iauApio", "diurab", status); + vvd(astrom.eral, 2.617608903969802566, 1e-12, + "iauApio", "eral", status); + vvd(astrom.refa, 0.2014187790000000000e-3, 1e-15, + "iauApio", "refa", status); + vvd(astrom.refb, -0.2361408310000000000e-6, 1e-18, + "iauApio", "refb", status); + +} + +static void t_apio13(int *status) +/* +** - - - - - - - - - +** t _ a p i o 1 3 +** - - - - - - - - - +** +** Test iauApio13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApio13, vvd, viv +** +** This revision: 2013 October 4 +*/ +{ + double utc1, utc2, dut1, elong, phi, hm, xp, yp, phpa, tc, rh, wl; + int j; + iauASTROM astrom; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + j = iauApio13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom); + + vvd(astrom.along, -0.5278008060301974337, 1e-12, + "iauApio13", "along", status); + vvd(astrom.xpl, 0.1133427418174939329e-5, 1e-17, + "iauApio13", "xpl", status); + vvd(astrom.ypl, 0.1453347595745898629e-5, 1e-17, + "iauApio13", "ypl", status); + vvd(astrom.sphi, -0.9440115679003211329, 1e-12, + "iauApio13", "sphi", status); + vvd(astrom.cphi, 0.3299123514971474711, 1e-12, + "iauApio13", "cphi", status); + vvd(astrom.diurab, 0.5135843661699913529e-6, 1e-12, + "iauApio13", "diurab", status); + vvd(astrom.eral, 2.617608909189066140, 1e-12, + "iauApio13", "eral", status); + vvd(astrom.refa, 0.2014187785940396921e-3, 1e-15, + "iauApio13", "refa", status); + vvd(astrom.refb, -0.2361408314943696227e-6, 1e-18, + "iauApio13", "refb", status); + viv(j, 0, "iauApio13", "j", status); + +} + +static void t_atci13(int *status) +/* +** - - - - - - - - - +** t _ a t c i 1 3 +** - - - - - - - - - +** +** Test iauAtci13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtci13, vvd +** +** This revision: 2017 March 15 +*/ +{ + double rc, dc, pr, pd, px, rv, date1, date2, ri, di, eo; + + + rc = 2.71; + dc = 0.174; + pr = 1e-5; + pd = 5e-6; + px = 0.1; + rv = 55.0; + date1 = 2456165.5; + date2 = 0.401182685; + + iauAtci13(rc, dc, pr, pd, px, rv, date1, date2, &ri, &di, &eo); + + vvd(ri, 2.710121572968696744, 1e-12, + "iauAtci13", "ri", status); + vvd(di, 0.1729371367219539137, 1e-12, + "iauAtci13", "di", status); + vvd(eo, -0.002900618712657375647, 1e-14, + "iauAtci13", "eo", status); + +} + +static void t_atciq(int *status) +/* +** - - - - - - - - +** t _ a t c i q +** - - - - - - - - +** +** Test iauAtciq function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, iauAtciq, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, eo, rc, dc, pr, pd, px, rv, ri, di; + iauASTROM astrom; + + date1 = 2456165.5; + date2 = 0.401182685; + iauApci13(date1, date2, &astrom, &eo); + rc = 2.71; + dc = 0.174; + pr = 1e-5; + pd = 5e-6; + px = 0.1; + rv = 55.0; + + iauAtciq(rc, dc, pr, pd, px, rv, &astrom, &ri, &di); + + vvd(ri, 2.710121572968696744, 1e-12, "iauAtciq", "ri", status); + vvd(di, 0.1729371367219539137, 1e-12, "iauAtciq", "di", status); + +} + +static void t_atciqn(int *status) +/* +** - - - - - - - - - +** t _ a t c i q n +** - - - - - - - - - +** +** Test iauAtciqn function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, iauAtciqn, vvd +** +** This revision: 2017 March 15 +*/ +{ + iauLDBODY b[3]; + double date1, date2, eo, rc, dc, pr, pd, px, rv, ri, di; + iauASTROM astrom; + + date1 = 2456165.5; + date2 = 0.401182685; + iauApci13(date1, date2, &astrom, &eo); + rc = 2.71; + dc = 0.174; + pr = 1e-5; + pd = 5e-6; + px = 0.1; + rv = 55.0; + b[0].bm = 0.00028574; + b[0].dl = 3e-10; + b[0].pv[0][0] = -7.81014427; + b[0].pv[0][1] = -5.60956681; + b[0].pv[0][2] = -1.98079819; + b[0].pv[1][0] = 0.0030723249; + b[0].pv[1][1] = -0.00406995477; + b[0].pv[1][2] = -0.00181335842; + b[1].bm = 0.00095435; + b[1].dl = 3e-9; + b[1].pv[0][0] = 0.738098796; + b[1].pv[0][1] = 4.63658692; + b[1].pv[0][2] = 1.9693136; + b[1].pv[1][0] = -0.00755816922; + b[1].pv[1][1] = 0.00126913722; + b[1].pv[1][2] = 0.000727999001; + b[2].bm = 1.0; + b[2].dl = 6e-6; + b[2].pv[0][0] = -0.000712174377; + b[2].pv[0][1] = -0.00230478303; + b[2].pv[0][2] = -0.00105865966; + b[2].pv[1][0] = 6.29235213e-6; + b[2].pv[1][1] = -3.30888387e-7; + b[2].pv[1][2] = -2.96486623e-7; + + iauAtciqn ( rc, dc, pr, pd, px, rv, &astrom, 3, b, &ri, &di); + + vvd(ri, 2.710122008104983335, 1e-12, "iauAtciqn", "ri", status); + vvd(di, 0.1729371916492767821, 1e-12, "iauAtciqn", "di", status); + +} + +static void t_atciqz(int *status) +/* +** - - - - - - - - - +** t _ a t c i q z +** - - - - - - - - - +** +** Test iauAtciqz function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, iauAtciqz, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, eo, rc, dc, ri, di; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + iauApci13(date1, date2, &astrom, &eo); + rc = 2.71; + dc = 0.174; + + iauAtciqz(rc, dc, &astrom, &ri, &di); + + vvd(ri, 2.709994899247256984, 1e-12, "iauAtciqz", "ri", status); + vvd(di, 0.1728740720984931891, 1e-12, "iauAtciqz", "di", status); + +} + +static void t_atco13(int *status) +/* +** - - - - - - - - - +** t _ a t c o 1 3 +** - - - - - - - - - +** +** Test iauAtco13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtco13, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double rc, dc, pr, pd, px, rv, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + aob, zob, hob, dob, rob, eo; + int j; + + + rc = 2.71; + dc = 0.174; + pr = 1e-5; + pd = 5e-6; + px = 0.1; + rv = 55.0; + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + j = iauAtco13(rc, dc, pr, pd, px, rv, + utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, + &aob, &zob, &hob, &dob, &rob, &eo); + + vvd(aob, 0.09251774485385390973, 1e-12, "iauAtco13", "aob", status); + vvd(zob, 1.407661405256671703, 1e-12, "iauAtco13", "zob", status); + vvd(hob, -0.09265154431430045141, 1e-12, "iauAtco13", "hob", status); + vvd(dob, 0.1716626560074556029, 1e-12, "iauAtco13", "dob", status); + vvd(rob, 2.710260453503366591, 1e-12, "iauAtco13", "rob", status); + vvd(eo, -0.003020548354802412839, 1e-14, "iauAtco13", "eo", status); + viv(j, 0, "iauAtco13", "j", status); + +} + +static void t_atic13(int *status) +/* +** - - - - - - - - - +** t _ a t i c 1 3 +** - - - - - - - - - +** +** Test iauAtic13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtic13, vvd +** +** This revision: 2017 March 15 +*/ +{ + double ri, di, date1, date2, rc, dc, eo; + + + ri = 2.710121572969038991; + di = 0.1729371367218230438; + date1 = 2456165.5; + date2 = 0.401182685; + + iauAtic13(ri, di, date1, date2, &rc, &dc, &eo); + + vvd(rc, 2.710126504531716819, 1e-12, "iauAtic13", "rc", status); + vvd(dc, 0.1740632537627034482, 1e-12, "iauAtic13", "dc", status); + vvd(eo, -0.002900618712657375647, 1e-14, "iauAtic13", "eo", status); + +} + +static void t_aticq(int *status) +/* +** - - - - - - - - +** t _ a t i c q +** - - - - - - - - +** +** Test iauAticq function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, iauAticq, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, eo, ri, di, rc, dc; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + iauApci13(date1, date2, &astrom, &eo); + ri = 2.710121572969038991; + di = 0.1729371367218230438; + + iauAticq(ri, di, &astrom, &rc, &dc); + + vvd(rc, 2.710126504531716819, 1e-12, "iauAticq", "rc", status); + vvd(dc, 0.1740632537627034482, 1e-12, "iauAticq", "dc", status); + +} + +static void t_aticqn(int *status) +/* +** - - - - - - - - - +** t _ a t i c q n +** - - - - - - - - - +** +** Test iauAticqn function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApci13, iauAticqn, vvd +** +** This revision: 2017 March 15 +*/ +{ + double date1, date2, eo, ri, di, rc, dc; + iauLDBODY b[3]; + iauASTROM astrom; + + + date1 = 2456165.5; + date2 = 0.401182685; + iauApci13(date1, date2, &astrom, &eo); + ri = 2.709994899247599271; + di = 0.1728740720983623469; + b[0].bm = 0.00028574; + b[0].dl = 3e-10; + b[0].pv[0][0] = -7.81014427; + b[0].pv[0][1] = -5.60956681; + b[0].pv[0][2] = -1.98079819; + b[0].pv[1][0] = 0.0030723249; + b[0].pv[1][1] = -0.00406995477; + b[0].pv[1][2] = -0.00181335842; + b[1].bm = 0.00095435; + b[1].dl = 3e-9; + b[1].pv[0][0] = 0.738098796; + b[1].pv[0][1] = 4.63658692; + b[1].pv[0][2] = 1.9693136; + b[1].pv[1][0] = -0.00755816922; + b[1].pv[1][1] = 0.00126913722; + b[1].pv[1][2] = 0.000727999001; + b[2].bm = 1.0; + b[2].dl = 6e-6; + b[2].pv[0][0] = -0.000712174377; + b[2].pv[0][1] = -0.00230478303; + b[2].pv[0][2] = -0.00105865966; + b[2].pv[1][0] = 6.29235213e-6; + b[2].pv[1][1] = -3.30888387e-7; + b[2].pv[1][2] = -2.96486623e-7; + + iauAticqn(ri, di, &astrom, 3, b, &rc, &dc); + + vvd(rc, 2.709999575033027333, 1e-12, "iauAtciqn", "rc", status); + vvd(dc, 0.1739999656316469990, 1e-12, "iauAtciqn", "dc", status); + +} + +static void t_atio13(int *status) +/* +** - - - - - - - - - +** t _ a t i o 1 3 +** - - - - - - - - - +** +** Test iauAtio13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtio13, vvd, viv +** +** This revision: 2013 October 3 +*/ +{ + double ri, di, utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, aob, zob, hob, dob, rob; + int j; + + + ri = 2.710121572969038991; + di = 0.1729371367218230438; + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + j = iauAtio13(ri, di, utc1, utc2, dut1, elong, phi, hm, + xp, yp, phpa, tc, rh, wl, + &aob, &zob, &hob, &dob, &rob); + + vvd(aob, 0.09233952224794989993, 1e-12, "iauAtio13", "aob", status); + vvd(zob, 1.407758704513722461, 1e-12, "iauAtio13", "zob", status); + vvd(hob, -0.09247619879782006106, 1e-12, "iauAtio13", "hob", status); + vvd(dob, 0.1717653435758265198, 1e-12, "iauAtio13", "dob", status); + vvd(rob, 2.710085107986886201, 1e-12, "iauAtio13", "rob", status); + viv(j, 0, "iauAtio13", "j", status); + +} + +static void t_atioq(int *status) +/* +** - - - - - - - - +** t _ a t i o q +** - - - - - - - - +** +** Test iauAtioq function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauApio13, iauAtioq, vvd, viv +** +** This revision: 2013 October 4 +*/ +{ + double utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, ri, di, aob, zob, hob, dob, rob; + iauASTROM astrom; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + (void) iauApio13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom); + ri = 2.710121572969038991; + di = 0.1729371367218230438; + + iauAtioq(ri, di, &astrom, &aob, &zob, &hob, &dob, &rob); + + vvd(aob, 0.09233952224794989993, 1e-12, "iauAtioq", "aob", status); + vvd(zob, 1.407758704513722461, 1e-12, "iauAtioq", "zob", status); + vvd(hob, -0.09247619879782006106, 1e-12, "iauAtioq", "hob", status); + vvd(dob, 0.1717653435758265198, 1e-12, "iauAtioq", "dob", status); + vvd(rob, 2.710085107986886201, 1e-12, "iauAtioq", "rob", status); + +} + +static void t_atoc13(int *status) +/* +** - - - - - - - - - +** t _ a t o c 1 3 +** - - - - - - - - - +** +** Test iauAtoc13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtoc13, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + ob1, ob2, rc, dc; + int j; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + ob1 = 2.710085107986886201; + ob2 = 0.1717653435758265198; + j = iauAtoc13 ( "R", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &rc, &dc); + vvd(rc, 2.709956744660731630, 1e-12, "iauAtoc13", "R/rc", status); + vvd(dc, 0.1741696500896438967, 1e-12, "iauAtoc13", "R/dc", status); + viv(j, 0, "iauAtoc13", "R/j", status); + + ob1 = -0.09247619879782006106; + ob2 = 0.1717653435758265198; + j = iauAtoc13 ( "H", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &rc, &dc); + vvd(rc, 2.709956744660731630, 1e-12, "iauAtoc13", "H/rc", status); + vvd(dc, 0.1741696500896438967, 1e-12, "iauAtoc13", "H/dc", status); + viv(j, 0, "iauAtoc13", "H/j", status); + + ob1 = 0.09233952224794989993; + ob2 = 1.407758704513722461; + j = iauAtoc13 ( "A", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &rc, &dc); + vvd(rc, 2.709956744660731630, 1e-12, "iauAtoc13", "A/rc", status); + vvd(dc, 0.1741696500896438970, 1e-12, "iauAtoc13", "A/dc", status); + viv(j, 0, "iauAtoc13", "A/j", status); + +} + +static void t_atoi13(int *status) +/* +** - - - - - - - - - +** t _ a t o i 1 3 +** - - - - - - - - - +** +** Test iauAtoi13 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauAtoi13, vvd, viv +** +** This revision: 2013 October 3 +*/ +{ + double utc1, utc2, dut1, elong, phi, hm, xp, yp, phpa, tc, rh, wl, + ob1, ob2, ri, di; + int j; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + ob1 = 2.710085107986886201; + ob2 = 0.1717653435758265198; + j = iauAtoi13 ( "R", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, "iauAtoi13", "R/ri", status); + vvd(di, 0.1729371839114567725, 1e-12, "iauAtoi13", "R/di", status); + viv(j, 0, "iauAtoi13", "R/J", status); + + ob1 = -0.09247619879782006106; + ob2 = 0.1717653435758265198; + j = iauAtoi13 ( "H", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, "iauAtoi13", "H/ri", status); + vvd(di, 0.1729371839114567725, 1e-12, "iauAtoi13", "H/di", status); + viv(j, 0, "iauAtoi13", "H/J", status); + + ob1 = 0.09233952224794989993; + ob2 = 1.407758704513722461; + j = iauAtoi13 ( "A", ob1, ob2, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl, + &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, "iauAtoi13", "A/ri", status); + vvd(di, 0.1729371839114567728, 1e-12, "iauAtoi13", "A/di", status); + viv(j, 0, "iauAtoi13", "A/J", status); + +} + +static void t_atoiq(int *status) +/* +** - - - - - - - - +** t _ a t o i q +** - - - - - - - - +* +** Test iauAtoiq function. +* +** Returned: +** status int FALSE = success, TRUE = fail +* +** Called: iauApio13, iauAtoiq, vvd +* +** This revision: 2013 October 4 +*/ +{ + double utc1, utc2, dut1, elong, phi, hm, xp, yp, phpa, tc, rh, wl, + ob1, ob2, ri, di; + iauASTROM astrom; + + + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + (void) iauApio13(utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl, &astrom); + + ob1 = 2.710085107986886201; + ob2 = 0.1717653435758265198; + iauAtoiq("R", ob1, ob2, &astrom, &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, + "iauAtoiq", "R/ri", status); + vvd(di, 0.1729371839114567725, 1e-12, + "iauAtoiq", "R/di", status); + + ob1 = -0.09247619879782006106; + ob2 = 0.1717653435758265198; + iauAtoiq("H", ob1, ob2, &astrom, &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, + "iauAtoiq", "H/ri", status); + vvd(di, 0.1729371839114567725, 1e-12, + "iauAtoiq", "H/di", status); + + ob1 = 0.09233952224794989993; + ob2 = 1.407758704513722461; + iauAtoiq("A", ob1, ob2, &astrom, &ri, &di); + vvd(ri, 2.710121574449135955, 1e-12, + "iauAtoiq", "A/ri", status); + vvd(di, 0.1729371839114567728, 1e-12, + "iauAtoiq", "A/di", status); + +} + +static void t_bi00(int *status) +/* +** - - - - - - - +** t _ b i 0 0 +** - - - - - - - +** +** Test iauBi00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauBi00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsibi, depsbi, dra; + + iauBi00(&dpsibi, &depsbi, &dra); + + vvd(dpsibi, -0.2025309152835086613e-6, 1e-12, + "iauBi00", "dpsibi", status); + vvd(depsbi, -0.3306041454222147847e-7, 1e-12, + "iauBi00", "depsbi", status); + vvd(dra, -0.7078279744199225506e-7, 1e-12, + "iauBi00", "dra", status); +} + +static void t_bp00(int *status) +/* +** - - - - - - - +** t _ b p 0 0 +** - - - - - - - +** +** Test iauBp00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauBp00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rb[3][3], rp[3][3], rbp[3][3]; + + + iauBp00(2400000.5, 50123.9999, rb, rp, rbp); + + vvd(rb[0][0], 0.9999999999999942498, 1e-12, + "iauBp00", "rb11", status); + vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16, + "iauBp00", "rb12", status); + vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16, + "iauBp00", "rb13", status); + vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16, + "iauBp00", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauBp00", "rb22", status); + vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16, + "iauBp00", "rb23", status); + vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16, + "iauBp00", "rb31", status); + vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16, + "iauBp00", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauBp00", "rb33", status); + + vvd(rp[0][0], 0.9999995504864048241, 1e-12, + "iauBp00", "rp11", status); + vvd(rp[0][1], 0.8696113836207084411e-3, 1e-14, + "iauBp00", "rp12", status); + vvd(rp[0][2], 0.3778928813389333402e-3, 1e-14, + "iauBp00", "rp13", status); + vvd(rp[1][0], -0.8696113818227265968e-3, 1e-14, + "iauBp00", "rp21", status); + vvd(rp[1][1], 0.9999996218879365258, 1e-12, + "iauBp00", "rp22", status); + vvd(rp[1][2], -0.1690679263009242066e-6, 1e-14, + "iauBp00", "rp23", status); + vvd(rp[2][0], -0.3778928854764695214e-3, 1e-14, + "iauBp00", "rp31", status); + vvd(rp[2][1], -0.1595521004195286491e-6, 1e-14, + "iauBp00", "rp32", status); + vvd(rp[2][2], 0.9999999285984682756, 1e-12, + "iauBp00", "rp33", status); + + vvd(rbp[0][0], 0.9999995505175087260, 1e-12, + "iauBp00", "rbp11", status); + vvd(rbp[0][1], 0.8695405883617884705e-3, 1e-14, + "iauBp00", "rbp12", status); + vvd(rbp[0][2], 0.3779734722239007105e-3, 1e-14, + "iauBp00", "rbp13", status); + vvd(rbp[1][0], -0.8695405990410863719e-3, 1e-14, + "iauBp00", "rbp21", status); + vvd(rbp[1][1], 0.9999996219494925900, 1e-12, + "iauBp00", "rbp22", status); + vvd(rbp[1][2], -0.1360775820404982209e-6, 1e-14, + "iauBp00", "rbp23", status); + vvd(rbp[2][0], -0.3779734476558184991e-3, 1e-14, + "iauBp00", "rbp31", status); + vvd(rbp[2][1], -0.1925857585832024058e-6, 1e-14, + "iauBp00", "rbp32", status); + vvd(rbp[2][2], 0.9999999285680153377, 1e-12, + "iauBp00", "rbp33", status); +} + +static void t_bp06(int *status) +/* +** - - - - - - - +** t _ b p 0 6 +** - - - - - - - +** +** Test iauBp06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauBp06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rb[3][3], rp[3][3], rbp[3][3]; + + + iauBp06(2400000.5, 50123.9999, rb, rp, rbp); + + vvd(rb[0][0], 0.9999999999999942497, 1e-12, + "iauBp06", "rb11", status); + vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14, + "iauBp06", "rb12", status); + vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14, + "iauBp06", "rb13", status); + vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14, + "iauBp06", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauBp06", "rb22", status); + vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14, + "iauBp06", "rb23", status); + vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14, + "iauBp06", "rb31", status); + vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14, + "iauBp06", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauBp06", "rb33", status); + + vvd(rp[0][0], 0.9999995504864960278, 1e-12, + "iauBp06", "rp11", status); + vvd(rp[0][1], 0.8696112578855404832e-3, 1e-14, + "iauBp06", "rp12", status); + vvd(rp[0][2], 0.3778929293341390127e-3, 1e-14, + "iauBp06", "rp13", status); + vvd(rp[1][0], -0.8696112560510186244e-3, 1e-14, + "iauBp06", "rp21", status); + vvd(rp[1][1], 0.9999996218880458820, 1e-12, + "iauBp06", "rp22", status); + vvd(rp[1][2], -0.1691646168941896285e-6, 1e-14, + "iauBp06", "rp23", status); + vvd(rp[2][0], -0.3778929335557603418e-3, 1e-14, + "iauBp06", "rp31", status); + vvd(rp[2][1], -0.1594554040786495076e-6, 1e-14, + "iauBp06", "rp32", status); + vvd(rp[2][2], 0.9999999285984501222, 1e-12, + "iauBp06", "rp33", status); + + vvd(rbp[0][0], 0.9999995505176007047, 1e-12, + "iauBp06", "rbp11", status); + vvd(rbp[0][1], 0.8695404617348208406e-3, 1e-14, + "iauBp06", "rbp12", status); + vvd(rbp[0][2], 0.3779735201865589104e-3, 1e-14, + "iauBp06", "rbp13", status); + vvd(rbp[1][0], -0.8695404723772031414e-3, 1e-14, + "iauBp06", "rbp21", status); + vvd(rbp[1][1], 0.9999996219496027161, 1e-12, + "iauBp06", "rbp22", status); + vvd(rbp[1][2], -0.1361752497080270143e-6, 1e-14, + "iauBp06", "rbp23", status); + vvd(rbp[2][0], -0.3779734957034089490e-3, 1e-14, + "iauBp06", "rbp31", status); + vvd(rbp[2][1], -0.1924880847894457113e-6, 1e-14, + "iauBp06", "rbp32", status); + vvd(rbp[2][2], 0.9999999285679971958, 1e-12, + "iauBp06", "rbp33", status); +} + +static void t_bpn2xy(int *status) +/* +** - - - - - - - - - +** t _ b p n 2 x y +** - - - - - - - - - +** +** Test iauBpn2xy function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauBpn2xy, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3], x, y; + + + rbpn[0][0] = 9.999962358680738e-1; + rbpn[0][1] = -2.516417057665452e-3; + rbpn[0][2] = -1.093569785342370e-3; + + rbpn[1][0] = 2.516462370370876e-3; + rbpn[1][1] = 9.999968329010883e-1; + rbpn[1][2] = 4.006159587358310e-5; + + rbpn[2][0] = 1.093465510215479e-3; + rbpn[2][1] = -4.281337229063151e-5; + rbpn[2][2] = 9.999994012499173e-1; + + iauBpn2xy(rbpn, &x, &y); + + vvd(x, 1.093465510215479e-3, 1e-12, "iauBpn2xy", "x", status); + vvd(y, -4.281337229063151e-5, 1e-12, "iauBpn2xy", "y", status); + +} + +static void t_c2i00a(int *status) +/* +** - - - - - - - - - +** t _ c 2 i 0 0 a +** - - - - - - - - - +** +** Test iauC2i00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2i00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rc2i[3][3]; + + + iauC2i00a(2400000.5, 53736.0, rc2i); + + vvd(rc2i[0][0], 0.9999998323037165557, 1e-12, + "iauC2i00a", "11", status); + vvd(rc2i[0][1], 0.5581526348992140183e-9, 1e-12, + "iauC2i00a", "12", status); + vvd(rc2i[0][2], -0.5791308477073443415e-3, 1e-12, + "iauC2i00a", "13", status); + + vvd(rc2i[1][0], -0.2384266227870752452e-7, 1e-12, + "iauC2i00a", "21", status); + vvd(rc2i[1][1], 0.9999999991917405258, 1e-12, + "iauC2i00a", "22", status); + vvd(rc2i[1][2], -0.4020594955028209745e-4, 1e-12, + "iauC2i00a", "23", status); + + vvd(rc2i[2][0], 0.5791308472168152904e-3, 1e-12, + "iauC2i00a", "31", status); + vvd(rc2i[2][1], 0.4020595661591500259e-4, 1e-12, + "iauC2i00a", "32", status); + vvd(rc2i[2][2], 0.9999998314954572304, 1e-12, + "iauC2i00a", "33", status); + +} + +static void t_c2i00b(int *status) +/* +** - - - - - - - - - +** t _ c 2 i 0 0 b +** - - - - - - - - - +** +** Test iauC2i00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2i00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rc2i[3][3]; + + + iauC2i00b(2400000.5, 53736.0, rc2i); + + vvd(rc2i[0][0], 0.9999998323040954356, 1e-12, + "iauC2i00b", "11", status); + vvd(rc2i[0][1], 0.5581526349131823372e-9, 1e-12, + "iauC2i00b", "12", status); + vvd(rc2i[0][2], -0.5791301934855394005e-3, 1e-12, + "iauC2i00b", "13", status); + + vvd(rc2i[1][0], -0.2384239285499175543e-7, 1e-12, + "iauC2i00b", "21", status); + vvd(rc2i[1][1], 0.9999999991917574043, 1e-12, + "iauC2i00b", "22", status); + vvd(rc2i[1][2], -0.4020552974819030066e-4, 1e-12, + "iauC2i00b", "23", status); + + vvd(rc2i[2][0], 0.5791301929950208873e-3, 1e-12, + "iauC2i00b", "31", status); + vvd(rc2i[2][1], 0.4020553681373720832e-4, 1e-12, + "iauC2i00b", "32", status); + vvd(rc2i[2][2], 0.9999998314958529887, 1e-12, + "iauC2i00b", "33", status); + +} + +static void t_c2i06a(int *status) +/* +** - - - - - - - - - +** t _ c 2 i 0 6 a +** - - - - - - - - - +** +** Test iauC2i06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2i06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rc2i[3][3]; + + + iauC2i06a(2400000.5, 53736.0, rc2i); + + vvd(rc2i[0][0], 0.9999998323037159379, 1e-12, + "iauC2i06a", "11", status); + vvd(rc2i[0][1], 0.5581121329587613787e-9, 1e-12, + "iauC2i06a", "12", status); + vvd(rc2i[0][2], -0.5791308487740529749e-3, 1e-12, + "iauC2i06a", "13", status); + + vvd(rc2i[1][0], -0.2384253169452306581e-7, 1e-12, + "iauC2i06a", "21", status); + vvd(rc2i[1][1], 0.9999999991917467827, 1e-12, + "iauC2i06a", "22", status); + vvd(rc2i[1][2], -0.4020579392895682558e-4, 1e-12, + "iauC2i06a", "23", status); + + vvd(rc2i[2][0], 0.5791308482835292617e-3, 1e-12, + "iauC2i06a", "31", status); + vvd(rc2i[2][1], 0.4020580099454020310e-4, 1e-12, + "iauC2i06a", "32", status); + vvd(rc2i[2][2], 0.9999998314954628695, 1e-12, + "iauC2i06a", "33", status); + +} + +static void t_c2ibpn(int *status) +/* +** - - - - - - - - - +** t _ c 2 i b p n +** - - - - - - - - - +** +** Test iauC2ibpn function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2ibpn, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3], rc2i[3][3]; + + + rbpn[0][0] = 9.999962358680738e-1; + rbpn[0][1] = -2.516417057665452e-3; + rbpn[0][2] = -1.093569785342370e-3; + + rbpn[1][0] = 2.516462370370876e-3; + rbpn[1][1] = 9.999968329010883e-1; + rbpn[1][2] = 4.006159587358310e-5; + + rbpn[2][0] = 1.093465510215479e-3; + rbpn[2][1] = -4.281337229063151e-5; + rbpn[2][2] = 9.999994012499173e-1; + + iauC2ibpn(2400000.5, 50123.9999, rbpn, rc2i); + + vvd(rc2i[0][0], 0.9999994021664089977, 1e-12, + "iauC2ibpn", "11", status); + vvd(rc2i[0][1], -0.3869195948017503664e-8, 1e-12, + "iauC2ibpn", "12", status); + vvd(rc2i[0][2], -0.1093465511383285076e-2, 1e-12, + "iauC2ibpn", "13", status); + + vvd(rc2i[1][0], 0.5068413965715446111e-7, 1e-12, + "iauC2ibpn", "21", status); + vvd(rc2i[1][1], 0.9999999990835075686, 1e-12, + "iauC2ibpn", "22", status); + vvd(rc2i[1][2], 0.4281334246452708915e-4, 1e-12, + "iauC2ibpn", "23", status); + + vvd(rc2i[2][0], 0.1093465510215479000e-2, 1e-12, + "iauC2ibpn", "31", status); + vvd(rc2i[2][1], -0.4281337229063151000e-4, 1e-12, + "iauC2ibpn", "32", status); + vvd(rc2i[2][2], 0.9999994012499173103, 1e-12, + "iauC2ibpn", "33", status); + +} + +static void t_c2ixy(int *status) +/* +** - - - - - - - - +** t _ c 2 i x y +** - - - - - - - - +** +** Test iauC2ixy function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2ixy, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, rc2i[3][3]; + + + x = 0.5791308486706011000e-3; + y = 0.4020579816732961219e-4; + + iauC2ixy(2400000.5, 53736, x, y, rc2i); + + vvd(rc2i[0][0], 0.9999998323037157138, 1e-12, + "iauC2ixy", "11", status); + vvd(rc2i[0][1], 0.5581526349032241205e-9, 1e-12, + "iauC2ixy", "12", status); + vvd(rc2i[0][2], -0.5791308491611263745e-3, 1e-12, + "iauC2ixy", "13", status); + + vvd(rc2i[1][0], -0.2384257057469842953e-7, 1e-12, + "iauC2ixy", "21", status); + vvd(rc2i[1][1], 0.9999999991917468964, 1e-12, + "iauC2ixy", "22", status); + vvd(rc2i[1][2], -0.4020579110172324363e-4, 1e-12, + "iauC2ixy", "23", status); + + vvd(rc2i[2][0], 0.5791308486706011000e-3, 1e-12, + "iauC2ixy", "31", status); + vvd(rc2i[2][1], 0.4020579816732961219e-4, 1e-12, + "iauC2ixy", "32", status); + vvd(rc2i[2][2], 0.9999998314954627590, 1e-12, + "iauC2ixy", "33", status); + +} + +static void t_c2ixys(int *status) +/* +** - - - - - - - - - +** t _ c 2 i x y s +** - - - - - - - - - +** +** Test iauC2ixys function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2ixys, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s, rc2i[3][3]; + + + x = 0.5791308486706011000e-3; + y = 0.4020579816732961219e-4; + s = -0.1220040848472271978e-7; + + iauC2ixys(x, y, s, rc2i); + + vvd(rc2i[0][0], 0.9999998323037157138, 1e-12, + "iauC2ixys", "11", status); + vvd(rc2i[0][1], 0.5581984869168499149e-9, 1e-12, + "iauC2ixys", "12", status); + vvd(rc2i[0][2], -0.5791308491611282180e-3, 1e-12, + "iauC2ixys", "13", status); + + vvd(rc2i[1][0], -0.2384261642670440317e-7, 1e-12, + "iauC2ixys", "21", status); + vvd(rc2i[1][1], 0.9999999991917468964, 1e-12, + "iauC2ixys", "22", status); + vvd(rc2i[1][2], -0.4020579110169668931e-4, 1e-12, + "iauC2ixys", "23", status); + + vvd(rc2i[2][0], 0.5791308486706011000e-3, 1e-12, + "iauC2ixys", "31", status); + vvd(rc2i[2][1], 0.4020579816732961219e-4, 1e-12, + "iauC2ixys", "32", status); + vvd(rc2i[2][2], 0.9999998314954627590, 1e-12, + "iauC2ixys", "33", status); + +} + +static void t_c2s(int *status) +/* +** - - - - - - +** t _ c 2 s +** - - - - - - +** +** Test iauC2s function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2s, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], theta, phi; + + + p[0] = 100.0; + p[1] = -50.0; + p[2] = 25.0; + + iauC2s(p, &theta, &phi); + + vvd(theta, -0.4636476090008061162, 1e-14, "iauC2s", "theta", status); + vvd(phi, 0.2199879773954594463, 1e-14, "iauC2s", "phi", status); + +} + +static void t_c2t00a(int *status) +/* +** - - - - - - - - - +** t _ c 2 t 0 0 a +** - - - - - - - - - +** +** Test iauC2t00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2t00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double tta, ttb, uta, utb, xp, yp, rc2t[3][3]; + + + tta = 2400000.5; + uta = 2400000.5; + ttb = 53736.0; + utb = 53736.0; + xp = 2.55060238e-7; + yp = 1.860359247e-6; + + iauC2t00a(tta, ttb, uta, utb, xp, yp, rc2t); + + vvd(rc2t[0][0], -0.1810332128307182668, 1e-12, + "iauC2t00a", "11", status); + vvd(rc2t[0][1], 0.9834769806938457836, 1e-12, + "iauC2t00a", "12", status); + vvd(rc2t[0][2], 0.6555535638688341725e-4, 1e-12, + "iauC2t00a", "13", status); + + vvd(rc2t[1][0], -0.9834768134135984552, 1e-12, + "iauC2t00a", "21", status); + vvd(rc2t[1][1], -0.1810332203649520727, 1e-12, + "iauC2t00a", "22", status); + vvd(rc2t[1][2], 0.5749801116141056317e-3, 1e-12, + "iauC2t00a", "23", status); + + vvd(rc2t[2][0], 0.5773474014081406921e-3, 1e-12, + "iauC2t00a", "31", status); + vvd(rc2t[2][1], 0.3961832391770163647e-4, 1e-12, + "iauC2t00a", "32", status); + vvd(rc2t[2][2], 0.9999998325501692289, 1e-12, + "iauC2t00a", "33", status); + +} + +static void t_c2t00b(int *status) +/* +** - - - - - - - - - +** t _ c 2 t 0 0 b +** - - - - - - - - - +** +** Test iauC2t00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2t00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double tta, ttb, uta, utb, xp, yp, rc2t[3][3]; + + + tta = 2400000.5; + uta = 2400000.5; + ttb = 53736.0; + utb = 53736.0; + xp = 2.55060238e-7; + yp = 1.860359247e-6; + + iauC2t00b(tta, ttb, uta, utb, xp, yp, rc2t); + + vvd(rc2t[0][0], -0.1810332128439678965, 1e-12, + "iauC2t00b", "11", status); + vvd(rc2t[0][1], 0.9834769806913872359, 1e-12, + "iauC2t00b", "12", status); + vvd(rc2t[0][2], 0.6555565082458415611e-4, 1e-12, + "iauC2t00b", "13", status); + + vvd(rc2t[1][0], -0.9834768134115435923, 1e-12, + "iauC2t00b", "21", status); + vvd(rc2t[1][1], -0.1810332203784001946, 1e-12, + "iauC2t00b", "22", status); + vvd(rc2t[1][2], 0.5749793922030017230e-3, 1e-12, + "iauC2t00b", "23", status); + + vvd(rc2t[2][0], 0.5773467471863534901e-3, 1e-12, + "iauC2t00b", "31", status); + vvd(rc2t[2][1], 0.3961790411549945020e-4, 1e-12, + "iauC2t00b", "32", status); + vvd(rc2t[2][2], 0.9999998325505635738, 1e-12, + "iauC2t00b", "33", status); + +} + +static void t_c2t06a(int *status) +/* +** - - - - - - - - - +** t _ c 2 t 0 6 a +** - - - - - - - - - +** +** Test iauC2t06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2t06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double tta, ttb, uta, utb, xp, yp, rc2t[3][3]; + + + tta = 2400000.5; + uta = 2400000.5; + ttb = 53736.0; + utb = 53736.0; + xp = 2.55060238e-7; + yp = 1.860359247e-6; + + iauC2t06a(tta, ttb, uta, utb, xp, yp, rc2t); + + vvd(rc2t[0][0], -0.1810332128305897282, 1e-12, + "iauC2t06a", "11", status); + vvd(rc2t[0][1], 0.9834769806938592296, 1e-12, + "iauC2t06a", "12", status); + vvd(rc2t[0][2], 0.6555550962998436505e-4, 1e-12, + "iauC2t06a", "13", status); + + vvd(rc2t[1][0], -0.9834768134136214897, 1e-12, + "iauC2t06a", "21", status); + vvd(rc2t[1][1], -0.1810332203649130832, 1e-12, + "iauC2t06a", "22", status); + vvd(rc2t[1][2], 0.5749800844905594110e-3, 1e-12, + "iauC2t06a", "23", status); + + vvd(rc2t[2][0], 0.5773474024748545878e-3, 1e-12, + "iauC2t06a", "31", status); + vvd(rc2t[2][1], 0.3961816829632690581e-4, 1e-12, + "iauC2t06a", "32", status); + vvd(rc2t[2][2], 0.9999998325501747785, 1e-12, + "iauC2t06a", "33", status); + +} + +static void t_c2tcio(int *status) +/* +** - - - - - - - - - +** t _ c 2 t c i o +** - - - - - - - - - +** +** Test iauC2tcio function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2tcio, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rc2i[3][3], era, rpom[3][3], rc2t[3][3]; + + + rc2i[0][0] = 0.9999998323037164738; + rc2i[0][1] = 0.5581526271714303683e-9; + rc2i[0][2] = -0.5791308477073443903e-3; + + rc2i[1][0] = -0.2384266227524722273e-7; + rc2i[1][1] = 0.9999999991917404296; + rc2i[1][2] = -0.4020594955030704125e-4; + + rc2i[2][0] = 0.5791308472168153320e-3; + rc2i[2][1] = 0.4020595661593994396e-4; + rc2i[2][2] = 0.9999998314954572365; + + era = 1.75283325530307; + + rpom[0][0] = 0.9999999999999674705; + rpom[0][1] = -0.1367174580728847031e-10; + rpom[0][2] = 0.2550602379999972723e-6; + + rpom[1][0] = 0.1414624947957029721e-10; + rpom[1][1] = 0.9999999999982694954; + rpom[1][2] = -0.1860359246998866338e-5; + + rpom[2][0] = -0.2550602379741215275e-6; + rpom[2][1] = 0.1860359247002413923e-5; + rpom[2][2] = 0.9999999999982369658; + + + iauC2tcio(rc2i, era, rpom, rc2t); + + vvd(rc2t[0][0], -0.1810332128307110439, 1e-12, + "iauC2tcio", "11", status); + vvd(rc2t[0][1], 0.9834769806938470149, 1e-12, + "iauC2tcio", "12", status); + vvd(rc2t[0][2], 0.6555535638685466874e-4, 1e-12, + "iauC2tcio", "13", status); + + vvd(rc2t[1][0], -0.9834768134135996657, 1e-12, + "iauC2tcio", "21", status); + vvd(rc2t[1][1], -0.1810332203649448367, 1e-12, + "iauC2tcio", "22", status); + vvd(rc2t[1][2], 0.5749801116141106528e-3, 1e-12, + "iauC2tcio", "23", status); + + vvd(rc2t[2][0], 0.5773474014081407076e-3, 1e-12, + "iauC2tcio", "31", status); + vvd(rc2t[2][1], 0.3961832391772658944e-4, 1e-12, + "iauC2tcio", "32", status); + vvd(rc2t[2][2], 0.9999998325501691969, 1e-12, + "iauC2tcio", "33", status); + +} + +static void t_c2teqx(int *status) +/* +** - - - - - - - - - +** t _ c 2 t e q x +** - - - - - - - - - +** +** Test iauC2teqx function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2teqx, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3], gst, rpom[3][3], rc2t[3][3]; + + + rbpn[0][0] = 0.9999989440476103608; + rbpn[0][1] = -0.1332881761240011518e-2; + rbpn[0][2] = -0.5790767434730085097e-3; + + rbpn[1][0] = 0.1332858254308954453e-2; + rbpn[1][1] = 0.9999991109044505944; + rbpn[1][2] = -0.4097782710401555759e-4; + + rbpn[2][0] = 0.5791308472168153320e-3; + rbpn[2][1] = 0.4020595661593994396e-4; + rbpn[2][2] = 0.9999998314954572365; + + gst = 1.754166138040730516; + + rpom[0][0] = 0.9999999999999674705; + rpom[0][1] = -0.1367174580728847031e-10; + rpom[0][2] = 0.2550602379999972723e-6; + + rpom[1][0] = 0.1414624947957029721e-10; + rpom[1][1] = 0.9999999999982694954; + rpom[1][2] = -0.1860359246998866338e-5; + + rpom[2][0] = -0.2550602379741215275e-6; + rpom[2][1] = 0.1860359247002413923e-5; + rpom[2][2] = 0.9999999999982369658; + + iauC2teqx(rbpn, gst, rpom, rc2t); + + vvd(rc2t[0][0], -0.1810332128528685730, 1e-12, + "iauC2teqx", "11", status); + vvd(rc2t[0][1], 0.9834769806897685071, 1e-12, + "iauC2teqx", "12", status); + vvd(rc2t[0][2], 0.6555535639982634449e-4, 1e-12, + "iauC2teqx", "13", status); + + vvd(rc2t[1][0], -0.9834768134095211257, 1e-12, + "iauC2teqx", "21", status); + vvd(rc2t[1][1], -0.1810332203871023800, 1e-12, + "iauC2teqx", "22", status); + vvd(rc2t[1][2], 0.5749801116126438962e-3, 1e-12, + "iauC2teqx", "23", status); + + vvd(rc2t[2][0], 0.5773474014081539467e-3, 1e-12, + "iauC2teqx", "31", status); + vvd(rc2t[2][1], 0.3961832391768640871e-4, 1e-12, + "iauC2teqx", "32", status); + vvd(rc2t[2][2], 0.9999998325501691969, 1e-12, + "iauC2teqx", "33", status); + +} + +static void t_c2tpe(int *status) +/* +** - - - - - - - - +** t _ c 2 t p e +** - - - - - - - - +** +** Test iauC2tpe function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2tpe, vvd +** +** This revision: 2013 August 7 +*/ +{ + double tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t[3][3]; + + + tta = 2400000.5; + uta = 2400000.5; + ttb = 53736.0; + utb = 53736.0; + deps = 0.4090789763356509900; + dpsi = -0.9630909107115582393e-5; + xp = 2.55060238e-7; + yp = 1.860359247e-6; + + iauC2tpe(tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t); + + vvd(rc2t[0][0], -0.1813677995763029394, 1e-12, + "iauC2tpe", "11", status); + vvd(rc2t[0][1], 0.9023482206891683275, 1e-12, + "iauC2tpe", "12", status); + vvd(rc2t[0][2], -0.3909902938641085751, 1e-12, + "iauC2tpe", "13", status); + + vvd(rc2t[1][0], -0.9834147641476804807, 1e-12, + "iauC2tpe", "21", status); + vvd(rc2t[1][1], -0.1659883635434995121, 1e-12, + "iauC2tpe", "22", status); + vvd(rc2t[1][2], 0.7309763898042819705e-1, 1e-12, + "iauC2tpe", "23", status); + + vvd(rc2t[2][0], 0.1059685430673215247e-2, 1e-12, + "iauC2tpe", "31", status); + vvd(rc2t[2][1], 0.3977631855605078674, 1e-12, + "iauC2tpe", "32", status); + vvd(rc2t[2][2], 0.9174875068792735362, 1e-12, + "iauC2tpe", "33", status); + +} + +static void t_c2txy(int *status) +/* +** - - - - - - - - +** t _ c 2 t x y +** - - - - - - - - +** +** Test iauC2txy function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauC2txy, vvd +** +** This revision: 2013 August 7 +*/ +{ + double tta, ttb, uta, utb, x, y, xp, yp, rc2t[3][3]; + + + tta = 2400000.5; + uta = 2400000.5; + ttb = 53736.0; + utb = 53736.0; + x = 0.5791308486706011000e-3; + y = 0.4020579816732961219e-4; + xp = 2.55060238e-7; + yp = 1.860359247e-6; + + iauC2txy(tta, ttb, uta, utb, x, y, xp, yp, rc2t); + + vvd(rc2t[0][0], -0.1810332128306279253, 1e-12, + "iauC2txy", "11", status); + vvd(rc2t[0][1], 0.9834769806938520084, 1e-12, + "iauC2txy", "12", status); + vvd(rc2t[0][2], 0.6555551248057665829e-4, 1e-12, + "iauC2txy", "13", status); + + vvd(rc2t[1][0], -0.9834768134136142314, 1e-12, + "iauC2txy", "21", status); + vvd(rc2t[1][1], -0.1810332203649529312, 1e-12, + "iauC2txy", "22", status); + vvd(rc2t[1][2], 0.5749800843594139912e-3, 1e-12, + "iauC2txy", "23", status); + + vvd(rc2t[2][0], 0.5773474028619264494e-3, 1e-12, + "iauC2txy", "31", status); + vvd(rc2t[2][1], 0.3961816546911624260e-4, 1e-12, + "iauC2txy", "32", status); + vvd(rc2t[2][2], 0.9999998325501746670, 1e-12, + "iauC2txy", "33", status); + +} + +static void t_cal2jd(int *status) +/* +** - - - - - - - - - +** t _ c a l 2 j d +** - - - - - - - - - +** +** Test iauCal2jd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauCal2jd, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + int j; + double djm0, djm; + + + j = iauCal2jd(2003, 06, 01, &djm0, &djm); + + vvd(djm0, 2400000.5, 0.0, "iauCal2jd", "djm0", status); + vvd(djm, 52791.0, 0.0, "iauCal2jd", "djm", status); + + viv(j, 0, "iauCal2jd", "j", status); + +} + +static void t_cp(int *status) +/* +** - - - - - +** t _ c p +** - - - - - +** +** Test iauCp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauCp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], c[3]; + + + p[0] = 0.3; + p[1] = 1.2; + p[2] = -2.5; + + iauCp(p, c); + + vvd(c[0], 0.3, 0.0, "iauCp", "1", status); + vvd(c[1], 1.2, 0.0, "iauCp", "2", status); + vvd(c[2], -2.5, 0.0, "iauCp", "3", status); +} + +static void t_cpv(int *status) +/* +** - - - - - - +** t _ c p v +** - - - - - - +** +** Test iauCpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauCpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], c[2][3]; + + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = -0.5; + pv[1][1] = 3.1; + pv[1][2] = 0.9; + + iauCpv(pv, c); + + vvd(c[0][0], 0.3, 0.0, "iauCpv", "p1", status); + vvd(c[0][1], 1.2, 0.0, "iauCpv", "p2", status); + vvd(c[0][2], -2.5, 0.0, "iauCpv", "p3", status); + + vvd(c[1][0], -0.5, 0.0, "iauCpv", "v1", status); + vvd(c[1][1], 3.1, 0.0, "iauCpv", "v2", status); + vvd(c[1][2], 0.9, 0.0, "iauCpv", "v3", status); + +} + +static void t_cr(int *status) +/* +** - - - - - +** t _ c r +** - - - - - +** +** Test iauCr function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauCr, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], c[3][3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauCr(r, c); + + vvd(c[0][0], 2.0, 0.0, "iauCr", "11", status); + vvd(c[0][1], 3.0, 0.0, "iauCr", "12", status); + vvd(c[0][2], 2.0, 0.0, "iauCr", "13", status); + + vvd(c[1][0], 3.0, 0.0, "iauCr", "21", status); + vvd(c[1][1], 2.0, 0.0, "iauCr", "22", status); + vvd(c[1][2], 3.0, 0.0, "iauCr", "23", status); + + vvd(c[2][0], 3.0, 0.0, "iauCr", "31", status); + vvd(c[2][1], 4.0, 0.0, "iauCr", "32", status); + vvd(c[2][2], 5.0, 0.0, "iauCr", "33", status); +} + +static void t_d2dtf(int *status ) +/* +** - - - - - - - - +** t _ d 2 d t f +** - - - - - - - - +** +** Test iauD2dtf function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauD2dtf, viv +** +** This revision: 2013 August 7 +*/ +{ + int j, iy, im, id, ihmsf[4]; + + + j = iauD2dtf("UTC", 5, 2400000.5, 49533.99999, &iy, &im, &id, ihmsf); + + viv(iy, 1994, "iauD2dtf", "y", status); + viv(im, 6, "iauD2dtf", "mo", status); + viv(id, 30, "iauD2dtf", "d", status); + viv(ihmsf[0], 23, "iauD2dtf", "h", status); + viv(ihmsf[1], 59, "iauD2dtf", "m", status); + viv(ihmsf[2], 60, "iauD2dtf", "s", status); + viv(ihmsf[3], 13599, "iauD2dtf", "f", status); + viv(j, 0, "iauD2dtf", "j", status); + +} + +static void t_d2tf(int *status) +/* +** - - - - - - - +** t _ d 2 t f +** - - - - - - - +** +** Test iauD2tf function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauD2tf, viv, vvd +** +** This revision: 2013 August 7 +*/ +{ + int ihmsf[4]; + char s; + + + iauD2tf(4, -0.987654321, &s, ihmsf); + + viv((int)s, '-', "iauD2tf", "s", status); + + viv(ihmsf[0], 23, "iauD2tf", "0", status); + viv(ihmsf[1], 42, "iauD2tf", "1", status); + viv(ihmsf[2], 13, "iauD2tf", "2", status); + viv(ihmsf[3], 3333, "iauD2tf", "3", status); + +} + +static void t_dat(int *status) +/* +** - - - - - - +** t _ d a t +** - - - - - - +** +** Test iauDat function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauDat, vvd, viv +** +** This revision: 2016 July 11 +*/ +{ + int j; + double deltat; + + + j = iauDat(2003, 6, 1, 0.0, &deltat); + + vvd(deltat, 32.0, 0.0, "iauDat", "d1", status); + viv(j, 0, "iauDat", "j1", status); + + j = iauDat(2008, 1, 17, 0.0, &deltat); + + vvd(deltat, 33.0, 0.0, "iauDat", "d2", status); + viv(j, 0, "iauDat", "j2", status); + + j = iauDat(2017, 9, 1, 0.0, &deltat); + + vvd(deltat, 37.0, 0.0, "iauDat", "d3", status); + viv(j, 0, "iauDat", "j3", status); + +} + +static void t_dtdb(int *status) +/* +** - - - - - - - +** t _ d t d b +** - - - - - - - +** +** Test iauDtdb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauDtdb, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dtdb; + + + dtdb = iauDtdb(2448939.5, 0.123, 0.76543, 5.0123, 5525.242, 3190.0); + + vvd(dtdb, -0.1280368005936998991e-2, 1e-15, "iauDtdb", "", status); + +} + +static void t_dtf2d(int *status) +/* +** - - - - - - - - +** t _ d t f 2 d +** - - - - - - - - +** +** Test iauDtf2d function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauDtf2d, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauDtf2d("UTC", 1994, 6, 30, 23, 59, 60.13599, &u1, &u2); + + vvd(u1+u2, 2449534.49999, 1e-6, "iauDtf2d", "u", status); + viv(j, 0, "iauDtf2d", "j", status); + +} + +static void t_eceq06(int *status) +/* +** - - - - - +** t _ e c e q 0 6 +** - - - - - +** +** Test iauEceq06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEceq06, vvd +** +** This revision: 2016 March 12 +*/ +{ + double date1, date2, dl, db, dr, dd; + + + date1 = 2456165.5; + date2 = 0.401182685; + dl = 5.1; + db = -0.9; + + iauEceq06(date1, date2, dl, db, &dr, &dd); + + vvd(dr, 5.533459733613627767, 1e-14, "iauEceq06", "dr", status); + vvd(dd, -1.246542932554480576, 1e-14, "iauEceq06", "dd", status); + +} + +static void t_ecm06(int *status) +/* +** - - - - - - - - +** t _ e c m 0 6 +** - - - - - - - - +** +** Test iauEcm06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEcm06, vvd +** +** This revision: 2016 March 12 +*/ +{ + double date1, date2, rm[3][3]; + + + date1 = 2456165.5; + date2 = 0.401182685; + + iauEcm06(date1, date2, rm); + + vvd(rm[0][0], 0.9999952427708701137, 1e-14, + "iauEcm06", "rm11", status); + vvd(rm[0][1], -0.2829062057663042347e-2, 1e-14, + "iauEcm06", "rm12", status); + vvd(rm[0][2], -0.1229163741100017629e-2, 1e-14, + "iauEcm06", "rm13", status); + vvd(rm[1][0], 0.3084546876908653562e-2, 1e-14, + "iauEcm06", "rm21", status); + vvd(rm[1][1], 0.9174891871550392514, 1e-14, + "iauEcm06", "rm22", status); + vvd(rm[1][2], 0.3977487611849338124, 1e-14, + "iauEcm06", "rm23", status); + vvd(rm[2][0], 0.2488512951527405928e-5, 1e-14, + "iauEcm06", "rm31", status); + vvd(rm[2][1], -0.3977506604161195467, 1e-14, + "iauEcm06", "rm32", status); + vvd(rm[2][2], 0.9174935488232863071, 1e-14, + "iauEcm06", "rm33", status); + +} + +static void t_ee00(int *status) +/* +** - - - - - - - +** t _ e e 0 0 +** - - - - - - - +** +** Test iauEe00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEe00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epsa, dpsi, ee; + + + epsa = 0.4090789763356509900; + dpsi = -0.9630909107115582393e-5; + + ee = iauEe00(2400000.5, 53736.0, epsa, dpsi); + + vvd(ee, -0.8834193235367965479e-5, 1e-18, "iauEe00", "", status); + +} + +static void t_ee00a(int *status) +/* +** - - - - - - - - +** t _ e e 0 0 a +** - - - - - - - - +** +** Test iauEe00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEe00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double ee; + + + ee = iauEe00a(2400000.5, 53736.0); + + vvd(ee, -0.8834192459222588227e-5, 1e-18, "iauEe00a", "", status); + +} + +static void t_ee00b(int *status) +/* +** - - - - - - - - +** t _ e e 0 0 b +** - - - - - - - - +** +** Test iauEe00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEe00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double ee; + + + ee = iauEe00b(2400000.5, 53736.0); + + vvd(ee, -0.8835700060003032831e-5, 1e-18, "iauEe00b", "", status); + +} + +static void t_ee06a(int *status) +/* +** - - - - - - - - +** t _ e e 0 6 a +** - - - - - - - - +** +** Test iauEe06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEe06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double ee; + + + ee = iauEe06a(2400000.5, 53736.0); + + vvd(ee, -0.8834195072043790156e-5, 1e-15, "iauEe06a", "", status); +} + +static void t_eect00(int *status) +/* +** - - - - - - - - - +** t _ e e c t 0 0 +** - - - - - - - - - +** +** Test iauEect00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEect00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double eect; + + + eect = iauEect00(2400000.5, 53736.0); + + vvd(eect, 0.2046085004885125264e-8, 1e-20, "iauEect00", "", status); + +} + +static void t_eform(int *status) +/* +** - - - - - - - - +** t _ e f o r m +** - - - - - - - - +** +** Test iauEform function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEform, viv, vvd +** +** This revision: 2016 March 12 +*/ +{ + int j; + double a, f; + + j = iauEform(0, &a, &f); + + viv(j, -1, "iauEform", "j0", status); + + j = iauEform(WGS84, &a, &f); + + viv(j, 0, "iauEform", "j1", status); + vvd(a, 6378137.0, 1e-10, "iauEform", "a1", status); + vvd(f, 0.3352810664747480720e-2, 1e-18, "iauEform", "f1", status); + + j = iauEform(GRS80, &a, &f); + + viv(j, 0, "iauEform", "j2", status); + vvd(a, 6378137.0, 1e-10, "iauEform", "a2", status); + vvd(f, 0.3352810681182318935e-2, 1e-18, "iauEform", "f2", status); + + j = iauEform(WGS72, &a, &f); + + viv(j, 0, "iauEform", "j2", status); + vvd(a, 6378135.0, 1e-10, "iauEform", "a3", status); + vvd(f, 0.3352779454167504862e-2, 1e-18, "iauEform", "f3", status); + + j = iauEform(4, &a, &f); + viv(j, -1, "iauEform", "j3", status); +} + +static void t_eo06a(int *status) +/* +** - - - - - - - - +** t _ e o 0 6 a +** - - - - - - - - +** +** Test iauEo06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEo06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double eo; + + + eo = iauEo06a(2400000.5, 53736.0); + + vvd(eo, -0.1332882371941833644e-2, 1e-15, "iauEo06a", "", status); + +} + +static void t_eors(int *status) +/* +** - - - - - - - +** t _ e o r s +** - - - - - - - +** +** Test iauEors function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEors, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rnpb[3][3], s, eo; + + + rnpb[0][0] = 0.9999989440476103608; + rnpb[0][1] = -0.1332881761240011518e-2; + rnpb[0][2] = -0.5790767434730085097e-3; + + rnpb[1][0] = 0.1332858254308954453e-2; + rnpb[1][1] = 0.9999991109044505944; + rnpb[1][2] = -0.4097782710401555759e-4; + + rnpb[2][0] = 0.5791308472168153320e-3; + rnpb[2][1] = 0.4020595661593994396e-4; + rnpb[2][2] = 0.9999998314954572365; + + s = -0.1220040848472271978e-7; + + eo = iauEors(rnpb, s); + + vvd(eo, -0.1332882715130744606e-2, 1e-14, "iauEors", "", status); + +} + +static void t_epb(int *status) +/* +** - - - - - - +** t _ e p b +** - - - - - - +** +** Test iauEpb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEpb, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epb; + + + epb = iauEpb(2415019.8135, 30103.18648); + + vvd(epb, 1982.418424159278580, 1e-12, "iauEpb", "", status); + +} + +static void t_epb2jd(int *status) +/* +** - - - - - - - - - +** t _ e p b 2 j d +** - - - - - - - - - +** +** Test iauEpb2jd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEpb2jd, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epb, djm0, djm; + + + epb = 1957.3; + + iauEpb2jd(epb, &djm0, &djm); + + vvd(djm0, 2400000.5, 1e-9, "iauEpb2jd", "djm0", status); + vvd(djm, 35948.1915101513, 1e-9, "iauEpb2jd", "mjd", status); + +} + +static void t_epj(int *status) +/* +** - - - - - - +** t _ e p j +** - - - - - - +** +** Test iauEpj function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEpj, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epj; + + + epj = iauEpj(2451545, -7392.5); + + vvd(epj, 1979.760438056125941, 1e-12, "iauEpj", "", status); + +} + +static void t_epj2jd(int *status) +/* +** - - - - - - - - - +** t _ e p j 2 j d +** - - - - - - - - - +** +** Test iauEpj2jd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEpj2jd, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epj, djm0, djm; + + + epj = 1996.8; + + iauEpj2jd(epj, &djm0, &djm); + + vvd(djm0, 2400000.5, 1e-9, "iauEpj2jd", "djm0", status); + vvd(djm, 50375.7, 1e-9, "iauEpj2jd", "mjd", status); + +} + +static void t_epv00(int *status) +/* +** - - - - - - - - +** t _ e p v 0 0 +** - - - - - - - - +** +** Test iauEpv00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEpv00, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double pvh[2][3], pvb[2][3]; + int j; + + + j = iauEpv00(2400000.5, 53411.52501161, pvh, pvb); + + vvd(pvh[0][0], -0.7757238809297706813, 1e-14, + "iauEpv00", "ph(x)", status); + vvd(pvh[0][1], 0.5598052241363340596, 1e-14, + "iauEpv00", "ph(y)", status); + vvd(pvh[0][2], 0.2426998466481686993, 1e-14, + "iauEpv00", "ph(z)", status); + + vvd(pvh[1][0], -0.1091891824147313846e-1, 1e-15, + "iauEpv00", "vh(x)", status); + vvd(pvh[1][1], -0.1247187268440845008e-1, 1e-15, + "iauEpv00", "vh(y)", status); + vvd(pvh[1][2], -0.5407569418065039061e-2, 1e-15, + "iauEpv00", "vh(z)", status); + + vvd(pvb[0][0], -0.7714104440491111971, 1e-14, + "iauEpv00", "pb(x)", status); + vvd(pvb[0][1], 0.5598412061824171323, 1e-14, + "iauEpv00", "pb(y)", status); + vvd(pvb[0][2], 0.2425996277722452400, 1e-14, + "iauEpv00", "pb(z)", status); + + vvd(pvb[1][0], -0.1091874268116823295e-1, 1e-15, + "iauEpv00", "vb(x)", status); + vvd(pvb[1][1], -0.1246525461732861538e-1, 1e-15, + "iauEpv00", "vb(y)", status); + vvd(pvb[1][2], -0.5404773180966231279e-2, 1e-15, + "iauEpv00", "vb(z)", status); + + viv(j, 0, "iauEpv00", "j", status); + +} + +static void t_eqec06(int *status) +/* +** - - - - - - - - - +** t _ e q e c 0 6 +** - - - - - - - - - +** +** Test iauEqec06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEqec06, vvd +** +** This revision: 2016 March 12 +*/ +{ + double date1, date2, dr, dd, dl, db; + + + date1 = 1234.5; + date2 = 2440000.5; + dr = 1.234; + dd = 0.987; + + iauEqec06(date1, date2, dr, dd, &dl, &db); + + vvd(dl, 1.342509918994654619, 1e-14, "iauEqec06", "dl", status); + vvd(db, 0.5926215259704608132, 1e-14, "iauEqec06", "db", status); + +} + +static void t_eqeq94(int *status) +/* +** - - - - - - - - - +** t _ e q e q 9 4 +** - - - - - - - - - +** +** Test iauEqeq94 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEqeq94, vvd +** +** This revision: 2013 August 7 +*/ +{ + double eqeq; + + + eqeq = iauEqeq94(2400000.5, 41234.0); + + vvd(eqeq, 0.5357758254609256894e-4, 1e-17, "iauEqeq94", "", status); + +} + +static void t_era00(int *status) +/* +** - - - - - - - - +** t _ e r a 0 0 +** - - - - - - - - +** +** Test iauEra00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauEra00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double era00; + + + era00 = iauEra00(2400000.5, 54388.0); + + vvd(era00, 0.4022837240028158102, 1e-12, "iauEra00", "", status); + +} + +static void t_fad03(int *status) +/* +** - - - - - - - - +** t _ f a d 0 3 +** - - - - - - - - +** +** Test iauFad03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFad03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFad03(0.80), 1.946709205396925672, 1e-12, + "iauFad03", "", status); +} + +static void t_fae03(int *status) +/* +** - - - - - - - - +** t _ f a e 0 3 +** - - - - - - - - +** +** Test iauFae03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFae03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFae03(0.80), 1.744713738913081846, 1e-12, + "iauFae03", "", status); +} + +static void t_faf03(int *status) +/* +** - - - - - - - - +** t _ f a f 0 3 +** - - - - - - - - +** +** Test iauFaf03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFaf03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFaf03(0.80), 0.2597711366745499518, 1e-12, + "iauFaf03", "", status); +} + +static void t_faju03(int *status) +/* +** - - - - - - - - - +** t _ f a j u 0 3 +** - - - - - - - - - +** +** Test iauFaju03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFaju03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFaju03(0.80), 5.275711665202481138, 1e-12, + "iauFaju03", "", status); +} + +static void t_fal03(int *status) +/* +** - - - - - - - - +** t _ f a l 0 3 +** - - - - - - - - +** +** Test iauFal03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFal03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFal03(0.80), 5.132369751108684150, 1e-12, + "iauFal03", "", status); +} + +static void t_falp03(int *status) +/* +** - - - - - - - - - +** t _ f a l p 0 3 +** - - - - - - - - - +** +** Test iauFalp03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFalp03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFalp03(0.80), 6.226797973505507345, 1e-12, + "iauFalp03", "", status); +} + +static void t_fama03(int *status) +/* +** - - - - - - - - - +** t _ f a m a 0 3 +** - - - - - - - - - +** +** Test iauFama03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFama03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFama03(0.80), 3.275506840277781492, 1e-12, + "iauFama03", "", status); +} + +static void t_fame03(int *status) +/* +** - - - - - - - - - +** t _ f a m e 0 3 +** - - - - - - - - - +** +** Test iauFame03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFame03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFame03(0.80), 5.417338184297289661, 1e-12, + "iauFame03", "", status); +} + +static void t_fane03(int *status) +/* +** - - - - - - - - - +** t _ f a n e 0 3 +** - - - - - - - - - +** +** Test iauFane03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFane03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFane03(0.80), 2.079343830860413523, 1e-12, + "iauFane03", "", status); +} + +static void t_faom03(int *status) +/* +** - - - - - - - - - +** t _ f a o m 0 3 +** - - - - - - - - - +** +** Test iauFaom03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFaom03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFaom03(0.80), -5.973618440951302183, 1e-12, + "iauFaom03", "", status); +} + +static void t_fapa03(int *status) +/* +** - - - - - - - - - +** t _ f a p a 0 3 +** - - - - - - - - - +** +** Test iauFapa03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFapa03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFapa03(0.80), 0.1950884762240000000e-1, 1e-12, + "iauFapa03", "", status); +} + +static void t_fasa03(int *status) +/* +** - - - - - - - - - +** t _ f a s a 0 3 +** - - - - - - - - - +** +** Test iauFasa03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFasa03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFasa03(0.80), 5.371574539440827046, 1e-12, + "iauFasa03", "", status); +} + +static void t_faur03(int *status) +/* +** - - - - - - - - - +** t _ f a u r 0 3 +** - - - - - - - - - +** +** Test iauFaur03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFaur03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFaur03(0.80), 5.180636450180413523, 1e-12, + "iauFaur03", "", status); +} + +static void t_fave03(int *status) +/* +** - - - - - - - - - +** t _ f a v e 0 3 +** - - - - - - - - - +** +** Test iauFave03 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFave03, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauFave03(0.80), 3.424900460533758000, 1e-12, + "iauFave03", "", status); +} + +static void t_fk425(int *status) +/* +** - - - - - - - - +** t _ f k 4 2 5 +** - - - - - - - - +** +** Test iauFk425 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk425, vvd +** +** This revision: 2018 December 6 +*/ +{ + double r1950, d1950, dr1950, dd1950, p1950, v1950, + r2000, d2000, dr2000, dd2000, p2000, v2000; + + + r1950 = 0.07626899753879587532; + d1950 = -1.137405378399605780; + dr1950 = 0.1973749217849087460e-4; + dd1950 = 0.5659714913272723189e-5; + p1950 = 0.134; + v1950 = 8.7; + + iauFk425(r1950, d1950, dr1950, dd1950, p1950, v1950, + &r2000, &d2000, &dr2000, &dd2000, &p2000, &v2000); + + vvd(r2000, 0.08757989933556446040, 1e-14, + "iauFk425", "r2000", status); + vvd(d2000, -1.132279113042091895, 1e-12, + "iauFk425", "d2000", status); + vvd(dr2000, 0.1953670614474396139e-4, 1e-17, + "iauFk425", "dr2000", status); + vvd(dd2000, 0.5637686678659640164e-5, 1e-18, + "iauFk425", "dd2000", status); + vvd(p2000, 0.1339919950582767871, 1e-13, "iauFk425", "p2000", status); + vvd(v2000, 8.736999669183529069, 1e-12, "iauFk425", "v2000", status); + +} + +static void t_fk45z(int *status) +/* +** - - - - - - - - +** t _ f k 4 5 z +** - - - - - - - - +** +** Test iauFk45z function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk45z, vvd +** +** This revision: 2018 December 6 +*/ +{ + double r1950, d1950, bepoch, r2000, d2000; + + + r1950 = 0.01602284975382960982; + d1950 = -0.1164347929099906024; + bepoch = 1954.677617625256806; + + iauFk45z(r1950, d1950, bepoch, &r2000, &d2000); + + vvd(r2000, 0.02719295911606862303, 1e-15, + "iauFk45z", "r2000", status); + vvd(d2000, -0.1115766001565926892, 1e-13, + "iauFk45z", "d2000", status); + +} + +static void t_fk524(int *status) +/* +** - - - - - - - - +** t _ f k 5 2 4 +** - - - - - - - - +** +** Test iauFk524 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk524, vvd +** +** This revision: 2018 December 6 +*/ +{ + double r2000, d2000, dr2000, dd2000, p2000, v2000, + r1950, d1950, dr1950, dd1950, p1950, v1950; + + + r2000 = 0.8723503576487275595; + d2000 = -0.7517076365138887672; + dr2000 = 0.2019447755430472323e-4; + dd2000 = 0.3541563940505160433e-5; + p2000 = 0.1559; + v2000 = 86.87; + + iauFk524(r2000, d2000, dr2000, dd2000, p2000, v2000, + &r1950, &d1950, &dr1950,&dd1950, &p1950, &v1950); + + vvd(r1950, 0.8636359659799603487, 1e-13, + "iauFk524", "r1950", status); + vvd(d1950, -0.7550281733160843059, 1e-13, + "iauFk524", "d1950", status); + vvd(dr1950, 0.2023628192747172486e-4, 1e-17, + "iauFk524", "dr1950", status); + vvd(dd1950, 0.3624459754935334718e-5, 1e-18, + "iauFk524", "dd1950", status); + vvd(p1950, 0.1560079963299390241, 1e-13, + "iauFk524", "p1950", status); + vvd(v1950, 86.79606353469163751, 1e-11, "iauFk524", "v1950", status); + +} + +static void t_fk52h(int *status) +/* +** - - - - - - - - +** t _ f k 5 2 h +** - - - - - - - - +** +** Test iauFk52h function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk52h, vvd +** +** This revision: 2017 January 3 +*/ +{ + double r5, d5, dr5, dd5, px5, rv5, rh, dh, drh, ddh, pxh, rvh; + + + r5 = 1.76779433; + d5 = -0.2917517103; + dr5 = -1.91851572e-7; + dd5 = -5.8468475e-6; + px5 = 0.379210; + rv5 = -7.6; + + iauFk52h(r5, d5, dr5, dd5, px5, rv5, + &rh, &dh, &drh, &ddh, &pxh, &rvh); + + vvd(rh, 1.767794226299947632, 1e-14, + "iauFk52h", "ra", status); + vvd(dh, -0.2917516070530391757, 1e-14, + "iauFk52h", "dec", status); + vvd(drh, -0.19618741256057224e-6,1e-19, + "iauFk52h", "dr5", status); + vvd(ddh, -0.58459905176693911e-5, 1e-19, + "iauFk52h", "dd5", status); + vvd(pxh, 0.37921, 1e-14, + "iauFk52h", "px", status); + vvd(rvh, -7.6000000940000254, 1e-11, + "iauFk52h", "rv", status); + +} + +static void t_fk54z(int *status) +/* +** - - - - - - - - +** t _ f k 5 4 z +** - - - - - - - - +** +** Test iauFk54z function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk54z, vvd +** +** This revision: 2018 December 6 +*/ +{ + double r2000, d2000, bepoch, r1950, d1950, dr1950, dd1950; + + + r2000 = 0.02719026625066316119; + d2000 = -0.1115815170738754813; + bepoch = 1954.677308160316374; + + iauFk54z(r2000, d2000, bepoch, &r1950, &d1950, &dr1950, &dd1950); + + vvd(r1950, 0.01602015588390065476, 1e-14, + "iauFk54z", "r1950", status); + vvd(d1950, -0.1164397101110765346, 1e-13, + "iauFk54z", "d1950", status); + vvd(dr1950, -0.1175712648471090704e-7, 1e-20, + "iauFk54z", "dr1950", status); + vvd(dd1950, 0.2108109051316431056e-7, 1e-20, + "iauFk54z", "dd1950", status); + +} + +static void t_fk5hip(int *status) +/* +** - - - - - - - - - +** t _ f k 5 h i p +** - - - - - - - - - +** +** Test iauFk5hip function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk5hip, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r5h[3][3], s5h[3]; + + + iauFk5hip(r5h, s5h); + + vvd(r5h[0][0], 0.9999999999999928638, 1e-14, + "iauFk5hip", "11", status); + vvd(r5h[0][1], 0.1110223351022919694e-6, 1e-17, + "iauFk5hip", "12", status); + vvd(r5h[0][2], 0.4411803962536558154e-7, 1e-17, + "iauFk5hip", "13", status); + vvd(r5h[1][0], -0.1110223308458746430e-6, 1e-17, + "iauFk5hip", "21", status); + vvd(r5h[1][1], 0.9999999999999891830, 1e-14, + "iauFk5hip", "22", status); + vvd(r5h[1][2], -0.9647792498984142358e-7, 1e-17, + "iauFk5hip", "23", status); + vvd(r5h[2][0], -0.4411805033656962252e-7, 1e-17, + "iauFk5hip", "31", status); + vvd(r5h[2][1], 0.9647792009175314354e-7, 1e-17, + "iauFk5hip", "32", status); + vvd(r5h[2][2], 0.9999999999999943728, 1e-14, + "iauFk5hip", "33", status); + vvd(s5h[0], -0.1454441043328607981e-8, 1e-17, + "iauFk5hip", "s1", status); + vvd(s5h[1], 0.2908882086657215962e-8, 1e-17, + "iauFk5hip", "s2", status); + vvd(s5h[2], 0.3393695767766751955e-8, 1e-17, + "iauFk5hip", "s3", status); + +} + +static void t_fk5hz(int *status) +/* +** - - - - - - - - +** t _ f k 5 h z +** - - - - - - - - +** +** Test iauFk5hz function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFk5hz, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r5, d5, rh, dh; + + + r5 = 1.76779433; + d5 = -0.2917517103; + + iauFk5hz(r5, d5, 2400000.5, 54479.0, &rh, &dh); + + vvd(rh, 1.767794191464423978, 1e-12, "iauFk5hz", "ra", status); + vvd(dh, -0.2917516001679884419, 1e-12, "iauFk5hz", "dec", status); + +} + +static void t_fw2m(int *status) +/* +** - - - - - - - +** t _ f w 2 m +** - - - - - - - +** +** Test iauFw2m function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFw2m, vvd +** +** This revision: 2013 August 7 +*/ +{ + double gamb, phib, psi, eps, r[3][3]; + + + gamb = -0.2243387670997992368e-5; + phib = 0.4091014602391312982; + psi = -0.9501954178013015092e-3; + eps = 0.4091014316587367472; + + iauFw2m(gamb, phib, psi, eps, r); + + vvd(r[0][0], 0.9999995505176007047, 1e-12, + "iauFw2m", "11", status); + vvd(r[0][1], 0.8695404617348192957e-3, 1e-12, + "iauFw2m", "12", status); + vvd(r[0][2], 0.3779735201865582571e-3, 1e-12, + "iauFw2m", "13", status); + + vvd(r[1][0], -0.8695404723772016038e-3, 1e-12, + "iauFw2m", "21", status); + vvd(r[1][1], 0.9999996219496027161, 1e-12, + "iauFw2m", "22", status); + vvd(r[1][2], -0.1361752496887100026e-6, 1e-12, + "iauFw2m", "23", status); + + vvd(r[2][0], -0.3779734957034082790e-3, 1e-12, + "iauFw2m", "31", status); + vvd(r[2][1], -0.1924880848087615651e-6, 1e-12, + "iauFw2m", "32", status); + vvd(r[2][2], 0.9999999285679971958, 1e-12, + "iauFw2m", "33", status); + +} + +static void t_fw2xy(int *status) +/* +** - - - - - - - - +** t _ f w 2 x y +** - - - - - - - - +** +** Test iauFw2xy function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauFw2xy, vvd +** +** This revision: 2013 August 7 +*/ +{ + double gamb, phib, psi, eps, x, y; + + + gamb = -0.2243387670997992368e-5; + phib = 0.4091014602391312982; + psi = -0.9501954178013015092e-3; + eps = 0.4091014316587367472; + + iauFw2xy(gamb, phib, psi, eps, &x, &y); + + vvd(x, -0.3779734957034082790e-3, 1e-14, "iauFw2xy", "x", status); + vvd(y, -0.1924880848087615651e-6, 1e-14, "iauFw2xy", "y", status); + +} + +static void t_g2icrs(int *status) +/* +** - - - - - - - - - +** t _ g 2 i c r s +** - - - - - - - - - +** +** Test iauG2icrs function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauG2icrs, vvd +** +** This revision: 2015 January 30 +*/ +{ + double dl, db, dr, dd; + + + dl = 5.5850536063818546461558105; + db = -0.7853981633974483096156608; + iauG2icrs (dl, db, &dr, &dd); + vvd(dr, 5.9338074302227188048671, 1e-14, "iauG2icrs", "R", status); + vvd(dd, -1.1784870613579944551541, 1e-14, "iauG2icrs", "D", status); + } + +static void t_gc2gd(int *status) +/* +** - - - - - - - - +** t _ g c 2 g d +** - - - - - - - - +** +** Test iauGc2gd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGc2gd, viv, vvd +** +** This revision: 2016 March 12 +*/ +{ + int j; + double xyz[] = {2e6, 3e6, 5.244e6}; + double e, p, h; + + j = iauGc2gd(0, xyz, &e, &p, &h); + + viv(j, -1, "iauGc2gd", "j0", status); + + j = iauGc2gd(WGS84, xyz, &e, &p, &h); + + viv(j, 0, "iauGc2gd", "j1", status); + vvd(e, 0.9827937232473290680, 1e-14, "iauGc2gd", "e1", status); + vvd(p, 0.97160184819075459, 1e-14, "iauGc2gd", "p1", status); + vvd(h, 331.4172461426059892, 1e-8, "iauGc2gd", "h1", status); + + j = iauGc2gd(GRS80, xyz, &e, &p, &h); + + viv(j, 0, "iauGc2gd", "j2", status); + vvd(e, 0.9827937232473290680, 1e-14, "iauGc2gd", "e2", status); + vvd(p, 0.97160184820607853, 1e-14, "iauGc2gd", "p2", status); + vvd(h, 331.41731754844348, 1e-8, "iauGc2gd", "h2", status); + + j = iauGc2gd(WGS72, xyz, &e, &p, &h); + + viv(j, 0, "iauGc2gd", "j3", status); + vvd(e, 0.9827937232473290680, 1e-14, "iauGc2gd", "e3", status); + vvd(p, 0.9716018181101511937, 1e-14, "iauGc2gd", "p3", status); + vvd(h, 333.2770726130318123, 1e-8, "iauGc2gd", "h3", status); + + j = iauGc2gd(4, xyz, &e, &p, &h); + + viv(j, -1, "iauGc2gd", "j4", status); +} + +static void t_gc2gde(int *status) +/* +** - - - - - - - - - +** t _ g c 2 g d e +** - - - - - - - - - +** +** Test iauGc2gde function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGc2gde, viv, vvd +** +** This revision: 2016 March 12 +*/ +{ + int j; + double a = 6378136.0, f = 0.0033528; + double xyz[] = {2e6, 3e6, 5.244e6}; + double e, p, h; + + j = iauGc2gde(a, f, xyz, &e, &p, &h); + + viv(j, 0, "iauGc2gde", "j", status); + vvd(e, 0.9827937232473290680, 1e-14, "iauGc2gde", "e", status); + vvd(p, 0.9716018377570411532, 1e-14, "iauGc2gde", "p", status); + vvd(h, 332.36862495764397, 1e-8, "iauGc2gde", "h", status); +} + +static void t_gd2gc(int *status) +/* +** - - - - - - - - +** t _ g d 2 g c +** - - - - - - - - +** +** Test iauGd2gc function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGd2gc, viv, vvd +** +** This revision: 2016 March 12 +*/ +{ + int j; + double e = 3.1, p = -0.5, h = 2500.0; + double xyz[3]; + + j = iauGd2gc(0, e, p, h, xyz); + + viv(j, -1, "iauGd2gc", "j0", status); + + j = iauGd2gc(WGS84, e, p, h, xyz); + + viv(j, 0, "iauGd2gc", "j1", status); + vvd(xyz[0], -5599000.5577049947, 1e-7, "iauGd2gc", "1/1", status); + vvd(xyz[1], 233011.67223479203, 1e-7, "iauGd2gc", "2/1", status); + vvd(xyz[2], -3040909.4706983363, 1e-7, "iauGd2gc", "3/1", status); + + j = iauGd2gc(GRS80, e, p, h, xyz); + + viv(j, 0, "iauGd2gc", "j2", status); + vvd(xyz[0], -5599000.5577260984, 1e-7, "iauGd2gc", "1/2", status); + vvd(xyz[1], 233011.6722356702949, 1e-7, "iauGd2gc", "2/2", status); + vvd(xyz[2], -3040909.4706095476, 1e-7, "iauGd2gc", "3/2", status); + + j = iauGd2gc(WGS72, e, p, h, xyz); + + viv(j, 0, "iauGd2gc", "j3", status); + vvd(xyz[0], -5598998.7626301490, 1e-7, "iauGd2gc", "1/3", status); + vvd(xyz[1], 233011.5975297822211, 1e-7, "iauGd2gc", "2/3", status); + vvd(xyz[2], -3040908.6861467111, 1e-7, "iauGd2gc", "3/3", status); + + j = iauGd2gc(4, e, p, h, xyz); + + viv(j, -1, "iauGd2gc", "j4", status); +} + +static void t_gd2gce(int *status) +/* +** - - - - - - - - - +** t _ g d 2 g c e +** - - - - - - - - - +** +** Test iauGd2gce function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGd2gce, viv, vvd +** +** This revision: 2016 March 12 +*/ +{ + int j; + double a = 6378136.0, f = 0.0033528; + double e = 3.1, p = -0.5, h = 2500.0; + double xyz[3]; + + j = iauGd2gce(a, f, e, p, h, xyz); + + viv(j, 0, "iauGd2gce", "j", status); + vvd(xyz[0], -5598999.6665116328, 1e-7, "iauGd2gce", "1", status); + vvd(xyz[1], 233011.6351463057189, 1e-7, "iauGd2gce", "2", status); + vvd(xyz[2], -3040909.0517314132, 1e-7, "iauGd2gce", "3", status); +} + +static void t_gmst00(int *status) +/* +** - - - - - - - - - +** t _ g m s t 0 0 +** - - - - - - - - - +** +** Test iauGmst00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGmst00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGmst00(2400000.5, 53736.0, 2400000.5, 53736.0); + + vvd(theta, 1.754174972210740592, 1e-12, "iauGmst00", "", status); + +} + +static void t_gmst06(int *status) +/* +** - - - - - - - - - +** t _ g m s t 0 6 +** - - - - - - - - - +** +** Test iauGmst06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGmst06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGmst06(2400000.5, 53736.0, 2400000.5, 53736.0); + + vvd(theta, 1.754174971870091203, 1e-12, "iauGmst06", "", status); + +} + +static void t_gmst82(int *status) +/* +** - - - - - - - - - +** t _ g m s t 8 2 +** - - - - - - - - - +** +** Test iauGmst82 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGmst82, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGmst82(2400000.5, 53736.0); + + vvd(theta, 1.754174981860675096, 1e-12, "iauGmst82", "", status); + +} + +static void t_gst00a(int *status) +/* +** - - - - - - - - - +** t _ g s t 0 0 a +** - - - - - - - - - +** +** Test iauGst00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGst00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGst00a(2400000.5, 53736.0, 2400000.5, 53736.0); + + vvd(theta, 1.754166138018281369, 1e-12, "iauGst00a", "", status); + +} + +static void t_gst00b(int *status) +/* +** - - - - - - - - - +** t _ g s t 0 0 b +** - - - - - - - - - +** +** Test iauGst00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGst00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGst00b(2400000.5, 53736.0); + + vvd(theta, 1.754166136510680589, 1e-12, "iauGst00b", "", status); + +} + +static void t_gst06(int *status) +/* +** - - - - - - - - +** t _ g s t 0 6 +** - - - - - - - - +** +** Test iauGst06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGst06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rnpb[3][3], theta; + + + rnpb[0][0] = 0.9999989440476103608; + rnpb[0][1] = -0.1332881761240011518e-2; + rnpb[0][2] = -0.5790767434730085097e-3; + + rnpb[1][0] = 0.1332858254308954453e-2; + rnpb[1][1] = 0.9999991109044505944; + rnpb[1][2] = -0.4097782710401555759e-4; + + rnpb[2][0] = 0.5791308472168153320e-3; + rnpb[2][1] = 0.4020595661593994396e-4; + rnpb[2][2] = 0.9999998314954572365; + + theta = iauGst06(2400000.5, 53736.0, 2400000.5, 53736.0, rnpb); + + vvd(theta, 1.754166138018167568, 1e-12, "iauGst06", "", status); + +} + +static void t_gst06a(int *status) +/* +** - - - - - - - - - +** t _ g s t 0 6 a +** - - - - - - - - - +** +** Test iauGst06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGst06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGst06a(2400000.5, 53736.0, 2400000.5, 53736.0); + + vvd(theta, 1.754166137675019159, 1e-12, "iauGst06a", "", status); + +} + +static void t_gst94(int *status) +/* +** - - - - - - - - +** t _ g s t 9 4 +** - - - - - - - - +** +** Test iauGst94 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauGst94, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta; + + + theta = iauGst94(2400000.5, 53736.0); + + vvd(theta, 1.754166136020645203, 1e-12, "iauGst94", "", status); + +} + +static void t_icrs2g(int *status) +/* +** - - - - - - - - - +** t _ i c r s 2 g +** - - - - - - - - - +** +** Test iauIcrs2g function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauIcrs2g, vvd +** +** This revision: 2015 January 30 +*/ +{ + double dr, dd, dl, db; + + dr = 5.9338074302227188048671087; + dd = -1.1784870613579944551540570; + iauIcrs2g (dr, dd, &dl, &db); + vvd(dl, 5.5850536063818546461558, 1e-14, "iauIcrs2g", "L", status); + vvd(db, -0.7853981633974483096157, 1e-14, "iauIcrs2g", "B", status); + } + +static void t_h2fk5(int *status) +/* +** - - - - - - - - +** t _ h 2 f k 5 +** - - - - - - - - +** +** Test iauH2fk5 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauH2fk5, vvd +** +** This revision: 2017 January 3 +*/ +{ + double rh, dh, drh, ddh, pxh, rvh, r5, d5, dr5, dd5, px5, rv5; + + + rh = 1.767794352; + dh = -0.2917512594; + drh = -2.76413026e-6; + ddh = -5.92994449e-6; + pxh = 0.379210; + rvh = -7.6; + + iauH2fk5(rh, dh, drh, ddh, pxh, rvh, + &r5, &d5, &dr5, &dd5, &px5, &rv5); + + vvd(r5, 1.767794455700065506, 1e-13, + "iauH2fk5", "ra", status); + vvd(d5, -0.2917513626469638890, 1e-13, + "iauH2fk5", "dec", status); + vvd(dr5, -0.27597945024511204e-5, 1e-18, + "iauH2fk5", "dr5", status); + vvd(dd5, -0.59308014093262838e-5, 1e-18, + "iauH2fk5", "dd5", status); + vvd(px5, 0.37921, 1e-13, + "iauH2fk5", "px", status); + vvd(rv5, -7.6000001309071126, 1e-11, + "iauH2fk5", "rv", status); + +} + +static void t_hd2ae(int *status) +/* +** - - - - - - - - +** t _ h d 2 a e +** - - - - - - - - +** +** Test iauHd2ae function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauHd2ae and vvd +** +** This revision: 2017 October 21 +*/ +{ + double h, d, p, a, e; + + + h = 1.1; + d = 1.2; + p = 0.3; + + iauHd2ae(h, d, p, &a, &e); + + vvd(a, 5.916889243730066194, 1e-13, "iauHd2ae", "a", status); + vvd(e, 0.4472186304990486228, 1e-14, "iauHd2ae", "e", status); + +} + +static void t_hd2pa(int *status) +/* +** - - - - - - - - +** t _ h d 2 p a +** - - - - - - - - +** +** Test iauHd2pa function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauHd2pa and vvd +** +** This revision: 2017 October 21 +*/ +{ + double h, d, p, q; + + + h = 1.1; + d = 1.2; + p = 0.3; + + q = iauHd2pa(h, d, p); + + vvd(q, 1.906227428001995580, 1e-13, "iauHd2pa", "q", status); + +} + +static void t_hfk5z(int *status) +/* +** - - - - - - - - +** t _ h f k 5 z +** - - - - - - - - +** +** Test iauHfk5z function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauHfk5z, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rh, dh, r5, d5, dr5, dd5; + + + + rh = 1.767794352; + dh = -0.2917512594; + + iauHfk5z(rh, dh, 2400000.5, 54479.0, &r5, &d5, &dr5, &dd5); + + vvd(r5, 1.767794490535581026, 1e-13, + "iauHfk5z", "ra", status); + vvd(d5, -0.2917513695320114258, 1e-14, + "iauHfk5z", "dec", status); + vvd(dr5, 0.4335890983539243029e-8, 1e-22, + "iauHfk5z", "dr5", status); + vvd(dd5, -0.8569648841237745902e-9, 1e-23, + "iauHfk5z", "dd5", status); + +} + +static void t_ir(int *status) +/* +** - - - - - +** t _ i r +** - - - - - +** +** Test iauIr function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauIr, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauIr(r); + + vvd(r[0][0], 1.0, 0.0, "iauIr", "11", status); + vvd(r[0][1], 0.0, 0.0, "iauIr", "12", status); + vvd(r[0][2], 0.0, 0.0, "iauIr", "13", status); + + vvd(r[1][0], 0.0, 0.0, "iauIr", "21", status); + vvd(r[1][1], 1.0, 0.0, "iauIr", "22", status); + vvd(r[1][2], 0.0, 0.0, "iauIr", "23", status); + + vvd(r[2][0], 0.0, 0.0, "iauIr", "31", status); + vvd(r[2][1], 0.0, 0.0, "iauIr", "32", status); + vvd(r[2][2], 1.0, 0.0, "iauIr", "33", status); + +} + +static void t_jd2cal(int *status) +/* +** - - - - - - - - - +** t _ j d 2 c a l +** - - - - - - - - - +** +** Test iauJd2cal function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauJd2cal, viv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dj1, dj2, fd; + int iy, im, id, j; + + + dj1 = 2400000.5; + dj2 = 50123.9999; + + j = iauJd2cal(dj1, dj2, &iy, &im, &id, &fd); + + viv(iy, 1996, "iauJd2cal", "y", status); + viv(im, 2, "iauJd2cal", "m", status); + viv(id, 10, "iauJd2cal", "d", status); + vvd(fd, 0.9999, 1e-7, "iauJd2cal", "fd", status); + viv(j, 0, "iauJd2cal", "j", status); + +} + +static void t_jdcalf(int *status) +/* +** - - - - - - - - - +** t _ j d c a l f +** - - - - - - - - - +** +** Test iauJdcalf function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauJdcalf, viv +** +** This revision: 2013 August 7 +*/ +{ + double dj1, dj2; + int iydmf[4], j; + + + dj1 = 2400000.5; + dj2 = 50123.9999; + + j = iauJdcalf(4, dj1, dj2, iydmf); + + viv(iydmf[0], 1996, "iauJdcalf", "y", status); + viv(iydmf[1], 2, "iauJdcalf", "m", status); + viv(iydmf[2], 10, "iauJdcalf", "d", status); + viv(iydmf[3], 9999, "iauJdcalf", "f", status); + + viv(j, 0, "iauJdcalf", "j", status); + +} + +static void t_ld(int *status) +/* +** - - - - - +** t _ l d +** - - - - - +** +** Test iauLd function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLd, vvd +* +** This revision: 2013 October 2 +*/ +{ + double bm, p[3], q[3], e[3], em, dlim, p1[3]; + + + bm = 0.00028574; + p[0] = -0.763276255; + p[1] = -0.608633767; + p[2] = -0.216735543; + q[0] = -0.763276255; + q[1] = -0.608633767; + q[2] = -0.216735543; + e[0] = 0.76700421; + e[1] = 0.605629598; + e[2] = 0.211937094; + em = 8.91276983; + dlim = 3e-10; + + iauLd(bm, p, q, e, em, dlim, p1); + + vvd(p1[0], -0.7632762548968159627, 1e-12, + "iauLd", "1", status); + vvd(p1[1], -0.6086337670823762701, 1e-12, + "iauLd", "2", status); + vvd(p1[2], -0.2167355431320546947, 1e-12, + "iauLd", "3", status); + +} + +static void t_ldn(int *status) +/* +** - - - - - - +** t _ l d n +** - - - - - - +** +** Test iauLdn function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLdn, vvd +** +** This revision: 2013 October 2 +*/ +{ + int n; + iauLDBODY b[3]; + double ob[3], sc[3], sn[3]; + + + n = 3; + b[0].bm = 0.00028574; + b[0].dl = 3e-10; + b[0].pv[0][0] = -7.81014427; + b[0].pv[0][1] = -5.60956681; + b[0].pv[0][2] = -1.98079819; + b[0].pv[1][0] = 0.0030723249; + b[0].pv[1][1] = -0.00406995477; + b[0].pv[1][2] = -0.00181335842; + b[1].bm = 0.00095435; + b[1].dl = 3e-9; + b[1].pv[0][0] = 0.738098796; + b[1].pv[0][1] = 4.63658692; + b[1].pv[0][2] = 1.9693136; + b[1].pv[1][0] = -0.00755816922; + b[1].pv[1][1] = 0.00126913722; + b[1].pv[1][2] = 0.000727999001; + b[2].bm = 1.0; + b[2].dl = 6e-6; + b[2].pv[0][0] = -0.000712174377; + b[2].pv[0][1] = -0.00230478303; + b[2].pv[0][2] = -0.00105865966; + b[2].pv[1][0] = 6.29235213e-6; + b[2].pv[1][1] = -3.30888387e-7; + b[2].pv[1][2] = -2.96486623e-7; + ob[0] = -0.974170437; + ob[1] = -0.2115201; + ob[2] = -0.0917583114; + sc[0] = -0.763276255; + sc[1] = -0.608633767; + sc[2] = -0.216735543; + + iauLdn(n, b, ob, sc, sn); + + vvd(sn[0], -0.7632762579693333866, 1e-12, + "iauLdn", "1", status); + vvd(sn[1], -0.6086337636093002660, 1e-12, + "iauLdn", "2", status); + vvd(sn[2], -0.2167355420646328159, 1e-12, + "iauLdn", "3", status); + +} + +static void t_ldsun(int *status) +/* +** - - - - - - - - +** t _ l d s u n +** - - - - - - - - +** +** Test iauLdsun function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLdsun, vvd +** +** This revision: 2013 October 2 +*/ +{ + double p[3], e[3], em, p1[3]; + + + p[0] = -0.763276255; + p[1] = -0.608633767; + p[2] = -0.216735543; + e[0] = -0.973644023; + e[1] = -0.20925523; + e[2] = -0.0907169552; + em = 0.999809214; + + iauLdsun(p, e, em, p1); + + vvd(p1[0], -0.7632762580731413169, 1e-12, + "iauLdsun", "1", status); + vvd(p1[1], -0.6086337635262647900, 1e-12, + "iauLdsun", "2", status); + vvd(p1[2], -0.2167355419322321302, 1e-12, + "iauLdsun", "3", status); + +} + +static void t_lteceq(int *status) +/* +** - - - - - - - - - +** t _ l t e c e q +** - - - - - - - - - +** +** Test iauLteceq function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLteceq, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, dl, db, dr, dd; + + + epj = 2500.0; + dl = 1.5; + db = 0.6; + + iauLteceq(epj, dl, db, &dr, &dd); + + vvd(dr, 1.275156021861921167, 1e-14, "iauLteceq", "dr", status); + vvd(dd, 0.9966573543519204791, 1e-14, "iauLteceq", "dd", status); + +} + +static void t_ltecm(int *status) +/* +** - - - - - - - - +** t _ l t e c m +** - - - - - - - - +** +** Test iauLtecm function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLtecm, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, rm[3][3]; + + + epj = -3000.0; + + iauLtecm(epj, rm); + + vvd(rm[0][0], 0.3564105644859788825, 1e-14, + "iauLtecm", "rm11", status); + vvd(rm[0][1], 0.8530575738617682284, 1e-14, + "iauLtecm", "rm12", status); + vvd(rm[0][2], 0.3811355207795060435, 1e-14, + "iauLtecm", "rm13", status); + vvd(rm[1][0], -0.9343283469640709942, 1e-14, + "iauLtecm", "rm21", status); + vvd(rm[1][1], 0.3247830597681745976, 1e-14, + "iauLtecm", "rm22", status); + vvd(rm[1][2], 0.1467872751535940865, 1e-14, + "iauLtecm", "rm23", status); + vvd(rm[2][0], 0.1431636191201167793e-2, 1e-14, + "iauLtecm", "rm31", status); + vvd(rm[2][1], -0.4084222566960599342, 1e-14, + "iauLtecm", "rm32", status); + vvd(rm[2][2], 0.9127919865189030899, 1e-14, + "iauLtecm", "rm33", status); + +} + +static void t_lteqec(int *status) +/* +** - - - - - - - - - +** t _ l t e q e c +** - - - - - - - - - +** +** Test iauLteqec function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLteqec, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, dr, dd, dl, db; + + + epj = -1500.0; + dr = 1.234; + dd = 0.987; + + iauLteqec(epj, dr, dd, &dl, &db); + + vvd(dl, 0.5039483649047114859, 1e-14, "iauLteqec", "dl", status); + vvd(db, 0.5848534459726224882, 1e-14, "iauLteqec", "db", status); + +} + +static void t_ltp(int *status) +/* +** - - - - - - +** t _ l t p +** - - - - - - +** +** Test iauLtp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLtp, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, rp[3][3]; + + + epj = 1666.666; + + iauLtp(epj, rp); + + vvd(rp[0][0], 0.9967044141159213819, 1e-14, + "iauLtp", "rp11", status); + vvd(rp[0][1], 0.7437801893193210840e-1, 1e-14, + "iauLtp", "rp12", status); + vvd(rp[0][2], 0.3237624409345603401e-1, 1e-14, + "iauLtp", "rp13", status); + vvd(rp[1][0], -0.7437802731819618167e-1, 1e-14, + "iauLtp", "rp21", status); + vvd(rp[1][1], 0.9972293894454533070, 1e-14, + "iauLtp", "rp22", status); + vvd(rp[1][2], -0.1205768842723593346e-2, 1e-14, + "iauLtp", "rp23", status); + vvd(rp[2][0], -0.3237622482766575399e-1, 1e-14, + "iauLtp", "rp31", status); + vvd(rp[2][1], -0.1206286039697609008e-2, 1e-14, + "iauLtp", "rp32", status); + vvd(rp[2][2], 0.9994750246704010914, 1e-14, + "iauLtp", "rp33", status); + +} + +static void t_ltpb(int *status) +/* +** - - - - - - - +** t _ l t p b +** - - - - - - - +** +** Test iauLtpb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLtpb, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, rpb[3][3]; + + + epj = 1666.666; + + iauLtpb(epj, rpb); + + vvd(rpb[0][0], 0.9967044167723271851, 1e-14, + "iauLtpb", "rpb11", status); + vvd(rpb[0][1], 0.7437794731203340345e-1, 1e-14, + "iauLtpb", "rpb12", status); + vvd(rpb[0][2], 0.3237632684841625547e-1, 1e-14, + "iauLtpb", "rpb13", status); + vvd(rpb[1][0], -0.7437795663437177152e-1, 1e-14, + "iauLtpb", "rpb21", status); + vvd(rpb[1][1], 0.9972293947500013666, 1e-14, + "iauLtpb", "rpb22", status); + vvd(rpb[1][2], -0.1205741865911243235e-2, 1e-14, + "iauLtpb", "rpb23", status); + vvd(rpb[2][0], -0.3237630543224664992e-1, 1e-14, + "iauLtpb", "rpb31", status); + vvd(rpb[2][1], -0.1206316791076485295e-2, 1e-14, + "iauLtpb", "rpb32", status); + vvd(rpb[2][2], 0.9994750220222438819, 1e-14, + "iauLtpb", "rpb33", status); + +} + +static void t_ltpecl(int *status) +/* +** - - - - - - - - - +** t _ l t p e c l +** - - - - - - - - - +** +** Test iauLtpecl function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLtpecl, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, vec[3]; + + + epj = -1500.0; + + iauLtpecl(epj, vec); + + vvd(vec[0], 0.4768625676477096525e-3, 1e-14, + "iauLtpecl", "vec1", status); + vvd(vec[1], -0.4052259533091875112, 1e-14, + "iauLtpecl", "vec2", status); + vvd(vec[2], 0.9142164401096448012, 1e-14, + "iauLtpecl", "vec3", status); + +} + +static void t_ltpequ(int *status) +/* +** - - - - - - - - - +** t _ l t p e q u +** - - - - - - - - - +** +** Test iauLtpequ function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauLtpequ, vvd +** +** This revision: 2016 March 12 +*/ +{ + double epj, veq[3]; + + + epj = -2500.0; + + iauLtpequ(epj, veq); + + vvd(veq[0], -0.3586652560237326659, 1e-14, + "iauLtpequ", "veq1", status); + vvd(veq[1], -0.1996978910771128475, 1e-14, + "iauLtpequ", "veq2", status); + vvd(veq[2], 0.9118552442250819624, 1e-14, + "iauLtpequ", "veq3", status); + +} + +static void t_num00a(int *status) +/* +** - - - - - - - - - +** t _ n u m 0 0 a +** - - - - - - - - - +** +** Test iauNum00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNum00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatn[3][3]; + + + iauNum00a(2400000.5, 53736.0, rmatn); + + vvd(rmatn[0][0], 0.9999999999536227949, 1e-12, + "iauNum00a", "11", status); + vvd(rmatn[0][1], 0.8836238544090873336e-5, 1e-12, + "iauNum00a", "12", status); + vvd(rmatn[0][2], 0.3830835237722400669e-5, 1e-12, + "iauNum00a", "13", status); + + vvd(rmatn[1][0], -0.8836082880798569274e-5, 1e-12, + "iauNum00a", "21", status); + vvd(rmatn[1][1], 0.9999999991354655028, 1e-12, + "iauNum00a", "22", status); + vvd(rmatn[1][2], -0.4063240865362499850e-4, 1e-12, + "iauNum00a", "23", status); + + vvd(rmatn[2][0], -0.3831194272065995866e-5, 1e-12, + "iauNum00a", "31", status); + vvd(rmatn[2][1], 0.4063237480216291775e-4, 1e-12, + "iauNum00a", "32", status); + vvd(rmatn[2][2], 0.9999999991671660338, 1e-12, + "iauNum00a", "33", status); + +} + +static void t_num00b(int *status) +/* +** - - - - - - - - - +** t _ n u m 0 0 b +** - - - - - - - - - +** +** Test iauNum00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNum00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatn[3][3]; + + iauNum00b(2400000.5, 53736, rmatn); + + vvd(rmatn[0][0], 0.9999999999536069682, 1e-12, + "iauNum00b", "11", status); + vvd(rmatn[0][1], 0.8837746144871248011e-5, 1e-12, + "iauNum00b", "12", status); + vvd(rmatn[0][2], 0.3831488838252202945e-5, 1e-12, + "iauNum00b", "13", status); + + vvd(rmatn[1][0], -0.8837590456632304720e-5, 1e-12, + "iauNum00b", "21", status); + vvd(rmatn[1][1], 0.9999999991354692733, 1e-12, + "iauNum00b", "22", status); + vvd(rmatn[1][2], -0.4063198798559591654e-4, 1e-12, + "iauNum00b", "23", status); + + vvd(rmatn[2][0], -0.3831847930134941271e-5, 1e-12, + "iauNum00b", "31", status); + vvd(rmatn[2][1], 0.4063195412258168380e-4, 1e-12, + "iauNum00b", "32", status); + vvd(rmatn[2][2], 0.9999999991671806225, 1e-12, + "iauNum00b", "33", status); + +} + +static void t_num06a(int *status) +/* +** - - - - - - - - - +** t _ n u m 0 6 a +** - - - - - - - - - +** +** Test iauNum06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNum06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatn[3][3]; + + iauNum06a(2400000.5, 53736, rmatn); + + vvd(rmatn[0][0], 0.9999999999536227668, 1e-12, + "iauNum06a", "11", status); + vvd(rmatn[0][1], 0.8836241998111535233e-5, 1e-12, + "iauNum06a", "12", status); + vvd(rmatn[0][2], 0.3830834608415287707e-5, 1e-12, + "iauNum06a", "13", status); + + vvd(rmatn[1][0], -0.8836086334870740138e-5, 1e-12, + "iauNum06a", "21", status); + vvd(rmatn[1][1], 0.9999999991354657474, 1e-12, + "iauNum06a", "22", status); + vvd(rmatn[1][2], -0.4063240188248455065e-4, 1e-12, + "iauNum06a", "23", status); + + vvd(rmatn[2][0], -0.3831193642839398128e-5, 1e-12, + "iauNum06a", "31", status); + vvd(rmatn[2][1], 0.4063236803101479770e-4, 1e-12, + "iauNum06a", "32", status); + vvd(rmatn[2][2], 0.9999999991671663114, 1e-12, + "iauNum06a", "33", status); + +} + +static void t_numat(int *status) +/* +** - - - - - - - - +** t _ n u m a t +** - - - - - - - - +** +** Test iauNumat function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNumat, vvd +** +** This revision: 2013 August 7 +*/ +{ + double epsa, dpsi, deps, rmatn[3][3]; + + + epsa = 0.4090789763356509900; + dpsi = -0.9630909107115582393e-5; + deps = 0.4063239174001678826e-4; + + iauNumat(epsa, dpsi, deps, rmatn); + + vvd(rmatn[0][0], 0.9999999999536227949, 1e-12, + "iauNumat", "11", status); + vvd(rmatn[0][1], 0.8836239320236250577e-5, 1e-12, + "iauNumat", "12", status); + vvd(rmatn[0][2], 0.3830833447458251908e-5, 1e-12, + "iauNumat", "13", status); + + vvd(rmatn[1][0], -0.8836083657016688588e-5, 1e-12, + "iauNumat", "21", status); + vvd(rmatn[1][1], 0.9999999991354654959, 1e-12, + "iauNumat", "22", status); + vvd(rmatn[1][2], -0.4063240865361857698e-4, 1e-12, + "iauNumat", "23", status); + + vvd(rmatn[2][0], -0.3831192481833385226e-5, 1e-12, + "iauNumat", "31", status); + vvd(rmatn[2][1], 0.4063237480216934159e-4, 1e-12, + "iauNumat", "32", status); + vvd(rmatn[2][2], 0.9999999991671660407, 1e-12, + "iauNumat", "33", status); + +} + +static void t_nut00a(int *status) +/* +** - - - - - - - - - +** t _ n u t 0 0 a +** - - - - - - - - - +** +** Test iauNut00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNut00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps; + + + iauNut00a(2400000.5, 53736.0, &dpsi, &deps); + + vvd(dpsi, -0.9630909107115518431e-5, 1e-13, + "iauNut00a", "dpsi", status); + vvd(deps, 0.4063239174001678710e-4, 1e-13, + "iauNut00a", "deps", status); + +} + +static void t_nut00b(int *status) +/* +** - - - - - - - - - +** t _ n u t 0 0 b +** - - - - - - - - - +** +** Test iauNut00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNut00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps; + + + iauNut00b(2400000.5, 53736.0, &dpsi, &deps); + + vvd(dpsi, -0.9632552291148362783e-5, 1e-13, + "iauNut00b", "dpsi", status); + vvd(deps, 0.4063197106621159367e-4, 1e-13, + "iauNut00b", "deps", status); + +} + +static void t_nut06a(int *status) +/* +** - - - - - - - - - +** t _ n u t 0 6 a +** - - - - - - - - - +** +** Test iauNut06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNut06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps; + + + iauNut06a(2400000.5, 53736.0, &dpsi, &deps); + + vvd(dpsi, -0.9630912025820308797e-5, 1e-13, + "iauNut06a", "dpsi", status); + vvd(deps, 0.4063238496887249798e-4, 1e-13, + "iauNut06a", "deps", status); + +} + +static void t_nut80(int *status) +/* +** - - - - - - - - +** t _ n u t 8 0 +** - - - - - - - - +** +** Test iauNut80 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNut80, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps; + + + iauNut80(2400000.5, 53736.0, &dpsi, &deps); + + vvd(dpsi, -0.9643658353226563966e-5, 1e-13, + "iauNut80", "dpsi", status); + vvd(deps, 0.4060051006879713322e-4, 1e-13, + "iauNut80", "deps", status); + +} + +static void t_nutm80(int *status) +/* +** - - - - - - - - - +** t _ n u t m 8 0 +** - - - - - - - - - +** +** Test iauNutm80 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauNutm80, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatn[3][3]; + + + iauNutm80(2400000.5, 53736.0, rmatn); + + vvd(rmatn[0][0], 0.9999999999534999268, 1e-12, + "iauNutm80", "11", status); + vvd(rmatn[0][1], 0.8847935789636432161e-5, 1e-12, + "iauNutm80", "12", status); + vvd(rmatn[0][2], 0.3835906502164019142e-5, 1e-12, + "iauNutm80", "13", status); + + vvd(rmatn[1][0], -0.8847780042583435924e-5, 1e-12, + "iauNutm80", "21", status); + vvd(rmatn[1][1], 0.9999999991366569963, 1e-12, + "iauNutm80", "22", status); + vvd(rmatn[1][2], -0.4060052702727130809e-4, 1e-12, + "iauNutm80", "23", status); + + vvd(rmatn[2][0], -0.3836265729708478796e-5, 1e-12, + "iauNutm80", "31", status); + vvd(rmatn[2][1], 0.4060049308612638555e-4, 1e-12, + "iauNutm80", "32", status); + vvd(rmatn[2][2], 0.9999999991684415129, 1e-12, + "iauNutm80", "33", status); + +} + +static void t_obl06(int *status) +/* +** - - - - - - - - +** t _ o b l 0 6 +** - - - - - - - - +** +** Test iauObl06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauObl06, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauObl06(2400000.5, 54388.0), 0.4090749229387258204, 1e-14, + "iauObl06", "", status); +} + +static void t_obl80(int *status) +/* +** - - - - - - - - +** t _ o b l 8 0 +** - - - - - - - - +** +** Test iauObl80 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauObl80, vvd +** +** This revision: 2013 August 7 +*/ +{ + double eps0; + + + eps0 = iauObl80(2400000.5, 54388.0); + + vvd(eps0, 0.4090751347643816218, 1e-14, "iauObl80", "", status); + +} + +static void t_p06e(int *status) +/* +** - - - - - - - +** t _ p 0 6 e +** - - - - - - - +** +** Test iauP06e function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauP06e, vvd +** +** This revision: 2020 May 30 +*/ +{ + double eps0, psia, oma, bpa, bqa, pia, bpia, + epsa, chia, za, zetaa, thetaa, pa, gam, phi, psi; + + + iauP06e(2400000.5, 52541.0, &eps0, &psia, &oma, &bpa, + &bqa, &pia, &bpia, &epsa, &chia, &za, + &zetaa, &thetaa, &pa, &gam, &phi, &psi); + + vvd(eps0, 0.4090926006005828715, 1e-14, + "iauP06e", "eps0", status); + vvd(psia, 0.6664369630191613431e-3, 1e-14, + "iauP06e", "psia", status); + vvd(oma , 0.4090925973783255982, 1e-14, + "iauP06e", "oma", status); + vvd(bpa, 0.5561149371265209445e-6, 1e-14, + "iauP06e", "bpa", status); + vvd(bqa, -0.6191517193290621270e-5, 1e-14, + "iauP06e", "bqa", status); + vvd(pia, 0.6216441751884382923e-5, 1e-14, + "iauP06e", "pia", status); + vvd(bpia, 3.052014180023779882, 1e-14, + "iauP06e", "bpia", status); + vvd(epsa, 0.4090864054922431688, 1e-14, + "iauP06e", "epsa", status); + vvd(chia, 0.1387703379530915364e-5, 1e-14, + "iauP06e", "chia", status); + vvd(za, 0.2921789846651790546e-3, 1e-14, + "iauP06e", "za", status); + vvd(zetaa, 0.3178773290332009310e-3, 1e-14, + "iauP06e", "zetaa", status); + vvd(thetaa, 0.2650932701657497181e-3, 1e-14, + "iauP06e", "thetaa", status); + vvd(pa, 0.6651637681381016288e-3, 1e-14, + "iauP06e", "pa", status); + vvd(gam, 0.1398077115963754987e-5, 1e-14, + "iauP06e", "gam", status); + vvd(phi, 0.4090864090837462602, 1e-14, + "iauP06e", "phi", status); + vvd(psi, 0.6664464807480920325e-3, 1e-14, + "iauP06e", "psi", status); + +} + +static void t_p2pv(int *status) +/* +** - - - - - - - +** t _ p 2 p v +** - - - - - - - +** +** Test iauP2pv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauP2pv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], pv[2][3]; + + + p[0] = 0.25; + p[1] = 1.2; + p[2] = 3.0; + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = -0.5; + pv[1][1] = 3.1; + pv[1][2] = 0.9; + + iauP2pv(p, pv); + + vvd(pv[0][0], 0.25, 0.0, "iauP2pv", "p1", status); + vvd(pv[0][1], 1.2, 0.0, "iauP2pv", "p2", status); + vvd(pv[0][2], 3.0, 0.0, "iauP2pv", "p3", status); + + vvd(pv[1][0], 0.0, 0.0, "iauP2pv", "v1", status); + vvd(pv[1][1], 0.0, 0.0, "iauP2pv", "v2", status); + vvd(pv[1][2], 0.0, 0.0, "iauP2pv", "v3", status); + +} + +static void t_p2s(int *status) +/* +** - - - - - - +** t _ p 2 s +** - - - - - - +** +** Test iauP2s function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauP2s, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], theta, phi, r; + + + p[0] = 100.0; + p[1] = -50.0; + p[2] = 25.0; + + iauP2s(p, &theta, &phi, &r); + + vvd(theta, -0.4636476090008061162, 1e-12, "iauP2s", "theta", status); + vvd(phi, 0.2199879773954594463, 1e-12, "iauP2s", "phi", status); + vvd(r, 114.5643923738960002, 1e-9, "iauP2s", "r", status); + +} + +static void t_pap(int *status) +/* +** - - - - - - +** t _ p a p +** - - - - - - +** +** Test iauPap function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPap, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], theta; + + + a[0] = 1.0; + a[1] = 0.1; + a[2] = 0.2; + + b[0] = -3.0; + b[1] = 1e-3; + b[2] = 0.2; + + theta = iauPap(a, b); + + vvd(theta, 0.3671514267841113674, 1e-12, "iauPap", "", status); + +} + +static void t_pas(int *status) +/* +** - - - - - - +** t _ p a s +** - - - - - - +** +** Test iauPas function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPas, vvd +** +** This revision: 2013 August 7 +*/ +{ + double al, ap, bl, bp, theta; + + + al = 1.0; + ap = 0.1; + bl = 0.2; + bp = -1.0; + + theta = iauPas(al, ap, bl, bp); + + vvd(theta, -2.724544922932270424, 1e-12, "iauPas", "", status); + +} + +static void t_pb06(int *status) +/* +** - - - - - - - +** t _ p b 0 6 +** - - - - - - - +** +** Test iauPb06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPb06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double bzeta, bz, btheta; + + + iauPb06(2400000.5, 50123.9999, &bzeta, &bz, &btheta); + + vvd(bzeta, -0.5092634016326478238e-3, 1e-12, + "iauPb06", "bzeta", status); + vvd(bz, -0.3602772060566044413e-3, 1e-12, + "iauPb06", "bz", status); + vvd(btheta, -0.3779735537167811177e-3, 1e-12, + "iauPb06", "btheta", status); + +} + +static void t_pdp(int *status) +/* +** - - - - - - +** t _ p d p +** - - - - - - +** +** Test iauPdp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPdp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], adb; + + + a[0] = 2.0; + a[1] = 2.0; + a[2] = 3.0; + + b[0] = 1.0; + b[1] = 3.0; + b[2] = 4.0; + + adb = iauPdp(a, b); + + vvd(adb, 20, 1e-12, "iauPdp", "", status); + +} + +static void t_pfw06(int *status) +/* +** - - - - - - - - +** t _ p f w 0 6 +** - - - - - - - - +** +** Test iauPfw06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPfw06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double gamb, phib, psib, epsa; + + + iauPfw06(2400000.5, 50123.9999, &gamb, &phib, &psib, &epsa); + + vvd(gamb, -0.2243387670997995690e-5, 1e-16, + "iauPfw06", "gamb", status); + vvd(phib, 0.4091014602391312808, 1e-12, + "iauPfw06", "phib", status); + vvd(psib, -0.9501954178013031895e-3, 1e-14, + "iauPfw06", "psib", status); + vvd(epsa, 0.4091014316587367491, 1e-12, + "iauPfw06", "epsa", status); + +} + +static void t_plan94(int *status) +/* +** - - - - - - - - - +** t _ p l a n 9 4 +** - - - - - - - - - +** +** Test iauPlan94 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPlan94, vvd, viv +** +** This revision: 2013 October 2 +*/ +{ + double pv[2][3]; + int j; + + + j = iauPlan94(2400000.5, 1e6, 0, pv); + + vvd(pv[0][0], 0.0, 0.0, "iauPlan94", "x 1", status); + vvd(pv[0][1], 0.0, 0.0, "iauPlan94", "y 1", status); + vvd(pv[0][2], 0.0, 0.0, "iauPlan94", "z 1", status); + + vvd(pv[1][0], 0.0, 0.0, "iauPlan94", "xd 1", status); + vvd(pv[1][1], 0.0, 0.0, "iauPlan94", "yd 1", status); + vvd(pv[1][2], 0.0, 0.0, "iauPlan94", "zd 1", status); + + viv(j, -1, "iauPlan94", "j 1", status); + + j = iauPlan94(2400000.5, 1e6, 10, pv); + + viv(j, -1, "iauPlan94", "j 2", status); + + j = iauPlan94(2400000.5, -320000, 3, pv); + + vvd(pv[0][0], 0.9308038666832975759, 1e-11, + "iauPlan94", "x 3", status); + vvd(pv[0][1], 0.3258319040261346000, 1e-11, + "iauPlan94", "y 3", status); + vvd(pv[0][2], 0.1422794544481140560, 1e-11, + "iauPlan94", "z 3", status); + + vvd(pv[1][0], -0.6429458958255170006e-2, 1e-11, + "iauPlan94", "xd 3", status); + vvd(pv[1][1], 0.1468570657704237764e-1, 1e-11, + "iauPlan94", "yd 3", status); + vvd(pv[1][2], 0.6406996426270981189e-2, 1e-11, + "iauPlan94", "zd 3", status); + + viv(j, 1, "iauPlan94", "j 3", status); + + j = iauPlan94(2400000.5, 43999.9, 1, pv); + + vvd(pv[0][0], 0.2945293959257430832, 1e-11, + "iauPlan94", "x 4", status); + vvd(pv[0][1], -0.2452204176601049596, 1e-11, + "iauPlan94", "y 4", status); + vvd(pv[0][2], -0.1615427700571978153, 1e-11, + "iauPlan94", "z 4", status); + + vvd(pv[1][0], 0.1413867871404614441e-1, 1e-11, + "iauPlan94", "xd 4", status); + vvd(pv[1][1], 0.1946548301104706582e-1, 1e-11, + "iauPlan94", "yd 4", status); + vvd(pv[1][2], 0.8929809783898904786e-2, 1e-11, + "iauPlan94", "zd 4", status); + + viv(j, 0, "iauPlan94", "j 4", status); + +} + +static void t_pmat00(int *status) +/* +** - - - - - - - - - +** t _ p m a t 0 0 +** - - - - - - - - - +** +** Test iauPmat00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmat00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbp[3][3]; + + + iauPmat00(2400000.5, 50123.9999, rbp); + + vvd(rbp[0][0], 0.9999995505175087260, 1e-12, + "iauPmat00", "11", status); + vvd(rbp[0][1], 0.8695405883617884705e-3, 1e-14, + "iauPmat00", "12", status); + vvd(rbp[0][2], 0.3779734722239007105e-3, 1e-14, + "iauPmat00", "13", status); + + vvd(rbp[1][0], -0.8695405990410863719e-3, 1e-14, + "iauPmat00", "21", status); + vvd(rbp[1][1], 0.9999996219494925900, 1e-12, + "iauPmat00", "22", status); + vvd(rbp[1][2], -0.1360775820404982209e-6, 1e-14, + "iauPmat00", "23", status); + + vvd(rbp[2][0], -0.3779734476558184991e-3, 1e-14, + "iauPmat00", "31", status); + vvd(rbp[2][1], -0.1925857585832024058e-6, 1e-14, + "iauPmat00", "32", status); + vvd(rbp[2][2], 0.9999999285680153377, 1e-12, + "iauPmat00", "33", status); + +} + +static void t_pmat06(int *status) +/* +** - - - - - - - - - +** t _ p m a t 0 6 +** - - - - - - - - - +** +** Test iauPmat06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmat06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbp[3][3]; + + + iauPmat06(2400000.5, 50123.9999, rbp); + + vvd(rbp[0][0], 0.9999995505176007047, 1e-12, + "iauPmat06", "11", status); + vvd(rbp[0][1], 0.8695404617348208406e-3, 1e-14, + "iauPmat06", "12", status); + vvd(rbp[0][2], 0.3779735201865589104e-3, 1e-14, + "iauPmat06", "13", status); + + vvd(rbp[1][0], -0.8695404723772031414e-3, 1e-14, + "iauPmat06", "21", status); + vvd(rbp[1][1], 0.9999996219496027161, 1e-12, + "iauPmat06", "22", status); + vvd(rbp[1][2], -0.1361752497080270143e-6, 1e-14, + "iauPmat06", "23", status); + + vvd(rbp[2][0], -0.3779734957034089490e-3, 1e-14, + "iauPmat06", "31", status); + vvd(rbp[2][1], -0.1924880847894457113e-6, 1e-14, + "iauPmat06", "32", status); + vvd(rbp[2][2], 0.9999999285679971958, 1e-12, + "iauPmat06", "33", status); + +} + +static void t_pmat76(int *status) +/* +** - - - - - - - - - +** t _ p m a t 7 6 +** - - - - - - - - - +** +** Test iauPmat76 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmat76, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatp[3][3]; + + + iauPmat76(2400000.5, 50123.9999, rmatp); + + vvd(rmatp[0][0], 0.9999995504328350733, 1e-12, + "iauPmat76", "11", status); + vvd(rmatp[0][1], 0.8696632209480960785e-3, 1e-14, + "iauPmat76", "12", status); + vvd(rmatp[0][2], 0.3779153474959888345e-3, 1e-14, + "iauPmat76", "13", status); + + vvd(rmatp[1][0], -0.8696632209485112192e-3, 1e-14, + "iauPmat76", "21", status); + vvd(rmatp[1][1], 0.9999996218428560614, 1e-12, + "iauPmat76", "22", status); + vvd(rmatp[1][2], -0.1643284776111886407e-6, 1e-14, + "iauPmat76", "23", status); + + vvd(rmatp[2][0], -0.3779153474950335077e-3, 1e-14, + "iauPmat76", "31", status); + vvd(rmatp[2][1], -0.1643306746147366896e-6, 1e-14, + "iauPmat76", "32", status); + vvd(rmatp[2][2], 0.9999999285899790119, 1e-12, + "iauPmat76", "33", status); + +} + +static void t_pm(int *status) +/* +** - - - - - +** t _ p m +** - - - - - +** +** Test iauPm function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPm, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], r; + + + p[0] = 0.3; + p[1] = 1.2; + p[2] = -2.5; + + r = iauPm(p); + + vvd(r, 2.789265136196270604, 1e-12, "iauPm", "", status); + +} + +static void t_pmp(int *status) +/* +** - - - - - - +** t _ p m p +** - - - - - - +** +** Test iauPmp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], amb[3]; + + + a[0] = 2.0; + a[1] = 2.0; + a[2] = 3.0; + + b[0] = 1.0; + b[1] = 3.0; + b[2] = 4.0; + + iauPmp(a, b, amb); + + vvd(amb[0], 1.0, 1e-12, "iauPmp", "0", status); + vvd(amb[1], -1.0, 1e-12, "iauPmp", "1", status); + vvd(amb[2], -1.0, 1e-12, "iauPmp", "2", status); + +} + +static void t_pmpx(int *status) +/* +** - - - - - - - +** t _ p m p x +** - - - - - - - +** +** Test iauPmpx function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmpx, vvd +** +** This revision: 2017 March 15 +*/ +{ + double rc, dc, pr, pd, px, rv, pmt, pob[3], pco[3]; + + + rc = 1.234; + dc = 0.789; + pr = 1e-5; + pd = -2e-5; + px = 1e-2; + rv = 10.0; + pmt = 8.75; + pob[0] = 0.9; + pob[1] = 0.4; + pob[2] = 0.1; + + iauPmpx(rc, dc, pr, pd, px, rv, pmt, pob, pco); + + vvd(pco[0], 0.2328137623960308438, 1e-12, + "iauPmpx", "1", status); + vvd(pco[1], 0.6651097085397855328, 1e-12, + "iauPmpx", "2", status); + vvd(pco[2], 0.7095257765896359837, 1e-12, + "iauPmpx", "3", status); + +} + +static void t_pmsafe(int *status) +/* +** - - - - - - - - - +** t _ p m s a f e +** - - - - - - - - - +** +** Test iauPmsafe function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPmsafe, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + int j; + double ra1, dec1, pmr1, pmd1, px1, rv1, ep1a, ep1b, ep2a, ep2b, + ra2, dec2, pmr2, pmd2, px2, rv2; + + + ra1 = 1.234; + dec1 = 0.789; + pmr1 = 1e-5; + pmd1 = -2e-5; + px1 = 1e-2; + rv1 = 10.0; + ep1a = 2400000.5; + ep1b = 48348.5625; + ep2a = 2400000.5; + ep2b = 51544.5; + + j = iauPmsafe(ra1, dec1, pmr1, pmd1, px1, rv1, + ep1a, ep1b, ep2a, ep2b, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2); + + vvd(ra2, 1.234087484501017061, 1e-12, + "iauPmsafe", "ra2", status); + vvd(dec2, 0.7888249982450468567, 1e-12, + "iauPmsafe", "dec2", status); + vvd(pmr2, 0.9996457663586073988e-5, 1e-12, + "iauPmsafe", "pmr2", status); + vvd(pmd2, -0.2000040085106754565e-4, 1e-16, + "iauPmsafe", "pmd2", status); + vvd(px2, 0.9999997295356830666e-2, 1e-12, + "iauPmsafe", "px2", status); + vvd(rv2, 10.38468380293920069, 1e-10, + "iauPmsafe", "rv2", status); + viv ( j, 0, "iauPmsafe", "j", status); + +} + +static void t_pn(int *status) +/* +** - - - - - +** t _ p n +** - - - - - +** +** Test iauPn function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3], r, u[3]; + + + p[0] = 0.3; + p[1] = 1.2; + p[2] = -2.5; + + iauPn(p, &r, u); + + vvd(r, 2.789265136196270604, 1e-12, "iauPn", "r", status); + + vvd(u[0], 0.1075552109073112058, 1e-12, "iauPn", "u1", status); + vvd(u[1], 0.4302208436292448232, 1e-12, "iauPn", "u2", status); + vvd(u[2], -0.8962934242275933816, 1e-12, "iauPn", "u3", status); + +} + +static void t_pn00(int *status) +/* +** - - - - - - - +** t _ p n 0 0 +** - - - - - - - +** +** Test iauPn00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps, epsa, + rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3]; + + + dpsi = -0.9632552291149335877e-5; + deps = 0.4063197106621141414e-4; + + iauPn00(2400000.5, 53736.0, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn); + + vvd(epsa, 0.4090791789404229916, 1e-12, "iauPn00", "epsa", status); + + vvd(rb[0][0], 0.9999999999999942498, 1e-12, + "iauPn00", "rb11", status); + vvd(rb[0][1], -0.7078279744199196626e-7, 1e-18, + "iauPn00", "rb12", status); + vvd(rb[0][2], 0.8056217146976134152e-7, 1e-18, + "iauPn00", "rb13", status); + + vvd(rb[1][0], 0.7078279477857337206e-7, 1e-18, + "iauPn00", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauPn00", "rb22", status); + vvd(rb[1][2], 0.3306041454222136517e-7, 1e-18, + "iauPn00", "rb23", status); + + vvd(rb[2][0], -0.8056217380986972157e-7, 1e-18, + "iauPn00", "rb31", status); + vvd(rb[2][1], -0.3306040883980552500e-7, 1e-18, + "iauPn00", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauPn00", "rb33", status); + + vvd(rp[0][0], 0.9999989300532289018, 1e-12, + "iauPn00", "rp11", status); + vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14, + "iauPn00", "rp12", status); + vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14, + "iauPn00", "rp13", status); + + vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14, + "iauPn00", "rp21", status); + vvd(rp[1][1], 0.9999990999908750433, 1e-12, + "iauPn00", "rp22", status); + vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14, + "iauPn00", "rp23", status); + + vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14, + "iauPn00", "rp31", status); + vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14, + "iauPn00", "rp32", status); + vvd(rp[2][2], 0.9999998300623538046, 1e-12, + "iauPn00", "rp33", status); + + vvd(rbp[0][0], 0.9999989300052243993, 1e-12, + "iauPn00", "rbp11", status); + vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14, + "iauPn00", "rbp12", status); + vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14, + "iauPn00", "rbp13", status); + + vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14, + "iauPn00", "rbp21", status); + vvd(rbp[1][1], 0.9999990998959191343, 1e-12, + "iauPn00", "rbp22", status); + vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14, + "iauPn00", "rbp23", status); + + vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14, + "iauPn00", "rbp31", status); + vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14, + "iauPn00", "rbp32", status); + vvd(rbp[2][2], 0.9999998301093036269, 1e-12, + "iauPn00", "rbp33", status); + + vvd(rn[0][0], 0.9999999999536069682, 1e-12, + "iauPn00", "rn11", status); + vvd(rn[0][1], 0.8837746144872140812e-5, 1e-16, + "iauPn00", "rn12", status); + vvd(rn[0][2], 0.3831488838252590008e-5, 1e-16, + "iauPn00", "rn13", status); + + vvd(rn[1][0], -0.8837590456633197506e-5, 1e-16, + "iauPn00", "rn21", status); + vvd(rn[1][1], 0.9999999991354692733, 1e-12, + "iauPn00", "rn22", status); + vvd(rn[1][2], -0.4063198798559573702e-4, 1e-16, + "iauPn00", "rn23", status); + + vvd(rn[2][0], -0.3831847930135328368e-5, 1e-16, + "iauPn00", "rn31", status); + vvd(rn[2][1], 0.4063195412258150427e-4, 1e-16, + "iauPn00", "rn32", status); + vvd(rn[2][2], 0.9999999991671806225, 1e-12, + "iauPn00", "rn33", status); + + vvd(rbpn[0][0], 0.9999989440499982806, 1e-12, + "iauPn00", "rbpn11", status); + vvd(rbpn[0][1], -0.1332880253640848301e-2, 1e-14, + "iauPn00", "rbpn12", status); + vvd(rbpn[0][2], -0.5790760898731087295e-3, 1e-14, + "iauPn00", "rbpn13", status); + + vvd(rbpn[1][0], 0.1332856746979948745e-2, 1e-14, + "iauPn00", "rbpn21", status); + vvd(rbpn[1][1], 0.9999991109064768883, 1e-12, + "iauPn00", "rbpn22", status); + vvd(rbpn[1][2], -0.4097740555723063806e-4, 1e-14, + "iauPn00", "rbpn23", status); + + vvd(rbpn[2][0], 0.5791301929950205000e-3, 1e-14, + "iauPn00", "rbpn31", status); + vvd(rbpn[2][1], 0.4020553681373702931e-4, 1e-14, + "iauPn00", "rbpn32", status); + vvd(rbpn[2][2], 0.9999998314958529887, 1e-12, + "iauPn00", "rbpn33", status); + +} + +static void t_pn00a(int *status) +/* +** - - - - - - - - +** t _ p n 0 0 a +** - - - - - - - - +** +** Test iauPn00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps, epsa, + rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3]; + + + iauPn00a(2400000.5, 53736.0, + &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn); + + vvd(dpsi, -0.9630909107115518431e-5, 1e-12, + "iauPn00a", "dpsi", status); + vvd(deps, 0.4063239174001678710e-4, 1e-12, + "iauPn00a", "deps", status); + vvd(epsa, 0.4090791789404229916, 1e-12, "iauPn00a", "epsa", status); + + vvd(rb[0][0], 0.9999999999999942498, 1e-12, + "iauPn00a", "rb11", status); + vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16, + "iauPn00a", "rb12", status); + vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16, + "iauPn00a", "rb13", status); + + vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16, + "iauPn00a", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauPn00a", "rb22", status); + vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16, + "iauPn00a", "rb23", status); + + vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16, + "iauPn00a", "rb31", status); + vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16, + "iauPn00a", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauPn00a", "rb33", status); + + vvd(rp[0][0], 0.9999989300532289018, 1e-12, + "iauPn00a", "rp11", status); + vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14, + "iauPn00a", "rp12", status); + vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14, + "iauPn00a", "rp13", status); + + vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14, + "iauPn00a", "rp21", status); + vvd(rp[1][1], 0.9999990999908750433, 1e-12, + "iauPn00a", "rp22", status); + vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14, + "iauPn00a", "rp23", status); + + vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14, + "iauPn00a", "rp31", status); + vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14, + "iauPn00a", "rp32", status); + vvd(rp[2][2], 0.9999998300623538046, 1e-12, + "iauPn00a", "rp33", status); + + vvd(rbp[0][0], 0.9999989300052243993, 1e-12, + "iauPn00a", "rbp11", status); + vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14, + "iauPn00a", "rbp12", status); + vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14, + "iauPn00a", "rbp13", status); + + vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14, + "iauPn00a", "rbp21", status); + vvd(rbp[1][1], 0.9999990998959191343, 1e-12, + "iauPn00a", "rbp22", status); + vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14, + "iauPn00a", "rbp23", status); + + vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14, + "iauPn00a", "rbp31", status); + vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14, + "iauPn00a", "rbp32", status); + vvd(rbp[2][2], 0.9999998301093036269, 1e-12, + "iauPn00a", "rbp33", status); + + vvd(rn[0][0], 0.9999999999536227949, 1e-12, + "iauPn00a", "rn11", status); + vvd(rn[0][1], 0.8836238544090873336e-5, 1e-14, + "iauPn00a", "rn12", status); + vvd(rn[0][2], 0.3830835237722400669e-5, 1e-14, + "iauPn00a", "rn13", status); + + vvd(rn[1][0], -0.8836082880798569274e-5, 1e-14, + "iauPn00a", "rn21", status); + vvd(rn[1][1], 0.9999999991354655028, 1e-12, + "iauPn00a", "rn22", status); + vvd(rn[1][2], -0.4063240865362499850e-4, 1e-14, + "iauPn00a", "rn23", status); + + vvd(rn[2][0], -0.3831194272065995866e-5, 1e-14, + "iauPn00a", "rn31", status); + vvd(rn[2][1], 0.4063237480216291775e-4, 1e-14, + "iauPn00a", "rn32", status); + vvd(rn[2][2], 0.9999999991671660338, 1e-12, + "iauPn00a", "rn33", status); + + vvd(rbpn[0][0], 0.9999989440476103435, 1e-12, + "iauPn00a", "rbpn11", status); + vvd(rbpn[0][1], -0.1332881761240011763e-2, 1e-14, + "iauPn00a", "rbpn12", status); + vvd(rbpn[0][2], -0.5790767434730085751e-3, 1e-14, + "iauPn00a", "rbpn13", status); + + vvd(rbpn[1][0], 0.1332858254308954658e-2, 1e-14, + "iauPn00a", "rbpn21", status); + vvd(rbpn[1][1], 0.9999991109044505577, 1e-12, + "iauPn00a", "rbpn22", status); + vvd(rbpn[1][2], -0.4097782710396580452e-4, 1e-14, + "iauPn00a", "rbpn23", status); + + vvd(rbpn[2][0], 0.5791308472168152904e-3, 1e-14, + "iauPn00a", "rbpn31", status); + vvd(rbpn[2][1], 0.4020595661591500259e-4, 1e-14, + "iauPn00a", "rbpn32", status); + vvd(rbpn[2][2], 0.9999998314954572304, 1e-12, + "iauPn00a", "rbpn33", status); + +} + +static void t_pn00b(int *status) +/* +** - - - - - - - - +** t _ p n 0 0 b +** - - - - - - - - +** +** Test iauPn00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps, epsa, + rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3]; + + + iauPn00b(2400000.5, 53736.0, &dpsi, &deps, &epsa, + rb, rp, rbp, rn, rbpn); + + vvd(dpsi, -0.9632552291148362783e-5, 1e-12, + "iauPn00b", "dpsi", status); + vvd(deps, 0.4063197106621159367e-4, 1e-12, + "iauPn00b", "deps", status); + vvd(epsa, 0.4090791789404229916, 1e-12, "iauPn00b", "epsa", status); + + vvd(rb[0][0], 0.9999999999999942498, 1e-12, + "iauPn00b", "rb11", status); + vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16, + "iauPn00b", "rb12", status); + vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16, + "iauPn00b", "rb13", status); + + vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16, + "iauPn00b", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauPn00b", "rb22", status); + vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16, + "iauPn00b", "rb23", status); + + vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16, + "iauPn00b", "rb31", status); + vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16, + "iauPn00b", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauPn00b", "rb33", status); + + vvd(rp[0][0], 0.9999989300532289018, 1e-12, + "iauPn00b", "rp11", status); + vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14, + "iauPn00b", "rp12", status); + vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14, + "iauPn00b", "rp13", status); + + vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14, + "iauPn00b", "rp21", status); + vvd(rp[1][1], 0.9999990999908750433, 1e-12, + "iauPn00b", "rp22", status); + vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14, + "iauPn00b", "rp23", status); + + vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14, + "iauPn00b", "rp31", status); + vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14, + "iauPn00b", "rp32", status); + vvd(rp[2][2], 0.9999998300623538046, 1e-12, + "iauPn00b", "rp33", status); + + vvd(rbp[0][0], 0.9999989300052243993, 1e-12, + "iauPn00b", "rbp11", status); + vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14, + "iauPn00b", "rbp12", status); + vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14, + "iauPn00b", "rbp13", status); + + vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14, + "iauPn00b", "rbp21", status); + vvd(rbp[1][1], 0.9999990998959191343, 1e-12, + "iauPn00b", "rbp22", status); + vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14, + "iauPn00b", "rbp23", status); + + vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14, + "iauPn00b", "rbp31", status); + vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14, + "iauPn00b", "rbp32", status); + vvd(rbp[2][2], 0.9999998301093036269, 1e-12, + "iauPn00b", "rbp33", status); + + vvd(rn[0][0], 0.9999999999536069682, 1e-12, + "iauPn00b", "rn11", status); + vvd(rn[0][1], 0.8837746144871248011e-5, 1e-14, + "iauPn00b", "rn12", status); + vvd(rn[0][2], 0.3831488838252202945e-5, 1e-14, + "iauPn00b", "rn13", status); + + vvd(rn[1][0], -0.8837590456632304720e-5, 1e-14, + "iauPn00b", "rn21", status); + vvd(rn[1][1], 0.9999999991354692733, 1e-12, + "iauPn00b", "rn22", status); + vvd(rn[1][2], -0.4063198798559591654e-4, 1e-14, + "iauPn00b", "rn23", status); + + vvd(rn[2][0], -0.3831847930134941271e-5, 1e-14, + "iauPn00b", "rn31", status); + vvd(rn[2][1], 0.4063195412258168380e-4, 1e-14, + "iauPn00b", "rn32", status); + vvd(rn[2][2], 0.9999999991671806225, 1e-12, + "iauPn00b", "rn33", status); + + vvd(rbpn[0][0], 0.9999989440499982806, 1e-12, + "iauPn00b", "rbpn11", status); + vvd(rbpn[0][1], -0.1332880253640849194e-2, 1e-14, + "iauPn00b", "rbpn12", status); + vvd(rbpn[0][2], -0.5790760898731091166e-3, 1e-14, + "iauPn00b", "rbpn13", status); + + vvd(rbpn[1][0], 0.1332856746979949638e-2, 1e-14, + "iauPn00b", "rbpn21", status); + vvd(rbpn[1][1], 0.9999991109064768883, 1e-12, + "iauPn00b", "rbpn22", status); + vvd(rbpn[1][2], -0.4097740555723081811e-4, 1e-14, + "iauPn00b", "rbpn23", status); + + vvd(rbpn[2][0], 0.5791301929950208873e-3, 1e-14, + "iauPn00b", "rbpn31", status); + vvd(rbpn[2][1], 0.4020553681373720832e-4, 1e-14, + "iauPn00b", "rbpn32", status); + vvd(rbpn[2][2], 0.9999998314958529887, 1e-12, + "iauPn00b", "rbpn33", status); + +} + +static void t_pn06a(int *status) +/* +** - - - - - - - - +** t _ p n 0 6 a +** - - - - - - - - +** +** Test iauPn06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps, epsa; + double rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3]; + + + iauPn06a(2400000.5, 53736.0, &dpsi, &deps, &epsa, + rb, rp, rbp, rn, rbpn); + + vvd(dpsi, -0.9630912025820308797e-5, 1e-12, + "iauPn06a", "dpsi", status); + vvd(deps, 0.4063238496887249798e-4, 1e-12, + "iauPn06a", "deps", status); + vvd(epsa, 0.4090789763356509926, 1e-12, "iauPn06a", "epsa", status); + + vvd(rb[0][0], 0.9999999999999942497, 1e-12, + "iauPn06a", "rb11", status); + vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14, + "iauPn06a", "rb12", status); + vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14, + "iauPn06a", "rb13", status); + + vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14, + "iauPn06a", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauPn06a", "rb22", status); + vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14, + "iauPn06a", "rb23", status); + + vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14, + "iauPn06a", "rb31", status); + vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14, + "iauPn06a", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauPn06a", "rb33", status); + + vvd(rp[0][0], 0.9999989300536854831, 1e-12, + "iauPn06a", "rp11", status); + vvd(rp[0][1], -0.1341646886204443795e-2, 1e-14, + "iauPn06a", "rp12", status); + vvd(rp[0][2], -0.5829880933488627759e-3, 1e-14, + "iauPn06a", "rp13", status); + + vvd(rp[1][0], 0.1341646890569782183e-2, 1e-14, + "iauPn06a", "rp21", status); + vvd(rp[1][1], 0.9999990999913319321, 1e-12, + "iauPn06a", "rp22", status); + vvd(rp[1][2], -0.3835944216374477457e-6, 1e-14, + "iauPn06a", "rp23", status); + + vvd(rp[2][0], 0.5829880833027867368e-3, 1e-14, + "iauPn06a", "rp31", status); + vvd(rp[2][1], -0.3985701514686976112e-6, 1e-14, + "iauPn06a", "rp32", status); + vvd(rp[2][2], 0.9999998300623534950, 1e-12, + "iauPn06a", "rp33", status); + + vvd(rbp[0][0], 0.9999989300056797893, 1e-12, + "iauPn06a", "rbp11", status); + vvd(rbp[0][1], -0.1341717650545059598e-2, 1e-14, + "iauPn06a", "rbp12", status); + vvd(rbp[0][2], -0.5829075756493728856e-3, 1e-14, + "iauPn06a", "rbp13", status); + + vvd(rbp[1][0], 0.1341717674223918101e-2, 1e-14, + "iauPn06a", "rbp21", status); + vvd(rbp[1][1], 0.9999990998963748448, 1e-12, + "iauPn06a", "rbp22", status); + vvd(rbp[1][2], -0.3504269280170069029e-6, 1e-14, + "iauPn06a", "rbp23", status); + + vvd(rbp[2][0], 0.5829075211461454599e-3, 1e-14, + "iauPn06a", "rbp31", status); + vvd(rbp[2][1], -0.4316708436255949093e-6, 1e-14, + "iauPn06a", "rbp32", status); + vvd(rbp[2][2], 0.9999998301093032943, 1e-12, + "iauPn06a", "rbp33", status); + + vvd(rn[0][0], 0.9999999999536227668, 1e-12, + "iauPn06a", "rn11", status); + vvd(rn[0][1], 0.8836241998111535233e-5, 1e-14, + "iauPn06a", "rn12", status); + vvd(rn[0][2], 0.3830834608415287707e-5, 1e-14, + "iauPn06a", "rn13", status); + + vvd(rn[1][0], -0.8836086334870740138e-5, 1e-14, + "iauPn06a", "rn21", status); + vvd(rn[1][1], 0.9999999991354657474, 1e-12, + "iauPn06a", "rn22", status); + vvd(rn[1][2], -0.4063240188248455065e-4, 1e-14, + "iauPn06a", "rn23", status); + + vvd(rn[2][0], -0.3831193642839398128e-5, 1e-14, + "iauPn06a", "rn31", status); + vvd(rn[2][1], 0.4063236803101479770e-4, 1e-14, + "iauPn06a", "rn32", status); + vvd(rn[2][2], 0.9999999991671663114, 1e-12, + "iauPn06a", "rn33", status); + + vvd(rbpn[0][0], 0.9999989440480669738, 1e-12, + "iauPn06a", "rbpn11", status); + vvd(rbpn[0][1], -0.1332881418091915973e-2, 1e-14, + "iauPn06a", "rbpn12", status); + vvd(rbpn[0][2], -0.5790767447612042565e-3, 1e-14, + "iauPn06a", "rbpn13", status); + + vvd(rbpn[1][0], 0.1332857911250989133e-2, 1e-14, + "iauPn06a", "rbpn21", status); + vvd(rbpn[1][1], 0.9999991109049141908, 1e-12, + "iauPn06a", "rbpn22", status); + vvd(rbpn[1][2], -0.4097767128546784878e-4, 1e-14, + "iauPn06a", "rbpn23", status); + + vvd(rbpn[2][0], 0.5791308482835292617e-3, 1e-14, + "iauPn06a", "rbpn31", status); + vvd(rbpn[2][1], 0.4020580099454020310e-4, 1e-14, + "iauPn06a", "rbpn32", status); + vvd(rbpn[2][2], 0.9999998314954628695, 1e-12, + "iauPn06a", "rbpn33", status); + +} + +static void t_pn06(int *status) +/* +** - - - - - - - +** t _ p n 0 6 +** - - - - - - - +** +** Test iauPn06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPn06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsi, deps, epsa, + rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3]; + + + dpsi = -0.9632552291149335877e-5; + deps = 0.4063197106621141414e-4; + + iauPn06(2400000.5, 53736.0, dpsi, deps, + &epsa, rb, rp, rbp, rn, rbpn); + + vvd(epsa, 0.4090789763356509926, 1e-12, "iauPn06", "epsa", status); + + vvd(rb[0][0], 0.9999999999999942497, 1e-12, + "iauPn06", "rb11", status); + vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14, + "iauPn06", "rb12", status); + vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14, + "iauPn06", "rb13", status); + + vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14, + "iauPn06", "rb21", status); + vvd(rb[1][1], 0.9999999999999969484, 1e-12, + "iauPn06", "rb22", status); + vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14, + "iauPn06", "rb23", status); + + vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14, + "iauPn06", "rb31", status); + vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14, + "iauPn06", "rb32", status); + vvd(rb[2][2], 0.9999999999999962084, 1e-12, + "iauPn06", "rb33", status); + + vvd(rp[0][0], 0.9999989300536854831, 1e-12, + "iauPn06", "rp11", status); + vvd(rp[0][1], -0.1341646886204443795e-2, 1e-14, + "iauPn06", "rp12", status); + vvd(rp[0][2], -0.5829880933488627759e-3, 1e-14, + "iauPn06", "rp13", status); + + vvd(rp[1][0], 0.1341646890569782183e-2, 1e-14, + "iauPn06", "rp21", status); + vvd(rp[1][1], 0.9999990999913319321, 1e-12, + "iauPn06", "rp22", status); + vvd(rp[1][2], -0.3835944216374477457e-6, 1e-14, + "iauPn06", "rp23", status); + + vvd(rp[2][0], 0.5829880833027867368e-3, 1e-14, + "iauPn06", "rp31", status); + vvd(rp[2][1], -0.3985701514686976112e-6, 1e-14, + "iauPn06", "rp32", status); + vvd(rp[2][2], 0.9999998300623534950, 1e-12, + "iauPn06", "rp33", status); + + vvd(rbp[0][0], 0.9999989300056797893, 1e-12, + "iauPn06", "rbp11", status); + vvd(rbp[0][1], -0.1341717650545059598e-2, 1e-14, + "iauPn06", "rbp12", status); + vvd(rbp[0][2], -0.5829075756493728856e-3, 1e-14, + "iauPn06", "rbp13", status); + + vvd(rbp[1][0], 0.1341717674223918101e-2, 1e-14, + "iauPn06", "rbp21", status); + vvd(rbp[1][1], 0.9999990998963748448, 1e-12, + "iauPn06", "rbp22", status); + vvd(rbp[1][2], -0.3504269280170069029e-6, 1e-14, + "iauPn06", "rbp23", status); + + vvd(rbp[2][0], 0.5829075211461454599e-3, 1e-14, + "iauPn06", "rbp31", status); + vvd(rbp[2][1], -0.4316708436255949093e-6, 1e-14, + "iauPn06", "rbp32", status); + vvd(rbp[2][2], 0.9999998301093032943, 1e-12, + "iauPn06", "rbp33", status); + + vvd(rn[0][0], 0.9999999999536069682, 1e-12, + "iauPn06", "rn11", status); + vvd(rn[0][1], 0.8837746921149881914e-5, 1e-14, + "iauPn06", "rn12", status); + vvd(rn[0][2], 0.3831487047682968703e-5, 1e-14, + "iauPn06", "rn13", status); + + vvd(rn[1][0], -0.8837591232983692340e-5, 1e-14, + "iauPn06", "rn21", status); + vvd(rn[1][1], 0.9999999991354692664, 1e-12, + "iauPn06", "rn22", status); + vvd(rn[1][2], -0.4063198798558931215e-4, 1e-14, + "iauPn06", "rn23", status); + + vvd(rn[2][0], -0.3831846139597250235e-5, 1e-14, + "iauPn06", "rn31", status); + vvd(rn[2][1], 0.4063195412258792914e-4, 1e-14, + "iauPn06", "rn32", status); + vvd(rn[2][2], 0.9999999991671806293, 1e-12, + "iauPn06", "rn33", status); + + vvd(rbpn[0][0], 0.9999989440504506688, 1e-12, + "iauPn06", "rbpn11", status); + vvd(rbpn[0][1], -0.1332879913170492655e-2, 1e-14, + "iauPn06", "rbpn12", status); + vvd(rbpn[0][2], -0.5790760923225655753e-3, 1e-14, + "iauPn06", "rbpn13", status); + + vvd(rbpn[1][0], 0.1332856406595754748e-2, 1e-14, + "iauPn06", "rbpn21", status); + vvd(rbpn[1][1], 0.9999991109069366795, 1e-12, + "iauPn06", "rbpn22", status); + vvd(rbpn[1][2], -0.4097725651142641812e-4, 1e-14, + "iauPn06", "rbpn23", status); + + vvd(rbpn[2][0], 0.5791301952321296716e-3, 1e-14, + "iauPn06", "rbpn31", status); + vvd(rbpn[2][1], 0.4020538796195230577e-4, 1e-14, + "iauPn06", "rbpn32", status); + vvd(rbpn[2][2], 0.9999998314958576778, 1e-12, + "iauPn06", "rbpn33", status); + +} + +static void t_pnm00a(int *status) +/* +** - - - - - - - - - +** t _ p n m 0 0 a +** - - - - - - - - - +** +** Test iauPnm00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPnm00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3]; + + + iauPnm00a(2400000.5, 50123.9999, rbpn); + + vvd(rbpn[0][0], 0.9999995832793134257, 1e-12, + "iauPnm00a", "11", status); + vvd(rbpn[0][1], 0.8372384254137809439e-3, 1e-14, + "iauPnm00a", "12", status); + vvd(rbpn[0][2], 0.3639684306407150645e-3, 1e-14, + "iauPnm00a", "13", status); + + vvd(rbpn[1][0], -0.8372535226570394543e-3, 1e-14, + "iauPnm00a", "21", status); + vvd(rbpn[1][1], 0.9999996486491582471, 1e-12, + "iauPnm00a", "22", status); + vvd(rbpn[1][2], 0.4132915262664072381e-4, 1e-14, + "iauPnm00a", "23", status); + + vvd(rbpn[2][0], -0.3639337004054317729e-3, 1e-14, + "iauPnm00a", "31", status); + vvd(rbpn[2][1], -0.4163386925461775873e-4, 1e-14, + "iauPnm00a", "32", status); + vvd(rbpn[2][2], 0.9999999329094390695, 1e-12, + "iauPnm00a", "33", status); + +} + +static void t_pnm00b(int *status) +/* +** - - - - - - - - - +** t _ p n m 0 0 b +** - - - - - - - - - +** +** Test iauPnm00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPnm00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3]; + + + iauPnm00b(2400000.5, 50123.9999, rbpn); + + vvd(rbpn[0][0], 0.9999995832776208280, 1e-12, + "iauPnm00b", "11", status); + vvd(rbpn[0][1], 0.8372401264429654837e-3, 1e-14, + "iauPnm00b", "12", status); + vvd(rbpn[0][2], 0.3639691681450271771e-3, 1e-14, + "iauPnm00b", "13", status); + + vvd(rbpn[1][0], -0.8372552234147137424e-3, 1e-14, + "iauPnm00b", "21", status); + vvd(rbpn[1][1], 0.9999996486477686123, 1e-12, + "iauPnm00b", "22", status); + vvd(rbpn[1][2], 0.4132832190946052890e-4, 1e-14, + "iauPnm00b", "23", status); + + vvd(rbpn[2][0], -0.3639344385341866407e-3, 1e-14, + "iauPnm00b", "31", status); + vvd(rbpn[2][1], -0.4163303977421522785e-4, 1e-14, + "iauPnm00b", "32", status); + vvd(rbpn[2][2], 0.9999999329092049734, 1e-12, + "iauPnm00b", "33", status); + +} + +static void t_pnm06a(int *status) +/* +** - - - - - - - - - +** t _ p n m 0 6 a +** - - - - - - - - - +** +** Test iauPnm06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPnm06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rbpn[3][3]; + + + iauPnm06a(2400000.5, 50123.9999, rbpn); + + vvd(rbpn[0][0], 0.9999995832794205484, 1e-12, + "iauPnm06a", "11", status); + vvd(rbpn[0][1], 0.8372382772630962111e-3, 1e-14, + "iauPnm06a", "12", status); + vvd(rbpn[0][2], 0.3639684771140623099e-3, 1e-14, + "iauPnm06a", "13", status); + + vvd(rbpn[1][0], -0.8372533744743683605e-3, 1e-14, + "iauPnm06a", "21", status); + vvd(rbpn[1][1], 0.9999996486492861646, 1e-12, + "iauPnm06a", "22", status); + vvd(rbpn[1][2], 0.4132905944611019498e-4, 1e-14, + "iauPnm06a", "23", status); + + vvd(rbpn[2][0], -0.3639337469629464969e-3, 1e-14, + "iauPnm06a", "31", status); + vvd(rbpn[2][1], -0.4163377605910663999e-4, 1e-14, + "iauPnm06a", "32", status); + vvd(rbpn[2][2], 0.9999999329094260057, 1e-12, + "iauPnm06a", "33", status); + +} + +static void t_pnm80(int *status) +/* +** - - - - - - - - +** t _ p n m 8 0 +** - - - - - - - - +** +** Test iauPnm80 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPnm80, vvd +** +** This revision: 2013 August 7 +*/ +{ + double rmatpn[3][3]; + + + iauPnm80(2400000.5, 50123.9999, rmatpn); + + vvd(rmatpn[0][0], 0.9999995831934611169, 1e-12, + "iauPnm80", "11", status); + vvd(rmatpn[0][1], 0.8373654045728124011e-3, 1e-14, + "iauPnm80", "12", status); + vvd(rmatpn[0][2], 0.3639121916933106191e-3, 1e-14, + "iauPnm80", "13", status); + + vvd(rmatpn[1][0], -0.8373804896118301316e-3, 1e-14, + "iauPnm80", "21", status); + vvd(rmatpn[1][1], 0.9999996485439674092, 1e-12, + "iauPnm80", "22", status); + vvd(rmatpn[1][2], 0.4130202510421549752e-4, 1e-14, + "iauPnm80", "23", status); + + vvd(rmatpn[2][0], -0.3638774789072144473e-3, 1e-14, + "iauPnm80", "31", status); + vvd(rmatpn[2][1], -0.4160674085851722359e-4, 1e-14, + "iauPnm80", "32", status); + vvd(rmatpn[2][2], 0.9999999329310274805, 1e-12, + "iauPnm80", "33", status); + +} + +static void t_pom00(int *status) +/* +** - - - - - - - - +** t _ p o m 0 0 +** - - - - - - - - +** +** Test iauPom00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPom00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double xp, yp, sp, rpom[3][3]; + + + xp = 2.55060238e-7; + yp = 1.860359247e-6; + sp = -0.1367174580728891460e-10; + + iauPom00(xp, yp, sp, rpom); + + vvd(rpom[0][0], 0.9999999999999674721, 1e-12, + "iauPom00", "11", status); + vvd(rpom[0][1], -0.1367174580728846989e-10, 1e-16, + "iauPom00", "12", status); + vvd(rpom[0][2], 0.2550602379999972345e-6, 1e-16, + "iauPom00", "13", status); + + vvd(rpom[1][0], 0.1414624947957029801e-10, 1e-16, + "iauPom00", "21", status); + vvd(rpom[1][1], 0.9999999999982695317, 1e-12, + "iauPom00", "22", status); + vvd(rpom[1][2], -0.1860359246998866389e-5, 1e-16, + "iauPom00", "23", status); + + vvd(rpom[2][0], -0.2550602379741215021e-6, 1e-16, + "iauPom00", "31", status); + vvd(rpom[2][1], 0.1860359247002414021e-5, 1e-16, + "iauPom00", "32", status); + vvd(rpom[2][2], 0.9999999999982370039, 1e-12, + "iauPom00", "33", status); + +} + +static void t_ppp(int *status) +/* +** - - - - - - +** t _ p p p +** - - - - - - +** +** Test iauPpp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPpp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], apb[3]; + + + a[0] = 2.0; + a[1] = 2.0; + a[2] = 3.0; + + b[0] = 1.0; + b[1] = 3.0; + b[2] = 4.0; + + iauPpp(a, b, apb); + + vvd(apb[0], 3.0, 1e-12, "iauPpp", "0", status); + vvd(apb[1], 5.0, 1e-12, "iauPpp", "1", status); + vvd(apb[2], 7.0, 1e-12, "iauPpp", "2", status); + +} + +static void t_ppsp(int *status) +/* +** - - - - - - - +** t _ p p s p +** - - - - - - - +** +** Test iauPpsp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPpsp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], s, b[3], apsb[3]; + + + a[0] = 2.0; + a[1] = 2.0; + a[2] = 3.0; + + s = 5.0; + + b[0] = 1.0; + b[1] = 3.0; + b[2] = 4.0; + + iauPpsp(a, s, b, apsb); + + vvd(apsb[0], 7.0, 1e-12, "iauPpsp", "0", status); + vvd(apsb[1], 17.0, 1e-12, "iauPpsp", "1", status); + vvd(apsb[2], 23.0, 1e-12, "iauPpsp", "2", status); + +} + +static void t_pr00(int *status) +/* +** - - - - - - - +** t _ p r 0 0 +** - - - - - - - +** +** Test iauPr00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPr00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double dpsipr, depspr; + + iauPr00(2400000.5, 53736, &dpsipr, &depspr); + + vvd(dpsipr, -0.8716465172668347629e-7, 1e-22, + "iauPr00", "dpsipr", status); + vvd(depspr, -0.7342018386722813087e-8, 1e-22, + "iauPr00", "depspr", status); + +} + +static void t_prec76(int *status) +/* +** - - - - - - - - - +** t _ p r e c 7 6 +** - - - - - - - - - +** +** Test iauPrec76 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPrec76, vvd +** +** This revision: 2013 August 7 +*/ +{ + double ep01, ep02, ep11, ep12, zeta, z, theta; + + + ep01 = 2400000.5; + ep02 = 33282.0; + ep11 = 2400000.5; + ep12 = 51544.0; + + iauPrec76(ep01, ep02, ep11, ep12, &zeta, &z, &theta); + + vvd(zeta, 0.5588961642000161243e-2, 1e-12, + "iauPrec76", "zeta", status); + vvd(z, 0.5589922365870680624e-2, 1e-12, + "iauPrec76", "z", status); + vvd(theta, 0.4858945471687296760e-2, 1e-12, + "iauPrec76", "theta", status); + +} + +static void t_pv2p(int *status) +/* +** - - - - - - - +** t _ p v 2 p +** - - - - - - - +** +** Test iauPv2p function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPv2p, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], p[3]; + + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = -0.5; + pv[1][1] = 3.1; + pv[1][2] = 0.9; + + iauPv2p(pv, p); + + vvd(p[0], 0.3, 0.0, "iauPv2p", "1", status); + vvd(p[1], 1.2, 0.0, "iauPv2p", "2", status); + vvd(p[2], -2.5, 0.0, "iauPv2p", "3", status); + +} + +static void t_pv2s(int *status) +/* +** - - - - - - - +** t _ p v 2 s +** - - - - - - - +** +** Test iauPv2s function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPv2s, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], theta, phi, r, td, pd, rd; + + + pv[0][0] = -0.4514964673880165; + pv[0][1] = 0.03093394277342585; + pv[0][2] = 0.05594668105108779; + + pv[1][0] = 1.292270850663260e-5; + pv[1][1] = 2.652814182060692e-6; + pv[1][2] = 2.568431853930293e-6; + + iauPv2s(pv, &theta, &phi, &r, &td, &pd, &rd); + + vvd(theta, 3.073185307179586515, 1e-12, "iauPv2s", "theta", status); + vvd(phi, 0.1229999999999999992, 1e-12, "iauPv2s", "phi", status); + vvd(r, 0.4559999999999999757, 1e-12, "iauPv2s", "r", status); + vvd(td, -0.7800000000000000364e-5, 1e-16, "iauPv2s", "td", status); + vvd(pd, 0.9010000000000001639e-5, 1e-16, "iauPv2s", "pd", status); + vvd(rd, -0.1229999999999999832e-4, 1e-16, "iauPv2s", "rd", status); + +} + +static void t_pvdpv(int *status) +/* +** - - - - - - - - +** t _ p v d p v +** - - - - - - - - +** +** Test iauPvdpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvdpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[2][3], b[2][3], adb[2]; + + + a[0][0] = 2.0; + a[0][1] = 2.0; + a[0][2] = 3.0; + + a[1][0] = 6.0; + a[1][1] = 0.0; + a[1][2] = 4.0; + + b[0][0] = 1.0; + b[0][1] = 3.0; + b[0][2] = 4.0; + + b[1][0] = 0.0; + b[1][1] = 2.0; + b[1][2] = 8.0; + + iauPvdpv(a, b, adb); + + vvd(adb[0], 20.0, 1e-12, "iauPvdpv", "1", status); + vvd(adb[1], 50.0, 1e-12, "iauPvdpv", "2", status); + +} + +static void t_pvm(int *status) +/* +** - - - - - - +** t _ p v m +** - - - - - - +** +** Test iauPvm function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvm, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], r, s; + + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = 0.45; + pv[1][1] = -0.25; + pv[1][2] = 1.1; + + iauPvm(pv, &r, &s); + + vvd(r, 2.789265136196270604, 1e-12, "iauPvm", "r", status); + vvd(s, 1.214495780149111922, 1e-12, "iauPvm", "s", status); + +} + +static void t_pvmpv(int *status) +/* +** - - - - - - - - +** t _ p v m p v +** - - - - - - - - +** +** Test iauPvmpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvmpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[2][3], b[2][3], amb[2][3]; + + + a[0][0] = 2.0; + a[0][1] = 2.0; + a[0][2] = 3.0; + + a[1][0] = 5.0; + a[1][1] = 6.0; + a[1][2] = 3.0; + + b[0][0] = 1.0; + b[0][1] = 3.0; + b[0][2] = 4.0; + + b[1][0] = 3.0; + b[1][1] = 2.0; + b[1][2] = 1.0; + + iauPvmpv(a, b, amb); + + vvd(amb[0][0], 1.0, 1e-12, "iauPvmpv", "11", status); + vvd(amb[0][1], -1.0, 1e-12, "iauPvmpv", "21", status); + vvd(amb[0][2], -1.0, 1e-12, "iauPvmpv", "31", status); + + vvd(amb[1][0], 2.0, 1e-12, "iauPvmpv", "12", status); + vvd(amb[1][1], 4.0, 1e-12, "iauPvmpv", "22", status); + vvd(amb[1][2], 2.0, 1e-12, "iauPvmpv", "32", status); + +} + +static void t_pvppv(int *status) +/* +** - - - - - - - - +** t _ p v p p v +** - - - - - - - - +** +** Test iauPvppv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvppv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[2][3], b[2][3], apb[2][3]; + + + a[0][0] = 2.0; + a[0][1] = 2.0; + a[0][2] = 3.0; + + a[1][0] = 5.0; + a[1][1] = 6.0; + a[1][2] = 3.0; + + b[0][0] = 1.0; + b[0][1] = 3.0; + b[0][2] = 4.0; + + b[1][0] = 3.0; + b[1][1] = 2.0; + b[1][2] = 1.0; + + iauPvppv(a, b, apb); + + vvd(apb[0][0], 3.0, 1e-12, "iauPvppv", "p1", status); + vvd(apb[0][1], 5.0, 1e-12, "iauPvppv", "p2", status); + vvd(apb[0][2], 7.0, 1e-12, "iauPvppv", "p3", status); + + vvd(apb[1][0], 8.0, 1e-12, "iauPvppv", "v1", status); + vvd(apb[1][1], 8.0, 1e-12, "iauPvppv", "v2", status); + vvd(apb[1][2], 4.0, 1e-12, "iauPvppv", "v3", status); + +} + +static void t_pvstar(int *status) +/* +** - - - - - - - - - +** t _ p v s t a r +** - - - - - - - - - +** +** Test iauPvstar function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvstar, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double pv[2][3], ra, dec, pmr, pmd, px, rv; + int j; + + + pv[0][0] = 126668.5912743160601; + pv[0][1] = 2136.792716839935195; + pv[0][2] = -245251.2339876830091; + + pv[1][0] = -0.4051854035740712739e-2; + pv[1][1] = -0.6253919754866173866e-2; + pv[1][2] = 0.1189353719774107189e-1; + + j = iauPvstar(pv, &ra, &dec, &pmr, &pmd, &px, &rv); + + vvd(ra, 0.1686756e-1, 1e-12, "iauPvstar", "ra", status); + vvd(dec, -1.093989828, 1e-12, "iauPvstar", "dec", status); + vvd(pmr, -0.1783235160000472788e-4, 1e-16, "iauPvstar", "pmr", status); + vvd(pmd, 0.2336024047000619347e-5, 1e-16, "iauPvstar", "pmd", status); + vvd(px, 0.74723, 1e-12, "iauPvstar", "px", status); + vvd(rv, -21.60000010107306010, 1e-11, "iauPvstar", "rv", status); + + viv(j, 0, "iauPvstar", "j", status); + +} + +static void t_pvtob(int *status) +/* +** - - - - - - - - +** t _ p v t o b +** - - - - - - - - +** +** Test iauPvtob function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvtob, vvd +** +** This revision: 2013 October 2 +*/ +{ + double elong, phi, hm, xp, yp, sp, theta, pv[2][3]; + + + elong = 2.0; + phi = 0.5; + hm = 3000.0; + xp = 1e-6; + yp = -0.5e-6; + sp = 1e-8; + theta = 5.0; + + iauPvtob(elong, phi, hm, xp, yp, sp, theta, pv); + + vvd(pv[0][0], 4225081.367071159207, 1e-5, + "iauPvtob", "p(1)", status); + vvd(pv[0][1], 3681943.215856198144, 1e-5, + "iauPvtob", "p(2)", status); + vvd(pv[0][2], 3041149.399241260785, 1e-5, + "iauPvtob", "p(3)", status); + vvd(pv[1][0], -268.4915389365998787, 1e-9, + "iauPvtob", "v(1)", status); + vvd(pv[1][1], 308.0977983288903123, 1e-9, + "iauPvtob", "v(2)", status); + vvd(pv[1][2], 0, 0, + "iauPvtob", "v(3)", status); + +} + +static void t_pvu(int *status) +/* +** - - - - - - +** t _ p v u +** - - - - - - +** +** Test iauPvu function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvu, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], upv[2][3]; + + + pv[0][0] = 126668.5912743160734; + pv[0][1] = 2136.792716839935565; + pv[0][2] = -245251.2339876830229; + + pv[1][0] = -0.4051854035740713039e-2; + pv[1][1] = -0.6253919754866175788e-2; + pv[1][2] = 0.1189353719774107615e-1; + + iauPvu(2920.0, pv, upv); + + vvd(upv[0][0], 126656.7598605317105, 1e-12, + "iauPvu", "p1", status); + vvd(upv[0][1], 2118.531271155726332, 1e-12, + "iauPvu", "p2", status); + vvd(upv[0][2], -245216.5048590656190, 1e-12, + "iauPvu", "p3", status); + + vvd(upv[1][0], -0.4051854035740713039e-2, 1e-12, + "iauPvu", "v1", status); + vvd(upv[1][1], -0.6253919754866175788e-2, 1e-12, + "iauPvu", "v2", status); + vvd(upv[1][2], 0.1189353719774107615e-1, 1e-12, + "iauPvu", "v3", status); + +} + +static void t_pvup(int *status) +/* +** - - - - - - - +** t _ p v u p +** - - - - - - - +** +** Test iauPvup function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvup, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3], p[3]; + + + pv[0][0] = 126668.5912743160734; + pv[0][1] = 2136.792716839935565; + pv[0][2] = -245251.2339876830229; + + pv[1][0] = -0.4051854035740713039e-2; + pv[1][1] = -0.6253919754866175788e-2; + pv[1][2] = 0.1189353719774107615e-1; + + iauPvup(2920.0, pv, p); + + vvd(p[0], 126656.7598605317105, 1e-12, "iauPvup", "1", status); + vvd(p[1], 2118.531271155726332, 1e-12, "iauPvup", "2", status); + vvd(p[2], -245216.5048590656190, 1e-12, "iauPvup", "3", status); + +} + +static void t_pvxpv(int *status) +/* +** - - - - - - - - +** t _ p v x p v +** - - - - - - - - +** +** Test iauPvxpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPvxpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[2][3], b[2][3], axb[2][3]; + + + a[0][0] = 2.0; + a[0][1] = 2.0; + a[0][2] = 3.0; + + a[1][0] = 6.0; + a[1][1] = 0.0; + a[1][2] = 4.0; + + b[0][0] = 1.0; + b[0][1] = 3.0; + b[0][2] = 4.0; + + b[1][0] = 0.0; + b[1][1] = 2.0; + b[1][2] = 8.0; + + iauPvxpv(a, b, axb); + + vvd(axb[0][0], -1.0, 1e-12, "iauPvxpv", "p1", status); + vvd(axb[0][1], -5.0, 1e-12, "iauPvxpv", "p2", status); + vvd(axb[0][2], 4.0, 1e-12, "iauPvxpv", "p3", status); + + vvd(axb[1][0], -2.0, 1e-12, "iauPvxpv", "v1", status); + vvd(axb[1][1], -36.0, 1e-12, "iauPvxpv", "v2", status); + vvd(axb[1][2], 22.0, 1e-12, "iauPvxpv", "v3", status); + +} + +static void t_pxp(int *status) +/* +** - - - - - - +** t _ p x p +** - - - - - - +** +** Test iauPxp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauPxp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], axb[3]; + + + a[0] = 2.0; + a[1] = 2.0; + a[2] = 3.0; + + b[0] = 1.0; + b[1] = 3.0; + b[2] = 4.0; + + iauPxp(a, b, axb); + + vvd(axb[0], -1.0, 1e-12, "iauPxp", "1", status); + vvd(axb[1], -5.0, 1e-12, "iauPxp", "2", status); + vvd(axb[2], 4.0, 1e-12, "iauPxp", "3", status); + +} + +static void t_refco(int *status) +/* +** - - - - - - - - +** t _ r e f c o +** - - - - - - - - +** +** Test iauRefco function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRefco, vvd +** +** This revision: 2013 October 2 +*/ +{ + double phpa, tc, rh, wl, refa, refb; + + + phpa = 800.0; + tc = 10.0; + rh = 0.9; + wl = 0.4; + + iauRefco(phpa, tc, rh, wl, &refa, &refb); + + vvd(refa, 0.2264949956241415009e-3, 1e-15, + "iauRefco", "refa", status); + vvd(refb, -0.2598658261729343970e-6, 1e-18, + "iauRefco", "refb", status); + +} + +static void t_rm2v(int *status) +/* +** - - - - - - - +** t _ r m 2 v +** - - - - - - - +** +** Test iauRm2v function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRm2v, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], w[3]; + + + r[0][0] = 0.00; + r[0][1] = -0.80; + r[0][2] = -0.60; + + r[1][0] = 0.80; + r[1][1] = -0.36; + r[1][2] = 0.48; + + r[2][0] = 0.60; + r[2][1] = 0.48; + r[2][2] = -0.64; + + iauRm2v(r, w); + + vvd(w[0], 0.0, 1e-12, "iauRm2v", "1", status); + vvd(w[1], 1.413716694115406957, 1e-12, "iauRm2v", "2", status); + vvd(w[2], -1.884955592153875943, 1e-12, "iauRm2v", "3", status); + +} + +static void t_rv2m(int *status) +/* +** - - - - - - - +** t _ r v 2 m +** - - - - - - - +** +** Test iauRv2m function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRv2m, vvd +** +** This revision: 2013 August 7 +*/ +{ + double w[3], r[3][3]; + + + w[0] = 0.0; + w[1] = 1.41371669; + w[2] = -1.88495559; + + iauRv2m(w, r); + + vvd(r[0][0], -0.7071067782221119905, 1e-14, "iauRv2m", "11", status); + vvd(r[0][1], -0.5656854276809129651, 1e-14, "iauRv2m", "12", status); + vvd(r[0][2], -0.4242640700104211225, 1e-14, "iauRv2m", "13", status); + + vvd(r[1][0], 0.5656854276809129651, 1e-14, "iauRv2m", "21", status); + vvd(r[1][1], -0.0925483394532274246, 1e-14, "iauRv2m", "22", status); + vvd(r[1][2], -0.8194112531408833269, 1e-14, "iauRv2m", "23", status); + + vvd(r[2][0], 0.4242640700104211225, 1e-14, "iauRv2m", "31", status); + vvd(r[2][1], -0.8194112531408833269, 1e-14, "iauRv2m", "32", status); + vvd(r[2][2], 0.3854415612311154341, 1e-14, "iauRv2m", "33", status); + +} + +static void t_rx(int *status) +/* +** - - - - - +** t _ r x +** - - - - - +** +** Test iauRx function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRx, vvd +** +** This revision: 2013 August 7 +*/ +{ + double phi, r[3][3]; + + + phi = 0.3456789; + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauRx(phi, r); + + vvd(r[0][0], 2.0, 0.0, "iauRx", "11", status); + vvd(r[0][1], 3.0, 0.0, "iauRx", "12", status); + vvd(r[0][2], 2.0, 0.0, "iauRx", "13", status); + + vvd(r[1][0], 3.839043388235612460, 1e-12, "iauRx", "21", status); + vvd(r[1][1], 3.237033249594111899, 1e-12, "iauRx", "22", status); + vvd(r[1][2], 4.516714379005982719, 1e-12, "iauRx", "23", status); + + vvd(r[2][0], 1.806030415924501684, 1e-12, "iauRx", "31", status); + vvd(r[2][1], 3.085711545336372503, 1e-12, "iauRx", "32", status); + vvd(r[2][2], 3.687721683977873065, 1e-12, "iauRx", "33", status); + +} + +static void t_rxp(int *status) +/* +** - - - - - - +** t _ r x p +** - - - - - - +** +** Test iauRxp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRxp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], p[3], rp[3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + p[0] = 0.2; + p[1] = 1.5; + p[2] = 0.1; + + iauRxp(r, p, rp); + + vvd(rp[0], 5.1, 1e-12, "iauRxp", "1", status); + vvd(rp[1], 3.9, 1e-12, "iauRxp", "2", status); + vvd(rp[2], 7.1, 1e-12, "iauRxp", "3", status); + +} + +static void t_rxpv(int *status) +/* +** - - - - - - - +** t _ r x p v +** - - - - - - - +** +** Test iauRxpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRxpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], pv[2][3], rpv[2][3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + pv[0][0] = 0.2; + pv[0][1] = 1.5; + pv[0][2] = 0.1; + + pv[1][0] = 1.5; + pv[1][1] = 0.2; + pv[1][2] = 0.1; + + iauRxpv(r, pv, rpv); + + vvd(rpv[0][0], 5.1, 1e-12, "iauRxpv", "11", status); + vvd(rpv[1][0], 3.8, 1e-12, "iauRxpv", "12", status); + + vvd(rpv[0][1], 3.9, 1e-12, "iauRxpv", "21", status); + vvd(rpv[1][1], 5.2, 1e-12, "iauRxpv", "22", status); + + vvd(rpv[0][2], 7.1, 1e-12, "iauRxpv", "31", status); + vvd(rpv[1][2], 5.8, 1e-12, "iauRxpv", "32", status); + +} + +static void t_rxr(int *status) +/* +** - - - - - - +** t _ r x r +** - - - - - - +** +** Test iauRxr function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRxr, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3][3], b[3][3], atb[3][3]; + + + a[0][0] = 2.0; + a[0][1] = 3.0; + a[0][2] = 2.0; + + a[1][0] = 3.0; + a[1][1] = 2.0; + a[1][2] = 3.0; + + a[2][0] = 3.0; + a[2][1] = 4.0; + a[2][2] = 5.0; + + b[0][0] = 1.0; + b[0][1] = 2.0; + b[0][2] = 2.0; + + b[1][0] = 4.0; + b[1][1] = 1.0; + b[1][2] = 1.0; + + b[2][0] = 3.0; + b[2][1] = 0.0; + b[2][2] = 1.0; + + iauRxr(a, b, atb); + + vvd(atb[0][0], 20.0, 1e-12, "iauRxr", "11", status); + vvd(atb[0][1], 7.0, 1e-12, "iauRxr", "12", status); + vvd(atb[0][2], 9.0, 1e-12, "iauRxr", "13", status); + + vvd(atb[1][0], 20.0, 1e-12, "iauRxr", "21", status); + vvd(atb[1][1], 8.0, 1e-12, "iauRxr", "22", status); + vvd(atb[1][2], 11.0, 1e-12, "iauRxr", "23", status); + + vvd(atb[2][0], 34.0, 1e-12, "iauRxr", "31", status); + vvd(atb[2][1], 10.0, 1e-12, "iauRxr", "32", status); + vvd(atb[2][2], 15.0, 1e-12, "iauRxr", "33", status); + +} + +static void t_ry(int *status) +/* +** - - - - - +** t _ r y +** - - - - - +** +** Test iauRy function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRy, vvd +** +** This revision: 2013 August 7 +*/ +{ + double theta, r[3][3]; + + + theta = 0.3456789; + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauRy(theta, r); + + vvd(r[0][0], 0.8651847818978159930, 1e-12, "iauRy", "11", status); + vvd(r[0][1], 1.467194920539316554, 1e-12, "iauRy", "12", status); + vvd(r[0][2], 0.1875137911274457342, 1e-12, "iauRy", "13", status); + + vvd(r[1][0], 3, 1e-12, "iauRy", "21", status); + vvd(r[1][1], 2, 1e-12, "iauRy", "22", status); + vvd(r[1][2], 3, 1e-12, "iauRy", "23", status); + + vvd(r[2][0], 3.500207892850427330, 1e-12, "iauRy", "31", status); + vvd(r[2][1], 4.779889022262298150, 1e-12, "iauRy", "32", status); + vvd(r[2][2], 5.381899160903798712, 1e-12, "iauRy", "33", status); + +} + +static void t_rz(int *status) +/* +** - - - - - +** t _ r z +** - - - - - +** +** Test iauRz function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauRz, vvd +** +** This revision: 2013 August 7 +*/ +{ + double psi, r[3][3]; + + + psi = 0.3456789; + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauRz(psi, r); + + vvd(r[0][0], 2.898197754208926769, 1e-12, "iauRz", "11", status); + vvd(r[0][1], 3.500207892850427330, 1e-12, "iauRz", "12", status); + vvd(r[0][2], 2.898197754208926769, 1e-12, "iauRz", "13", status); + + vvd(r[1][0], 2.144865911309686813, 1e-12, "iauRz", "21", status); + vvd(r[1][1], 0.865184781897815993, 1e-12, "iauRz", "22", status); + vvd(r[1][2], 2.144865911309686813, 1e-12, "iauRz", "23", status); + + vvd(r[2][0], 3.0, 1e-12, "iauRz", "31", status); + vvd(r[2][1], 4.0, 1e-12, "iauRz", "32", status); + vvd(r[2][2], 5.0, 1e-12, "iauRz", "33", status); + +} + +static void t_s00a(int *status) +/* +** - - - - - - - +** t _ s 0 0 a +** - - - - - - - +** +** Test iauS00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s; + + + s = iauS00a(2400000.5, 52541.0); + + vvd(s, -0.1340684448919163584e-7, 1e-18, "iauS00a", "", status); + +} + +static void t_s00b(int *status) +/* +** - - - - - - - +** t _ s 0 0 b +** - - - - - - - +** +** Test iauS00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s; + + + s = iauS00b(2400000.5, 52541.0); + + vvd(s, -0.1340695782951026584e-7, 1e-18, "iauS00b", "", status); + +} + +static void t_s00(int *status) +/* +** - - - - - - +** t _ s 0 0 +** - - - - - - +** +** Test iauS00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS00, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s; + + + x = 0.5791308486706011000e-3; + y = 0.4020579816732961219e-4; + + s = iauS00(2400000.5, 53736.0, x, y); + + vvd(s, -0.1220036263270905693e-7, 1e-18, "iauS00", "", status); + +} + +static void t_s06a(int *status) +/* +** - - - - - - - +** t _ s 0 6 a +** - - - - - - - +** +** Test iauS06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s; + + + s = iauS06a(2400000.5, 52541.0); + + vvd(s, -0.1340680437291812383e-7, 1e-18, "iauS06a", "", status); + +} + +static void t_s06(int *status) +/* +** - - - - - - +** t _ s 0 6 +** - - - - - - +** +** Test iauS06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s; + + + x = 0.5791308486706011000e-3; + y = 0.4020579816732961219e-4; + + s = iauS06(2400000.5, 53736.0, x, y); + + vvd(s, -0.1220032213076463117e-7, 1e-18, "iauS06", "", status); + +} + +static void t_s2c(int *status) +/* +** - - - - - - +** t _ s 2 c +** - - - - - - +** +** Test iauS2c function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS2c, vvd +** +** This revision: 2013 August 7 +*/ +{ + double c[3]; + + + iauS2c(3.0123, -0.999, c); + + vvd(c[0], -0.5366267667260523906, 1e-12, "iauS2c", "1", status); + vvd(c[1], 0.0697711109765145365, 1e-12, "iauS2c", "2", status); + vvd(c[2], -0.8409302618566214041, 1e-12, "iauS2c", "3", status); + +} + +static void t_s2p(int *status) +/* +** - - - - - - +** t _ s 2 p +** - - - - - - +** +** Test iauS2p function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS2p, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3]; + + + iauS2p(-3.21, 0.123, 0.456, p); + + vvd(p[0], -0.4514964673880165228, 1e-12, "iauS2p", "x", status); + vvd(p[1], 0.0309339427734258688, 1e-12, "iauS2p", "y", status); + vvd(p[2], 0.0559466810510877933, 1e-12, "iauS2p", "z", status); + +} + +static void t_s2pv(int *status) +/* +** - - - - - - - +** t _ s 2 p v +** - - - - - - - +** +** Test iauS2pv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS2pv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3]; + + + iauS2pv(-3.21, 0.123, 0.456, -7.8e-6, 9.01e-6, -1.23e-5, pv); + + vvd(pv[0][0], -0.4514964673880165228, 1e-12, "iauS2pv", "x", status); + vvd(pv[0][1], 0.0309339427734258688, 1e-12, "iauS2pv", "y", status); + vvd(pv[0][2], 0.0559466810510877933, 1e-12, "iauS2pv", "z", status); + + vvd(pv[1][0], 0.1292270850663260170e-4, 1e-16, + "iauS2pv", "vx", status); + vvd(pv[1][1], 0.2652814182060691422e-5, 1e-16, + "iauS2pv", "vy", status); + vvd(pv[1][2], 0.2568431853930292259e-5, 1e-16, + "iauS2pv", "vz", status); + +} + +static void t_s2xpv(int *status) +/* +** - - - - - - - - +** t _ s 2 x p v +** - - - - - - - - +** +** Test iauS2xpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauS2xpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s1, s2, pv[2][3], spv[2][3]; + + + s1 = 2.0; + s2 = 3.0; + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = 0.5; + pv[1][1] = 2.3; + pv[1][2] = -0.4; + + iauS2xpv(s1, s2, pv, spv); + + vvd(spv[0][0], 0.6, 1e-12, "iauS2xpv", "p1", status); + vvd(spv[0][1], 2.4, 1e-12, "iauS2xpv", "p2", status); + vvd(spv[0][2], -5.0, 1e-12, "iauS2xpv", "p3", status); + + vvd(spv[1][0], 1.5, 1e-12, "iauS2xpv", "v1", status); + vvd(spv[1][1], 6.9, 1e-12, "iauS2xpv", "v2", status); + vvd(spv[1][2], -1.2, 1e-12, "iauS2xpv", "v3", status); + +} + +static void t_sepp(int *status) +/* +** - - - - - - - +** t _ s e p p +** - - - - - - - +** +** Test iauSepp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauSepp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double a[3], b[3], s; + + + a[0] = 1.0; + a[1] = 0.1; + a[2] = 0.2; + + b[0] = -3.0; + b[1] = 1e-3; + b[2] = 0.2; + + s = iauSepp(a, b); + + vvd(s, 2.860391919024660768, 1e-12, "iauSepp", "", status); + +} + +static void t_seps(int *status) +/* +** - - - - - - - +** t _ s e p s +** - - - - - - - +** +** Test iauSeps function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauSeps, vvd +** +** This revision: 2013 August 7 +*/ +{ + double al, ap, bl, bp, s; + + + al = 1.0; + ap = 0.1; + + bl = 0.2; + bp = -3.0; + + s = iauSeps(al, ap, bl, bp); + + vvd(s, 2.346722016996998842, 1e-14, "iauSeps", "", status); + +} + +static void t_sp00(int *status) +/* +** - - - - - - - +** t _ s p 0 0 +** - - - - - - - +** +** Test iauSp00 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauSp00, vvd +** +** This revision: 2013 August 7 +*/ +{ + vvd(iauSp00(2400000.5, 52541.0), + -0.6216698469981019309e-11, 1e-12, "iauSp00", "", status); + +} + +static void t_starpm(int *status) +/* +** - - - - - - - - - +** t _ s t a r p m +** - - - - - - - - - +** +** Test iauStarpm function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauStarpm, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double ra1, dec1, pmr1, pmd1, px1, rv1; + double ra2, dec2, pmr2, pmd2, px2, rv2; + int j; + + + ra1 = 0.01686756; + dec1 = -1.093989828; + pmr1 = -1.78323516e-5; + pmd1 = 2.336024047e-6; + px1 = 0.74723; + rv1 = -21.6; + + j = iauStarpm(ra1, dec1, pmr1, pmd1, px1, rv1, + 2400000.5, 50083.0, 2400000.5, 53736.0, + &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2); + + vvd(ra2, 0.01668919069414256149, 1e-13, + "iauStarpm", "ra", status); + vvd(dec2, -1.093966454217127897, 1e-13, + "iauStarpm", "dec", status); + vvd(pmr2, -0.1783662682153176524e-4, 1e-17, + "iauStarpm", "pmr", status); + vvd(pmd2, 0.2338092915983989595e-5, 1e-17, + "iauStarpm", "pmd", status); + vvd(px2, 0.7473533835317719243, 1e-13, + "iauStarpm", "px", status); + vvd(rv2, -21.59905170476417175, 1e-11, + "iauStarpm", "rv", status); + + viv(j, 0, "iauStarpm", "j", status); + +} + +static void t_starpv(int *status) +/* +** - - - - - - - - - +** t _ s t a r p v +** - - - - - - - - - +** +** Test iauStarpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauStarpv, vvd, viv +** +** This revision: 2017 March 15 +*/ +{ + double ra, dec, pmr, pmd, px, rv, pv[2][3]; + int j; + + + ra = 0.01686756; + dec = -1.093989828; + pmr = -1.78323516e-5; + pmd = 2.336024047e-6; + px = 0.74723; + rv = -21.6; + + j = iauStarpv(ra, dec, pmr, pmd, px, rv, pv); + + vvd(pv[0][0], 126668.5912743160601, 1e-10, + "iauStarpv", "11", status); + vvd(pv[0][1], 2136.792716839935195, 1e-12, + "iauStarpv", "12", status); + vvd(pv[0][2], -245251.2339876830091, 1e-10, + "iauStarpv", "13", status); + + vvd(pv[1][0], -0.4051854008955659551e-2, 1e-13, + "iauStarpv", "21", status); + vvd(pv[1][1], -0.6253919754414777970e-2, 1e-15, + "iauStarpv", "22", status); + vvd(pv[1][2], 0.1189353714588109341e-1, 1e-13, + "iauStarpv", "23", status); + + viv(j, 0, "iauStarpv", "j", status); + +} + +static void t_sxp(int *status) +/* +** - - - - - - +** t _ s x p +** - - - - - - +** +** Test iauSxp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauSxp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s, p[3], sp[3]; + + + s = 2.0; + + p[0] = 0.3; + p[1] = 1.2; + p[2] = -2.5; + + iauSxp(s, p, sp); + + vvd(sp[0], 0.6, 0.0, "iauSxp", "1", status); + vvd(sp[1], 2.4, 0.0, "iauSxp", "2", status); + vvd(sp[2], -5.0, 0.0, "iauSxp", "3", status); + +} + + +static void t_sxpv(int *status) +/* +** - - - - - - - +** t _ s x p v +** - - - - - - - +** +** Test iauSxpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauSxpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double s, pv[2][3], spv[2][3]; + + + s = 2.0; + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = 0.5; + pv[1][1] = 3.2; + pv[1][2] = -0.7; + + iauSxpv(s, pv, spv); + + vvd(spv[0][0], 0.6, 0.0, "iauSxpv", "p1", status); + vvd(spv[0][1], 2.4, 0.0, "iauSxpv", "p2", status); + vvd(spv[0][2], -5.0, 0.0, "iauSxpv", "p3", status); + + vvd(spv[1][0], 1.0, 0.0, "iauSxpv", "v1", status); + vvd(spv[1][1], 6.4, 0.0, "iauSxpv", "v2", status); + vvd(spv[1][2], -1.4, 0.0, "iauSxpv", "v3", status); + +} + +static void t_taitt(int *status) +/* +** - - - - - - - - +** t _ t a i t t +** - - - - - - - - +** +** Test iauTaitt function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTaitt, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double t1, t2; + int j; + + + j = iauTaitt(2453750.5, 0.892482639, &t1, &t2); + + vvd(t1, 2453750.5, 1e-6, "iauTaitt", "t1", status); + vvd(t2, 0.892855139, 1e-12, "iauTaitt", "t2", status); + viv(j, 0, "iauTaitt", "j", status); + +} + +static void t_taiut1(int *status) +/* +** - - - - - - - - - +** t _ t a i u t 1 +** - - - - - - - - - +** +** Test iauTaiut1 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTaiut1, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauTaiut1(2453750.5, 0.892482639, -32.6659, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauTaiut1", "u1", status); + vvd(u2, 0.8921045614537037037, 1e-12, "iauTaiut1", "u2", status); + viv(j, 0, "iauTaiut1", "j", status); + +} + +static void t_taiutc(int *status) +/* +** - - - - - - - - - +** t _ t a i u t c +** - - - - - - - - - +** +** Test iauTaiutc function. +** +** Returned: +** status LOGICAL TRUE = success, FALSE = fail +** +** Called: iauTaiutc, vvd, viv +** +** This revision: 2013 October 3 +*/ +{ + double u1, u2; + int j; + + + j = iauTaiutc(2453750.5, 0.892482639, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauTaiutc", "u1", status); + vvd(u2, 0.8921006945555555556, 1e-12, "iauTaiutc", "u2", status); + viv(j, 0, "iauTaiutc", "j", status); + +} + +static void t_tcbtdb(int *status) +/* +** - - - - - - - - - +** t _ t c b t d b +** - - - - - - - - - +** +** Test iauTcbtdb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTcbtdb, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double b1, b2; + int j; + + + j = iauTcbtdb(2453750.5, 0.893019599, &b1, &b2); + + vvd(b1, 2453750.5, 1e-6, "iauTcbtdb", "b1", status); + vvd(b2, 0.8928551362746343397, 1e-12, "iauTcbtdb", "b2", status); + viv(j, 0, "iauTcbtdb", "j", status); + +} + +static void t_tcgtt(int *status) +/* +** - - - - - - - - +** t _ t c g t t +** - - - - - - - - +** +** Test iauTcgtt function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTcgtt, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double t1, t2; + int j; + + + j = iauTcgtt(2453750.5, 0.892862531, &t1, &t2); + + vvd(t1, 2453750.5, 1e-6, "iauTcgtt", "t1", status); + vvd(t2, 0.8928551387488816828, 1e-12, "iauTcgtt", "t2", status); + viv(j, 0, "iauTcgtt", "j", status); + +} + +static void t_tdbtcb(int *status) +/* +** - - - - - - - - - +** t _ t d b t c b +** - - - - - - - - - +** +** Test iauTdbtcb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTdbtcb, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double b1, b2; + int j; + + + j = iauTdbtcb(2453750.5, 0.892855137, &b1, &b2); + + vvd( b1, 2453750.5, 1e-6, "iauTdbtcb", "b1", status); + vvd( b2, 0.8930195997253656716, 1e-12, "iauTdbtcb", "b2", status); + viv(j, 0, "iauTdbtcb", "j", status); + +} + +static void t_tdbtt(int *status) +/* +** - - - - - - - - +** t _ t d b t t +** - - - - - - - - +** +** Test iauTdbtt function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTdbtt, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double t1, t2; + int j; + + + j = iauTdbtt(2453750.5, 0.892855137, -0.000201, &t1, &t2); + + vvd(t1, 2453750.5, 1e-6, "iauTdbtt", "t1", status); + vvd(t2, 0.8928551393263888889, 1e-12, "iauTdbtt", "t2", status); + viv(j, 0, "iauTdbtt", "j", status); + +} + +static void t_tf2a(int *status) +/* +** - - - - - - - +** t _ t f 2 a +** - - - - - - - +** +** Test iauTf2a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTf2a, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double a; + int j; + + + j = iauTf2a('+', 4, 58, 20.2, &a); + + vvd(a, 1.301739278189537429, 1e-12, "iauTf2a", "a", status); + viv(j, 0, "iauTf2a", "j", status); + +} + +static void t_tf2d(int *status) +/* +** - - - - - - - +** t _ t f 2 d +** - - - - - - - +** +** Test iauTf2d function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTf2d, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double d; + int j; + + + j = iauTf2d(' ', 23, 55, 10.9, &d); + + vvd(d, 0.9966539351851851852, 1e-12, "iauTf2d", "d", status); + viv(j, 0, "iauTf2d", "j", status); + +} + +static void t_tpors(int *status) +/* +** - - - - - - - - +** t _ t p o r s +** - - - - - - - - +** +** Test iauTpors function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTpors, vvd, viv +** +** This revision: 2017 October 21 +*/ +{ + double xi, eta, ra, dec, az1, bz1, az2, bz2; + int n; + + + xi = -0.03; + eta = 0.07; + ra = 1.3; + dec = 1.5; + + n = iauTpors(xi, eta, ra, dec, &az1, &bz1, &az2, &bz2); + + vvd(az1, 1.736621577783208748, 1e-13, "iauTpors", "az1", status); + vvd(bz1, 1.436736561844090323, 1e-13, "iauTpors", "bz1", status); + + vvd(az2, 4.004971075806584490, 1e-13, "iauTpors", "az2", status); + vvd(bz2, 1.565084088476417917, 1e-13, "iauTpors", "bz2", status); + + viv(n, 2, "iauTpors", "n", status); + +} + +static void t_tporv(int *status) +/* +** - - - - - - - - +** t _ t p o r v +** - - - - - - - - +** +** Test iauTporv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTporv, iauS2c, vvd, viv +** +** This revision: 2017 October 21 +*/ +{ + double xi, eta, ra, dec, v[3], vz1[3], vz2[3]; + int n; + + + xi = -0.03; + eta = 0.07; + ra = 1.3; + dec = 1.5; + iauS2c(ra, dec, v); + + n = iauTporv(xi, eta, v, vz1, vz2); + + vvd(vz1[0], -0.02206252822366888610, 1e-15, + "iauTporv", "x1", status); + vvd(vz1[1], 0.1318251060359645016, 1e-14, + "iauTporv", "y1", status); + vvd(vz1[2], 0.9910274397144543895, 1e-14, + "iauTporv", "z1", status); + + vvd(vz2[0], -0.003712211763801968173, 1e-16, + "iauTporv", "x2", status); + vvd(vz2[1], -0.004341519956299836813, 1e-16, + "iauTporv", "y2", status); + vvd(vz2[2], 0.9999836852110587012, 1e-14, + "iauTporv", "z2", status); + + viv(n, 2, "iauTporv", "n", status); + +} + +static void t_tpsts(int *status) +/* +** - - - - - - - - +** t _ t p s t s +** - - - - - - - - +** +** Test iauTpsts function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTpsts, vvd +** +** This revision: 2017 October 21 +*/ +{ + double xi, eta, raz, decz, ra, dec; + + + xi = -0.03; + eta = 0.07; + raz = 2.3; + decz = 1.5; + + iauTpsts(xi, eta, raz, decz, &ra, &dec); + + vvd(ra, 0.7596127167359629775, 1e-14, "iauTpsts", "ra", status); + vvd(dec, 1.540864645109263028, 1e-13, "iauTpsts", "dec", status); + +} + +static void t_tpstv(int *status) +/* +** - - - - - - - - +** t _ t p s t v +** - - - - - - - - +** +** Test iauTpstv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTpstv, iauS2c, vvd +** +** This revision: 2017 October 21 +*/ +{ + double xi, eta, raz, decz, vz[3], v[3]; + + + xi = -0.03; + eta = 0.07; + raz = 2.3; + decz = 1.5; + iauS2c(raz, decz, vz); + + iauTpstv(xi, eta, vz, v); + + vvd(v[0], 0.02170030454907376677, 1e-15, "iauTpstv", "x", status); + vvd(v[1], 0.02060909590535367447, 1e-15, "iauTpstv", "y", status); + vvd(v[2], 0.9995520806583523804, 1e-14, "iauTpstv", "z", status); + +} + +static void t_tpxes(int *status) +/* +** - - - - - - - - +** t _ t p x e s +** - - - - - - - - +** +** Test iauTpxes function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTpxes, vvd, viv +** +** This revision: 2017 October 21 +*/ +{ + double ra, dec, raz, decz, xi, eta; + int j; + + + ra = 1.3; + dec = 1.55; + raz = 2.3; + decz = 1.5; + + j = iauTpxes(ra, dec, raz, decz, &xi, &eta); + + vvd(xi, -0.01753200983236980595, 1e-15, "iauTpxes", "xi", status); + vvd(eta, 0.05962940005778712891, 1e-15, "iauTpxes", "eta", status); + + viv(j, 0, "iauTpxes", "j", status); + +} + +static void t_tpxev(int *status) +/* +** - - - - - - - - +** t _ t p x e v +** - - - - - - - - +** +** Test iauTpxev function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTpxev, iauS2c, vvd +** +** This revision: 2017 October 21 +*/ +{ + double ra, dec, raz, decz, v[3], vz[3], xi, eta; + int j; + + + ra = 1.3; + dec = 1.55; + raz = 2.3; + decz = 1.5; + iauS2c(ra, dec, v); + iauS2c(raz, decz, vz); + + j = iauTpxev(v, vz, &xi, &eta); + + vvd(xi, -0.01753200983236980595, 1e-15, "iauTpxev", "xi", status); + vvd(eta, 0.05962940005778712891, 1e-15, "iauTpxev", "eta", status); + + viv(j, 0, "iauTpxev", "j", status); + +} + +static void t_tr(int *status) +/* +** - - - - - +** t _ t r +** - - - - - +** +** Test iauTr function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTr, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], rt[3][3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + iauTr(r, rt); + + vvd(rt[0][0], 2.0, 0.0, "iauTr", "11", status); + vvd(rt[0][1], 3.0, 0.0, "iauTr", "12", status); + vvd(rt[0][2], 3.0, 0.0, "iauTr", "13", status); + + vvd(rt[1][0], 3.0, 0.0, "iauTr", "21", status); + vvd(rt[1][1], 2.0, 0.0, "iauTr", "22", status); + vvd(rt[1][2], 4.0, 0.0, "iauTr", "23", status); + + vvd(rt[2][0], 2.0, 0.0, "iauTr", "31", status); + vvd(rt[2][1], 3.0, 0.0, "iauTr", "32", status); + vvd(rt[2][2], 5.0, 0.0, "iauTr", "33", status); + +} + +static void t_trxp(int *status) +/* +** - - - - - - - +** t _ t r x p +** - - - - - - - +** +** Test iauTrxp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTrxp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], p[3], trp[3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + p[0] = 0.2; + p[1] = 1.5; + p[2] = 0.1; + + iauTrxp(r, p, trp); + + vvd(trp[0], 5.2, 1e-12, "iauTrxp", "1", status); + vvd(trp[1], 4.0, 1e-12, "iauTrxp", "2", status); + vvd(trp[2], 5.4, 1e-12, "iauTrxp", "3", status); + +} + +static void t_trxpv(int *status) +/* +** - - - - - - - - +** t _ t r x p v +** - - - - - - - - +** +** Test iauTrxpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTrxpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3], pv[2][3], trpv[2][3]; + + + r[0][0] = 2.0; + r[0][1] = 3.0; + r[0][2] = 2.0; + + r[1][0] = 3.0; + r[1][1] = 2.0; + r[1][2] = 3.0; + + r[2][0] = 3.0; + r[2][1] = 4.0; + r[2][2] = 5.0; + + pv[0][0] = 0.2; + pv[0][1] = 1.5; + pv[0][2] = 0.1; + + pv[1][0] = 1.5; + pv[1][1] = 0.2; + pv[1][2] = 0.1; + + iauTrxpv(r, pv, trpv); + + vvd(trpv[0][0], 5.2, 1e-12, "iauTrxpv", "p1", status); + vvd(trpv[0][1], 4.0, 1e-12, "iauTrxpv", "p1", status); + vvd(trpv[0][2], 5.4, 1e-12, "iauTrxpv", "p1", status); + + vvd(trpv[1][0], 3.9, 1e-12, "iauTrxpv", "v1", status); + vvd(trpv[1][1], 5.3, 1e-12, "iauTrxpv", "v2", status); + vvd(trpv[1][2], 4.1, 1e-12, "iauTrxpv", "v3", status); + +} + +static void t_tttai(int *status) +/* +** - - - - - - - - +** t _ t t t a i +** - - - - - - - - +** +** Test iauTttai function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTttai, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double a1, a2; + int j; + + + j = iauTttai(2453750.5, 0.892482639, &a1, &a2); + + vvd(a1, 2453750.5, 1e-6, "iauTttai", "a1", status); + vvd(a2, 0.892110139, 1e-12, "iauTttai", "a2", status); + viv(j, 0, "iauTttai", "j", status); + +} + +static void t_tttcg(int *status) +/* +** - - - - - - - - +** t _ t t t c g +** - - - - - - - - +** +** Test iauTttcg function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTttcg, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double g1, g2; + int j; + + + j = iauTttcg(2453750.5, 0.892482639, &g1, &g2); + + vvd( g1, 2453750.5, 1e-6, "iauTttcg", "g1", status); + vvd( g2, 0.8924900312508587113, 1e-12, "iauTttcg", "g2", status); + viv(j, 0, "iauTttcg", "j", status); + +} + +static void t_tttdb(int *status) +/* +** - - - - - - - - +** t _ t t t d b +** - - - - - - - - +** +** Test iauTttdb function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTttdb, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double b1, b2; + int j; + + + j = iauTttdb(2453750.5, 0.892855139, -0.000201, &b1, &b2); + + vvd(b1, 2453750.5, 1e-6, "iauTttdb", "b1", status); + vvd(b2, 0.8928551366736111111, 1e-12, "iauTttdb", "b2", status); + viv(j, 0, "iauTttdb", "j", status); + +} + +static void t_ttut1(int *status) +/* +** - - - - - - - - +** t _ t t u t 1 +** - - - - - - - - +** +** Test iauTtut1 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauTtut1, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauTtut1(2453750.5, 0.892855139, 64.8499, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauTtut1", "u1", status); + vvd(u2, 0.8921045614537037037, 1e-12, "iauTtut1", "u2", status); + viv(j, 0, "iauTtut1", "j", status); + +} + +static void t_ut1tai(int *status) +/* +** - - - - - - - - - +** t _ u t 1 t a i +** - - - - - - - - - +** +** Test iauUt1tai function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauUt1tai, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double a1, a2; + int j; + + + j = iauUt1tai(2453750.5, 0.892104561, -32.6659, &a1, &a2); + + vvd(a1, 2453750.5, 1e-6, "iauUt1tai", "a1", status); + vvd(a2, 0.8924826385462962963, 1e-12, "iauUt1tai", "a2", status); + viv(j, 0, "iauUt1tai", "j", status); + +} + +static void t_ut1tt(int *status) +/* +** - - - - - - - - +** t _ u t 1 t t +** - - - - - - - - +** +** Test iauUt1tt function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauUt1tt, vvd, viv +** +** This revision: 2013 October 3 +*/ +{ + double t1, t2; + int j; + + + j = iauUt1tt(2453750.5, 0.892104561, 64.8499, &t1, &t2); + + vvd(t1, 2453750.5, 1e-6, "iauUt1tt", "t1", status); + vvd(t2, 0.8928551385462962963, 1e-12, "iauUt1tt", "t2", status); + viv(j, 0, "iauUt1tt", "j", status); + +} + +static void t_ut1utc(int *status) +/* +** - - - - - - - - - +** t _ u t 1 u t c +** - - - - - - - - - +** +** Test iauUt1utc function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauUt1utc, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauUt1utc(2453750.5, 0.892104561, 0.3341, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauUt1utc", "u1", status); + vvd(u2, 0.8921006941018518519, 1e-12, "iauUt1utc", "u2", status); + viv(j, 0, "iauUt1utc", "j", status); + +} + +static void t_utctai(int *status) +/* +** - - - - - - - - - +** t _ u t c t a i +** - - - - - - - - - +** +** Test iauUtctai function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauUtctai, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauUtctai(2453750.5, 0.892100694, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauUtctai", "u1", status); + vvd(u2, 0.8924826384444444444, 1e-12, "iauUtctai", "u2", status); + viv(j, 0, "iauUtctai", "j", status); + +} + +static void t_utcut1(int *status) +/* +** - - - - - - - - - +** t _ u t c u t 1 +** - - - - - - - - - +** +** Test iauUtcut1 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauUtcut1, vvd, viv +** +** This revision: 2013 August 7 +*/ +{ + double u1, u2; + int j; + + + j = iauUtcut1(2453750.5, 0.892100694, 0.3341, &u1, &u2); + + vvd(u1, 2453750.5, 1e-6, "iauUtcut1", "u1", status); + vvd(u2, 0.8921045608981481481, 1e-12, "iauUtcut1", "u2", status); + viv(j, 0, "iauUtcut1", "j", status); + +} + +static void t_xy06(int *status) +/* +** - - - - - - - +** t _ x y 0 6 +** - - - - - - - +** +** Test iauXy06 function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauXy06, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y; + + + iauXy06(2400000.5, 53736.0, &x, &y); + + vvd(x, 0.5791308486706010975e-3, 1e-15, "iauXy06", "x", status); + vvd(y, 0.4020579816732958141e-4, 1e-16, "iauXy06", "y", status); + +} + +static void t_xys00a(int *status) +/* +** - - - - - - - - - +** t _ x y s 0 0 a +** - - - - - - - - - +** +** Test iauXys00a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauXys00a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s; + + + iauXys00a(2400000.5, 53736.0, &x, &y, &s); + + vvd(x, 0.5791308472168152904e-3, 1e-14, "iauXys00a", "x", status); + vvd(y, 0.4020595661591500259e-4, 1e-15, "iauXys00a", "y", status); + vvd(s, -0.1220040848471549623e-7, 1e-18, "iauXys00a", "s", status); + +} + +static void t_xys00b(int *status) +/* +** - - - - - - - - - +** t _ x y s 0 0 b +** - - - - - - - - - +** +** Test iauXys00b function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauXys00b, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s; + + + iauXys00b(2400000.5, 53736.0, &x, &y, &s); + + vvd(x, 0.5791301929950208873e-3, 1e-14, "iauXys00b", "x", status); + vvd(y, 0.4020553681373720832e-4, 1e-15, "iauXys00b", "y", status); + vvd(s, -0.1220027377285083189e-7, 1e-18, "iauXys00b", "s", status); + +} + +static void t_xys06a(int *status) +/* +** - - - - - - - - - +** t _ x y s 0 6 a +** - - - - - - - - - +** +** Test iauXys06a function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauXys06a, vvd +** +** This revision: 2013 August 7 +*/ +{ + double x, y, s; + + + iauXys06a(2400000.5, 53736.0, &x, &y, &s); + + vvd(x, 0.5791308482835292617e-3, 1e-14, "iauXys06a", "x", status); + vvd(y, 0.4020580099454020310e-4, 1e-15, "iauXys06a", "y", status); + vvd(s, -0.1220032294164579896e-7, 1e-18, "iauXys06a", "s", status); + +} + +static void t_zp(int *status) +/* +** - - - - - +** t _ z p +** - - - - - +** +** Test iauZp function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauZp, vvd +** +** This revision: 2013 August 7 +*/ +{ + double p[3]; + + + p[0] = 0.3; + p[1] = 1.2; + p[2] = -2.5; + + iauZp(p); + + vvd(p[0], 0.0, 0.0, "iauZp", "1", status); + vvd(p[1], 0.0, 0.0, "iauZp", "2", status); + vvd(p[2], 0.0, 0.0, "iauZp", "3", status); + +} + +static void t_zpv(int *status) +/* +** - - - - - - +** t _ z p v +** - - - - - - +** +** Test iauZpv function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauZpv, vvd +** +** This revision: 2013 August 7 +*/ +{ + double pv[2][3]; + + + pv[0][0] = 0.3; + pv[0][1] = 1.2; + pv[0][2] = -2.5; + + pv[1][0] = -0.5; + pv[1][1] = 3.1; + pv[1][2] = 0.9; + + iauZpv(pv); + + vvd(pv[0][0], 0.0, 0.0, "iauZpv", "p1", status); + vvd(pv[0][1], 0.0, 0.0, "iauZpv", "p2", status); + vvd(pv[0][2], 0.0, 0.0, "iauZpv", "p3", status); + + vvd(pv[1][0], 0.0, 0.0, "iauZpv", "v1", status); + vvd(pv[1][1], 0.0, 0.0, "iauZpv", "v2", status); + vvd(pv[1][2], 0.0, 0.0, "iauZpv", "v3", status); + +} + +static void t_zr(int *status) +/* +** - - - - - +** t _ z r +** - - - - - +** +** Test iauZr function. +** +** Returned: +** status int FALSE = success, TRUE = fail +** +** Called: iauZr, vvd +** +** This revision: 2013 August 7 +*/ +{ + double r[3][3]; + + + r[0][0] = 2.0; + r[1][0] = 3.0; + r[2][0] = 2.0; + + r[0][1] = 3.0; + r[1][1] = 2.0; + r[2][1] = 3.0; + + r[0][2] = 3.0; + r[1][2] = 4.0; + r[2][2] = 5.0; + + iauZr(r); + + vvd(r[0][0], 0.0, 0.0, "iauZr", "00", status); + vvd(r[1][0], 0.0, 0.0, "iauZr", "01", status); + vvd(r[2][0], 0.0, 0.0, "iauZr", "02", status); + + vvd(r[0][1], 0.0, 0.0, "iauZr", "10", status); + vvd(r[1][1], 0.0, 0.0, "iauZr", "11", status); + vvd(r[2][1], 0.0, 0.0, "iauZr", "12", status); + + vvd(r[0][2], 0.0, 0.0, "iauZr", "20", status); + vvd(r[1][2], 0.0, 0.0, "iauZr", "21", status); + vvd(r[2][2], 0.0, 0.0, "iauZr", "22", status); + +} + +int main(int argc, char *argv[]) +/* +** - - - - - +** m a i n +** - - - - - +** +** This revision: 2017 October 21 +*/ +{ + int status; + + +/* If any command-line argument, switch to verbose reporting. */ + if (argc > 1) { + verbose = 1; + argv[0][0] += 0; /* to avoid compiler warnings */ + } + +/* Preset the &status to FALSE = success. */ + status = 0; + +/* Test all of the SOFA functions. */ + t_a2af(&status); + t_a2tf(&status); + t_ab(&status); + t_ae2hd(&status); + t_af2a(&status); + t_anp(&status); + t_anpm(&status); + t_apcg(&status); + t_apcg13(&status); + t_apci(&status); + t_apci13(&status); + t_apco(&status); + t_apco13(&status); + t_apcs(&status); + t_apcs13(&status); + t_aper(&status); + t_aper13(&status); + t_apio(&status); + t_apio13(&status); + t_atci13(&status); + t_atciq(&status); + t_atciqn(&status); + t_atciqz(&status); + t_atco13(&status); + t_atic13(&status); + t_aticq(&status); + t_aticqn(&status); + t_atio13(&status); + t_atioq(&status); + t_atoc13(&status); + t_atoi13(&status); + t_atoiq(&status); + t_bi00(&status); + t_bp00(&status); + t_bp06(&status); + t_bpn2xy(&status); + t_c2i00a(&status); + t_c2i00b(&status); + t_c2i06a(&status); + t_c2ibpn(&status); + t_c2ixy(&status); + t_c2ixys(&status); + t_c2s(&status); + t_c2t00a(&status); + t_c2t00b(&status); + t_c2t06a(&status); + t_c2tcio(&status); + t_c2teqx(&status); + t_c2tpe(&status); + t_c2txy(&status); + t_cal2jd(&status); + t_cp(&status); + t_cpv(&status); + t_cr(&status); + t_d2dtf(&status); + t_d2tf(&status); + t_dat(&status); + t_dtdb(&status); + t_dtf2d(&status); + t_eceq06(&status); + t_ecm06(&status); + t_ee00(&status); + t_ee00a(&status); + t_ee00b(&status); + t_ee06a(&status); + t_eect00(&status); + t_eform(&status); + t_eo06a(&status); + t_eors(&status); + t_epb(&status); + t_epb2jd(&status); + t_epj(&status); + t_epj2jd(&status); + t_epv00(&status); + t_eqec06(&status); + t_eqeq94(&status); + t_era00(&status); + t_fad03(&status); + t_fae03(&status); + t_faf03(&status); + t_faju03(&status); + t_fal03(&status); + t_falp03(&status); + t_fama03(&status); + t_fame03(&status); + t_fane03(&status); + t_faom03(&status); + t_fapa03(&status); + t_fasa03(&status); + t_faur03(&status); + t_fave03(&status); + t_fk425(&status); + t_fk45z(&status); + t_fk524(&status); + t_fk52h(&status); + t_fk54z(&status); + t_fk5hip(&status); + t_fk5hz(&status); + t_fw2m(&status); + t_fw2xy(&status); + t_g2icrs(&status); + t_gc2gd(&status); + t_gc2gde(&status); + t_gd2gc(&status); + t_gd2gce(&status); + t_gmst00(&status); + t_gmst06(&status); + t_gmst82(&status); + t_gst00a(&status); + t_gst00b(&status); + t_gst06(&status); + t_gst06a(&status); + t_gst94(&status); + t_h2fk5(&status); + t_hd2ae(&status); + t_hd2pa(&status); + t_hfk5z(&status); + t_icrs2g(&status); + t_ir(&status); + t_jd2cal(&status); + t_jdcalf(&status); + t_ld(&status); + t_ldn(&status); + t_ldsun(&status); + t_lteceq(&status); + t_ltecm(&status); + t_lteqec(&status); + t_ltp(&status); + t_ltpb(&status); + t_ltpecl(&status); + t_ltpequ(&status); + t_num00a(&status); + t_num00b(&status); + t_num06a(&status); + t_numat(&status); + t_nut00a(&status); + t_nut00b(&status); + t_nut06a(&status); + t_nut80(&status); + t_nutm80(&status); + t_obl06(&status); + t_obl80(&status); + t_p06e(&status); + t_p2pv(&status); + t_p2s(&status); + t_pap(&status); + t_pas(&status); + t_pb06(&status); + t_pdp(&status); + t_pfw06(&status); + t_plan94(&status); + t_pmat00(&status); + t_pmat06(&status); + t_pmat76(&status); + t_pm(&status); + t_pmp(&status); + t_pmpx(&status); + t_pmsafe(&status); + t_pn(&status); + t_pn00(&status); + t_pn00a(&status); + t_pn00b(&status); + t_pn06a(&status); + t_pn06(&status); + t_pnm00a(&status); + t_pnm00b(&status); + t_pnm06a(&status); + t_pnm80(&status); + t_pom00(&status); + t_ppp(&status); + t_ppsp(&status); + t_pr00(&status); + t_prec76(&status); + t_pv2p(&status); + t_pv2s(&status); + t_pvdpv(&status); + t_pvm(&status); + t_pvmpv(&status); + t_pvppv(&status); + t_pvstar(&status); + t_pvtob(&status); + t_pvu(&status); + t_pvup(&status); + t_pvxpv(&status); + t_pxp(&status); + t_refco(&status); + t_rm2v(&status); + t_rv2m(&status); + t_rx(&status); + t_rxp(&status); + t_rxpv(&status); + t_rxr(&status); + t_ry(&status); + t_rz(&status); + t_s00a(&status); + t_s00b(&status); + t_s00(&status); + t_s06a(&status); + t_s06(&status); + t_s2c(&status); + t_s2p(&status); + t_s2pv(&status); + t_s2xpv(&status); + t_sepp(&status); + t_seps(&status); + t_sp00(&status); + t_starpm(&status); + t_starpv(&status); + t_sxp(&status); + t_sxpv(&status); + t_taitt(&status); + t_taiut1(&status); + t_taiutc(&status); + t_tcbtdb(&status); + t_tcgtt(&status); + t_tdbtcb(&status); + t_tdbtt(&status); + t_tf2a(&status); + t_tf2d(&status); + t_tpors(&status); + t_tporv(&status); + t_tpsts(&status); + t_tpstv(&status); + t_tpxes(&status); + t_tpxev(&status); + t_tr(&status); + t_trxp(&status); + t_trxpv(&status); + t_tttai(&status); + t_tttcg(&status); + t_tttdb(&status); + t_ttut1(&status); + t_ut1tai(&status); + t_ut1tt(&status) ; + t_ut1utc(&status); + t_utctai(&status); + t_utcut1(&status); + t_xy06(&status); + t_xys00a(&status); + t_xys00b(&status); + t_xys06a(&status); + t_zp(&status); + t_zpv(&status); + t_zr(&status); + +/* Report, set up an appropriate exit status, and finish. */ + if (status) { + printf("t_sofa_c validation failed!\n"); + } else { + printf("t_sofa_c validation successful\n"); + } + return status; +} +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ diff --git a/20200721/c/src/taitt.c b/20200721/c/src/taitt.c new file mode 100644 index 0000000..e12e8f5 --- /dev/null +++ b/20200721/c/src/taitt.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +int iauTaitt(double tai1, double tai2, double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u T a i t t +** - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* TT minus TAI (days). */ + static const double dtat = TTMTAI/DAYSEC; + + +/* Result, safeguarding precision. */ + if ( fabs(tai1) > fabs(tai2) ) { + *tt1 = tai1; + *tt2 = tai2 + dtat; + } else { + *tt1 = tai1 + dtat; + *tt2 = tai2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/taiut1.c b/20200721/c/src/taiut1.c new file mode 100644 index 0000000..0a4980c --- /dev/null +++ b/20200721/c/src/taiut1.c @@ -0,0 +1,162 @@ +#include "sofa.h" + +int iauTaiut1(double tai1, double tai2, double dta, + double *ut11, double *ut12) +/* +** - - - - - - - - - - +** i a u T a i u t 1 +** - - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Universal Time, UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date +** dta double UT1-TAI in seconds +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned +** UT11,UT12 follow suit. +** +** 2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is +** available from IERS tabulations. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +** +*/ +{ + double dtad; + + +/* Result, safeguarding precision. */ + dtad = dta / DAYSEC; + if ( fabs(tai1) > fabs(tai2) ) { + *ut11 = tai1; + *ut12 = tai2 + dtad; + } else { + *ut11 = tai1 + dtad; + *ut12 = tai2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/taiutc.c b/20200721/c/src/taiutc.c new file mode 100644 index 0000000..4d0e045 --- /dev/null +++ b/20200721/c/src/taiutc.c @@ -0,0 +1,209 @@ +#include "sofa.h" + +int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2) +/* +** - - - - - - - - - - +** i a u T a i u t c +** - - - - - - - - - - +** +** Time scale transformation: International Atomic Time, TAI, to +** Coordinated Universal Time, UTC. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tai1,tai2 double TAI as a 2-part Julian Date (Note 1) +** +** Returned: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-3) +** +** Returned (function value): +** int status: +1 = dubious year (Note 4) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) tai1+tai2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tai1 is the Julian +** Day Number and tai2 is the fraction of a day. The returned utc1 +** and utc2 form an analogous pair, except that a special convention +** is used, to deal with the problem of leap seconds - see the next +** note. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. In the 1960-1972 era +** there were smaller jumps (in either direction) each time the +** linear UTC(TAI) expression was changed, and these "mini-leaps" +** are also included in the SOFA convention. +** +** 3) The function iauD2dtf can be used to transform the UTC quasi-JD +** into calendar date and clock time, including UTC leap second +** handling. +** +** 4) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** Called: +** iauUtctai UTC to TAI +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int big1; + int i, j; + double a1, a2, u1, u2, g1, g2; + + +/* Put the two parts of the TAI into big-first order. */ + big1 = ( fabs(tai1) >= fabs(tai2) ); + if ( big1 ) { + a1 = tai1; + a2 = tai2; + } else { + a1 = tai2; + a2 = tai1; + } + +/* Initial guess for UTC. */ + u1 = a1; + u2 = a2; + +/* Iterate (though in most cases just once is enough). */ + for ( i = 0; i < 3; i++ ) { + + /* Guessed UTC to TAI. */ + j = iauUtctai(u1, u2, &g1, &g2); + if ( j < 0 ) return j; + + /* Adjust guessed UTC. */ + u2 += a1 - g1; + u2 += a2 - g2; + } + +/* Return the UTC result, preserving the TAI order. */ + if ( big1 ) { + *utc1 = u1; + *utc2 = u2; + } else { + *utc1 = u2; + *utc2 = u1; + } + +/* Status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tcbtdb.c b/20200721/c/src/tcbtdb.c new file mode 100644 index 0000000..0982c90 --- /dev/null +++ b/20200721/c/src/tcbtdb.c @@ -0,0 +1,182 @@ +#include "sofa.h" + +int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2) +/* +** - - - - - - - - - - +** i a u T c b t d b +** - - - - - - - - - - +** +** Time scale transformation: Barycentric Coordinate Time, TCB, to +** Barycentric Dynamical Time, TDB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tcb1,tcb2 double TCB as a 2-part Julian Date +** +** Returned: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tcb1+tcb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tcb1 is the Julian +** Day Number and tcb2 is the fraction of a day. The returned +** tdb1,tdb2 follow suit. +** +** 2) The 2006 IAU General Assembly introduced a conventional linear +** transformation between TDB and TCB. This transformation +** compensates for the drift between TCB and terrestrial time TT, +** and keeps TDB approximately centered on TT. Because the +** relationship between TT and TCB depends on the adopted solar +** system ephemeris, the degree of alignment between TDB and TT over +** long intervals will vary according to which ephemeris is used. +** Former definitions of TDB attempted to avoid this problem by +** stipulating that TDB and TT should differ only by periodic +** effects. This is a good description of the nature of the +** relationship but eluded precise mathematical formulation. The +** conventional linear relationship adopted in 2006 sidestepped +** these difficulties whilst delivering a TDB that in practice was +** consistent with values before that date. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** Reference: +** +** IAU 2006 Resolution B3 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */ + static const double t77td = DJM0 + DJM77; + static const double t77tf = TTMTAI/DAYSEC; + +/* TDB (days) at TAI 1977 Jan 1.0 */ + static const double tdb0 = TDB0/DAYSEC; + + double d; + + +/* Result, safeguarding precision. */ + if ( fabs(tcb1) > fabs(tcb2) ) { + d = tcb1 - t77td; + *tdb1 = tcb1; + *tdb2 = tcb2 + tdb0 - ( d + ( tcb2 - t77tf ) ) * ELB; + } else { + d = tcb2 - t77td; + *tdb1 = tcb1 + tdb0 - ( d + ( tcb1 - t77tf ) ) * ELB; + *tdb2 = tcb2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tcgtt.c b/20200721/c/src/tcgtt.c new file mode 100644 index 0000000..72abed7 --- /dev/null +++ b/20200721/c/src/tcgtt.c @@ -0,0 +1,159 @@ +#include "sofa.h" + +int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u T c g t t +** - - - - - - - - - +** +** Time scale transformation: Geocentric Coordinate Time, TCG, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tcg1,tcg2 double TCG as a 2-part Julian Date +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tcg1+tcg2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tcg1 is the Julian +** Day Number and tcg22 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),. +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2000 Resolution B1.9 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* 1977 Jan 1 00:00:32.184 TT, as MJD */ + static const double t77t = DJM77 + TTMTAI/DAYSEC; + + +/* Result, safeguarding precision. */ + if ( fabs(tcg1) > fabs(tcg2) ) { + *tt1 = tcg1; + *tt2 = tcg2 - ( ( tcg1 - DJM0 ) + ( tcg2 - t77t ) ) * ELG; + } else { + *tt1 = tcg1 - ( ( tcg2 - DJM0 ) + ( tcg1 - t77t ) ) * ELG; + *tt2 = tcg2; + } + +/* OK status. */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tdbtcb.c b/20200721/c/src/tdbtcb.c new file mode 100644 index 0000000..370627b --- /dev/null +++ b/20200721/c/src/tdbtcb.c @@ -0,0 +1,187 @@ +#include "sofa.h" + +int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2) +/* +** - - - - - - - - - - +** i a u T d b t c b +** - - - - - - - - - - +** +** Time scale transformation: Barycentric Dynamical Time, TDB, to +** Barycentric Coordinate Time, TCB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned: +** tcb1,tcb2 double TCB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tdb1+tdb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tdb1 is the Julian +** Day Number and tdb2 is the fraction of a day. The returned +** tcb1,tcb2 follow suit. +** +** 2) The 2006 IAU General Assembly introduced a conventional linear +** transformation between TDB and TCB. This transformation +** compensates for the drift between TCB and terrestrial time TT, +** and keeps TDB approximately centered on TT. Because the +** relationship between TT and TCB depends on the adopted solar +** system ephemeris, the degree of alignment between TDB and TT over +** long intervals will vary according to which ephemeris is used. +** Former definitions of TDB attempted to avoid this problem by +** stipulating that TDB and TT should differ only by periodic +** effects. This is a good description of the nature of the +** relationship but eluded precise mathematical formulation. The +** conventional linear relationship adopted in 2006 sidestepped +** these difficulties whilst delivering a TDB that in practice was +** consistent with values before that date. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** Reference: +** +** IAU 2006 Resolution B3 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */ + static const double t77td = DJM0 + DJM77; + static const double t77tf = TTMTAI/DAYSEC; + +/* TDB (days) at TAI 1977 Jan 1.0 */ + static const double tdb0 = TDB0/DAYSEC; + +/* TDB to TCB rate */ + static const double elbb = ELB/(1.0-ELB); + + double d, f; + + +/* Result, preserving date format but safeguarding precision. */ + if ( fabs(tdb1) > fabs(tdb2) ) { + d = t77td - tdb1; + f = tdb2 - tdb0; + *tcb1 = tdb1; + *tcb2 = f - ( d - ( f - t77tf ) ) * elbb; + } else { + d = t77td - tdb2; + f = tdb1 - tdb0; + *tcb1 = f - ( d - ( f - t77tf ) ) * elbb; + *tcb2 = tdb2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tdbtt.c b/20200721/c/src/tdbtt.c new file mode 100644 index 0000000..039991b --- /dev/null +++ b/20200721/c/src/tdbtt.c @@ -0,0 +1,172 @@ +#include "sofa.h" + +int iauTdbtt(double tdb1, double tdb2, double dtr, + double *tt1, double *tt2 ) +/* +** - - - - - - - - - +** i a u T d b t t +** - - - - - - - - - +** +** Time scale transformation: Barycentric Dynamical Time, TDB, to +** Terrestrial Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** dtr double TDB-TT in seconds +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tdb1+tdb2 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where tdb1 is the Julian +** Day Number and tdb2 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** 2) The argument dtr represents the quasi-periodic component of the +** GR transformation between TT and TCB. It is dependent upon the +** adopted solar-system ephemeris, and can be obtained by numerical +** integration, by interrogating a precomputed time ephemeris or by +** evaluating a model such as that implemented in the SOFA function +** iauDtdb. The quantity is dominated by an annual term of 1.7 ms +** amplitude. +** +** 3) TDB is essentially the same as Teph, the time argument for the +** JPL solar system ephemerides. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2006 Resolution 3 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +** +*/ +{ + double dtrd; + + +/* Result, safeguarding precision. */ + dtrd = dtr / DAYSEC; + if ( fabs(tdb1) > fabs(tdb2) ) { + *tt1 = tdb1; + *tt2 = tdb2 - dtrd; + } else { + *tt1 = tdb1 - dtrd; + *tt2 = tdb2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tf2a.c b/20200721/c/src/tf2a.c new file mode 100644 index 0000000..dd56016 --- /dev/null +++ b/20200721/c/src/tf2a.c @@ -0,0 +1,157 @@ +#include "sofa.h" +#include + +int iauTf2a(char s, int ihour, int imin, double sec, double *rad) +/* +** - - - - - - - - +** i a u T f 2 a +** - - - - - - - - +** +** Convert hours, minutes, seconds to radians. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ihour int hours +** imin int minutes +** sec double seconds +** +** Returned: +** rad double angle in radians +** +** Returned (function value): +** int status: 0 = OK +** 1 = ihour outside range 0-23 +** 2 = imin outside range 0-59 +** 3 = sec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ihour, imin and/or sec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Compute the interval. */ + *rad = ( s == '-' ? -1.0 : 1.0 ) * + ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) + + ( (double) abs(imin) ) ) + + fabs(sec) ) * DS2R; + +/* Validate arguments and return status. */ + if ( ihour < 0 || ihour > 23 ) return 1; + if ( imin < 0 || imin > 59 ) return 2; + if ( sec < 0.0 || sec >= 60.0 ) return 3; + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tf2d.c b/20200721/c/src/tf2d.c new file mode 100644 index 0000000..7909f41 --- /dev/null +++ b/20200721/c/src/tf2d.c @@ -0,0 +1,157 @@ +#include "sofa.h" +#include + +int iauTf2d(char s, int ihour, int imin, double sec, double *days) +/* +** - - - - - - - - +** i a u T f 2 d +** - - - - - - - - +** +** Convert hours, minutes, seconds to days. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** s char sign: '-' = negative, otherwise positive +** ihour int hours +** imin int minutes +** sec double seconds +** +** Returned: +** days double interval in days +** +** Returned (function value): +** int status: 0 = OK +** 1 = ihour outside range 0-23 +** 2 = imin outside range 0-59 +** 3 = sec outside range 0-59.999... +** +** Notes: +** +** 1) The result is computed even if any of the range checks fail. +** +** 2) Negative ihour, imin and/or sec produce a warning status, but +** the absolute value is used in the conversion. +** +** 3) If there are multiple errors, the status value reflects only the +** first, the smallest taking precedence. +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Compute the interval. */ + *days = ( s == '-' ? -1.0 : 1.0 ) * + ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) + + ( (double) abs(imin) ) ) + + fabs(sec) ) / DAYSEC; + +/* Validate arguments and return status. */ + if ( ihour < 0 || ihour > 23 ) return 1; + if ( imin < 0 || imin > 59 ) return 2; + if ( sec < 0.0 || sec >= 60.0 ) return 3; + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tpors.c b/20200721/c/src/tpors.c new file mode 100644 index 0000000..8739d28 --- /dev/null +++ b/20200721/c/src/tpors.c @@ -0,0 +1,222 @@ +#include "sofa.h" + +int iauTpors(double xi, double eta, double a, double b, + double *a01, double *b01, double *a02, double *b02) +/* +** - - - - - - - - - +** i a u T p o r s +** - - - - - - - - - +** +** In the tangent plane projection, given the rectangular coordinates +** of a star and its spherical coordinates, determine the spherical +** coordinates of the tangent point. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** a,b double star's spherical coordinates (Note 3) +** +** Returned: +** *a01,*b01 double tangent point's spherical coordinates, Soln. 1 +** *a02,*b02 double tangent point's spherical coordinates, Soln. 2 +** +** Returned (function value): +** int number of solutions: +** 0 = no solutions returned (Note 5) +** 1 = only the first solution is useful (Note 6) +** 2 = both solutions are useful (Note 6) +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the spherical coordinates are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) All angular arguments are in radians. +** +** 4) The angles a01 and a02 are returned in the range 0-2pi. The +** angles b01 and b02 are returned in the range +/-pi, but in the +** usual, non-pole-crossing, case, the range is +/-pi/2. +** +** 5) Cases where there is no solution can arise only near the poles. +** For example, it is clearly impossible for a star at the pole +** itself to have a non-zero xi value, and hence it is meaningless +** to ask where the tangent point would have to be to bring about +** this combination of xi and dec. +** +** 6) Also near the poles, cases can arise where there are two useful +** solutions. The return value indicates whether the second of the +** two solutions returned is useful; 1 indicates only one useful +** solution, the usual case. +** +** 7) The basis of the algorithm is to solve the spherical triangle PSC, +** where P is the north celestial pole, S is the star and C is the +** tangent point. The spherical coordinates of the tangent point are +** [a0,b0]; writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), side c +** is then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be +** found) is (pi/2-b0). Angle C is given by sin(C) = xi/rho and +** cos(C) = eta/rho. Angle P (to be found) is the longitude +** difference between star and tangent point (a-a0). +** +** 8) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts iauTpstv star +** > iauTpors < iauTporv origin +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double xi2, r, sb, cb, rsb, rcb, w2, w, s, c; + + + xi2 = xi*xi; + r = sqrt(1.0 + xi2 + eta*eta); + sb = sin(b); + cb = cos(b); + rsb = r*sb; + rcb = r*cb; + w2 = rcb*rcb - xi2; + if ( w2 >= 0.0 ) { + w = sqrt(w2); + s = rsb - eta*w; + c = rsb*eta + w; + if ( xi == 0.0 && w == 0.0 ) w = 1.0; + *a01 = iauAnp(a - atan2(xi,w)); + *b01 = atan2(s,c); + w = -w; + s = rsb - eta*w; + c = rsb*eta + w; + *a02 = iauAnp(a - atan2(xi,w)); + *b02 = atan2(s,c); + return (fabs(rsb) < 1.0) ? 1 : 2; + } else { + return 0; + } + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tporv.c b/20200721/c/src/tporv.c new file mode 100644 index 0000000..4a82870 --- /dev/null +++ b/20200721/c/src/tporv.c @@ -0,0 +1,219 @@ +#include "sofa.h" + +int iauTporv(double xi, double eta, double v[3], + double v01[3], double v02[3]) +/* +** - - - - - - - - - +** i a u T p o r v +** - - - - - - - - - +** +** In the tangent plane projection, given the rectangular coordinates +** of a star and its direction cosines, determine the direction +** cosines of the tangent point. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** v double[3] star's direction cosines (Note 3) +** +** Returned: +** v01 double[3] tangent point's direction cosines, Solution 1 +** v02 double[3] tangent point's direction cosines, Solution 2 +** +** Returned (function value): +** int number of solutions: +** 0 = no solutions returned (Note 4) +** 1 = only the first solution is useful (Note 5) +** 2 = both solutions are useful (Note 5) +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The vector v must be of unit length or the result will be wrong. +** +** 4) Cases where there is no solution can arise only near the poles. +** For example, it is clearly impossible for a star at the pole +** itself to have a non-zero xi value, and hence it is meaningless +** to ask where the tangent point would have to be. +** +** 5) Also near the poles, cases can arise where there are two useful +** solutions. The return value indicates whether the second of the +** two solutions returned is useful; 1 indicates only one useful +** solution, the usual case. +** +** 6) The basis of the algorithm is to solve the spherical triangle +** PSC, where P is the north celestial pole, S is the star and C is +** the tangent point. Calling the celestial spherical coordinates +** of the star and tangent point (a,b) and (a0,b0) respectively, and +** writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), and +** transforming the vector v into (a,b) in the normal way, side c is +** then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be +** found) is (pi/2-b0), while angle C is given by sin(C) = xi/rho +** and cos(C) = eta/rho; angle P (to be found) is (a-a0). After +** solving the spherical triangle, the result (a0,b0) can be +** expressed in vector form as v0. +** +** 7) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts iauTpstv star +** iauTpors > iauTporv < origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, rxy2, xi2, eta2p1, r, rsb, rcb, w2, w, c; + + + x = v[0]; + y = v[1]; + z = v[2]; + rxy2 = x*x + y*y; + xi2 = xi*xi; + eta2p1 = eta*eta + 1.0; + r = sqrt(xi2 + eta2p1); + rsb = r*z; + rcb = r*sqrt(x*x + y*y); + w2 = rcb*rcb - xi2; + if ( w2 > 0.0 ) { + w = sqrt(w2); + c = (rsb*eta + w) / (eta2p1*sqrt(rxy2*(w2+xi2))); + v01[0] = c * (x*w + y*xi); + v01[1] = c * (y*w - x*xi); + v01[2] = (rsb - eta*w) / eta2p1; + w = - w; + c = (rsb*eta + w) / (eta2p1*sqrt(rxy2*(w2+xi2))); + v02[0] = c * (x*w + y*xi); + v02[1] = c * (y*w - x*xi); + v02[2] = (rsb - eta*w) / eta2p1; + return (fabs(rsb) < 1.0) ? 1 : 2; + } else { + return 0; + } + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tpsts.c b/20200721/c/src/tpsts.c new file mode 100644 index 0000000..0cab32b --- /dev/null +++ b/20200721/c/src/tpsts.c @@ -0,0 +1,170 @@ +#include "sofa.h" + +void iauTpsts(double xi, double eta, double a0, double b0, + double *a, double *b) +/* +** - - - - - - - - - +** i a u T p s t s +** - - - - - - - - - +** +** In the tangent plane projection, given the star's rectangular +** coordinates and the spherical coordinates of the tangent point, +** solve for the spherical coordinates of the star. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** a0,b0 double tangent point's spherical coordinates +** +** Returned: +** *a,*b double star's spherical coordinates +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the spherical coordinates are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) All angular arguments are in radians. +** +** 4) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** > iauTpsts < iauTpstv star +** iauTpors iauTporv origin +** +** Called: +** iauAnp normalize angle into range 0 to 2pi +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double sb0, cb0, d; + + sb0 = sin(b0); + cb0 = cos(b0); + d = cb0 - eta*sb0; + *a = iauAnp(atan2(xi,d) + a0); + *b = atan2(sb0+eta*cb0, sqrt(xi*xi+d*d)); + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tpstv.c b/20200721/c/src/tpstv.c new file mode 100644 index 0000000..d35db7c --- /dev/null +++ b/20200721/c/src/tpstv.c @@ -0,0 +1,194 @@ +#include "sofa.h" + +void iauTpstv(double xi, double eta, double v0[3], double v[3]) +/* +** - - - - - - - - - +** i a u T p s t v +** - - - - - - - - - +** +** In the tangent plane projection, given the star's rectangular +** coordinates and the direction cosines of the tangent point, solve +** for the direction cosines of the star. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** xi,eta double rectangular coordinates of star image (Note 2) +** v0 double[3] tangent point's direction cosines +** +** Returned: +** v double[3] star's direction cosines +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The method used is to complete the star vector in the (xi,eta) +** based triad and normalize it, then rotate the triad to put the +** tangent point at the pole with the x-axis aligned to zero +** longitude. Writing (a0,b0) for the celestial spherical +** coordinates of the tangent point, the sequence of rotations is +** (b-pi/2) around the x-axis followed by (-a-pi/2) around the +** z-axis. +** +** 4) If vector v0 is not of unit length, the returned vector v will +** be wrong. +** +** 5) If vector v0 points at a pole, the returned vector v will be +** based on the arbitrary assumption that the longitude coordinate +** of the tangent point is zero. +** +** 6) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes iauTpxev xi,eta +** iauTpsts > iauTpstv < star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double x, y, z, f, r; + + +/* Tangent point. */ + x = v0[0]; + y = v0[1]; + z = v0[2]; + +/* Deal with polar case. */ + r = sqrt(x*x + y*y); + if ( r == 0.0 ) { + r = 1e-20; + x = r; + } + +/* Star vector length to tangent plane. */ + f = sqrt(1.0 + xi*xi + eta*eta); + +/* Apply the transformation and normalize. */ + v[0] = (x - (xi*y + eta*x*z) / r) / f; + v[1] = (y + (xi*x - eta*y*z) / r) / f; + v[2] = (z + eta*r) / f; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tpxes.c b/20200721/c/src/tpxes.c new file mode 100644 index 0000000..79c2d4c --- /dev/null +++ b/20200721/c/src/tpxes.c @@ -0,0 +1,203 @@ +#include "sofa.h" + +int iauTpxes(double a, double b, double a0, double b0, + double *xi, double *eta) +/* +** - - - - - - - - - +** i a u T p x e s +** - - - - - - - - - +** +** In the tangent plane projection, given celestial spherical +** coordinates for a star and the tangent point, solve for the star's +** rectangular coordinates in the tangent plane. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** a,b double star's spherical coordinates +** a0,b0 double tangent point's spherical coordinates +** +** Returned: +** *xi,*eta double rectangular coordinates of star image (Note 2) +** +** Returned (function value): +** int status: 0 = OK +** 1 = star too far from axis +** 2 = antistar on tangent plane +** 3 = antistar too far from axis +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the spherical coordinates are observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". For right-handed spherical coordinates, +** (xi,eta) are also right-handed. The units of (xi,eta) are, +** effectively, radians at the tangent point. +** +** 3) All angular arguments are in radians. +** +** 4) This function is a member of the following set: +** +** spherical vector solve for +** +** > iauTpxes < iauTpxev xi,eta +** iauTpsts iauTpstv star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + const double TINY = 1e-6; + int j; + double sb0, sb, cb0, cb, da, sda, cda, d; + + +/* Functions of the spherical coordinates. */ + sb0 = sin(b0); + sb = sin(b); + cb0 = cos(b0); + cb = cos(b); + da = a - a0; + sda = sin(da); + cda = cos(da); + +/* Reciprocal of star vector length to tangent plane. */ + d = sb*sb0 + cb*cb0*cda; + +/* Check for error cases. */ + if ( d > TINY ) { + j = 0; + } else if ( d >= 0.0 ) { + j = 1; + d = TINY; + } else if ( d > -TINY ) { + j = 2; + d = -TINY; + } else { + j = 3; + } + +/* Return the tangent plane coordinates (even in dubious cases). */ + *xi = cb*sda / d; + *eta = (sb*cb0 - cb*sb0*cda) / d; + +/* Return the status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tpxev.c b/20200721/c/src/tpxev.c new file mode 100644 index 0000000..a93bc3a --- /dev/null +++ b/20200721/c/src/tpxev.c @@ -0,0 +1,223 @@ +#include "sofa.h" + +int iauTpxev(double v[3], double v0[3], double *xi, double *eta) +/* +** - - - - - - - - - +** i a u T p x e v +** - - - - - - - - - +** +** In the tangent plane projection, given celestial direction cosines +** for a star and the tangent point, solve for the star's rectangular +** coordinates in the tangent plane. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** v double[3] direction cosines of star (Note 4) +** v0 double[3] direction cosines of tangent point (Note 4) +** +** Returned: +** *xi,*eta double tangent plane coordinates of star +** +** Returned (function value): +** int status: 0 = OK +** 1 = star too far from axis +** 2 = antistar on tangent plane +** 3 = antistar too far from axis +** +** Notes: +** +** 1) The tangent plane projection is also called the "gnomonic +** projection" and the "central projection". +** +** 2) The eta axis points due north in the adopted coordinate system. +** If the direction cosines represent observed (RA,Dec), the tangent +** plane coordinates (xi,eta) are conventionally called the +** "standard coordinates". If the direction cosines are with +** respect to a right-handed triad, (xi,eta) are also right-handed. +** The units of (xi,eta) are, effectively, radians at the tangent +** point. +** +** 3) The method used is to extend the star vector to the tangent +** plane and then rotate the triad so that (x,y) becomes (xi,eta). +** Writing (a,b) for the celestial spherical coordinates of the +** star, the sequence of rotations is (a+pi/2) around the z-axis +** followed by (pi/2-b) around the x-axis. +** +** 4) If vector v0 is not of unit length, or if vector v is of zero +** length, the results will be wrong. +** +** 5) If v0 points at a pole, the returned (xi,eta) will be based on +** the arbitrary assumption that the longitude coordinate of the +** tangent point is zero. +** +** 6) This function is a member of the following set: +** +** spherical vector solve for +** +** iauTpxes > iauTpxev < xi,eta +** iauTpsts iauTpstv star +** iauTpors iauTporv origin +** +** References: +** +** Calabretta M.R. & Greisen, E.W., 2002, "Representations of +** celestial coordinates in FITS", Astron.Astrophys. 395, 1077 +** +** Green, R.M., "Spherical Astronomy", Cambridge University Press, +** 1987, Chapter 13. +** +** This revision: 2018 January 2 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + const double TINY = 1e-6; + int j; + double x, y, z, x0, y0, z0, r2, r, w, d; + + +/* Star and tangent point. */ + x = v[0]; + y = v[1]; + z = v[2]; + x0 = v0[0]; + y0 = v0[1]; + z0 = v0[2]; + +/* Deal with polar case. */ + r2 = x0*x0 + y0*y0; + r = sqrt(r2); + if ( r == 0.0 ) { + r = 1e-20; + x0 = r; + } + +/* Reciprocal of star vector length to tangent plane. */ + w = x*x0 + y*y0; + d = w + z*z0; + +/* Check for error cases. */ + if ( d > TINY ) { + j = 0; + } else if ( d >= 0.0 ) { + j = 1; + d = TINY; + } else if ( d > -TINY ) { + j = 2; + d = -TINY; + } else { + j = 3; + } + +/* Return the tangent plane coordinates (even in dubious cases). */ + d *= r; + *xi = (y*x0 - x*y0) / d; + *eta = (z*r2 - z0*w) / d; + +/* Return the status. */ + return j; + +/* Finished. */ + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tr.c b/20200721/c/src/tr.c new file mode 100644 index 0000000..e44c613 --- /dev/null +++ b/20200721/c/src/tr.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +void iauTr(double r[3][3], double rt[3][3]) +/* +** - - - - - - +** i a u T r +** - - - - - - +** +** Transpose an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** +** Returned: +** rt double[3][3] transpose +** +** Note: +** It is permissible for r and rt to be the same array. +** +** Called: +** iauCr copy r-matrix +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double wm[3][3]; + int i, j; + + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + wm[i][j] = r[j][i]; + } + } + iauCr(wm, rt); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/trxp.c b/20200721/c/src/trxp.c new file mode 100644 index 0000000..f271d60 --- /dev/null +++ b/20200721/c/src/trxp.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +void iauTrxp(double r[3][3], double p[3], double trp[3]) +/* +** - - - - - - - - +** i a u T r x p +** - - - - - - - - +** +** Multiply a p-vector by the transpose of an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** p double[3] p-vector +** +** Returned: +** trp double[3] r^T * p +** +** Note: +** It is permissible for p and trp to be the same array. +** +** Called: +** iauTr transpose r-matrix +** iauRxp product of r-matrix and p-vector +** +** This revision: 2020 May 24 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double tr[3][3]; + + +/* Transpose of matrix r. */ + iauTr(r, tr); + +/* Matrix tr * vector p -> vector trp. */ + iauRxp(tr, p, trp); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/trxpv.c b/20200721/c/src/trxpv.c new file mode 100644 index 0000000..4bab996 --- /dev/null +++ b/20200721/c/src/trxpv.c @@ -0,0 +1,143 @@ +#include "sofa.h" + +void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]) +/* +** - - - - - - - - - +** i a u T r x p v +** - - - - - - - - - +** +** Multiply a pv-vector by the transpose of an r-matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Given: +** r double[3][3] r-matrix +** pv double[2][3] pv-vector +** +** Returned: +** trpv double[2][3] r * pv +** +** Note: +** It is permissible for pv and trpv to be the same array. +** +** Called: +** iauTr transpose r-matrix +** iauRxpv product of r-matrix and pv-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double tr[3][3]; + + +/* Transpose of matrix r. */ + iauTr(r, tr); + +/* Matrix tr * vector pv -> vector trpv. */ + iauRxpv(tr, pv, trpv); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tttai.c b/20200721/c/src/tttai.c new file mode 100644 index 0000000..8998c8a --- /dev/null +++ b/20200721/c/src/tttai.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +int iauTttai(double tt1, double tt2, double *tai1, double *tai2) +/* +** - - - - - - - - - +** i a u T t t a i +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to International +** Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tai1,tai2 follow +** suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* TT minus TAI (days). */ + static const double dtat = TTMTAI/DAYSEC; + + +/* Result, safeguarding precision. */ + if ( fabs(tt1) > fabs(tt2) ) { + *tai1 = tt1; + *tai2 = tt2 - dtat; + } else { + *tai1 = tt1 - dtat; + *tai2 = tt2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tttcg.c b/20200721/c/src/tttcg.c new file mode 100644 index 0000000..09092e6 --- /dev/null +++ b/20200721/c/src/tttcg.c @@ -0,0 +1,162 @@ +#include "sofa.h" + +int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2) +/* +** - - - - - - - - - +** i a u T t t c g +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Geocentric +** Coordinate Time, TCG. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned: +** tcg1,tcg2 double TCG as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Note: +** +** tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tcg1,tcg2 follow +** suit. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2000 Resolution B1.9 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* 1977 Jan 1 00:00:32.184 TT, as MJD */ + static const double t77t = DJM77 + TTMTAI/DAYSEC; + +/* TT to TCG rate */ + static const double elgg = ELG/(1.0-ELG); + + +/* Result, safeguarding precision. */ + if ( fabs(tt1) > fabs(tt2) ) { + *tcg1 = tt1; + *tcg2 = tt2 + ( ( tt1 - DJM0 ) + ( tt2 - t77t ) ) * elgg; + } else { + *tcg1 = tt1 + ( ( tt2 - DJM0 ) + ( tt1 - t77t ) ) * elgg; + *tcg2 = tt2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/tttdb.c b/20200721/c/src/tttdb.c new file mode 100644 index 0000000..1f74fee --- /dev/null +++ b/20200721/c/src/tttdb.c @@ -0,0 +1,171 @@ +#include "sofa.h" + +int iauTttdb(double tt1, double tt2, double dtr, + double *tdb1, double *tdb2) +/* +** - - - - - - - - - +** i a u T t t d b +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Barycentric +** Dynamical Time, TDB. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** dtr double TDB-TT in seconds +** +** Returned: +** tdb1,tdb2 double TDB as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned tdb1,tdb2 follow +** suit. +** +** 2) The argument dtr represents the quasi-periodic component of the +** GR transformation between TT and TCB. It is dependent upon the +** adopted solar-system ephemeris, and can be obtained by numerical +** integration, by interrogating a precomputed time ephemeris or by +** evaluating a model such as that implemented in the SOFA function +** iauDtdb. The quantity is dominated by an annual term of 1.7 ms +** amplitude. +** +** 3) TDB is essentially the same as Teph, the time argument for the JPL +** solar system ephemerides. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** IAU 2006 Resolution 3 +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dtrd; + + +/* Result, safeguarding precision. */ + dtrd = dtr / DAYSEC; + if ( fabs(tt1) > fabs(tt2) ) { + *tdb1 = tt1; + *tdb2 = tt2 + dtrd; + } else { + *tdb1 = tt1 + dtrd; + *tdb2 = tt2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ttut1.c b/20200721/c/src/ttut1.c new file mode 100644 index 0000000..d38caef --- /dev/null +++ b/20200721/c/src/ttut1.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +int iauTtut1(double tt1, double tt2, double dt, + double *ut11, double *ut12) +/* +** - - - - - - - - - +** i a u T t u t 1 +** - - - - - - - - - +** +** Time scale transformation: Terrestrial Time, TT, to Universal Time, +** UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** tt1,tt2 double TT as a 2-part Julian Date +** dt double TT-UT1 in seconds +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) tt1+tt2 is Julian Date, apportioned in any convenient way between +** the two arguments, for example where tt1 is the Julian Day Number +** and tt2 is the fraction of a day. The returned ut11,ut12 follow +** suit. +** +** 2) The argument dt is classical Delta T. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dtd; + + +/* Result, safeguarding precision. */ + dtd = dt / DAYSEC; + if ( fabs(tt1) > fabs(tt2) ) { + *ut11 = tt1; + *ut12 = tt2 - dtd; + } else { + *ut11 = tt1 - dtd; + *ut12 = tt2; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ut1tai.c b/20200721/c/src/ut1tai.c new file mode 100644 index 0000000..39419c5 --- /dev/null +++ b/20200721/c/src/ut1tai.c @@ -0,0 +1,161 @@ +#include "sofa.h" + +int iauUt1tai(double ut11, double ut12, double dta, + double *tai1, double *tai2) +/* +** - - - - - - - - - - +** i a u U t 1 t a i +** - - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to International +** Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date +** dta double UT1-TAI in seconds +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned +** tai1,tai2 follow suit. +** +** 2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is +** available from IERS tabulations. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dtad; + + +/* Result, safeguarding precision. */ + dtad = dta / DAYSEC; + if ( fabs(ut11) > fabs(ut12) ) { + *tai1 = ut11; + *tai2 = ut12 - dtad; + } else { + *tai1 = ut11 - dtad; + *tai2 = ut12; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ut1tt.c b/20200721/c/src/ut1tt.c new file mode 100644 index 0000000..18292db --- /dev/null +++ b/20200721/c/src/ut1tt.c @@ -0,0 +1,160 @@ +#include "sofa.h" + +int iauUt1tt(double ut11, double ut12, double dt, + double *tt1, double *tt2) +/* +** - - - - - - - - - +** i a u U t 1 t t +** - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to Terrestrial +** Time, TT. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date +** dt double TT-UT1 in seconds +** +** Returned: +** tt1,tt2 double TT as a 2-part Julian Date +** +** Returned (function value): +** int status: 0 = OK +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned +** tt1,tt2 follow suit. +** +** 2) The argument dt is classical Delta T. +** +** Reference: +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double dtd; + + +/* Result, safeguarding precision. */ + dtd = dt / DAYSEC; + if ( fabs(ut11) > fabs(ut12) ) { + *tt1 = ut11; + *tt2 = ut12 + dtd; + } else { + *tt1 = ut11 + dtd; + *tt2 = ut12; + } + +/* Status (always OK). */ + return 0; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/ut1utc.c b/20200721/c/src/ut1utc.c new file mode 100644 index 0000000..0393e9c --- /dev/null +++ b/20200721/c/src/ut1utc.c @@ -0,0 +1,243 @@ +#include "sofa.h" + +int iauUt1utc(double ut11, double ut12, double dut1, + double *utc1, double *utc2) +/* +** - - - - - - - - - - +** i a u U t 1 u t c +** - - - - - - - - - - +** +** Time scale transformation: Universal Time, UT1, to Coordinated +** Universal Time, UTC. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** ut11,ut12 double UT1 as a 2-part Julian Date (Note 1) +** dut1 double Delta UT1: UT1-UTC in seconds (Note 2) +** +** Returned: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 3,4) +** +** Returned (function value): +** int status: +1 = dubious year (Note 5) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) ut11+ut12 is Julian Date, apportioned in any convenient way +** between the two arguments, for example where ut11 is the Julian +** Day Number and ut12 is the fraction of a day. The returned utc1 +** and utc2 form an analogous pair, except that a special convention +** is used, to deal with the problem of leap seconds - see Note 3. +** +** 2) Delta UT1 can be obtained from tabulations provided by the +** International Earth Rotation and Reference Systems Service. The +** value changes abruptly by 1s at a leap second; however, close to +** a leap second the algorithm used here is tolerant of the "wrong" +** choice of value being made. +** +** 3) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the returned quasi JD day UTC1+UTC2 represents +** UTC days whether the length is 86399, 86400 or 86401 SI seconds. +** +** 4) The function iauD2dtf can be used to transform the UTC quasi-JD +** into calendar date and clock time, including UTC leap second +** handling. +** +** 5) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauCal2jd Gregorian calendar to JD +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int big1; + int i, iy, im, id, js; + double duts, u1, u2, d1, dats1, d2, fd, dats2, ddats, us1, us2, du; + + +/* UT1-UTC in seconds. */ + duts = dut1; + +/* Put the two parts of the UT1 into big-first order. */ + big1 = ( fabs(ut11) >= fabs(ut12) ); + if ( big1 ) { + u1 = ut11; + u2 = ut12; + } else { + u1 = ut12; + u2 = ut11; + } + +/* See if the UT1 can possibly be in a leap-second day. */ + d1 = u1; + dats1 = 0; + for ( i = -1; i <= 3; i++ ) { + d2 = u2 + (double) i; + if ( iauJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1; + js = iauDat(iy, im, id, 0.0, &dats2); + if ( js < 0 ) return -1; + if ( i == - 1 ) dats1 = dats2; + ddats = dats2 - dats1; + if ( fabs(ddats) >= 0.5 ) { + + /* Yes, leap second nearby: ensure UT1-UTC is "before" value. */ + if ( ddats * duts >= 0 ) duts -= ddats; + + /* UT1 for the start of the UTC day that ends in a leap. */ + if ( iauCal2jd(iy, im, id, &d1, &d2) ) return -1; + us1 = d1; + us2 = d2 - 1.0 + duts/DAYSEC; + + /* Is the UT1 after this point? */ + du = u1 - us1; + du += u2 - us2; + if ( du > 0 ) { + + /* Yes: fraction of the current UTC day that has elapsed. */ + fd = du * DAYSEC / ( DAYSEC + ddats ); + + /* Ramp UT1-UTC to bring about SOFA's JD(UTC) convention. */ + duts += ddats * ( fd <= 1.0 ? fd : 1.0 ); + } + + /* Done. */ + break; + } + dats1 = dats2; + } + +/* Subtract the (possibly adjusted) UT1-UTC from UT1 to give UTC. */ + u2 -= duts / DAYSEC; + +/* Result, safeguarding precision. */ + if ( big1 ) { + *utc1 = u1; + *utc2 = u2; + } else { + *utc1 = u2; + *utc2 = u1; + } + +/* Status. */ + return js; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/utctai.c b/20200721/c/src/utctai.c new file mode 100644 index 0000000..a8c6336 --- /dev/null +++ b/20200721/c/src/utctai.c @@ -0,0 +1,228 @@ +#include "sofa.h" + +int iauUtctai(double utc1, double utc2, double *tai1, double *tai2) +/* +** - - - - - - - - - - +** i a u U t c t a i +** - - - - - - - - - - +** +** Time scale transformation: Coordinated Universal Time, UTC, to +** International Atomic Time, TAI. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4) +** +** Returned: +** tai1,tai2 double TAI as a 2-part Julian Date (Note 5) +** +** Returned (function value): +** int status: +1 = dubious year (Note 3) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. In the 1960-1972 era +** there were smaller jumps (in either direction) each time the +** linear UTC(TAI) expression was changed, and these "mini-leaps" +** are also included in the SOFA convention. +** +** 3) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 4) The function iauDtf2d converts from calendar date and time of day +** into 2-part Julian Date, and in the case of UTC implements the +** leap-second-ambiguity convention described above. +** +** 5) The returned TAI1,TAI2 are such that their sum is the TAI Julian +** Date. +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauCal2jd Gregorian calendar to JD +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** This revision: 2019 June 20 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +** +*/ +{ + int big1; + int iy, im, id, j, iyt, imt, idt; + double u1, u2, fd, dat0, dat12, w, dat24, dlod, dleap, z1, z2, a2; + + +/* Put the two parts of the UTC into big-first order. */ + big1 = ( fabs(utc1) >= fabs(utc2) ); + if ( big1 ) { + u1 = utc1; + u2 = utc2; + } else { + u1 = utc2; + u2 = utc1; + } + +/* Get TAI-UTC at 0h today. */ + j = iauJd2cal(u1, u2, &iy, &im, &id, &fd); + if ( j ) return j; + j = iauDat(iy, im, id, 0.0, &dat0); + if ( j < 0 ) return j; + +/* Get TAI-UTC at 12h today (to detect drift). */ + j = iauDat(iy, im, id, 0.5, &dat12); + if ( j < 0 ) return j; + +/* Get TAI-UTC at 0h tomorrow (to detect jumps). */ + j = iauJd2cal(u1+1.5, u2-fd, &iyt, &imt, &idt, &w); + if ( j ) return j; + j = iauDat(iyt, imt, idt, 0.0, &dat24); + if ( j < 0 ) return j; + +/* Separate TAI-UTC change into per-day (DLOD) and any jump (DLEAP). */ + dlod = 2.0 * (dat12 - dat0); + dleap = dat24 - (dat0 + dlod); + +/* Remove any scaling applied to spread leap into preceding day. */ + fd *= (DAYSEC+dleap)/DAYSEC; + +/* Scale from (pre-1972) UTC seconds to SI seconds. */ + fd *= (DAYSEC+dlod)/DAYSEC; + +/* Today's calendar date to 2-part JD. */ + if ( iauCal2jd(iy, im, id, &z1, &z2) ) return -1; + +/* Assemble the TAI result, preserving the UTC split and order. */ + a2 = z1 - u1; + a2 += z2; + a2 += fd + dat0/DAYSEC; + if ( big1 ) { + *tai1 = u1; + *tai2 = a2; + } else { + *tai1 = a2; + *tai2 = u1; + } + +/* Status. */ + return j; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/utcut1.c b/20200721/c/src/utcut1.c new file mode 100644 index 0000000..f945b96 --- /dev/null +++ b/20200721/c/src/utcut1.c @@ -0,0 +1,197 @@ +#include "sofa.h" + +int iauUtcut1(double utc1, double utc2, double dut1, + double *ut11, double *ut12) +/* +** - - - - - - - - - - +** i a u U t c u t 1 +** - - - - - - - - - - +** +** Time scale transformation: Coordinated Universal Time, UTC, to +** Universal Time, UT1. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards of Fundamental Astronomy) software collection. +** +** Status: canonical. +** +** Given: +** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4) +** dut1 double Delta UT1 = UT1-UTC in seconds (Note 5) +** +** Returned: +** ut11,ut12 double UT1 as a 2-part Julian Date (Note 6) +** +** Returned (function value): +** int status: +1 = dubious year (Note 3) +** 0 = OK +** -1 = unacceptable date +** +** Notes: +** +** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any +** convenient way between the two arguments, for example where utc1 +** is the Julian Day Number and utc2 is the fraction of a day. +** +** 2) JD cannot unambiguously represent UTC during a leap second unless +** special measures are taken. The convention in the present +** function is that the JD day represents UTC days whether the +** length is 86399, 86400 or 86401 SI seconds. +** +** 3) The warning status "dubious year" flags UTCs that predate the +** introduction of the time scale or that are too far in the future +** to be trusted. See iauDat for further details. +** +** 4) The function iauDtf2d converts from calendar date and time of +** day into 2-part Julian Date, and in the case of UTC implements +** the leap-second-ambiguity convention described above. +** +** 5) Delta UT1 can be obtained from tabulations provided by the +** International Earth Rotation and Reference Systems Service. +** It is the caller's responsibility to supply a dut1 argument +** containing the UT1-UTC value that matches the given UTC. +** +** 6) The returned ut11,ut12 are such that their sum is the UT1 Julian +** Date. +** +** References: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** Explanatory Supplement to the Astronomical Almanac, +** P. Kenneth Seidelmann (ed), University Science Books (1992) +** +** Called: +** iauJd2cal JD to Gregorian calendar +** iauDat delta(AT) = TAI-UTC +** iauUtctai UTC to TAI +** iauTaiut1 TAI to UT1 +** +** This revision: 2013 August 12 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + int iy, im, id, js, jw; + double w, dat, dta, tai1, tai2; + + +/* Look up TAI-UTC. */ + if ( iauJd2cal(utc1, utc2, &iy, &im, &id, &w) ) return -1; + js = iauDat ( iy, im, id, 0.0, &dat); + if ( js < 0 ) return -1; + +/* Form UT1-TAI. */ + dta = dut1 - dat; + +/* UTC to TAI to UT1. */ + jw = iauUtctai(utc1, utc2, &tai1, &tai2); + if ( jw < 0 ) { + return -1; + } else if ( jw > 0 ) { + js = jw; + } + if ( iauTaiut1(tai1, tai2, dta, ut11, ut12) ) return -1; + +/* Status. */ + return js; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/xy06.c b/20200721/c/src/xy06.c new file mode 100644 index 0000000..578c95b --- /dev/null +++ b/20200721/c/src/xy06.c @@ -0,0 +1,2808 @@ +#include "sofa.h" + +void iauXy06(double date1, double date2, double *x, double *y) +/* +** - - - - - - - - +** i a u X y 0 6 +** - - - - - - - - +** +** X,Y coordinates of celestial intermediate pole from series based +** on IAU 2006 precession and IAU 2000A nutation. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: canonical model. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double CIP X,Y coordinates (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The X,Y coordinates are those of the unit vector towards the +** celestial intermediate pole. They represent the combined effects +** of frame bias, precession and nutation. +** +** 3) The fundamental arguments used are as adopted in IERS Conventions +** (2003) and are from Simon et al. (1994) and Souchay et al. +** (1999). +** +** 4) This is an alternative to the angles-based method, via the SOFA +** function iauFw2xy and as used in iauXys06a for example. The two +** methods agree at the 1 microarcsecond level (at present), a +** negligible amount compared with the intrinsic accuracy of the +** models. However, it would be unwise to mix the two methods +** (angles-based and series-based) in a single application. +** +** Called: +** iauFal03 mean anomaly of the Moon +** iauFalp03 mean anomaly of the Sun +** iauFaf03 mean argument of the latitude of the Moon +** iauFad03 mean elongation of the Moon from the Sun +** iauFaom03 mean longitude of the Moon's ascending node +** iauFame03 mean longitude of Mercury +** iauFave03 mean longitude of Venus +** iauFae03 mean longitude of Earth +** iauFama03 mean longitude of Mars +** iauFaju03 mean longitude of Jupiter +** iauFasa03 mean longitude of Saturn +** iauFaur03 mean longitude of Uranus +** iauFane03 mean longitude of Neptune +** iauFapa03 general accumulated precession in longitude +** +** References: +** +** Capitaine, N., Wallace, P.T. & Chapront, J., 2003, +** Astron.Astrophys., 412, 567 +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003), +** IERS Technical Note No. 32, BKG +** +** Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M., +** Francou, G. & Laskar, J., Astron.Astrophys., 1994, 282, 663 +** +** Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M., 1999, +** Astron.Astrophys.Supp.Ser. 135, 111 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2019 June 23 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + +/* Maximum power of T in the polynomials for X and Y */ + enum { MAXPT = 5 }; + +/* Polynomial coefficients (arcsec, X then Y). */ + static const double xyp[2][MAXPT+1] = { + + { -0.016617, + 2004.191898, + -0.4297829, + -0.19861834, + 0.000007578, + 0.0000059285 + }, + { -0.006951, + -0.025896, + -22.4072747, + 0.00190059, + 0.001112526, + 0.0000001358 + } + }; + +/* Fundamental-argument multipliers: luni-solar terms */ + static const int mfals[][5] = { + + /* 1-10 */ + { 0, 0, 0, 0, 1 }, + { 0, 0, 2, -2, 2 }, + { 0, 0, 2, 0, 2 }, + { 0, 0, 0, 0, 2 }, + { 0, 1, 0, 0, 0 }, + { 0, 1, 2, -2, 2 }, + { 1, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 1 }, + { 1, 0, 2, 0, 2 }, + { 0, 1, -2, 2, -2 }, + + /* 11-20 */ + { 0, 0, 2, -2, 1 }, + { 1, 0, -2, 0, -2 }, + { 1, 0, 0, -2, 0 }, + { 1, 0, 0, 0, 1 }, + { 1, 0, 0, 0, -1 }, + { 1, 0, -2, -2, -2 }, + { 1, 0, 2, 0, 1 }, + { 2, 0, -2, 0, -1 }, + { 0, 0, 0, 2, 0 }, + { 0, 0, 2, 2, 2 }, + + /* 21-30 */ + { 2, 0, 0, -2, 0 }, + { 0, 2, -2, 2, -2 }, + { 2, 0, 2, 0, 2 }, + { 1, 0, 2, -2, 2 }, + { 1, 0, -2, 0, -1 }, + { 2, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 0 }, + { 0, 1, 0, 0, 1 }, + { 1, 0, 0, -2, -1 }, + { 0, 2, 2, -2, 2 }, + + /* 31-40 */ + { 0, 0, 2, -2, 0 }, + { 1, 0, 0, -2, 1 }, + { 0, 1, 0, 0, -1 }, + { 0, 2, 0, 0, 0 }, + { 1, 0, -2, -2, -1 }, + { 1, 0, 2, 2, 2 }, + { 0, 1, 2, 0, 2 }, + { 2, 0, -2, 0, 0 }, + { 0, 0, 2, 2, 1 }, + { 0, 1, -2, 0, -2 }, + + /* 41-50 */ + { 0, 0, 0, 2, 1 }, + { 1, 0, 2, -2, 1 }, + { 2, 0, 0, -2, -1 }, + { 2, 0, 2, -2, 2 }, + { 2, 0, 2, 0, 1 }, + { 0, 0, 0, 2, -1 }, + { 0, 1, -2, 2, -1 }, + { 1, 1, 0, -2, 0 }, + { 2, 0, 0, -2, 1 }, + { 1, 0, 0, 2, 0 }, + + /* 51-60 */ + { 0, 1, 2, -2, 1 }, + { 1, -1, 0, 0, 0 }, + { 0, 1, -1, 1, -1 }, + { 2, 0, -2, 0, -2 }, + { 0, 1, 0, -2, 0 }, + { 1, 0, 0, -1, 0 }, + { 3, 0, 2, 0, 2 }, + { 0, 0, 0, 1, 0 }, + { 1, -1, 2, 0, 2 }, + { 1, 1, -2, -2, -2 }, + + /* 61-70 */ + { 1, 0, -2, 0, 0 }, + { 2, 0, 0, 0, -1 }, + { 0, 1, -2, -2, -2 }, + { 1, 1, 2, 0, 2 }, + { 2, 0, 0, 0, 1 }, + { 1, 1, 0, 0, 0 }, + { 1, 0, -2, 2, -1 }, + { 1, 0, 2, 0, 0 }, + { 1, -1, 0, -1, 0 }, + { 1, 0, 0, 0, 2 }, + + /* 71-80 */ + { 1, 0, -1, 0, -1 }, + { 0, 0, 2, 1, 2 }, + { 1, 0, -2, -4, -2 }, + { 1, -1, 0, -1, -1 }, + { 1, 0, 2, 2, 1 }, + { 0, 2, -2, 2, -1 }, + { 1, 0, 0, 0, -2 }, + { 2, 0, -2, -2, -2 }, + { 1, 1, 2, -2, 2 }, + { 2, 0, -2, -4, -2 }, + + /* 81-90 */ + { 1, 0, -4, 0, -2 }, + { 2, 0, 2, -2, 1 }, + { 1, 0, 0, -1, -1 }, + { 2, 0, 2, 2, 2 }, + { 3, 0, 0, 0, 0 }, + { 1, 0, 0, 2, 1 }, + { 0, 0, 2, -2, -1 }, + { 3, 0, 2, -2, 2 }, + { 0, 0, 4, -2, 2 }, + { 1, 0, 0, -4, 0 }, + + /* 91-100 */ + { 0, 1, 2, 0, 1 }, + { 2, 0, 0, -4, 0 }, + { 1, 1, 0, -2, -1 }, + { 2, 0, -2, 0, 1 }, + { 0, 0, 2, 0, -1 }, + { 0, 1, -2, 0, -1 }, + { 0, 1, 0, 0, 2 }, + { 0, 0, 2, -1, 2 }, + { 0, 0, 2, 4, 2 }, + { 2, 1, 0, -2, 0 }, + + /* 101-110 */ + { 1, 1, 0, -2, 1 }, + { 1, -1, 0, -2, 0 }, + { 1, -1, 0, -1, -2 }, + { 1, -1, 0, 0, 1 }, + { 0, 1, -2, 2, 0 }, + { 0, 1, 0, 0, -2 }, + { 1, -1, 2, 2, 2 }, + { 1, 0, 0, 2, -1 }, + { 1, -1, -2, -2, -2 }, + { 3, 0, 2, 0, 1 }, + + /* 111-120 */ + { 0, 1, 2, 2, 2 }, + { 1, 0, 2, -2, 0 }, + { 1, 1, -2, -2, -1 }, + { 1, 0, 2, -4, 1 }, + { 0, 1, -2, -2, -1 }, + { 2, -1, 2, 0, 2 }, + { 0, 0, 0, 2, 2 }, + { 1, -1, 2, 0, 1 }, + { 1, -1, -2, 0, -2 }, + { 0, 1, 0, 2, 0 }, + + /* 121-130 */ + { 0, 1, 2, -2, 0 }, + { 0, 0, 0, 1, 1 }, + { 1, 0, -2, -2, 0 }, + { 0, 3, 2, -2, 2 }, + { 2, 1, 2, 0, 2 }, + { 1, 1, 0, 0, 1 }, + { 2, 0, 0, 2, 0 }, + { 1, 1, 2, 0, 1 }, + { 1, 0, 0, -2, -2 }, + { 1, 0, -2, 2, 0 }, + + /* 131-140 */ + { 1, 0, -1, 0, -2 }, + { 0, 1, 0, -2, 1 }, + { 0, 1, 0, 1, 0 }, + { 0, 0, 0, 1, -1 }, + { 1, 0, -2, 2, -2 }, + { 1, -1, 0, 0, -1 }, + { 0, 0, 0, 4, 0 }, + { 1, -1, 0, 2, 0 }, + { 1, 0, 2, 1, 2 }, + { 1, 0, 2, -1, 2 }, + + /* 141-150 */ + { 0, 0, 2, 1, 1 }, + { 1, 0, 0, -2, 2 }, + { 1, 0, -2, 0, 1 }, + { 1, 0, -2, -4, -1 }, + { 0, 0, 2, 2, 0 }, + { 1, 1, 2, -2, 1 }, + { 1, 0, -2, 1, -1 }, + { 0, 0, 1, 0, 1 }, + { 2, 0, -2, -2, -1 }, + { 4, 0, 2, 0, 2 }, + + /* 151-160 */ + { 2, -1, 0, 0, 0 }, + { 2, 1, 2, -2, 2 }, + { 0, 1, 2, 1, 2 }, + { 1, 0, 4, -2, 2 }, + { 1, 1, 0, 0, -1 }, + { 2, 0, 2, 0, 0 }, + { 2, 0, -2, -4, -1 }, + { 1, 0, -1, 0, 0 }, + { 1, 0, 0, 1, 0 }, + { 0, 1, 0, 2, 1 }, + + /* 161-170 */ + { 1, 0, -4, 0, -1 }, + { 1, 0, 0, -4, -1 }, + { 2, 0, 2, 2, 1 }, + { 2, 1, 0, 0, 0 }, + { 0, 0, 2, -3, 2 }, + { 1, 2, 0, -2, 0 }, + { 0, 3, 0, 0, 0 }, + { 0, 0, 4, 0, 2 }, + { 0, 0, 2, -4, 1 }, + { 2, 0, 0, -2, -2 }, + + /* 171-180 */ + { 1, 1, -2, -4, -2 }, + { 0, 1, 0, -2, -1 }, + { 0, 0, 0, 4, 1 }, + { 3, 0, 2, -2, 1 }, + { 1, 0, 2, 4, 2 }, + { 1, 1, -2, 0, -2 }, + { 0, 0, 4, -2, 1 }, + { 2, -2, 0, -2, 0 }, + { 2, 1, 0, -2, -1 }, + { 0, 2, 0, -2, 0 }, + + /* 181-190 */ + { 1, 0, 0, -1, 1 }, + { 1, 1, 2, 2, 2 }, + { 3, 0, 0, 0, -1 }, + { 2, 0, 0, -4, -1 }, + { 3, 0, 2, 2, 2 }, + { 0, 0, 2, 4, 1 }, + { 0, 2, -2, -2, -2 }, + { 1, -1, 0, -2, -1 }, + { 0, 0, 2, -1, 1 }, + { 2, 0, 0, 2, 1 }, + + /* 191-200 */ + { 1, -1, -2, 2, -1 }, + { 0, 0, 0, 2, -2 }, + { 2, 0, 0, -4, 1 }, + { 1, 0, 0, -4, 1 }, + { 2, 0, 2, -4, 1 }, + { 4, 0, 2, -2, 2 }, + { 2, 1, -2, 0, -1 }, + { 2, 1, -2, -4, -2 }, + { 3, 0, 0, -4, 0 }, + { 1, -1, 2, 2, 1 }, + + /* 201-210 */ + { 1, -1, -2, 0, -1 }, + { 0, 2, 0, 0, 1 }, + { 1, 2, -2, -2, -2 }, + { 1, 1, 0, -4, 0 }, + { 2, 0, 0, -2, 2 }, + { 0, 2, 2, -2, 1 }, + { 1, 0, 2, 0, -1 }, + { 2, 1, 0, -2, 1 }, + { 2, -1, -2, 0, -1 }, + { 1, -1, -2, -2, -1 }, + + /* 211-220 */ + { 0, 1, -2, 1, -2 }, + { 1, 0, -4, 2, -2 }, + { 0, 1, 2, 2, 1 }, + { 3, 0, 0, 0, 1 }, + { 2, -1, 2, 2, 2 }, + { 0, 1, -2, -4, -2 }, + { 1, 0, -2, -3, -2 }, + { 2, 0, 0, 0, 2 }, + { 1, -1, 0, -2, -2 }, + { 2, 0, -2, 2, -1 }, + + /* 221-230 */ + { 0, 2, -2, 0, -2 }, + { 3, 0, -2, 0, -1 }, + { 2, -1, 2, 0, 1 }, + { 1, 0, -2, -1, -2 }, + { 0, 0, 2, 0, 3 }, + { 2, 0, -4, 0, -2 }, + { 2, 1, 0, -4, 0 }, + { 1, 1, -2, 1, -1 }, + { 0, 2, 2, 0, 2 }, + { 1, -1, 2, -2, 2 }, + + /* 231-240 */ + { 1, -1, 0, -2, 1 }, + { 2, 1, 2, 0, 1 }, + { 1, 0, 2, -4, 2 }, + { 1, 1, -2, 0, -1 }, + { 1, 1, 0, 2, 0 }, + { 1, 0, 0, -3, 0 }, + { 2, 0, 2, -1, 2 }, + { 0, 2, 0, 0, -1 }, + { 2, -1, 0, -2, 0 }, + { 4, 0, 0, 0, 0 }, + + /* 241-250 */ + { 2, 1, -2, -2, -2 }, + { 0, 2, -2, 2, 0 }, + { 1, 0, 2, 1, 1 }, + { 1, 0, -1, 0, -3 }, + { 3, -1, 2, 0, 2 }, + { 2, 0, 2, -2, 0 }, + { 1, -2, 0, 0, 0 }, + { 2, 0, 0, 0, -2 }, + { 1, 0, 0, 4, 0 }, + { 0, 1, 0, 1, 1 }, + + /* 251-260 */ + { 1, 0, 2, 2, 0 }, + { 0, 1, 0, 2, -1 }, + { 0, 1, 0, 1, -1 }, + { 0, 0, 2, -2, 3 }, + { 3, 1, 2, 0, 2 }, + { 1, 1, 2, 1, 2 }, + { 1, 1, -2, 2, -1 }, + { 2, -1, 2, -2, 2 }, + { 1, -2, 2, 0, 2 }, + { 1, 0, 2, -4, 0 }, + + /* 261-270 */ + { 0, 0, 1, 0, 0 }, + { 1, 0, 2, -3, 1 }, + { 1, -2, 0, -2, 0 }, + { 2, 0, 0, 2, -1 }, + { 1, 1, 2, -4, 1 }, + { 4, 0, 2, 0, 1 }, + { 0, 1, 2, 1, 1 }, + { 1, 2, 2, -2, 2 }, + { 2, 0, 2, 1, 2 }, + { 2, 1, 2, -2, 1 }, + + /* 271-280 */ + { 1, 0, 2, -1, 1 }, + { 1, 0, 4, -2, 1 }, + { 1, -1, 2, -2, 1 }, + { 0, 1, 0, -4, 0 }, + { 3, 0, -2, -2, -2 }, + { 0, 0, 4, -4, 2 }, + { 2, 0, -4, -2, -2 }, + { 2, -2, 0, -2, -1 }, + { 1, 0, 2, -2, -1 }, + { 2, 0, -2, -6, -2 }, + + /* 281-290 */ + { 1, 0, -2, 1, -2 }, + { 1, 0, -2, 2, 1 }, + { 1, -1, 0, 2, -1 }, + { 1, 0, -2, 1, 0 }, + { 2, -1, 0, -2, 1 }, + { 1, -1, 0, 2, 1 }, + { 2, 0, -2, -2, 0 }, + { 1, 0, 2, -3, 2 }, + { 0, 0, 0, 4, -1 }, + { 2, -1, 0, 0, 1 }, + + /* 291-300 */ + { 2, 0, 4, -2, 2 }, + { 0, 0, 2, 3, 2 }, + { 0, 1, 4, -2, 2 }, + { 0, 1, -2, 2, 1 }, + { 1, 1, 0, 2, 1 }, + { 1, 0, 0, 4, 1 }, + { 0, 0, 4, 0, 1 }, + { 2, 0, 0, -3, 0 }, + { 1, 0, 0, -1, -2 }, + { 1, -2, -2, -2, -2 }, + + /* 301-310 */ + { 3, 0, 0, 2, 0 }, + { 2, 0, 2, -4, 2 }, + { 1, 1, -2, -4, -1 }, + { 1, 0, -2, -6, -2 }, + { 2, -1, 0, 0, -1 }, + { 2, -1, 0, 2, 0 }, + { 0, 1, 2, -2, -1 }, + { 1, 1, 0, 1, 0 }, + { 1, 2, 0, -2, -1 }, + { 1, 0, 0, 1, -1 }, + + /* 311-320 */ + { 0, 0, 1, 0, 2 }, + { 3, 1, 2, -2, 2 }, + { 1, 0, -4, -2, -2 }, + { 1, 0, 2, 4, 1 }, + { 1, -2, 2, 2, 2 }, + { 1, -1, -2, -4, -2 }, + { 0, 0, 2, -4, 2 }, + { 0, 0, 2, -3, 1 }, + { 2, 1, -2, 0, 0 }, + { 3, 0, -2, -2, -1 }, + + /* 321-330 */ + { 2, 0, 2, 4, 2 }, + { 0, 0, 0, 0, 3 }, + { 2, -1, -2, -2, -2 }, + { 2, 0, 0, -1, 0 }, + { 3, 0, 2, -4, 2 }, + { 2, 1, 2, 2, 2 }, + { 0, 0, 3, 0, 3 }, + { 1, 1, 2, 2, 1 }, + { 2, 1, 0, 0, -1 }, + { 1, 2, 0, -2, 1 }, + + /* 331-340 */ + { 3, 0, 2, 2, 1 }, + { 1, -1, -2, 2, -2 }, + { 1, 1, 0, -1, 0 }, + { 1, 2, 0, 0, 0 }, + { 1, 0, 4, 0, 2 }, + { 1, -1, 2, 4, 2 }, + { 2, 1, 0, 0, 1 }, + { 1, 0, 0, 2, 2 }, + { 1, -1, -2, 2, 0 }, + { 0, 2, -2, -2, -1 }, + + /* 341-350 */ + { 2, 0, -2, 0, 2 }, + { 5, 0, 2, 0, 2 }, + { 3, 0, -2, -6, -2 }, + { 1, -1, 2, -1, 2 }, + { 3, 0, 0, -4, -1 }, + { 1, 0, 0, 1, 1 }, + { 1, 0, -4, 2, -1 }, + { 0, 1, 2, -4, 1 }, + { 1, 2, 2, 0, 2 }, + { 0, 1, 0, -2, -2 }, + + /* 351-360 */ + { 0, 0, 2, -1, 0 }, + { 1, 0, 1, 0, 1 }, + { 0, 2, 0, -2, 1 }, + { 3, 0, 2, 0, 0 }, + { 1, 1, -2, 1, 0 }, + { 2, 1, -2, -4, -1 }, + { 3, -1, 0, 0, 0 }, + { 2, -1, -2, 0, 0 }, + { 4, 0, 2, -2, 1 }, + { 2, 0, -2, 2, 0 }, + + /* 361-370 */ + { 1, 1, 2, -2, 0 }, + { 1, 0, -2, 4, -1 }, + { 1, 0, -2, -2, 1 }, + { 2, 0, 2, -4, 0 }, + { 1, 1, 0, -2, -2 }, + { 1, 1, -2, -2, 0 }, + { 1, 0, 1, -2, 1 }, + { 2, -1, -2, -4, -2 }, + { 3, 0, -2, 0, -2 }, + { 0, 1, -2, -2, 0 }, + + /* 371-380 */ + { 3, 0, 0, -2, -1 }, + { 1, 0, -2, -3, -1 }, + { 0, 1, 0, -4, -1 }, + { 1, -2, 2, -2, 1 }, + { 0, 1, -2, 1, -1 }, + { 1, -1, 0, 0, 2 }, + { 2, 0, 0, 1, 0 }, + { 1, -2, 0, 2, 0 }, + { 1, 2, -2, -2, -1 }, + { 0, 0, 4, -4, 1 }, + + /* 381-390 */ + { 0, 1, 2, 4, 2 }, + { 0, 1, -4, 2, -2 }, + { 3, 0, -2, 0, 0 }, + { 2, -1, 2, 2, 1 }, + { 0, 1, -2, -4, -1 }, + { 4, 0, 2, 2, 2 }, + { 2, 0, -2, -3, -2 }, + { 2, 0, 0, -6, 0 }, + { 1, 0, 2, 0, 3 }, + { 3, 1, 0, 0, 0 }, + + /* 391-400 */ + { 3, 0, 0, -4, 1 }, + { 1, -1, 2, 0, 0 }, + { 1, -1, 0, -4, 0 }, + { 2, 0, -2, 2, -2 }, + { 1, 1, 0, -2, 2 }, + { 4, 0, 0, -2, 0 }, + { 2, 2, 0, -2, 0 }, + { 0, 1, 2, 0, 0 }, + { 1, 1, 0, -4, 1 }, + { 1, 0, 0, -4, -2 }, + + /* 401-410 */ + { 0, 0, 0, 1, 2 }, + { 3, 0, 0, 2, 1 }, + { 1, 1, 0, -4, -1 }, + { 0, 0, 2, 2, -1 }, + { 1, 1, 2, 0, 0 }, + { 1, -1, 2, -4, 1 }, + { 1, 1, 0, 0, 2 }, + { 0, 0, 2, 6, 2 }, + { 4, 0, -2, -2, -1 }, + { 2, 1, 0, -4, -1 }, + + /* 411-420 */ + { 0, 0, 0, 3, 1 }, + { 1, -1, -2, 0, 0 }, + { 0, 0, 2, 1, 0 }, + { 1, 0, 0, 2, -2 }, + { 3, -1, 2, 2, 2 }, + { 3, -1, 2, -2, 2 }, + { 1, 0, 0, -1, 2 }, + { 1, -2, 2, -2, 2 }, + { 0, 1, 0, 2, 2 }, + { 0, 1, -2, -1, -2 }, + + /* 421-430 */ + { 1, 1, -2, 0, 0 }, + { 0, 2, 2, -2, 0 }, + { 3, -1, -2, -1, -2 }, + { 1, 0, 0, -6, 0 }, + { 1, 0, -2, -4, 0 }, + { 2, 1, 0, -4, 1 }, + { 2, 0, 2, 0, -1 }, + { 2, 0, -4, 0, -1 }, + { 0, 0, 3, 0, 2 }, + { 2, 1, -2, -2, -1 }, + + /* 431-440 */ + { 1, -2, 0, 0, 1 }, + { 2, -1, 0, -4, 0 }, + { 0, 0, 0, 3, 0 }, + { 5, 0, 2, -2, 2 }, + { 1, 2, -2, -4, -2 }, + { 1, 0, 4, -4, 2 }, + { 0, 0, 4, -1, 2 }, + { 3, 1, 0, -4, 0 }, + { 3, 0, 0, -6, 0 }, + { 2, 0, 0, 2, 2 }, + + /* 441-450 */ + { 2, -2, 2, 0, 2 }, + { 1, 0, 0, -3, 1 }, + { 1, -2, -2, 0, -2 }, + { 1, -1, -2, -3, -2 }, + { 0, 0, 2, -2, -2 }, + { 2, 0, -2, -4, 0 }, + { 1, 0, -4, 0, 0 }, + { 0, 1, 0, -1, 0 }, + { 4, 0, 0, 0, -1 }, + { 3, 0, 2, -1, 2 }, + + /* 451-460 */ + { 3, -1, 2, 0, 1 }, + { 2, 0, 2, -1, 1 }, + { 1, 2, 2, -2, 1 }, + { 1, 1, 0, 2, -1 }, + { 0, 2, 2, 0, 1 }, + { 3, 1, 2, 0, 1 }, + { 1, 1, 2, 1, 1 }, + { 1, 1, 0, -1, 1 }, + { 1, -2, 0, -2, -1 }, + { 4, 0, 0, -4, 0 }, + + /* 461-470 */ + { 2, 1, 0, 2, 0 }, + { 1, -1, 0, 4, 0 }, + { 0, 1, 0, -2, 2 }, + { 0, 0, 2, 0, -2 }, + { 1, 0, -1, 0, 1 }, + { 3, 0, 2, -2, 0 }, + { 2, 0, 2, 2, 0 }, + { 1, 2, 0, -4, 0 }, + { 1, -1, 0, -3, 0 }, + { 0, 1, 0, 4, 0 }, + + /* 471 - 480 */ + { 0, 1, -2, 0, 0 }, + { 2, 2, 2, -2, 2 }, + { 0, 0, 0, 1, -2 }, + { 0, 2, -2, 0, -1 }, + { 4, 0, 2, -4, 2 }, + { 2, 0, -4, 2, -2 }, + { 2, -1, -2, 0, -2 }, + { 1, 1, 4, -2, 2 }, + { 1, 1, 2, -4, 2 }, + { 1, 0, 2, 3, 2 }, + + /* 481-490 */ + { 1, 0, 0, 4, -1 }, + { 0, 0, 0, 4, 2 }, + { 2, 0, 0, 4, 0 }, + { 1, 1, -2, 2, 0 }, + { 2, 1, 2, 1, 2 }, + { 2, 1, 2, -4, 1 }, + { 2, 0, 2, 1, 1 }, + { 2, 0, -4, -2, -1 }, + { 2, 0, -2, -6, -1 }, + { 2, -1, 2, -1, 2 }, + + /* 491-500 */ + { 1, -2, 2, 0, 1 }, + { 1, -2, 0, -2, 1 }, + { 1, -1, 0, -4, -1 }, + { 0, 2, 2, 2, 2 }, + { 0, 2, -2, -4, -2 }, + { 0, 1, 2, 3, 2 }, + { 0, 1, 0, -4, 1 }, + { 3, 0, 0, -2, 1 }, + { 2, 1, -2, 0, 1 }, + { 2, 0, 4, -2, 1 }, + + /* 501-510 */ + { 2, 0, 0, -3, -1 }, + { 2, -2, 0, -2, 1 }, + { 2, -1, 2, -2, 1 }, + { 1, 0, 0, -6, -1 }, + { 1, -2, 0, 0, -1 }, + { 1, -2, -2, -2, -1 }, + { 0, 1, 4, -2, 1 }, + { 0, 0, 2, 3, 1 }, + { 2, -1, 0, -1, 0 }, + { 1, 3, 0, -2, 0 }, + + /* 511-520 */ + { 0, 3, 0, -2, 0 }, + { 2, -2, 2, -2, 2 }, + { 0, 0, 4, -2, 0 }, + { 4, -1, 2, 0, 2 }, + { 2, 2, -2, -4, -2 }, + { 4, 1, 2, 0, 2 }, + { 4, -1, -2, -2, -2 }, + { 2, 1, 0, -2, -2 }, + { 2, 1, -2, -6, -2 }, + { 2, 0, 0, -1, 1 }, + + /* 521-530 */ + { 2, -1, -2, 2, -1 }, + { 1, 1, -2, 2, -2 }, + { 1, 1, -2, -3, -2 }, + { 1, 0, 3, 0, 3 }, + { 1, 0, -2, 1, 1 }, + { 1, 0, -2, 0, 2 }, + { 1, -1, 2, 1, 2 }, + { 1, -1, 0, 0, -2 }, + { 1, -1, -4, 2, -2 }, + { 0, 3, -2, -2, -2 }, + + /* 531-540 */ + { 0, 1, 0, 4, 1 }, + { 0, 0, 4, 2, 2 }, + { 3, 0, -2, -2, 0 }, + { 2, -2, 0, 0, 0 }, + { 1, 1, 2, -4, 0 }, + { 1, 1, 0, -3, 0 }, + { 1, 0, 2, -3, 0 }, + { 1, -1, 2, -2, 0 }, + { 0, 2, 0, 2, 0 }, + { 0, 0, 2, 4, 0 }, + + /* 541-550 */ + { 1, 0, 1, 0, 0 }, + { 3, 1, 2, -2, 1 }, + { 3, 0, 4, -2, 2 }, + { 3, 0, 2, 1, 2 }, + { 3, 0, 0, 2, -1 }, + { 3, 0, 0, 0, 2 }, + { 3, 0, -2, 2, -1 }, + { 2, 0, 4, -4, 2 }, + { 2, 0, 2, -3, 2 }, + { 2, 0, 0, 4, 1 }, + + /* 551-560 */ + { 2, 0, 0, -3, 1 }, + { 2, 0, -4, 2, -1 }, + { 2, 0, -2, -2, 1 }, + { 2, -2, 2, 2, 2 }, + { 2, -2, 0, -2, -2 }, + { 2, -1, 0, 2, 1 }, + { 2, -1, 0, 2, -1 }, + { 1, 1, 2, 4, 2 }, + { 1, 1, 0, 1, 1 }, + { 1, 1, 0, 1, -1 }, + + /* 561-570 */ + { 1, 1, -2, -6, -2 }, + { 1, 0, 0, -3, -1 }, + { 1, 0, -4, -2, -1 }, + { 1, 0, -2, -6, -1 }, + { 1, -2, 2, 2, 1 }, + { 1, -2, -2, 2, -1 }, + { 1, -1, -2, -4, -1 }, + { 0, 2, 0, 0, 2 }, + { 0, 1, 2, -4, 2 }, + { 0, 1, -2, 4, -1 }, + + /* 571-580 */ + { 5, 0, 0, 0, 0 }, + { 3, 0, 0, -3, 0 }, + { 2, 2, 0, -4, 0 }, + { 1, -1, 2, 2, 0 }, + { 0, 1, 0, 3, 0 }, + { 4, 0, -2, 0, -1 }, + { 3, 0, -2, -6, -1 }, + { 3, 0, -2, -1, -1 }, + { 2, 1, 2, 2, 1 }, + { 2, 1, 0, 2, 1 }, + + /* 581-590 */ + { 2, 0, 2, 4, 1 }, + { 2, 0, 2, -6, 1 }, + { 2, 0, 2, -2, -1 }, + { 2, 0, 0, -6, -1 }, + { 2, -1, -2, -2, -1 }, + { 1, 2, 2, 0, 1 }, + { 1, 2, 0, 0, 1 }, + { 1, 0, 4, 0, 1 }, + { 1, 0, 2, -6, 1 }, + { 1, 0, 2, -4, -1 }, + + /* 591-600 */ + { 1, 0, -1, -2, -1 }, + { 1, -1, 2, 4, 1 }, + { 1, -1, 2, -3, 1 }, + { 1, -1, 0, 4, 1 }, + { 1, -1, -2, 1, -1 }, + { 0, 1, 2, -2, 3 }, + { 3, 0, 0, -2, 0 }, + { 1, 0, 1, -2, 0 }, + { 0, 2, 0, -4, 0 }, + { 0, 0, 2, -4, 0 }, + + /* 601-610 */ + { 0, 0, 1, -1, 0 }, + { 0, 0, 0, 6, 0 }, + { 0, 2, 0, 0, -2 }, + { 0, 1, -2, 2, -3 }, + { 4, 0, 0, 2, 0 }, + { 3, 0, 0, -1, 0 }, + { 3, -1, 0, 2, 0 }, + { 2, 1, 0, 1, 0 }, + { 2, 1, 0, -6, 0 }, + { 2, -1, 2, 0, 0 }, + + /* 611-620 */ + { 1, 0, 2, -1, 0 }, + { 1, -1, 0, 1, 0 }, + { 1, -1, -2, -2, 0 }, + { 0, 1, 2, 2, 0 }, + { 0, 0, 2, -3, 0 }, + { 2, 2, 0, -2, -1 }, + { 2, -1, -2, 0, 1 }, + { 1, 2, 2, -4, 1 }, + { 0, 1, 4, -4, 2 }, + { 0, 0, 0, 3, 2 }, + + /* 621-630 */ + { 5, 0, 2, 0, 1 }, + { 4, 1, 2, -2, 2 }, + { 4, 0, -2, -2, 0 }, + { 3, 1, 2, 2, 2 }, + { 3, 1, 0, -2, 0 }, + { 3, 1, -2, -6, -2 }, + { 3, 0, 0, 0, -2 }, + { 3, 0, -2, -4, -2 }, + { 3, -1, 0, -3, 0 }, + { 3, -1, 0, -2, 0 }, + + /* 631-640 */ + { 2, 1, 2, 0, 0 }, + { 2, 1, 2, -4, 2 }, + { 2, 1, 2, -2, 0 }, + { 2, 1, 0, -3, 0 }, + { 2, 1, -2, 0, -2 }, + { 2, 0, 0, -4, 2 }, + { 2, 0, 0, -4, -2 }, + { 2, 0, -2, -5, -2 }, + { 2, -1, 2, 4, 2 }, + { 2, -1, 0, -2, 2 }, + + /* 641-650 */ + { 1, 3, -2, -2, -2 }, + { 1, 1, 0, 0, -2 }, + { 1, 1, 0, -6, 0 }, + { 1, 1, -2, 1, -2 }, + { 1, 1, -2, -1, -2 }, + { 1, 0, 2, 1, 0 }, + { 1, 0, 0, 3, 0 }, + { 1, 0, 0, -4, 2 }, + { 1, 0, -2, 4, -2 }, + { 1, -2, 0, -1, 0 }, + + /* 651-NFLS */ + { 0, 1, -4, 2, -1 }, + { 1, 0, -2, 0, -3 }, + { 0, 0, 4, -4, 4 } + }; + +/* Number of frequencies: luni-solar */ + static const int NFLS = (int) (sizeof mfals / sizeof (int) / 5); + +/* Fundamental-argument multipliers: planetary terms */ + static const int mfapl[][14] = { + + /* 1-10 */ + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -2, 5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, -8, 12, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 8,-16, 4, 5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -1, 2, 0, 0, 0, 0, 0 }, + + /* 11-20 */ + { 0, 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 2, -5, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -1, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -8, 3, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 6, -8, 3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 0 }, + + /* 21-30 */ + { 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 1, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 1, -1, 1, 0, 0, 0, -2, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, -1, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + + /* 31-40 */ + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 1 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, -1, 0, 0, 0 }, + + /* 41-50 */ + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, -2, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 2 }, + { 1, 0, 0, 0, 0, 0,-18, 16, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2 }, + + /* 51-60 */ + { 0, 0, 1, -1, 1, 0, -5, 7, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0,-10, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, 0, -5, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -1, 0, 0, 0, 2 }, + { 1, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1 }, + { 1, 0, -2, 0, -2, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 2, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + + /* 61-70 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 8,-16, 4, 5, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, 0, 3, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-11, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 8,-16, 4, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0 }, + + /* 71-80 */ + { 0, 0, 0, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 8,-15, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -2, 0, 0, 0, 2 }, + { 0, 0, 1, -1, 1, 0, 0, -5, 8, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 0 }, + + /* 81-90 */ + { 2, 0, 0, -2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, -1 }, + { 2, 0, 0, -2, 0, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 8,-13, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, -2, 5, 0, 0, 0 }, + { 1, 0, 0, -1, 0, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2 }, + { 1, 0, 0, 0, -1, 0,-18, 16, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, -5, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + + /* 91-100 */ + { 1, 0, 0, -2, 0, 0, 19,-21, 3, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -8, 13, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7, -9, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2 }, + { 1, 0, 0, 0, 1, 0,-18, 16, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-16, 4, 5, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 3, -7, 0, 0, 0, 0, 0, -2 }, + + /* 101-110 */ + { 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 }, + { 2, 0, 0, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, -1, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2 }, + + /* 111-120 */ + { 0, 0, 0, 0, 1, 0, 0, 1, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2 }, + { 0, 0, 2, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, -6, 8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + + /* 121-130 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-10, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, -2 }, + { 1, 0, 0, -1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + + /* 131-140 */ + { 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, -3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 1, 0, 2, -3, 0, 0, 0, 0, 0, 0 }, + + /* 141-150 */ + { 1, 0, 0, -1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 9,-11, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 8,-15, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -4, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, -1, 0, 0, 0, 2 }, + + /* 151-160 */ + { 1, 0, 0, -1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -4, 10, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, -2 }, + { 0, 0, 2, -2, 1, 0, -4, 4, 0, 0, 0, 0, 0, 0 }, + + /* 161-170 */ + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 2 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 0, 2, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -9, 13, 0, 0, 0, 0, 0 }, + { 2, 0, 2, 0, 2, 0, 0, 2, 0, -3, 0, 0, 0, 0 }, + + /* 171-180 */ + { 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, 0, 2, 0, 0, 0 }, + { 1, 0, 0, -1, -1, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1 }, + { 1, 0, 2, 0, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 1, 0, -2, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -2, 4, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0 }, + + /* 181-190 */ + { 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -8, 3, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 6,-10, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 7, -8, 3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 1, 0, -3, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, -5, 7, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 1 }, + + /* 191-200 */ + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7,-10, 0, 0, 0, 0, 0, -2 }, + { 1, 0, 0, -2, 0, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, -5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, 1, 0, 0, -9, 15, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -1, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0 }, + + /* 201-210 */ + { 0, 0, 0, 0, 0, 0, 0, 1, -4, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -1, 0, 0, 2 }, + { 2, 0, 0, -2, 1, 0, -6, 8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, 1, 0, 3, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 8,-14, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + + /* 211-220 */ + { 0, 0, 0, 0, 1, 0, 0, 8,-15, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2 }, + { 2, 0, -1, -1, 0, 0, 0, 3, -7, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0 }, + + /* 221-230 */ + { 2, 0, 0, -2, 0, 0, 0, -6, 8, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -5, 6, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -9, 4, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, -2 }, + + /* 231-240 */ + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -4, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1 }, + { 0, 0, 0, 0, 0, 0, 7,-11, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 3, -5, 4, 0, 0, 0, 0, 2 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, -1, 1, 0, 0, 0 }, + { 2, 0, 0, 0, 0, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 8,-15, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 2, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, -1 }, + + /* 241-250 */ + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 2, -4, 0, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 3, -5, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -3, 0, 0, 0, 2 }, + { 0, 0, 2, -2, 2, 0, -8, 11, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, 0, 0 }, + + /* 251-260 */ + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 7, -9, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, -2, -2, -2, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 1 }, + + /* 261-270 */ + { 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, -5, 0, 0, 2 }, + { 2, 0, 0, -2, -1, 0, 0, -2, 0, 0, 5, 0, 0, 0 }, + { 2, 0, 0, -2, -1, 0, -6, 8, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8, -8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, -5, 0, 0, 2 }, + { 0, 0, 0, 0, 1, 0, 3, -7, 4, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + + /* 271-280 */ + { 0, 0, 1, -1, 0, 0, 0, -1, 0, -2, 5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-15, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2 }, + { 1, 0, 0, -1, 0, 0, 0, -3, 4, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -3, 7, -4, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, 0, -2, 0, 0, 0, 2 }, + + /* 281-290 */ + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 2, -2, 2, 0, -5, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-11, 0, 0, 0, 0, -2 }, + + /* 291-300 */ + { 0, 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 9,-12, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 1, -1, 0, 0, -8, 12, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, -1 }, + + /* 301-310 */ + { 0, 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, -1, 0, 0, 0, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -5, 0, 0, 0, 0, -2 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 3, -1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 2 }, + + /* 311-320 */ + { 0, 0, 0, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 3, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 2, -4, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2 }, + { 0, 0, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + + /* 321-330 */ + { 0, 0, 2, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, 0, -3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, + { 2, 0, -1, -1, -1, 0, 0, -1, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 5,-10, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 8,-13, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 2, -2, 1, -1, 0, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 2, 0, 0 }, + + /* 331-340 */ + { 0, 0, 0, 0, 1, 0, 3, -5, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -8, 11, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -2, 0, 0, 2, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 2, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 2, -6, 0, 0, 0, 0, 0, -2 }, + + /* 341-350 */ + { 0, 0, 0, 0, 0, 0, 0, 8,-15, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -2, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 7,-13, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 2 }, + { 0, 0, 2, -2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8, -8, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 8,-10, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 1 }, + + /* 351-360 */ + { 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -4, 0, 0, 0, 0 }, + { 2, 0, 0, -2, -1, 0, 0, -5, 6, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 0, 0, -2 }, + { 2, 0, -1, -1, -1, 0, 0, 3, -7, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0 }, + + /* 361-370 */ + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 4, -3, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-11, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 1, 0, 0, -6, 8, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 1, 5, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 6, -5, 0, 0, 0, 0, 2 }, + { 1, 0, -2, -2, -2, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, 0, 0, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1 }, + + /* 371-380 */ + { 0, 0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, -2, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -2, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, -6, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 3, -5, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 7,-13, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 2 }, + + /* 381-390 */ + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -8, 15, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, -2, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 2, 0, -1, -1, -1, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 1, 0, 2, -2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 1, 0, -1, 1, -1, 0,-18, 17, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 2, -2, -1, 0, -5, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + + /* 391-400 */ + { 0, 0, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-16, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2 }, + { 0, 0, 0, 0, 2, 0, 0, -1, 2, 0, 0, 0, 0, 0 }, + { 2, 0, -1, -1, -2, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6,-10, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, -2, 4, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2 }, + { 2, 0, 0, -2, -1, 0, 0, -2, 0, 4, -5, 0, 0, 0 }, + + /* 401-410 */ + { 2, 0, 0, -2, -1, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 2, 0, -1, -1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -1, -1, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + { 1, 0, -1, -1, -1, 0, 20,-20, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 1, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -2, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 5, -8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, + + /* 411-420 */ + { 0, 0, 0, 0, 0, 0, 9,-11, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, -2, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, -2, 5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0 }, + + /* 421-430 */ + { 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -6, 0, 0, 0, 0, -2 }, + { 1, 0, 0, -2, 0, 0, 20,-21, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-12, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 8,-12, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 9,-17, 0, 0, 0, 0, 0 }, + + /* 431-440 */ + { 0, 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 1, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -7, 0, 0, 0, 0, -2 }, + { 1, 0, 0, -1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0 }, + { 1, 0, -2, 0, -2, 0,-10, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -9, 17, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -4, 0, 0, 0, 0, 0, -2 }, + { 1, 0, -2, -2, -2, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 1, 0, -1, 1, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + + /* 441-450 */ + { 0, 0, 2, -2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, 0, -1, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, -5, 7, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5,-10, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, -4, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, -5, 0, 0, 0, -2 }, + + /* 451-460 */ + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -5, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 1 }, + { 1, 0, 0, -2, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -7, 4, 0, 0, 0, 0, 0 }, + { 2, 0, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, -1, 0, 0, -1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 1, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-10, 0, 0, 0, 0, -2 }, + + /* 461-470 */ + { 1, 0, 0, -1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -3, 0, 3, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, -5, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 1, -3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -4, 6, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, -1, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0 }, + + /* 471-480 */ + { 0, 0, 0, 0, 1, 0, 3, -4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7,-10, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 3, -8, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 7, -9, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 2 }, + + /* 481-490 */ + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -8, 3, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, -1 }, + { 2, 0, 0, -2, -1, 0, 0, -6, 8, 0, 0, 0, 0, 0 }, + { 2, 0, -1, -1, 1, 0, 0, 3, -7, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -7, 9, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, -1 }, + + /* 491-500 */ + { 0, 0, 1, -1, 2, 0, -8, 12, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 1, 0, 0, -5, 6, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, -1, 0, 0, -2, 0, 3, -1, 0, 0, 0 }, + { 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 1, 0, 0, -2, -1, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + + /* 501-510 */ + { 1, 0, 0, -1, -1, 0, 0, -3, 4, 0, 0, 0, 0, 0 }, + { 1, 0, -1, 0, -1, 0, -3, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -4, 4, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, -8, 11, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, 0, 0, -9, 13, 0, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, 1, -4, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, 0, -1, 0, 1, -3, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 7,-13, 0, 0, 0, 0, 0 }, + + /* 511-520 */ + { 0, 0, 0, 0, 1, 0, 0, 2, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 7,-11, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 1 }, + + /* 521-530 */ + { 0, 0, 0, 0, 0, 0, 1, -4, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 9,-17, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -8, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + + /* 531-540 */ + { 2, 0, 0, -2, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 17,-16, 0, -2, 0, 0, 0, 0 }, + { 1, 0, 0, -1, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -4, 0, 0, 0, 0 }, + + /* 541-550 */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2 }, + { 2, 0, 0, -2, 0, 0, 0, -4, 4, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 2, 2, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + + /* 551-560 */ + { 1, 0, 0, -2, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, 0, -4, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, -4, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 2, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0 }, + + /* 561-570 */ + { 0, 0, 0, 0, 0, 0, 8, -9, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0 }, + { 2, 0, -2, -2, -2, 0, 0, -2, 0, 2, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 1, 0,-10, 3, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, -1, 0,-10, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, 2, -3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, 2, -2, 0, 0, 0, 0, 0, 0 }, + + /* 571-580 */ + { 0, 0, 2, 0, 2, 0, -2, 3, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 0, 2, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0 }, + { 2, 0, 2, -2, 2, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 2, 0, 1, -3, 1, 0, -6, 7, 0, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 2, -5, 0, 0, 0, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 5, -5, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 1, 5, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 0, 5, 0, 0, 0 }, + + /* 581-590 */ + { 2, 0, 0, -2, 0, 0, 0, -2, 0, 0, 2, 0, 0, 0 }, + { 2, 0, 0, -2, 0, 0, -4, 4, 0, 0, 0, 0, 0, 0 }, + { 2, 0, -2, 0, -2, 0, 0, 5, -9, 0, 0, 0, 0, 0 }, + { 2, 0, -1, -1, 0, 0, 0, -1, 0, 3, 0, 0, 0, 0 }, + { 1, 0, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0 }, + { 1, 0, 2, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0 }, + { 1, 0, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 2, -2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + + /* 591-600 */ + { 1, 0, 0, 0, 0, 0, 0, -2, 0, 3, 0, 0, 0, 0 }, + { 1, 0, 0, -2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0 }, + { 1, 0, -2, -2, -2, 0, 0, 1, 0, -1, 0, 0, 0, 0 }, + { 1, 0, -1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 1, 0, -1, -1, 0, 0, 0, 8,-15, 0, 0, 0, 0, 0 }, + { 0, 0, 2, 2, 2, 0, 0, 2, 0, -2, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0, -2, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 1, 0, 0,-10, 15, 0, 0, 0, 0, 0 }, + { 0, 0, 2, -2, 0, -1, 0, 2, 0, 0, 0, 0, 0, 0 }, + + /* 601-610 */ + { 0, 0, 1, -1, 2, 0, 0, -1, 0, 0, -1, 0, 0, 0 }, + { 0, 0, 1, -1, 2, 0, -3, 4, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -4, 6, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, 0, -1, 0, 0, -2, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 1, -1, -1, 0, -5, 7, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0 }, + + /* 611-620 */ + { 0, 0, 0, 2, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 2, 0, -3, 5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 9,-13, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 8,-14, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 8,-11, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, -2 }, + + /* 621-630 */ + { 0, 0, 0, 0, 0, 0, 5, -6, -4, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 4, -8, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 3, -3, 0, 2, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 7,-12, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, -2 }, + + /* 631-640 */ + { 0, 0, 0, 0, 0, 0, 0, 6, -8, 1, 5, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 6,-10, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5, 0, -4, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, -1 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 5,-16, 4, 5, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 5,-13, 0, 0, 0, 0, -2 }, + + /* 641-650 */ + { 0, 0, 0, 0, 0, 0, 0, 3, 0, -5, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -9, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 3, -7, 0, 0, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -3, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 2, -8, 1, 5, 0, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, -5, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -3, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 5, 0, 0, 0 }, + + /* 651-NFPL */ + { 0, 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -6, 3, 0, -2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } + }; + +/* Number of frequencies: planetary */ + static const int NFPL = (int) (sizeof mfapl / sizeof (int) / 14); + +/* Pointers into amplitudes array, one pointer per frequency */ + static const int nc[] = { + + /* 1-100 */ + 1, 21, 37, 51, 65, 79, 91, 103, 115, 127, + 139, 151, 163, 172, 184, 196, 207, 219, 231, 240, + 252, 261, 273, 285, 297, 309, 318, 327, 339, 351, + 363, 372, 384, 396, 405, 415, 423, 435, 444, 452, + 460, 467, 474, 482, 490, 498, 506, 513, 521, 528, + 536, 543, 551, 559, 566, 574, 582, 590, 597, 605, + 613, 620, 628, 636, 644, 651, 658, 666, 674, 680, + 687, 695, 702, 710, 717, 725, 732, 739, 746, 753, + 760, 767, 774, 782, 790, 798, 805, 812, 819, 826, + 833, 840, 846, 853, 860, 867, 874, 881, 888, 895, + + /* 101-200 */ + 901, 908, 914, 921, 928, 934, 941, 948, 955, 962, + 969, 976, 982, 989, 996, 1003, 1010, 1017, 1024, 1031, + 1037, 1043, 1050, 1057, 1064, 1071, 1078, 1084, 1091, 1098, + 1104, 1112, 1118, 1124, 1131, 1138, 1145, 1151, 1157, 1164, + 1171, 1178, 1185, 1192, 1199, 1205, 1212, 1218, 1226, 1232, + 1239, 1245, 1252, 1259, 1266, 1272, 1278, 1284, 1292, 1298, + 1304, 1310, 1316, 1323, 1329, 1335, 1341, 1347, 1353, 1359, + 1365, 1371, 1377, 1383, 1389, 1396, 1402, 1408, 1414, 1420, + 1426, 1434, 1440, 1446, 1452, 1459, 1465, 1471, 1477, 1482, + 1488, 1493, 1499, 1504, 1509, 1514, 1520, 1527, 1532, 1538, + + /* 201-300 */ + 1543, 1548, 1553, 1558, 1564, 1569, 1574, 1579, 1584, 1589, + 1594, 1596, 1598, 1600, 1602, 1605, 1608, 1610, 1612, 1617, + 1619, 1623, 1625, 1627, 1629, 1632, 1634, 1640, 1642, 1644, + 1646, 1648, 1650, 1652, 1654, 1658, 1660, 1662, 1664, 1668, + 1670, 1672, 1673, 1675, 1679, 1681, 1683, 1684, 1686, 1688, + 1690, 1693, 1695, 1697, 1701, 1703, 1705, 1707, 1709, 1711, + 1712, 1715, 1717, 1721, 1723, 1725, 1727, 1729, 1731, 1733, + 1735, 1737, 1739, 1741, 1743, 1745, 1747, 1749, 1751, 1753, + 1755, 1757, 1759, 1761, 1762, 1764, 1766, 1768, 1769, 1771, + 1773, 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1788, 1790, + + /* 301-400 */ + 1792, 1794, 1796, 1798, 1800, 1802, 1804, 1806, 1807, 1809, + 1811, 1815, 1817, 1819, 1821, 1823, 1825, 1827, 1829, 1831, + 1833, 1835, 1837, 1839, 1840, 1842, 1844, 1848, 1850, 1852, + 1854, 1856, 1858, 1859, 1860, 1862, 1864, 1866, 1868, 1869, + 1871, 1873, 1875, 1877, 1879, 1881, 1883, 1885, 1887, 1889, + 1891, 1892, 1896, 1898, 1900, 1901, 1903, 1905, 1907, 1909, + 1910, 1911, 1913, 1915, 1919, 1921, 1923, 1927, 1929, 1931, + 1933, 1935, 1937, 1939, 1943, 1945, 1947, 1948, 1949, 1951, + 1953, 1955, 1957, 1958, 1960, 1962, 1964, 1966, 1968, 1970, + 1971, 1973, 1974, 1975, 1977, 1979, 1980, 1981, 1982, 1984, + + /* 401-500 */ + 1986, 1988, 1990, 1992, 1994, 1995, 1997, 1999, 2001, 2003, + 2005, 2007, 2008, 2009, 2011, 2013, 2015, 2017, 2019, 2021, + 2023, 2024, 2025, 2027, 2029, 2031, 2033, 2035, 2037, 2041, + 2043, 2045, 2046, 2047, 2049, 2051, 2053, 2055, 2056, 2057, + 2059, 2061, 2063, 2065, 2067, 2069, 2070, 2071, 2072, 2074, + 2076, 2078, 2080, 2082, 2084, 2086, 2088, 2090, 2092, 2094, + 2095, 2096, 2097, 2099, 2101, 2105, 2106, 2107, 2108, 2109, + 2110, 2111, 2113, 2115, 2119, 2121, 2123, 2125, 2127, 2129, + 2131, 2133, 2135, 2136, 2137, 2139, 2141, 2143, 2145, 2147, + 2149, 2151, 2153, 2155, 2157, 2159, 2161, 2163, 2165, 2167, + + /* 501-600 */ + 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183, 2185, 2186, + 2187, 2188, 2192, 2193, 2195, 2197, 2199, 2201, 2203, 2205, + 2207, 2209, 2211, 2213, 2217, 2219, 2221, 2223, 2225, 2227, + 2229, 2231, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, + 2241, 2244, 2246, 2248, 2250, 2252, 2254, 2256, 2258, 2260, + 2262, 2264, 2266, 2268, 2270, 2272, 2274, 2276, 2278, 2280, + 2282, 2284, 2286, 2288, 2290, 2292, 2294, 2296, 2298, 2300, + 2302, 2303, 2304, 2305, 2306, 2307, 2309, 2311, 2313, 2315, + 2317, 2319, 2321, 2323, 2325, 2327, 2329, 2331, 2333, 2335, + 2337, 2341, 2343, 2345, 2347, 2349, 2351, 2352, 2355, 2356, + + /* 601-700 */ + 2357, 2358, 2359, 2361, 2363, 2364, 2365, 2366, 2367, 2368, + 2369, 2370, 2371, 2372, 2373, 2374, 2376, 2378, 2380, 2382, + 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, + 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, + 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, + 2414, 2415, 2417, 2418, 2430, 2438, 2445, 2453, 2460, 2468, + 2474, 2480, 2488, 2496, 2504, 2512, 2520, 2527, 2535, 2543, + 2550, 2558, 2566, 2574, 2580, 2588, 2596, 2604, 2612, 2619, + 2627, 2634, 2642, 2648, 2656, 2664, 2671, 2679, 2685, 2693, + 2701, 2709, 2717, 2725, 2733, 2739, 2747, 2753, 2761, 2769, + + /* 701-800 */ + 2777, 2785, 2793, 2801, 2809, 2817, 2825, 2833, 2841, 2848, + 2856, 2864, 2872, 2878, 2884, 2892, 2898, 2906, 2914, 2922, + 2930, 2938, 2944, 2952, 2958, 2966, 2974, 2982, 2988, 2996, + 3001, 3009, 3017, 3025, 3032, 3039, 3045, 3052, 3059, 3067, + 3069, 3076, 3083, 3090, 3098, 3105, 3109, 3111, 3113, 3120, + 3124, 3128, 3132, 3136, 3140, 3144, 3146, 3150, 3158, 3161, + 3165, 3166, 3168, 3172, 3176, 3180, 3182, 3185, 3189, 3193, + 3194, 3197, 3200, 3204, 3208, 3212, 3216, 3219, 3221, 3222, + 3226, 3230, 3234, 3238, 3242, 3243, 3247, 3251, 3254, 3258, + 3262, 3266, 3270, 3274, 3275, 3279, 3283, 3287, 3289, 3293, + + /* 801-900 */ + 3296, 3300, 3303, 3307, 3311, 3315, 3319, 3321, 3324, 3327, + 3330, 3334, 3338, 3340, 3342, 3346, 3350, 3354, 3358, 3361, + 3365, 3369, 3373, 3377, 3381, 3385, 3389, 3393, 3394, 3398, + 3402, 3406, 3410, 3413, 3417, 3421, 3425, 3429, 3433, 3435, + 3439, 3443, 3446, 3450, 3453, 3457, 3458, 3461, 3464, 3468, + 3472, 3476, 3478, 3481, 3485, 3489, 3493, 3497, 3501, 3505, + 3507, 3511, 3514, 3517, 3521, 3524, 3525, 3527, 3529, 3533, + 3536, 3540, 3541, 3545, 3548, 3551, 3555, 3559, 3563, 3567, + 3569, 3570, 3574, 3576, 3578, 3582, 3586, 3590, 3593, 3596, + 3600, 3604, 3608, 3612, 3616, 3620, 3623, 3626, 3630, 3632, + + /* 901-1000 */ + 3636, 3640, 3643, 3646, 3648, 3652, 3656, 3660, 3664, 3667, + 3669, 3671, 3675, 3679, 3683, 3687, 3689, 3693, 3694, 3695, + 3699, 3703, 3705, 3707, 3710, 3713, 3717, 3721, 3725, 3729, + 3733, 3736, 3740, 3744, 3748, 3752, 3754, 3757, 3759, 3763, + 3767, 3770, 3773, 3777, 3779, 3783, 3786, 3790, 3794, 3798, + 3801, 3805, 3809, 3813, 3817, 3821, 3825, 3827, 3831, 3835, + 3836, 3837, 3840, 3844, 3848, 3852, 3856, 3859, 3863, 3867, + 3869, 3871, 3875, 3879, 3883, 3887, 3890, 3894, 3898, 3901, + 3905, 3909, 3913, 3917, 3921, 3922, 3923, 3924, 3926, 3930, + 3932, 3936, 3938, 3940, 3944, 3948, 3952, 3956, 3959, 3963, + + /* 1001-1100 */ + 3965, 3969, 3973, 3977, 3979, 3981, 3982, 3986, 3989, 3993, + 3997, 4001, 4004, 4006, 4009, 4012, 4016, 4020, 4024, 4026, + 4028, 4032, 4036, 4040, 4044, 4046, 4050, 4054, 4058, 4060, + 4062, 4063, 4064, 4068, 4071, 4075, 4077, 4081, 4083, 4087, + 4089, 4091, 4095, 4099, 4101, 4103, 4105, 4107, 4111, 4115, + 4119, 4123, 4127, 4129, 4131, 4135, 4139, 4141, 4143, 4145, + 4149, 4153, 4157, 4161, 4165, 4169, 4173, 4177, 4180, 4183, + 4187, 4191, 4195, 4198, 4201, 4205, 4209, 4212, 4213, 4216, + 4217, 4221, 4223, 4226, 4230, 4234, 4236, 4240, 4244, 4248, + 4252, 4256, 4258, 4262, 4264, 4266, 4268, 4270, 4272, 4276, + + /* 1101-1200 */ + 4279, 4283, 4285, 4287, 4289, 4293, 4295, 4299, 4300, 4301, + 4305, 4309, 4313, 4317, 4319, 4323, 4325, 4329, 4331, 4333, + 4335, 4337, 4341, 4345, 4349, 4351, 4353, 4357, 4361, 4365, + 4367, 4369, 4373, 4377, 4381, 4383, 4387, 4389, 4391, 4395, + 4399, 4403, 4407, 4411, 4413, 4414, 4415, 4418, 4419, 4421, + 4423, 4427, 4429, 4431, 4433, 4435, 4437, 4439, 4443, 4446, + 4450, 4452, 4456, 4458, 4460, 4462, 4466, 4469, 4473, 4477, + 4481, 4483, 4487, 4489, 4491, 4493, 4497, 4499, 4501, 4504, + 4506, 4510, 4513, 4514, 4515, 4518, 4521, 4522, 4525, 4526, + 4527, 4530, 4533, 4534, 4537, 4541, 4542, 4543, 4544, 4545, + + /* 1201-1300 */ + 4546, 4547, 4550, 4553, 4554, 4555, 4558, 4561, 4564, 4567, + 4568, 4571, 4574, 4575, 4578, 4581, 4582, 4585, 4586, 4588, + 4590, 4592, 4596, 4598, 4602, 4604, 4608, 4612, 4613, 4616, + 4619, 4622, 4623, 4624, 4625, 4626, 4629, 4632, 4633, 4636, + 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4648, 4649, 4650, + 4651, 4652, 4653, 4656, 4657, 4660, 4661, 4664, 4667, 4670, + 4671, 4674, 4675, 4676, 4677, 4678, 4681, 4682, 4683, 4684, + 4687, 4688, 4689, 4692, 4693, 4696, 4697, 4700, 4701, 4702, + 4703, 4704, 4707, 4708, 4711, 4712, 4715, 4716, 4717, 4718, + 4719, 4720, 4721, 4722, 4723, 4726, 4729, 4730, 4733, 4736, + + /* 1301-(NFLS+NFPL) */ + 4737, 4740, 4741, 4742, 4745, 4746, 4749, 4752, 4753 + }; + +/* Amplitude coefficients (microarcsec); indexed using the nc array. */ + static const double a[] = { + + /* 1-105 */ + -6844318.44, 9205236.26,1328.67,1538.18, 205833.11, + 153041.79, -3309.73, 853.32,2037.98, -2301.27, + 81.46, 120.56, -20.39, -15.22, 1.73, -1.61, -0.10, 0.11, + -0.02, -0.02, -523908.04, 573033.42,-544.75,-458.66, + 12814.01, 11714.49, 198.97,-290.91, 155.74,-143.27, + -2.75, -1.03, -1.27, -1.16, 0.00, -0.01, -90552.22, + 97846.69, 111.23, 137.41,2187.91,2024.68, 41.44, -51.26, + 26.92, -24.46, -0.46, -0.28, -0.22, -0.20, 82168.76, + -89618.24, -27.64, -29.05, -2004.36, -1837.32, + -36.07, 48.00, -24.43, 22.41, 0.47, 0.24, 0.20, 0.18, + 58707.02,7387.02, 470.05,-192.40, 164.33, -1312.21, + -179.73, -28.93, -17.36, -1.83, -0.50, 3.57, 0.00, 0.13, + -20557.78, 22438.42, -20.84, -17.40, 501.82, 459.68, + 59.20, -67.30, 6.08, -5.61, -1.36, -1.19, 28288.28, + -674.99, -34.69, 35.80, -15.07,-632.54, -11.19, 0.78, -8.41, + 0.17, 0.01, 0.07, -15406.85, 20069.50, 15.12, + + /* 106-219 */ + 31.80, 448.76, 344.50, -5.77, 1.41, 4.59, -5.02, 0.17, + 0.24, -11991.74, 12902.66, 32.46, 36.70, 288.49, + 268.14, 5.70, -7.06, 3.57, -3.23, -0.06, -0.04, + -8584.95, -9592.72, 4.42, -13.20,-214.50, 192.06, + 23.87, 29.83, 2.54, 2.40, 0.60, -0.48,5095.50, + -6918.22, 7.19, 3.92,-154.91,-113.94, 2.86, -1.04, + -1.52, 1.73, -0.07, -0.10, -4910.93, -5331.13, + 0.76, 0.40,-119.21, 109.81, 2.16, 3.20, 1.46, 1.33, + 0.04, -0.02, -6245.02,-123.48, -6.68, -8.20, -2.76, + 139.64, 2.71, 0.15, 1.86,2511.85, -3323.89, 1.07, + -0.90, -74.33, -56.17, 1.16, -0.01, -0.75, 0.83, -0.02, + -0.04,2307.58,3143.98, -7.52, 7.50, 70.31, -51.60, 1.46, + 0.16, -0.69, -0.79, 0.02, -0.05,2372.58,2554.51, 5.93, + -6.60, 57.12, -53.05, -0.96, -1.24, -0.71, -0.64, -0.01, + -2053.16,2636.13, 5.13, 7.80, 58.94, 45.91, -0.42, + -0.12, 0.61, -0.66, 0.02, 0.03, -1825.49, + + /* 220-339 */ + -2423.59, 1.23, -2.00, -54.19, 40.82, -1.07, -1.02, + 0.54, 0.61, -0.04, 0.04,2521.07,-122.28, -5.97, 2.90, + -2.73, -56.37, -0.82, 0.13, -0.75, -1534.09,1645.01, + 6.29, 6.80, 36.78, 34.30, 0.92, -1.25, 0.46, -0.41, + -0.02, -0.01,1898.27, 47.70, -0.72, 2.50, 1.07, -42.45, + -0.94, 0.02, -0.56, -1292.02, -1387.00, 0.00, + 0.00, -31.01, 28.89, 0.68, 0.00, 0.38, 0.35, -0.01, + -0.01, -1234.96,1323.81, 5.21, 5.90, 29.60, 27.61, + 0.74, -1.22, 0.37, -0.33, -0.02, -0.01,1137.48, + -1233.89, -0.04, -0.30, -27.59, -25.43, -0.61, 1.00, + -0.34, 0.31, 0.01, 0.01,-813.13, -1075.60, 0.40, + 0.30, -24.05, 18.18, -0.40, -0.01, 0.24, 0.27, -0.01, + 0.01,1163.22, -60.90, -2.94, 1.30, -1.36, -26.01, -0.58, + 0.07, -0.35,1029.70, -55.55, -2.63, 1.10, -1.25, -23.02, + -0.52, 0.06, -0.31,-556.26, 852.85, 3.16, -4.48, 19.06, + 12.44, -0.81, -0.27, 0.17, -0.21, 0.00, 0.02,-603.52, + + /* 340-467 */ + -800.34, 0.44, 0.10, -17.90, 13.49, -0.08, -0.01, 0.18, + 0.20, -0.01, 0.01,-628.24, 684.99, -0.64, -0.50, 15.32, + 14.05, 3.18, -4.19, 0.19, -0.17, -0.09, -0.07,-866.48, + -16.26, 0.52, -1.30, -0.36, 19.37, 0.43, -0.01, 0.26, + -512.37, 695.54, -1.47, -1.40, 15.55, 11.46, -0.16, 0.03, + 0.15, -0.17, 0.01, 0.01, 506.65, 643.75, 2.54, -2.62, + 14.40, -11.33, -0.77, -0.06, -0.15, -0.16, 0.00, 0.01, + 664.57, 16.81, -0.40, 1.00, 0.38, -14.86, -3.71, -0.09, + -0.20, 405.91, 522.11, 0.99, -1.50, 11.67, -9.08, -0.25, + -0.02, -0.12, -0.13,-305.78, 326.60, 1.75, 1.90, 7.30, + 6.84, 0.20, -0.04, 300.99,-325.03, -0.44, -0.50, -7.27, + -6.73, -1.01, 0.01, 0.00, 0.08, 0.00, 0.02, 438.51, + 10.47, -0.56, -0.20, 0.24, -9.81, -0.24, 0.01, -0.13, + -264.02, 335.24, 0.99, 1.40, 7.49, 5.90, -0.27, -0.02, + 284.09, 307.03, 0.32, -0.40, 6.87, -6.35, -0.99, -0.01, + -250.54, 327.11, 0.08, 0.40, 7.31, 5.60, -0.30, 230.72, + + /* 468-595 */ + -304.46, 0.08, -0.10, -6.81, -5.16, 0.27, 229.78, 304.17, + -0.60, 0.50, 6.80, -5.14, 0.33, 0.01, 256.30,-276.81, + -0.28, -0.40, -6.19, -5.73, -0.14, 0.01,-212.82, 269.45, + 0.84, 1.20, 6.02, 4.76, 0.14, -0.02, 196.64, 272.05, + -0.84, 0.90, 6.08, -4.40, 0.35, 0.02, 188.95, 272.22, + -0.12, 0.30, 6.09, -4.22, 0.34,-292.37, -5.10, -0.32, + -0.40, -0.11, 6.54, 0.14, 0.01, 161.79,-220.67, 0.24, + 0.10, -4.93, -3.62, -0.08, 261.54, -19.94, -0.95, 0.20, + -0.45, -5.85, -0.13, 0.02, 142.16,-190.79, 0.20, 0.10, + -4.27, -3.18, -0.07, 187.95, -4.11, -0.24, 0.30, -0.09, + -4.20, -0.09, 0.01, 0.00, 0.00, -79.08, 167.90, 0.04, + 0.00, 3.75, 1.77, 121.98, 131.04, -0.08, 0.10, 2.93, + -2.73, -0.06,-172.95, -8.11, -0.40, -0.20, -0.18, 3.87, + 0.09, 0.01,-160.15, -55.30, -14.04, 13.90, -1.23, 3.58, + 0.40, 0.31,-115.40, 123.20, 0.60, 0.70, 2.75, 2.58, + 0.08, -0.01,-168.26, -2.00, 0.20, -0.20, -0.04, 3.76, + + /* 596-723 */ + 0.08,-114.49, 123.20, 0.32, 0.40, 2.75, 2.56, 0.07, + -0.01, 112.14, 120.70, 0.28, -0.30, 2.70, -2.51, -0.07, + -0.01, 161.34, 4.03, 0.20, 0.20, 0.09, -3.61, -0.08, + 91.31, 126.64, -0.40, 0.40, 2.83, -2.04, -0.04, 0.01, + 105.29, 112.90, 0.44, -0.50, 2.52, -2.35, -0.07, -0.01, + 98.69,-106.20, -0.28, -0.30, -2.37, -2.21, -0.06, 0.01, + 86.74,-112.94, -0.08, -0.20, -2.53, -1.94, -0.05,-134.81, + 3.51, 0.20, -0.20, 0.08, 3.01, 0.07, 79.03, 107.31, + -0.24, 0.20, 2.40, -1.77, -0.04, 0.01, 132.81, -10.77, + -0.52, 0.10, -0.24, -2.97, -0.07, 0.01,-130.31, -0.90, + 0.04, 0.00, 0.00, 2.91, -78.56, 85.32, 0.00, 0.00, + 1.91, 1.76, 0.04, 0.00, 0.00, -41.53, 89.10, 0.02, + 0.00, 1.99, 0.93, 66.03, -71.00, -0.20, -0.20, -1.59, + -1.48, -0.04, 60.50, 64.70, 0.36, -0.40, 1.45, -1.35, + -0.04, -0.01, -52.27, -70.01, 0.00, 0.00, -1.57, 1.17, + 0.03, -52.95, 66.29, 0.32, 0.40, 1.48, 1.18, 0.04, + + /* 724-851 */ + -0.01, 51.02, 67.25, 0.00, 0.00, 1.50, -1.14, -0.03, + -55.66, -60.92, 0.16, -0.20, -1.36, 1.24, 0.03, -54.81, + -59.20, -0.08, 0.20, -1.32, 1.23, 0.03, 51.32, -55.60, + 0.00, 0.00, -1.24, -1.15, -0.03, 48.29, 51.80, 0.20, + -0.20, 1.16, -1.08, -0.03, -45.59, -49.00, -0.12, 0.10, + -1.10, 1.02, 0.03, 40.54, -52.69, -0.04, -0.10, -1.18, + -0.91, -0.02, -40.58, -49.51, -1.00, 1.00, -1.11, 0.91, + 0.04, 0.02, -43.76, 46.50, 0.36, 0.40, 1.04, 0.98, + 0.03, -0.01, 62.65, -5.00, -0.24, 0.00, -0.11, -1.40, + -0.03, 0.01, -38.57, 49.59, 0.08, 0.10, 1.11, 0.86, + 0.02, -33.22, -44.04, 0.08, -0.10, -0.98, 0.74, 0.02, + 37.15, -39.90, -0.12, -0.10, -0.89, -0.83, -0.02, 36.68, + -39.50, -0.04, -0.10, -0.88, -0.82, -0.02, -53.22, -3.91, + -0.20, 0.00, -0.09, 1.19, 0.03, 32.43, -42.19, -0.04, + -0.10, -0.94, -0.73, -0.02, -51.00, -2.30, -0.12, -0.10, + 0.00, 1.14, -29.53, -39.11, 0.04, 0.00, -0.87, 0.66, + + /* 852-979 */ + 0.02, 28.50, -38.92, -0.08, -0.10, -0.87, -0.64, -0.02, + 26.54, 36.95, -0.12, 0.10, 0.83, -0.59, -0.01, 26.54, + 34.59, 0.04, -0.10, 0.77, -0.59, -0.02, 28.35, -32.55, + -0.16, 0.20, -0.73, -0.63, -0.01, -28.00, 30.40, 0.00, + 0.00, 0.68, 0.63, 0.01, -27.61, 29.40, 0.20, 0.20, + 0.66, 0.62, 0.02, 40.33, 0.40, -0.04, 0.10, 0.00, + -0.90, -23.28, 31.61, -0.08, -0.10, 0.71, 0.52, 0.01, + 37.75, 0.80, 0.04, 0.10, 0.00, -0.84, 23.66, 25.80, + 0.00, 0.00, 0.58, -0.53, -0.01, 21.01, -27.91, 0.00, + 0.00, -0.62, -0.47, -0.01, -34.81, 2.89, 0.04, 0.00, + 0.00, 0.78, -23.49, -25.31, 0.00, 0.00, -0.57, 0.53, + 0.01, -23.47, 25.20, 0.16, 0.20, 0.56, 0.52, 0.02, + 19.58, 27.50, -0.12, 0.10, 0.62, -0.44, -0.01, -22.67, + -24.40, -0.08, 0.10, -0.55, 0.51, 0.01, -19.97, 25.00, + 0.12, 0.20, 0.56, 0.45, 0.01, 21.28, -22.80, -0.08, + -0.10, -0.51, -0.48, -0.01, -30.47, 0.91, 0.04, 0.00, + + /* 980-1107 */ + 0.00, 0.68, 18.58, 24.00, 0.04, -0.10, 0.54, -0.42, + -0.01, -18.02, 24.40, -0.04, -0.10, 0.55, 0.40, 0.01, + 17.74, 22.50, 0.08, -0.10, 0.50, -0.40, -0.01, -19.41, + 20.70, 0.08, 0.10, 0.46, 0.43, 0.01, -18.64, 20.11, + 0.00, 0.00, 0.45, 0.42, 0.01, -16.75, 21.60, 0.04, + 0.10, 0.48, 0.37, 0.01, -18.42, -20.00, 0.00, 0.00, + -0.45, 0.41, 0.01, -26.77, 1.41, 0.08, 0.00, 0.00, + 0.60, -26.17, -0.19, 0.00, 0.00, 0.00, 0.59, -15.52, + 20.51, 0.00, 0.00, 0.46, 0.35, 0.01, -25.42, -1.91, + -0.08, 0.00, -0.04, 0.57, 0.45, -17.42, 18.10, 0.00, + 0.00, 0.40, 0.39, 0.01, 16.39, -17.60, -0.08, -0.10, + -0.39, -0.37, -0.01, -14.37, 18.91, 0.00, 0.00, 0.42, + 0.32, 0.01, 23.39, -2.40, -0.12, 0.00, 0.00, -0.52, + 14.32, -18.50, -0.04, -0.10, -0.41, -0.32, -0.01, 15.69, + 17.08, 0.00, 0.00, 0.38, -0.35, -0.01, -22.99, 0.50, + 0.04, 0.00, 0.00, 0.51, 0.00, 0.00, 14.47, -17.60, + + /* 1108-1235 */ + -0.01, 0.00, -0.39, -0.32, -13.33, 18.40, -0.04, -0.10, + 0.41, 0.30, 22.47, -0.60, -0.04, 0.00, 0.00, -0.50, + -12.78, -17.41, 0.04, 0.00, -0.39, 0.29, 0.01, -14.10, + -15.31, 0.04, 0.00, -0.34, 0.32, 0.01, 11.98, 16.21, + -0.04, 0.00, 0.36, -0.27, -0.01, 19.65, -1.90, -0.08, + 0.00, 0.00, -0.44, 19.61, -1.50, -0.08, 0.00, 0.00, + -0.44, 13.41, -14.30, -0.04, -0.10, -0.32, -0.30, -0.01, + -13.29, 14.40, 0.00, 0.00, 0.32, 0.30, 0.01, 11.14, + -14.40, -0.04, 0.00, -0.32, -0.25, -0.01, 12.24, -13.38, + 0.04, 0.00, -0.30, -0.27, -0.01, 10.07, -13.81, 0.04, + 0.00, -0.31, -0.23, -0.01, 10.46, 13.10, 0.08, -0.10, + 0.29, -0.23, -0.01, 16.55, -1.71, -0.08, 0.00, 0.00, + -0.37, 9.75, -12.80, 0.00, 0.00, -0.29, -0.22, -0.01, + 9.11, 12.80, 0.00, 0.00, 0.29, -0.20, 0.00, 0.00, + -6.44, -13.80, 0.00, 0.00, -0.31, 0.14, -9.19, -12.00, + 0.00, 0.00, -0.27, 0.21, -10.30, 10.90, 0.08, 0.10, + + /* 1236-1363 */ + 0.24, 0.23, 0.01, 14.92, -0.80, -0.04, 0.00, 0.00, + -0.33, 10.02, -10.80, 0.00, 0.00, -0.24, -0.22, -0.01, + -9.75, 10.40, 0.04, 0.00, 0.23, 0.22, 0.01, 9.67, + -10.40, -0.04, 0.00, -0.23, -0.22, -0.01, -8.28, -11.20, + 0.04, 0.00, -0.25, 0.19, 13.32, -1.41, -0.08, 0.00, + 0.00, -0.30, 8.27, 10.50, 0.04, 0.00, 0.23, -0.19, + 0.00, 0.00, 13.13, 0.00, 0.00, 0.00, 0.00, -0.29, + -12.93, 0.70, 0.04, 0.00, 0.00, 0.29, 7.91, -10.20, + 0.00, 0.00, -0.23, -0.18, -7.84, -10.00, -0.04, 0.00, + -0.22, 0.18, 7.44, 9.60, 0.00, 0.00, 0.21, -0.17, + -7.64, 9.40, 0.08, 0.10, 0.21, 0.17, 0.01, -11.38, + 0.60, 0.04, 0.00, 0.00, 0.25, -7.48, 8.30, 0.00, + 0.00, 0.19, 0.17, -10.98, -0.20, 0.00, 0.00, 0.00, + 0.25, 10.98, 0.20, 0.00, 0.00, 0.00, -0.25, 7.40, + -7.90, -0.04, 0.00, -0.18, -0.17, -6.09, 8.40, -0.04, + 0.00, 0.19, 0.14, -6.94, -7.49, 0.00, 0.00, -0.17, + + /* 1364-1491 */ + 0.16, 6.92, 7.50, 0.04, 0.00, 0.17, -0.15, 6.20, + 8.09, 0.00, 0.00, 0.18, -0.14, -6.12, 7.80, 0.04, + 0.00, 0.17, 0.14, 5.85, -7.50, 0.00, 0.00, -0.17, + -0.13, -6.48, 6.90, 0.08, 0.10, 0.15, 0.14, 0.01, + 6.32, 6.90, 0.00, 0.00, 0.15, -0.14, 5.61, -7.20, + 0.00, 0.00, -0.16, -0.13, 9.07, 0.00, 0.00, 0.00, + 0.00, -0.20, 5.25, 6.90, 0.00, 0.00, 0.15, -0.12, + -8.47, -0.40, 0.00, 0.00, 0.00, 0.19, 6.32, -5.39, + -1.11, 1.10, -0.12, -0.14, 0.02, 0.02, 5.73, -6.10, + -0.04, 0.00, -0.14, -0.13, 4.70, 6.60, -0.04, 0.00, + 0.15, -0.11, -4.90, -6.40, 0.00, 0.00, -0.14, 0.11, + -5.33, 5.60, 0.04, 0.10, 0.13, 0.12, 0.01, -4.81, + 6.00, 0.04, 0.00, 0.13, 0.11, 5.13, 5.50, 0.04, + 0.00, 0.12, -0.11, 4.50, 5.90, 0.00, 0.00, 0.13, + -0.10, -4.22, 6.10, 0.00, 0.00, 0.14, -4.53, 5.70, + 0.00, 0.00, 0.13, 0.10, 4.18, 5.70, 0.00, 0.00, + + /* 1492-1619 */ + 0.13, -4.75, -5.19, 0.00, 0.00, -0.12, 0.11, -4.06, + 5.60, 0.00, 0.00, 0.13, -3.98, 5.60, -0.04, 0.00, + 0.13, 4.02, -5.40, 0.00, 0.00, -0.12, 4.49, -4.90, + -0.04, 0.00, -0.11, -0.10, -3.62, -5.40, -0.16, 0.20, + -0.12, 0.00, 0.01, 4.38, 4.80, 0.00, 0.00, 0.11, + -6.40, -0.10, 0.00, 0.00, 0.00, 0.14, -3.98, 5.00, + 0.04, 0.00, 0.11, -3.82, -5.00, 0.00, 0.00, -0.11, + -3.71, 5.07, 0.00, 0.00, 0.11, 4.14, 4.40, 0.00, + 0.00, 0.10, -6.01, -0.50, -0.04, 0.00, 0.00, 0.13, + -4.04, 4.39, 0.00, 0.00, 0.10, 3.45, -4.72, 0.00, + 0.00, -0.11, 3.31, 4.71, 0.00, 0.00, 0.11, 3.26, + -4.50, 0.00, 0.00, -0.10, -3.26, -4.50, 0.00, 0.00, + -0.10, -3.34, -4.40, 0.00, 0.00, -0.10, -3.74, -4.00, + 3.70, 4.00, 3.34, -4.30, 3.30, -4.30, -3.66, 3.90, + 0.04, 3.66, 3.90, 0.04, -3.62, -3.90, -3.61, 3.90, + -0.20, 5.30, 0.00, 0.00, 0.12, 3.06, 4.30, 3.30, + + /* 1620-1747 */ + 4.00, 0.40, 0.20, 3.10, 4.10, -3.06, 3.90, -3.30, + -3.60, -3.30, 3.36, 0.01, 3.14, 3.40, -4.57, -0.20, + 0.00, 0.00, 0.00, 0.10, -2.70, -3.60, 2.94, -3.20, + -2.90, 3.20, 2.47, -3.40, 2.55, -3.30, 2.80, -3.08, + 2.51, 3.30, -4.10, 0.30, -0.12, -0.10, 4.10, 0.20, + -2.74, 3.00, 2.46, 3.23, -3.66, 1.20, -0.20, 0.20, + 3.74, -0.40, -2.51, -2.80, -3.74, 2.27, -2.90, 0.00, + 0.00, -2.50, 2.70, -2.51, 2.60, -3.50, 0.20, 3.38, + -2.22, -2.50, 3.26, -0.40, 1.95, -2.60, 3.22, -0.40, + -0.04, -1.79, -2.60, 1.91, 2.50, 0.74, 3.05, -0.04, + 0.08, 2.11, -2.30, -2.11, 2.20, -1.87, -2.40, 2.03, + -2.20, -2.03, 2.20, 2.98, 0.00, 0.00, 2.98, -1.71, + 2.40, 2.94, -0.10, -0.12, 0.10, 1.67, 2.40, -1.79, + 2.30, -1.79, 2.20, -1.67, 2.20, 1.79, -2.00, 1.87, + -1.90, 1.63, -2.10, -1.59, 2.10, 1.55, -2.10, -1.55, + 2.10, -2.59, -0.20, -1.75, -1.90, -1.75, 1.90, -1.83, + + /* 1748-1875 */ + -1.80, 1.51, 2.00, -1.51, -2.00, 1.71, 1.80, 1.31, + 2.10, -1.43, 2.00, 1.43, 2.00, -2.43, -1.51, 1.90, + -1.47, 1.90, 2.39, 0.20, -2.39, 1.39, 1.90, 1.39, + -1.80, 1.47, -1.60, 1.47, -1.60, 1.43, -1.50, -1.31, + 1.60, 1.27, -1.60, -1.27, 1.60, 1.27, -1.60, 2.03, + 1.35, 1.50, -1.39, -1.40, 1.95, -0.20, -1.27, 1.49, + 1.19, 1.50, 1.27, 1.40, 1.15, 1.50, 1.87, -0.10, + -1.12, -1.50, 1.87, -1.11, -1.50, -1.11, -1.50, 0.00, + 0.00, 1.19, 1.40, 1.27, -1.30, -1.27, -1.30, -1.15, + 1.40, -1.23, 1.30, -1.23, -1.30, 1.22, -1.29, 1.07, + -1.40, 1.75, -0.20, -1.03, -1.40, -1.07, 1.20, -1.03, + 1.15, 1.07, 1.10, 1.51, -1.03, 1.10, 1.03, -1.10, + 0.00, 0.00, -1.03, -1.10, 0.91, -1.20, -0.88, -1.20, + -0.88, 1.20, -0.95, 1.10, -0.95, -1.10, 1.43, -1.39, + 0.95, -1.00, -0.95, 1.00, -0.80, 1.10, 0.91, -1.00, + -1.35, 0.88, 1.00, -0.83, 1.00, -0.91, 0.90, 0.91, + + /* 1876-2003 */ + 0.90, 0.88, -0.90, -0.76, -1.00, -0.76, 1.00, 0.76, + 1.00, -0.72, 1.00, 0.84, -0.90, 0.84, 0.90, 1.23, + 0.00, 0.00, -0.52, -1.10, -0.68, 1.00, 1.19, -0.20, + 1.19, 0.76, 0.90, 1.15, -0.10, 1.15, -0.10, 0.72, + -0.90, -1.15, -1.15, 0.68, 0.90, -0.68, 0.90, -1.11, + 0.00, 0.00, 0.20, 0.79, 0.80, -1.11, -0.10, 0.00, + 0.00, -0.48, -1.00, -0.76, -0.80, -0.72, -0.80, -1.07, + -0.10, 0.64, 0.80, -0.64, -0.80, 0.64, 0.80, 0.40, + 0.60, 0.52, -0.50, -0.60, -0.80, -0.71, 0.70, -0.99, + 0.99, 0.56, 0.80, -0.56, 0.80, 0.68, -0.70, 0.68, + 0.70, -0.95, -0.64, 0.70, 0.64, 0.70, -0.60, 0.70, + -0.60, -0.70, -0.91, -0.10, -0.51, 0.76, -0.91, -0.56, + 0.70, 0.88, 0.88, -0.63, -0.60, 0.55, -0.60, -0.80, + 0.80, -0.80, -0.52, 0.60, 0.52, 0.60, 0.52, -0.60, + -0.48, 0.60, 0.48, 0.60, 0.48, 0.60, -0.76, 0.44, + -0.60, 0.52, -0.50, -0.52, 0.50, 0.40, 0.60, -0.40, + + /* 2004-2131 */ + -0.60, 0.40, -0.60, 0.72, -0.72, -0.51, -0.50, -0.48, + 0.50, 0.48, -0.50, -0.48, 0.50, -0.48, 0.50, 0.48, + -0.50, -0.48, -0.50, -0.68, -0.68, 0.44, 0.50, -0.64, + -0.10, -0.64, -0.10, -0.40, 0.50, 0.40, 0.50, 0.40, + 0.50, 0.00, 0.00, -0.40, -0.50, -0.36, -0.50, 0.36, + -0.50, 0.60, -0.60, 0.40, -0.40, 0.40, 0.40, -0.40, + 0.40, -0.40, 0.40, -0.56, -0.56, 0.36, -0.40, -0.36, + 0.40, 0.36, -0.40, -0.36, -0.40, 0.36, 0.40, 0.36, + 0.40, -0.52, 0.52, 0.52, 0.32, 0.40, -0.32, 0.40, + -0.32, 0.40, -0.32, 0.40, 0.32, -0.40, -0.32, -0.40, + 0.32, -0.40, 0.28, -0.40, -0.28, 0.40, 0.28, -0.40, + 0.28, 0.40, 0.48, -0.48, 0.48, 0.36, -0.30, -0.36, + -0.30, 0.00, 0.00, 0.20, 0.40, -0.44, 0.44, -0.44, + -0.44, -0.44, -0.44, 0.32, -0.30, 0.32, 0.30, 0.24, + 0.30, -0.12, -0.10, -0.28, 0.30, 0.28, 0.30, 0.28, + 0.30, 0.28, -0.30, 0.28, -0.30, 0.28, -0.30, 0.28, + + /* 2132-2259 */ + 0.30, -0.28, 0.30, 0.40, 0.40, -0.24, 0.30, 0.24, + -0.30, 0.24, -0.30, -0.24, -0.30, 0.24, 0.30, 0.24, + -0.30, -0.24, 0.30, 0.24, -0.30, -0.24, -0.30, 0.24, + -0.30, 0.24, 0.30, -0.24, 0.30, -0.24, 0.30, 0.20, + -0.30, 0.20, -0.30, 0.20, -0.30, 0.20, 0.30, 0.20, + -0.30, 0.20, -0.30, 0.20, 0.30, 0.20, 0.30, -0.20, + -0.30, 0.20, -0.30, 0.20, -0.30, -0.36, -0.36, -0.36, + -0.04, 0.30, 0.12, -0.10, -0.32, -0.24, 0.20, 0.24, + 0.20, 0.20, -0.20, -0.20, -0.20, -0.20, -0.20, 0.20, + 0.20, 0.20, -0.20, 0.20, 0.20, 0.20, 0.20, -0.20, + -0.20, 0.00, 0.00, -0.20, -0.20, -0.20, 0.20, -0.20, + 0.20, 0.20, -0.20, -0.20, -0.20, 0.20, 0.20, 0.20, + 0.20, 0.20, -0.20, 0.20, -0.20, 0.28, 0.28, 0.28, + 0.28, 0.28, 0.28, -0.28, 0.28, 0.12, 0.00, 0.24, + 0.16, -0.20, 0.16, -0.20, 0.16, -0.20, 0.16, 0.20, + -0.16, 0.20, 0.16, 0.20, -0.16, 0.20, -0.16, 0.20, + + /* 2260-2387 */ + -0.16, 0.20, 0.16, -0.20, 0.16, 0.20, 0.16, -0.20, + -0.16, 0.20, -0.16, -0.20, -0.16, 0.20, 0.16, 0.20, + 0.16, -0.20, 0.16, -0.20, 0.16, 0.20, 0.16, 0.20, + 0.16, 0.20, -0.16, -0.20, 0.16, 0.20, -0.16, 0.20, + 0.16, 0.20, -0.16, -0.20, 0.16, -0.20, 0.16, -0.20, + -0.16, -0.20, 0.24, -0.24, -0.24, 0.24, 0.24, 0.12, + 0.20, 0.12, 0.20, -0.12, -0.20, 0.12, -0.20, 0.12, + -0.20, -0.12, 0.20, -0.12, 0.20, -0.12, -0.20, 0.12, + 0.20, 0.12, 0.20, 0.12, -0.20, -0.12, 0.20, 0.12, + -0.20, -0.12, 0.20, 0.12, 0.20, 0.00, 0.00, -0.12, + 0.20, -0.12, 0.20, 0.12, -0.20, -0.12, 0.20, 0.12, + 0.20, 0.00, -0.21, -0.20, 0.00, 0.00, 0.20, -0.20, + -0.20, -0.20, 0.20, -0.16, -0.10, 0.00, 0.17, 0.16, + 0.16, 0.16, 0.16, -0.16, 0.16, 0.16, -0.16, 0.16, + -0.16, 0.16, 0.12, 0.10, 0.12, -0.10, -0.12, 0.10, + -0.12, 0.10, 0.12, -0.10, -0.12, 0.12, -0.12, 0.12, + + /* 2388-2515 */ + -0.12, 0.12, -0.12, -0.12, -0.12, -0.12, -0.12, -0.12, + -0.12, 0.12, 0.12, 0.12, 0.12, -0.12, -0.12, 0.12, + 0.12, 0.12, -0.12, 0.12, -0.12, -0.12, -0.12, 0.12, + -0.12, -0.12, 0.12, 0.00, 0.11, 0.11,-122.67, 164.70, + 203.78, 273.50, 3.58, 2.74, 6.18, -4.56, 0.00, -0.04, + 0.00, -0.07, 57.44, -77.10, 95.82, 128.60, -1.77, -1.28, + 2.85, -2.14, 82.14, 89.50, 0.00, 0.00, 2.00, -1.84, + -0.04, 47.73, -64.10, 23.79, 31.90, -1.45, -1.07, 0.69, + -0.53, -46.38, 50.50, 0.00, 0.00, 1.13, 1.04, 0.02, + -18.38, 0.00, 63.80, 0.00, 0.00, 0.41, 0.00, -1.43, + 59.07, 0.00, 0.00, 0.00, 0.00, -1.32, 57.28, 0.00, + 0.00, 0.00, 0.00, -1.28, -48.65, 0.00, -1.15, 0.00, + 0.00, 1.09, 0.00, 0.03, -18.30, 24.60, -17.30, -23.20, + 0.56, 0.41, -0.51, 0.39, -16.91, 26.90, 8.43, 13.30, + 0.60, 0.38, 0.31, -0.19, 1.23, -1.70, -19.13, -25.70, + -0.03, -0.03, -0.58, 0.43, -0.72, 0.90, -17.34, -23.30, + + /* 2516-2643 */ + 0.03, 0.02, -0.52, 0.39, -19.49, -21.30, 0.00, 0.00, + -0.48, 0.44, 0.01, 20.57, -20.10, 0.64, 0.70, -0.45, + -0.46, 0.00, -0.01, 4.89, 5.90, -16.55, 19.90, 0.14, + -0.11, 0.44, 0.37, 18.22, 19.80, 0.00, 0.00, 0.44, + -0.41, -0.01, 4.89, -5.30, -16.51, -18.00, -0.11, -0.11, + -0.41, 0.37, -17.86, 0.00, 17.10, 0.00, 0.00, 0.40, + 0.00, -0.38, 0.32, 0.00, 24.42, 0.00, 0.00, -0.01, + 0.00, -0.55, -23.79, 0.00, 0.00, 0.00, 0.00, 0.53, + 14.72, -16.00, -0.32, 0.00, -0.36, -0.33, -0.01, 0.01, + 3.34, -4.50, 11.86, 15.90, -0.11, -0.07, 0.35, -0.27, + -3.26, 4.40, 11.62, 15.60, 0.09, 0.07, 0.35, -0.26, + -19.53, 0.00, 5.09, 0.00, 0.00, 0.44, 0.00, -0.11, + -13.48, 14.70, 0.00, 0.00, 0.33, 0.30, 0.01, 10.86, + -14.60, 3.18, 4.30, -0.33, -0.24, 0.09, -0.07, -11.30, + -15.10, 0.00, 0.00, -0.34, 0.25, 0.01, 2.03, -2.70, + 10.82, 14.50, -0.07, -0.05, 0.32, -0.24, 17.46, 0.00, + + /* 2644-2771 */ + 0.00, 0.00, 0.00, -0.39, 16.43, 0.00, 0.52, 0.00, + 0.00, -0.37, 0.00, -0.01, 9.35, 0.00, 13.29, 0.00, + 0.00, -0.21, 0.00, -0.30, -10.42, 11.40, 0.00, 0.00, + 0.25, 0.23, 0.01, 0.44, 0.50, -10.38, 11.30, 0.02, + -0.01, 0.25, 0.23, -14.64, 0.00, 0.00, 0.00, 0.00, + 0.33, 0.56, 0.80, -8.67, 11.70, 0.02, -0.01, 0.26, + 0.19, 13.88, 0.00, -2.47, 0.00, 0.00, -0.31, 0.00, + 0.06, -1.99, 2.70, 7.72, 10.30, 0.06, 0.04, 0.23, + -0.17, -0.20, 0.00, 13.05, 0.00, 0.00, 0.00, 0.00, + -0.29, 6.92, -9.30, 3.34, 4.50, -0.21, -0.15, 0.10, + -0.07, -6.60, 0.00, 10.70, 0.00, 0.00, 0.15, 0.00, + -0.24, -8.04, -8.70, 0.00, 0.00, -0.19, 0.18, -10.58, + 0.00, -3.10, 0.00, 0.00, 0.24, 0.00, 0.07, -7.32, + 8.00, -0.12, -0.10, 0.18, 0.16, 1.63, 1.70, 6.96, + -7.60, 0.03, -0.04, -0.17, -0.16, -3.62, 0.00, 9.86, + 0.00, 0.00, 0.08, 0.00, -0.22, 0.20, -0.20, -6.88, + + /* 2772-2899 */ + -7.50, 0.00, 0.00, -0.17, 0.15, -8.99, 0.00, 4.02, + 0.00, 0.00, 0.20, 0.00, -0.09, -1.07, 1.40, -5.69, + -7.70, 0.03, 0.02, -0.17, 0.13, 6.48, -7.20, -0.48, + -0.50, -0.16, -0.14, -0.01, 0.01, 5.57, -7.50, 1.07, + 1.40, -0.17, -0.12, 0.03, -0.02, 8.71, 0.00, 3.54, + 0.00, 0.00, -0.19, 0.00, -0.08, 0.40, 0.00, 9.27, + 0.00, 0.00, -0.01, 0.00, -0.21, -6.13, 6.70, -1.19, + -1.30, 0.15, 0.14, -0.03, 0.03, 5.21, -5.70, -2.51, + -2.60, -0.13, -0.12, -0.06, 0.06, 5.69, -6.20, -0.12, + -0.10, -0.14, -0.13, -0.01, 2.03, -2.70, 4.53, 6.10, + -0.06, -0.05, 0.14, -0.10, 5.01, 5.50, -2.51, 2.70, + 0.12, -0.11, 0.06, 0.06, -1.91, 2.60, -4.38, -5.90, + 0.06, 0.04, -0.13, 0.10, 4.65, -6.30, 0.00, 0.00, + -0.14, -0.10, -5.29, 5.70, 0.00, 0.00, 0.13, 0.12, + -2.23, -4.00, -4.65, 4.20, -0.09, 0.05, 0.10, 0.10, + -4.53, 6.10, 0.00, 0.00, 0.14, 0.10, 2.47, 2.70, + + /* 2900-3027 */ + -4.46, 4.90, 0.06, -0.06, 0.11, 0.10, -5.05, 5.50, + 0.84, 0.90, 0.12, 0.11, 0.02, -0.02, 4.97, -5.40, + -1.71, 0.00, -0.12, -0.11, 0.00, 0.04, -0.99, -1.30, + 4.22, -5.70, -0.03, 0.02, -0.13, -0.09, 0.99, 1.40, + 4.22, -5.60, 0.03, -0.02, -0.13, -0.09, -4.69, -5.20, + 0.00, 0.00, -0.12, 0.10, -3.42, 0.00, 6.09, 0.00, + 0.00, 0.08, 0.00, -0.14, -4.65, -5.10, 0.00, 0.00, + -0.11, 0.10, 0.00, 0.00, -4.53, -5.00, 0.00, 0.00, + -0.11, 0.10, -2.43, -2.70, -3.82, 4.20, -0.06, 0.05, + 0.10, 0.09, 0.00, 0.00, -4.53, 4.90, 0.00, 0.00, + 0.11, 0.10, -4.49, -4.90, 0.00, 0.00, -0.11, 0.10, + 2.67, -2.90, -3.62, -3.90, -0.06, -0.06, -0.09, 0.08, + 3.94, -5.30, 0.00, 0.00, -0.12, -3.38, 3.70, -2.78, + -3.10, 0.08, 0.08, -0.07, 0.06, 3.18, -3.50, -2.82, + -3.10, -0.08, -0.07, -0.07, 0.06, -5.77, 0.00, 1.87, + 0.00, 0.00, 0.13, 0.00, -0.04, 3.54, -4.80, -0.64, + + /* 3028-3155 */ + -0.90, -0.11, 0.00, -0.02, -3.50, -4.70, 0.68, -0.90, + -0.11, 0.00, -0.02, 5.49, 0.00, 0.00, 0.00, 0.00, + -0.12, 1.83, -2.50, 2.63, 3.50, -0.06, 0.00, 0.08, + 3.02, -4.10, 0.68, 0.90, -0.09, 0.00, 0.02, 0.00, + 0.00, 5.21, 0.00, 0.00, 0.00, 0.00, -0.12, -3.54, + 3.80, 2.70, 3.60, -1.35, 1.80, 0.08, 0.00, 0.04, + -2.90, 3.90, 0.68, 0.90, 0.09, 0.00, 0.02, 0.80, + -1.10, -2.78, -3.70, -0.02, 0.00, -0.08, 4.10, 0.00, + -2.39, 0.00, 0.00, -0.09, 0.00, 0.05, -1.59, 2.10, + 2.27, 3.00, 0.05, 0.00, 0.07, -2.63, 3.50, -0.48, + -0.60, -2.94, -3.20, -2.94, 3.20, 2.27, -3.00, -1.11, + -1.50, -0.07, 0.00, -0.03, -0.56, -0.80, -2.35, 3.10, + 0.00, -0.60, -3.42, 1.90, -0.12, -0.10, 2.63, -2.90, + 2.51, 2.80, -0.64, 0.70, -0.48, -0.60, 2.19, -2.90, + 0.24, -0.30, 2.15, 2.90, 2.15, -2.90, 0.52, 0.70, + 2.07, -2.80, -3.10, 0.00, 1.79, 0.00, 0.00, 0.07, + + /* 3156-3283 */ + 0.00, -0.04, 0.88, 0.00, -3.46, 2.11, 2.80, -0.36, + 0.50, 3.54, -0.20, -3.50, -1.39, 1.50, -1.91, -2.10, + -1.47, 2.00, 1.39, 1.90, 2.07, -2.30, 0.91, 1.00, + 1.99, -2.70, 3.30, 0.00, 0.60, -0.44, -0.70, -1.95, + 2.60, 2.15, -2.40, -0.60, -0.70, 3.30, 0.84, 0.00, + -3.10, -3.10, 0.00, -0.72, -0.32, 0.40, -1.87, -2.50, + 1.87, -2.50, 0.32, 0.40, -0.24, 0.30, -1.87, -2.50, + -0.24, -0.30, 1.87, -2.50, -2.70, 0.00, 1.55, 2.03, + 2.20, -2.98, -1.99, -2.20, 0.12, -0.10, -0.40, 0.50, + 1.59, 2.10, 0.00, 0.00, -1.79, 2.00, -1.03, 1.40, + -1.15, -1.60, 0.32, 0.50, 1.39, -1.90, 2.35, -1.27, + 1.70, 0.60, 0.80, -0.32, -0.40, 1.35, -1.80, 0.44, + 0.00, 2.23, -0.84, 0.90, -1.27, -1.40, -1.47, 1.60, + -0.28, -0.30, -0.28, 0.40, -1.27, -1.70, 0.28, -0.40, + -1.43, -1.50, 0.00, 0.00, -1.27, -1.70, 2.11, -0.32, + -0.40, -1.23, 1.60, 1.19, -1.30, -0.72, -0.80, 0.72, + + /* 3284-3411 */ + -0.80, -1.15, -1.30, -1.35, -1.50, -1.19, -1.60, -0.12, + 0.20, 1.79, 0.00, -0.88, -0.28, 0.40, 1.11, 1.50, + -1.83, 0.00, 0.56, -0.12, 0.10, -1.27, -1.40, 0.00, + 0.00, 1.15, 1.50, -0.12, 0.20, 1.11, 1.50, 0.36, + -0.50, -1.07, -1.40, -1.11, 1.50, 1.67, 0.00, 0.80, + -1.11, 0.00, 1.43, 1.23, -1.30, -0.24, -1.19, -1.30, + -0.24, 0.20, -0.44, -0.90, -0.95, 1.10, 1.07, -1.40, + 1.15, -1.30, 1.03, -1.10, -0.56, -0.60, -0.68, 0.90, + -0.76, -1.00, -0.24, -0.30, 0.95, -1.30, 0.56, 0.70, + 0.84, -1.10, -0.56, 0.00, -1.55, 0.91, -1.30, 0.28, + 0.30, 0.16, -0.20, 0.95, 1.30, 0.40, -0.50, -0.88, + -1.20, 0.95, -1.10, -0.48, -0.50, 0.00, 0.00, -1.07, + 1.20, 0.44, -0.50, 0.95, 1.10, 0.00, 0.00, 0.92, + -1.30, 0.95, 1.00, -0.52, 0.60, 1.59, 0.24, -0.40, + 0.91, 1.20, 0.84, -1.10, -0.44, -0.60, 0.84, 1.10, + -0.44, 0.60, -0.44, 0.60, -0.84, -1.10, -0.80, 0.00, + + /* 3412-3539 */ + 1.35, 0.76, 0.20, -0.91, -1.00, 0.20, -0.30, -0.91, + -1.20, -0.95, 1.00, -0.48, -0.50, 0.88, 1.00, 0.48, + -0.50, -0.95, -1.10, 0.20, -0.20, -0.99, 1.10, -0.84, + 1.10, -0.24, -0.30, 0.20, -0.30, 0.84, 1.10, -1.39, + 0.00, -0.28, -0.16, 0.20, 0.84, 1.10, 0.00, 0.00, + 1.39, 0.00, 0.00, -0.95, 1.00, 1.35, -0.99, 0.00, + 0.88, -0.52, 0.00, -1.19, 0.20, 0.20, 0.76, -1.00, + 0.00, 0.00, 0.76, 1.00, 0.00, 0.00, 0.76, 1.00, + -0.76, 1.00, 0.00, 0.00, 1.23, 0.76, 0.80, -0.32, + 0.40, -0.72, 0.80, -0.40, -0.40, 0.00, 0.00, -0.80, + -0.90, -0.68, 0.90, -0.16, -0.20, -0.16, -0.20, 0.68, + -0.90, -0.36, 0.50, -0.56, -0.80, 0.72, -0.90, 0.44, + -0.60, -0.48, -0.70, -0.16, 0.00, -1.11, 0.32, 0.00, + -1.07, 0.60, -0.80, -0.28, -0.40, -0.64, 0.00, 0.91, + 1.11, 0.64, -0.90, 0.76, -0.80, 0.00, 0.00, -0.76, + -0.80, 1.03, 0.00, -0.36, -0.64, -0.70, 0.36, -0.40, + + /* 3540-3667 */ + 1.07, 0.36, -0.50, -0.52, -0.70, 0.60, 0.00, 0.88, + 0.95, 0.00, 0.48, 0.16, -0.20, 0.60, 0.80, 0.16, + -0.20, -0.60, -0.80, 0.00, -1.00, 0.12, 0.20, 0.16, + -0.20, 0.68, 0.70, 0.59, -0.80, -0.99, -0.56, -0.60, + 0.36, -0.40, -0.68, -0.70, -0.68, -0.70, -0.36, -0.50, + -0.44, 0.60, 0.64, 0.70, -0.12, 0.10, -0.52, 0.60, + 0.36, 0.40, 0.00, 0.00, 0.95, -0.84, 0.00, 0.44, + 0.56, 0.60, 0.32, -0.30, 0.00, 0.00, 0.60, 0.70, + 0.00, 0.00, 0.60, 0.70, -0.12, -0.20, 0.52, -0.70, + 0.00, 0.00, 0.56, 0.70, -0.12, 0.10, -0.52, -0.70, + 0.00, 0.00, 0.88, -0.76, 0.00, -0.44, 0.00, 0.00, + -0.52, -0.70, 0.52, -0.70, 0.36, -0.40, -0.44, -0.50, + 0.00, 0.00, 0.60, 0.60, 0.84, 0.00, 0.12, -0.24, + 0.00, 0.80, -0.56, 0.60, -0.32, -0.30, 0.48, -0.50, + 0.28, -0.30, -0.48, -0.50, 0.12, 0.20, 0.48, -0.60, + 0.48, 0.60, -0.12, 0.20, 0.24, 0.00, 0.76, -0.52, + + /* 3668-3795 */ + -0.60, -0.52, 0.60, 0.48, -0.50, -0.24, -0.30, 0.12, + -0.10, 0.48, 0.60, 0.52, -0.20, 0.36, 0.40, -0.44, + 0.50, -0.24, -0.30, -0.48, -0.60, -0.44, -0.60, -0.12, + 0.10, 0.76, 0.76, 0.20, -0.20, 0.48, 0.50, 0.40, + -0.50, -0.24, -0.30, 0.44, -0.60, 0.44, -0.60, 0.36, + 0.00, -0.64, 0.72, 0.00, -0.12, 0.00, -0.10, -0.40, + -0.60, -0.20, -0.20, -0.44, 0.50, -0.44, 0.50, 0.20, + 0.20, -0.44, -0.50, 0.20, -0.20, -0.20, 0.20, -0.44, + -0.50, 0.64, 0.00, 0.32, -0.36, 0.50, -0.20, -0.30, + 0.12, -0.10, 0.48, 0.50, -0.12, 0.30, -0.36, -0.50, + 0.00, 0.00, 0.48, 0.50, -0.48, 0.50, 0.68, 0.00, + -0.12, 0.56, -0.40, 0.44, -0.50, -0.12, -0.10, 0.24, + 0.30, -0.40, 0.40, 0.64, 0.00, -0.24, 0.64, 0.00, + -0.20, 0.00, 0.00, 0.44, -0.50, 0.44, 0.50, -0.12, + 0.20, -0.36, -0.50, 0.12, 0.00, 0.64, -0.40, 0.50, + 0.00, 0.10, 0.00, 0.00, -0.40, 0.50, 0.00, 0.00, + + /* 3796-3923 */ + -0.40, -0.50, 0.56, 0.00, 0.28, 0.00, 0.10, 0.36, + 0.50, 0.00, -0.10, 0.36, -0.50, 0.36, 0.50, 0.00, + -0.10, 0.24, -0.20, -0.36, -0.40, 0.16, 0.20, 0.40, + -0.40, 0.00, 0.00, -0.36, -0.50, -0.36, -0.50, -0.32, + -0.50, -0.12, 0.10, 0.20, 0.20, -0.36, 0.40, -0.60, + 0.60, 0.28, 0.00, 0.52, 0.12, -0.10, 0.40, 0.40, + 0.00, -0.50, 0.20, -0.20, -0.32, 0.40, 0.16, 0.20, + -0.16, 0.20, 0.32, 0.40, 0.56, 0.00, -0.12, 0.32, + -0.40, -0.16, -0.20, 0.00, 0.00, 0.40, 0.40, -0.40, + -0.40, -0.40, 0.40, -0.36, 0.40, 0.12, 0.10, 0.00, + 0.10, 0.36, 0.40, 0.00, -0.10, 0.36, 0.40, -0.36, + 0.40, 0.00, 0.10, 0.32, 0.00, 0.44, 0.12, 0.20, + 0.28, -0.40, 0.00, 0.00, 0.36, 0.40, 0.32, -0.40, + -0.16, 0.12, 0.10, 0.32, -0.40, 0.20, 0.30, -0.24, + 0.30, 0.00, 0.10, 0.32, 0.40, 0.00, -0.10, -0.32, + -0.40, -0.32, 0.40, 0.00, 0.10, -0.52, -0.52, 0.52, + + /* 3924-4051 */ + 0.32, -0.40, 0.00, 0.00, 0.32, 0.40, 0.32, -0.40, + 0.00, 0.00, -0.32, -0.40, -0.32, 0.40, 0.32, 0.40, + 0.00, 0.00, 0.32, 0.40, 0.00, 0.00, -0.32, -0.40, + 0.00, 0.00, 0.32, 0.40, 0.16, 0.20, 0.32, -0.30, + -0.16, 0.00, -0.48, -0.20, 0.20, -0.28, -0.30, 0.28, + -0.40, 0.00, 0.00, 0.28, -0.40, 0.00, 0.00, 0.28, + -0.40, 0.00, 0.00, -0.28, -0.40, 0.28, 0.40, -0.28, + -0.40, -0.48, -0.20, 0.20, 0.24, 0.30, 0.44, 0.00, + 0.16, 0.24, 0.30, 0.16, -0.20, 0.24, 0.30, -0.12, + 0.20, 0.20, 0.30, -0.16, 0.20, 0.00, 0.00, 0.44, + -0.32, 0.30, 0.24, 0.00, -0.36, 0.36, 0.00, 0.24, + 0.12, -0.20, 0.20, 0.30, -0.12, 0.00, -0.28, 0.30, + -0.24, 0.30, 0.12, 0.10, -0.28, -0.30, -0.28, 0.30, + 0.00, 0.00, -0.28, -0.30, 0.00, 0.00, -0.28, -0.30, + 0.00, 0.00, 0.28, 0.30, 0.00, 0.00, -0.28, -0.30, + -0.28, 0.30, 0.00, 0.00, -0.28, -0.30, 0.00, 0.00, + + /* 4052-4179 */ + 0.28, 0.30, 0.00, 0.00, -0.28, 0.30, 0.28, -0.30, + -0.28, 0.30, 0.40, 0.40, -0.24, 0.30, 0.00, -0.10, + 0.16, 0.00, 0.36, -0.20, 0.30, -0.12, -0.10, -0.24, + -0.30, 0.00, 0.00, -0.24, 0.30, -0.24, 0.30, 0.00, + 0.00, -0.24, 0.30, -0.24, 0.30, 0.24, -0.30, 0.00, + 0.00, 0.24, -0.30, 0.00, 0.00, 0.24, 0.30, 0.24, + -0.30, 0.24, 0.30, -0.24, 0.30, -0.24, 0.30, -0.20, + 0.20, -0.16, -0.20, 0.00, 0.00, -0.32, 0.20, 0.00, + 0.10, 0.20, -0.30, 0.20, -0.20, 0.12, 0.20, -0.16, + 0.20, 0.16, 0.20, 0.20, 0.30, 0.20, 0.30, 0.00, + 0.00, -0.20, 0.30, 0.00, 0.00, 0.20, 0.30, -0.20, + -0.30, -0.20, -0.30, 0.20, -0.30, 0.00, 0.00, 0.20, + 0.30, 0.00, 0.00, 0.20, 0.30, 0.00, 0.00, 0.20, + 0.30, 0.00, 0.00, 0.20, 0.30, 0.00, 0.00, 0.20, + -0.30, 0.00, 0.00, -0.20, -0.30, 0.00, 0.00, -0.20, + 0.30, 0.00, 0.00, -0.20, 0.30, 0.00, 0.00, 0.36, + + /* 4180-4307 */ + 0.00, 0.00, 0.36, 0.12, 0.10, -0.24, 0.20, 0.12, + -0.20, -0.16, -0.20, -0.13, 0.10, 0.22, 0.21, 0.20, + 0.00, -0.28, 0.32, 0.00, -0.12, -0.20, -0.20, 0.12, + -0.10, 0.12, 0.10, -0.20, 0.20, 0.00, 0.00, -0.32, + 0.32, 0.00, 0.00, 0.32, 0.32, 0.00, 0.00, -0.24, + -0.20, 0.24, 0.20, 0.20, 0.00, -0.24, 0.00, 0.00, + -0.24, -0.20, 0.00, 0.00, 0.24, 0.20, -0.24, -0.20, + 0.00, 0.00, -0.24, 0.20, 0.16, -0.20, 0.12, 0.10, + 0.20, 0.20, 0.00, -0.10, -0.12, 0.10, -0.16, -0.20, + -0.12, -0.10, -0.16, 0.20, 0.20, 0.20, 0.00, 0.00, + -0.20, 0.20, -0.20, 0.20, -0.20, 0.20, -0.20, 0.20, + 0.20, -0.20, -0.20, -0.20, 0.00, 0.00, -0.20, 0.20, + 0.20, 0.00, -0.20, 0.00, 0.00, -0.20, 0.20, -0.20, + 0.20, -0.20, -0.20, -0.20, -0.20, 0.00, 0.00, 0.20, + 0.20, 0.20, 0.20, 0.12, -0.20, -0.12, -0.10, 0.28, + -0.28, 0.16, -0.20, 0.00, -0.10, 0.00, 0.10, -0.16, + + /* 4308-4435 */ + 0.20, 0.00, -0.10, -0.16, -0.20, 0.00, -0.10, 0.16, + -0.20, 0.16, -0.20, 0.00, 0.00, 0.16, 0.20, -0.16, + 0.20, 0.00, 0.00, 0.16, 0.20, 0.16, -0.20, 0.16, + -0.20, -0.16, 0.20, 0.16, -0.20, 0.00, 0.00, 0.16, + 0.20, 0.00, 0.00, 0.16, 0.20, 0.00, 0.00, -0.16, + -0.20, 0.16, -0.20, -0.16, -0.20, 0.00, 0.00, -0.16, + -0.20, 0.00, 0.00, -0.16, 0.20, 0.00, 0.00, 0.16, + -0.20, 0.16, 0.20, 0.16, 0.20, 0.00, 0.00, -0.16, + -0.20, 0.00, 0.00, -0.16, -0.20, 0.00, 0.00, 0.16, + 0.20, 0.16, 0.20, 0.00, 0.00, 0.16, 0.20, 0.16, + -0.20, 0.16, 0.20, 0.00, 0.00, -0.16, 0.20, 0.00, + 0.10, 0.12, -0.20, 0.12, -0.20, 0.00, -0.10, 0.00, + -0.10, 0.12, 0.20, 0.00, -0.10, -0.12, 0.20, -0.15, + 0.20, -0.24, 0.24, 0.00, 0.00, 0.24, 0.24, 0.12, + -0.20, -0.12, -0.20, 0.00, 0.00, 0.12, 0.20, 0.12, + -0.20, 0.12, 0.20, 0.12, 0.20, 0.12, 0.20, 0.12, + + /* 4436-4563 */ + -0.20, -0.12, 0.20, 0.00, 0.00, 0.12, 0.20, 0.12, + 0.00, -0.20, 0.00, 0.00, -0.12, -0.20, 0.12, -0.20, + 0.00, 0.00, 0.12, 0.20, -0.12, 0.20, -0.12, 0.20, + 0.12, -0.20, 0.00, 0.00, 0.12, 0.20, 0.20, 0.00, + 0.12, 0.00, 0.00, -0.12, 0.20, 0.00, 0.00, -0.12, + -0.20, 0.00, 0.00, -0.12, -0.20, -0.12, -0.20, 0.00, + 0.00, 0.12, -0.20, 0.12, -0.20, 0.12, 0.20, -0.12, + -0.20, 0.00, 0.00, 0.12, -0.20, 0.12, -0.20, 0.12, + 0.20, 0.12, 0.00, 0.20, -0.12, -0.20, 0.00, 0.00, + 0.12, 0.20, -0.16, 0.00, 0.16, -0.20, 0.20, 0.00, + 0.00, -0.20, 0.00, 0.00, -0.20, 0.20, 0.00, 0.00, + 0.20, 0.20, -0.20, 0.00, 0.00, -0.20, 0.12, 0.00, + -0.16, 0.20, 0.00, 0.00, 0.20, 0.12, -0.10, 0.00, + 0.10, 0.16, -0.16, -0.16, -0.16, -0.16, -0.16, 0.00, + 0.00, -0.16, 0.00, 0.00, -0.16, -0.16, -0.16, 0.00, + 0.00, -0.16, 0.00, 0.00, 0.16, 0.00, 0.00, 0.16, + + /* 4564-4691 */ + 0.00, 0.00, 0.16, 0.16, 0.00, 0.00, -0.16, 0.00, + 0.00, -0.16, -0.16, 0.00, 0.00, 0.16, 0.00, 0.00, + -0.16, -0.16, 0.00, 0.00, -0.16, -0.16, 0.12, 0.10, + 0.12, -0.10, 0.12, 0.10, 0.00, 0.00, 0.12, 0.10, + -0.12, 0.10, 0.00, 0.00, 0.12, 0.10, 0.12, -0.10, + 0.00, 0.00, -0.12, -0.10, 0.00, 0.00, 0.12, 0.10, + 0.12, 0.00, 0.00, 0.12, 0.00, 0.00, -0.12, 0.00, + 0.00, 0.12, 0.12, 0.12, 0.12, 0.12, 0.00, 0.00, + 0.12, 0.00, 0.00, 0.12, 0.12, 0.00, 0.00, 0.12, + 0.00, 0.00, 0.12, -0.12, -0.12, 0.12, 0.12, -0.12, + -0.12, 0.00, 0.00, 0.12, -0.12, 0.12, 0.12, -0.12, + -0.12, 0.00, 0.00, -0.12, -0.12, 0.00, 0.00, -0.12, + 0.12, 0.00, 0.00, 0.12, 0.00, 0.00, 0.12, 0.00, + 0.00, 0.12, -0.12, 0.00, 0.00, -0.12, 0.12, -0.12, + -0.12, 0.12, 0.00, 0.00, 0.12, 0.12, 0.12, -0.12, + 0.00, 0.00, -0.12, -0.12, -0.12, 0.00, 0.00, -0.12, + + /* 4692-NA */ + -0.12, 0.00, 0.00, 0.12, 0.12, 0.00, 0.00, -0.12, + -0.12, -0.12, -0.12, 0.12, 0.00, 0.00, 0.12, -0.12, + 0.00, 0.00, -0.12, -0.12, 0.00, 0.00, 0.12, -0.12, + -0.12, -0.12, -0.12, 0.12, 0.12, -0.12, -0.12, 0.00, + 0.00, -0.12, 0.00, 0.00, -0.12, 0.12, 0.00, 0.00, + 0.12, 0.00, 0.00, -0.12, -0.12, 0.00, 0.00, -0.12, + -0.12, 0.12, 0.00, 0.00, 0.12, 0.12, 0.00, 0.00, + 0.12, 0.00, 0.00, 0.12, 0.12, 0.08, 0.00, 0.04 + }; + +/* Number of amplitude coefficients */ + static const int NA = (int) (sizeof a / sizeof (double)); + +/* Amplitude usage: X or Y, sin or cos, power of T. */ + static const int jaxy[] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}; + static const int jasc[] = {0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0}; + static const int japt[] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4}; + +/* Miscellaneous */ + double t, w, pt[MAXPT+1], fa[14], xypr[2], xypl[2], xyls[2], arg, + sc[2]; + int jpt, i, j, jxy, ialast, ifreq, m, ia, jsc; + +/* ------------------------------------------------------------------ */ + +/* Interval between fundamental date J2000.0 and given date (JC). */ + t = ((date1 - DJ00) + date2) / DJC; + +/* Powers of T. */ + w = 1.0; + for (jpt = 0; jpt <= MAXPT; jpt++) { + pt[jpt] = w; + w *= t; + } + +/* Initialize totals in X and Y: polynomial, luni-solar, planetary. */ + for (jxy = 0; jxy < 2; jxy++) { + xypr[jxy] = 0.0; + xyls[jxy] = 0.0; + xypl[jxy] = 0.0; + } + +/* --------------------------------- */ +/* Fundamental arguments (IERS 2003) */ +/* --------------------------------- */ + +/* Mean anomaly of the Moon. */ + fa[0] = iauFal03(t); + +/* Mean anomaly of the Sun. */ + fa[1] = iauFalp03(t); + +/* Mean argument of the latitude of the Moon. */ + fa[2] = iauFaf03(t); + +/* Mean elongation of the Moon from the Sun. */ + fa[3] = iauFad03(t); + +/* Mean longitude of the ascending node of the Moon. */ + fa[4] = iauFaom03(t); + +/* Planetary longitudes, Mercury through Neptune. */ + fa[5] = iauFame03(t); + fa[6] = iauFave03(t); + fa[7] = iauFae03(t); + fa[8] = iauFama03(t); + fa[9] = iauFaju03(t); + fa[10] = iauFasa03(t); + fa[11] = iauFaur03(t); + fa[12] = iauFane03(t); + +/* General accumulated precession in longitude. */ + fa[13] = iauFapa03(t); + +/* -------------------------------------- */ +/* Polynomial part of precession-nutation */ +/* -------------------------------------- */ + + for (jxy = 0; jxy < 2; jxy++) { + for (j = MAXPT; j >= 0; j--) { + xypr[jxy] += xyp[jxy][j] * pt[j]; + } + } + +/* ---------------------------------- */ +/* Nutation periodic terms, planetary */ +/* ---------------------------------- */ + +/* Work backwards through the coefficients per frequency list. */ + ialast = NA; + for (ifreq = NFPL-1; ifreq >= 0; ifreq--) { + + /* Obtain the argument functions. */ + arg = 0.0; + for (i = 0; i < 14; i++) { + m = mfapl[ifreq][i]; + if (m != 0) arg += (double)m * fa[i]; + } + sc[0] = sin(arg); + sc[1] = cos(arg); + + /* Work backwards through the amplitudes at this frequency. */ + ia = nc[ifreq+NFLS]; + for (i = ialast; i >= ia; i--) { + + /* Coefficient number (0 = 1st). */ + j = i-ia; + + /* X or Y. */ + jxy = jaxy[j]; + + /* Sin or cos. */ + jsc = jasc[j]; + + /* Power of T. */ + jpt = japt[j]; + + /* Accumulate the component. */ + xypl[jxy] += a[i-1] * sc[jsc] * pt[jpt]; + } + ialast = ia-1; + } + +/* ----------------------------------- */ +/* Nutation periodic terms, luni-solar */ +/* ----------------------------------- */ + +/* Continue working backwards through the number of coefficients list. */ + for (ifreq = NFLS-1; ifreq >= 0; ifreq--) { + + /* Obtain the argument functions. */ + arg = 0.0; + for (i = 0; i < 5; i++) { + m = mfals[ifreq][i]; + if (m != 0) arg += (double)m * fa[i]; + } + sc[0] = sin(arg); + sc[1] = cos(arg); + + /* Work backwards through the amplitudes at this frequency. */ + ia = nc[ifreq]; + for (i = ialast; i >= ia; i--) { + + /* Coefficient number (0 = 1st). */ + j = i-ia; + + /* X or Y. */ + jxy = jaxy[j]; + + /* Sin or cos. */ + jsc = jasc[j]; + + /* Power of T. */ + jpt = japt[j]; + + /* Accumulate the component. */ + xyls[jxy] += a[i-1] * sc[jsc] * pt[jpt]; + } + ialast = ia-1; + } + +/* ------------------------------------ */ +/* Results: CIP unit vector components */ +/* ------------------------------------ */ + + *x = DAS2R * (xypr[0] + (xyls[0] + xypl[0]) / 1e6); + *y = DAS2R * (xypr[1] + (xyls[1] + xypl[1]) / 1e6); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/xys00a.c b/20200721/c/src/xys00a.c new file mode 100644 index 0000000..a2b5fb4 --- /dev/null +++ b/20200721/c/src/xys00a.c @@ -0,0 +1,183 @@ +#include "sofa.h" + +void iauXys00a(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 0 a +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2000A +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 3) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) A faster, but slightly less accurate result (about 1 mas for +** X,Y), can be obtained by using instead the iauXys00b function. +** +** Called: +** iauPnm00a classical NPB matrix, IAU 2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2019 November 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3]; + + +/* Form the bias-precession-nutation matrix, IAU 2000A. */ + iauPnm00a(date1, date2, rbpn); + +/* Extract X,Y. */ + iauBpn2xy(rbpn, x, y); + +/* Obtain s. */ + *s = iauS00(date1, date2, *x, *y); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/xys00b.c b/20200721/c/src/xys00b.c new file mode 100644 index 0000000..69ec5b4 --- /dev/null +++ b/20200721/c/src/xys00b.c @@ -0,0 +1,183 @@ +#include "sofa.h" + +void iauXys00b(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 0 b +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2000B +** precession-nutation model. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y +** components of the unit vector in the Geocentric Celestial +** Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) The present function is faster, but slightly less accurate (about +** 1 mas in X,Y), than the iauXys00a function. +** +** Called: +** iauPnm00b classical NPB matrix, IAU 2000B +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS00 the CIO locator s, given X,Y, IAU 2000A +** +** Reference: +** +** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), +** IERS Technical Note No. 32, BKG (2004) +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3]; + + +/* Form the bias-precession-nutation matrix, IAU 2000A. */ + iauPnm00b(date1, date2, rbpn); + +/* Extract X,Y. */ + iauBpn2xy(rbpn, x, y); + +/* Obtain s. */ + *s = iauS00(date1, date2, *x, *y); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/xys06a.c b/20200721/c/src/xys06a.c new file mode 100644 index 0000000..d9b8e6c --- /dev/null +++ b/20200721/c/src/xys06a.c @@ -0,0 +1,183 @@ +#include "sofa.h" + +void iauXys06a(double date1, double date2, + double *x, double *y, double *s) +/* +** - - - - - - - - - - +** i a u X y s 0 6 a +** - - - - - - - - - - +** +** For a given TT date, compute the X,Y coordinates of the Celestial +** Intermediate Pole and the CIO locator s, using the IAU 2006 +** precession and IAU 2000A nutation models. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: support function. +** +** Given: +** date1,date2 double TT as a 2-part Julian Date (Note 1) +** +** Returned: +** x,y double Celestial Intermediate Pole (Note 2) +** s double the CIO locator s (Note 2) +** +** Notes: +** +** 1) The TT date date1+date2 is a Julian Date, apportioned in any +** convenient way between the two arguments. For example, +** JD(TT)=2450123.7 could be expressed in any of these ways, +** among others: +** +** date1 date2 +** +** 2450123.7 0.0 (JD method) +** 2451545.0 -1421.3 (J2000 method) +** 2400000.5 50123.2 (MJD method) +** 2450123.5 0.2 (date & time method) +** +** The JD method is the most natural and convenient to use in +** cases where the loss of several decimal digits of resolution +** is acceptable. The J2000 method is best matched to the way +** the argument is handled internally and will deliver the +** optimum resolution. The MJD method and the date & time methods +** are both good compromises between resolution and convenience. +** +** 2) The Celestial Intermediate Pole coordinates are the x,y components +** of the unit vector in the Geocentric Celestial Reference System. +** +** 3) The CIO locator s (in radians) positions the Celestial +** Intermediate Origin on the equator of the CIP. +** +** 4) Series-based solutions for generating X and Y are also available: +** see Capitaine & Wallace (2006) and iauXy06. +** +** Called: +** iauPnm06a classical NPB matrix, IAU 2006/2000A +** iauBpn2xy extract CIP X,Y coordinates from NPB matrix +** iauS06 the CIO locator s, given X,Y, IAU 2006 +** +** References: +** +** Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855 +** +** Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981 +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + double rbpn[3][3]; + + +/* Form the bias-precession-nutation matrix, IAU 2006/2000A. */ + iauPnm06a(date1, date2, rbpn); + +/* Extract X,Y. */ + iauBpn2xy(rbpn, x, y); + +/* Obtain s. */ + *s = iauS06(date1, date2, *x, *y); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/zp.c b/20200721/c/src/zp.c new file mode 100644 index 0000000..bc28a3f --- /dev/null +++ b/20200721/c/src/zp.c @@ -0,0 +1,127 @@ +#include "sofa.h" + +void iauZp(double p[3]) +/* +** - - - - - - +** i a u Z p +** - - - - - - +** +** Zero a p-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** p double[3] p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + p[0] = 0.0; + p[1] = 0.0; + p[2] = 0.0; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/zpv.c b/20200721/c/src/zpv.c new file mode 100644 index 0000000..6020070 --- /dev/null +++ b/20200721/c/src/zpv.c @@ -0,0 +1,129 @@ +#include "sofa.h" + +void iauZpv(double pv[2][3]) +/* +** - - - - - - - +** i a u Z p v +** - - - - - - - +** +** Zero a pv-vector. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** pv double[2][3] pv-vector +** +** Called: +** iauZp zero p-vector +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + iauZp(pv[0]); + iauZp(pv[1]); + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +} diff --git a/20200721/c/src/zr.c b/20200721/c/src/zr.c new file mode 100644 index 0000000..d9aeb95 --- /dev/null +++ b/20200721/c/src/zr.c @@ -0,0 +1,133 @@ +#include "sofa.h" + +void iauZr(double r[3][3]) +/* +** - - - - - - +** i a u Z r +** - - - - - - +** +** Initialize an r-matrix to the null matrix. +** +** This function is part of the International Astronomical Union's +** SOFA (Standards Of Fundamental Astronomy) software collection. +** +** Status: vector/matrix support function. +** +** Returned: +** r double[3][3] r-matrix +** +** This revision: 2013 June 18 +** +** SOFA release 2020-07-21 +** +** Copyright (C) 2020 IAU SOFA Board. See notes at end. +*/ +{ + r[0][0] = 0.0; + r[0][1] = 0.0; + r[0][2] = 0.0; + r[1][0] = 0.0; + r[1][1] = 0.0; + r[1][2] = 0.0; + r[2][0] = 0.0; + r[2][1] = 0.0; + r[2][2] = 0.0; + + return; + +/*---------------------------------------------------------------------- +** +** Copyright (C) 2020 +** Standards Of Fundamental Astronomy Board +** of the International Astronomical Union. +** +** ===================== +** SOFA Software License +** ===================== +** +** NOTICE TO USER: +** +** BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND +** CONDITIONS WHICH APPLY TO ITS USE. +** +** 1. The Software is owned by the IAU SOFA Board ("SOFA"). +** +** 2. Permission is granted to anyone to use the SOFA software for any +** purpose, including commercial applications, free of charge and +** without payment of royalties, subject to the conditions and +** restrictions listed below. +** +** 3. You (the user) may copy and distribute SOFA source code to others, +** and use and adapt its code and algorithms in your own software, +** on a world-wide, royalty-free basis. That portion of your +** distribution that does not consist of intact and unchanged copies +** of SOFA source code files is a "derived work" that must comply +** with the following requirements: +** +** a) Your work shall be marked or carry a statement that it +** (i) uses routines and computations derived by you from +** software provided by SOFA under license to you; and +** (ii) does not itself constitute software provided by and/or +** endorsed by SOFA. +** +** b) The source code of your derived work must contain descriptions +** of how the derived work is based upon, contains and/or differs +** from the original SOFA software. +** +** c) The names of all routines in your derived work shall not +** include the prefix "iau" or "sofa" or trivial modifications +** thereof such as changes of case. +** +** d) The origin of the SOFA components of your derived work must +** not be misrepresented; you must not claim that you wrote the +** original software, nor file a patent application for SOFA +** software or algorithms embedded in the SOFA software. +** +** e) These requirements must be reproduced intact in any source +** distribution and shall apply to anyone to whom you have +** granted a further right to modify the source code of your +** derived work. +** +** Note that, as originally distributed, the SOFA software is +** intended to be a definitive implementation of the IAU standards, +** and consequently third-party modifications are discouraged. All +** variations, no matter how minor, must be explicitly marked as +** such, as explained above. +** +** 4. You shall not cause the SOFA software to be brought into +** disrepute, either by misuse, or use for inappropriate tasks, or +** by inappropriate modification. +** +** 5. The SOFA software is provided "as is" and SOFA makes no warranty +** as to its use or performance. SOFA does not and cannot warrant +** the performance or results which the user may obtain by using the +** SOFA software. SOFA makes no warranties, express or implied, as +** to non-infringement of third party rights, merchantability, or +** fitness for any particular purpose. In no event will SOFA be +** liable to the user for any consequential, incidental, or special +** damages, including any lost profits or lost savings, even if a +** SOFA representative has been advised of such damages, or for any +** claim by any third party. +** +** 6. The provision of any version of the SOFA software under the terms +** and conditions specified herein does not imply that future +** versions will also be made available under the same terms and +** conditions. +* +** In any published work or commercial product which uses the SOFA +** software directly, acknowledgement (see www.iausofa.org) is +** appreciated. +** +** Correspondence concerning SOFA software should be addressed as +** follows: +** +** By email: sofa@ukho.gov.uk +** By post: IAU SOFA Center +** HM Nautical Almanac Office +** UK Hydrographic Office +** Admiralty Way, Taunton +** Somerset, TA1 2DN +** United Kingdom +** +**--------------------------------------------------------------------*/ +}

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%0Aw=IVC5 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