Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solvers-acuk-m
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Takhir Fakhrutdinov
solvers-acuk-m
Commits
f065f5e6
Commit
f065f5e6
authored
Apr 21, 2022
by
Takhir Fakhrutdinov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Добавили sofa
parent
e43abc5f
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
850 additions
and
0 deletions
+850
-0
sofa.h
sofa_c/src/sofa.h
+628
-0
sofam.h
sofa_c/src/sofam.h
+222
-0
No files found.
sofa_c/src/sofa.h
0 → 100644
View file @
f065f5e6
#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: 2021 April 18
**
** SOFA release 2021-05-12
**
** Copyright (C) 2021 IAU SOFA Board. See notes at end.
*/
#include "math.h"
#ifdef __cplusplus
extern
"C"
{
#endif
/* 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
;
/* 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
iauAtcc13
(
double
rc
,
double
dc
,
double
pr
,
double
pd
,
double
px
,
double
rv
,
double
date1
,
double
date2
,
double
*
ra
,
double
*
da
);
void
iauAtccq
(
double
rc
,
double
dc
,
double
pr
,
double
pd
,
double
px
,
double
rv
,
iauASTROM
*
astrom
,
double
*
ra
,
double
*
da
);
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
]);
void
iauMoon98
(
double
date1
,
double
date2
,
double
pv
[
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) 2021
** 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
**
**--------------------------------------------------------------------*/
sofa_c/src/sofam.h
0 → 100644
View file @
f065f5e6
#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: 2021 February 24
**
** SOFA release 2021-05-12
**
** Copyright (C) 2021 IAU SOFA Board. See notes at end.
*/
/* 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) 2021
** 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
**
**--------------------------------------------------------------------*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment