Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
common
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Alexander Lapshin
common
Commits
cbaaa495
Commit
cbaaa495
authored
Oct 08, 2018
by
Alexander Lapshin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
76023efb
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
392 additions
and
313 deletions
+392
-313
BNOAstroBase.cpp
bnolib/BNOAstroBase.cpp
+33
-33
IModel.h
bnolib/IModel.h
+78
-76
ODESystem.cpp
bnolib/ODESystem.cpp
+23
-12
ODESystem.h
bnolib/ODESystem.h
+0
-1
SGravity.h
bnolib/SGravity.h
+173
-103
ephemeris.cpp
bnolib/ephemeris.cpp
+84
-83
TextFunctions.h
utils/TextFunctions.h
+1
-1
interpolate.cpp
utils/interpolate.cpp
+0
-4
No files found.
bnolib/BNOAstroBase.cpp
View file @
cbaaa495
...
...
@@ -660,10 +660,10 @@ void BNOAstroBase::GetPosGelio(TPlanetId pl, const TimeJD &t, Vect3 *crd, Vect3
}
}
//-----------------------------------------------------------------------------
//
//
void
BNOAstroBase
::
GetPosGeo
(
TPlanetId
pl
,
const
TimeJD
&
t
,
Vect3
*
crd
,
Vect3
*
vel
,
Vect3
*
acc
)
const
{
{
if
(
pl
==
plIdEarth
||
pl
==
plIdMoon
)
{
const
IEphemeride
*
iph
=
GetPlanet
(
pl
)
->
GetEphemeride
();
...
...
@@ -696,7 +696,7 @@ void BNOAstroBase::GetPosGeo(TPlanetId pl, const TimeJD &t, Vect3 *crd, Vect3 *v
(
*
acc
)
+=
as
;
}
}
}
}
//-----------------------------------------------------------------------------
//
bool
BNOAstroBase
::
Init
(
bool
noAtm
,
bool
loadPlanets
)
...
...
bnolib/IModel.h
View file @
cbaaa495
...
...
@@ -11,14 +11,14 @@
#include "DVectors.h"
#include "Ids.h"
///////////////////////////////////////////////////////////////////////////////
// ,
//
// ,
//
class
IEphemeride
{
public
:
{
public
:
//
virtual
~
IEphemeride
()
{}
;
{}
;
//
virtual
bool
LoadData
(
const
TimeJD
&
s
,
const
TimeJD
&
e
)
=
0
;
//
...
...
@@ -28,23 +28,23 @@ class IEphemeride
Vect3
*
vel
=
NULL
,
Vect3
*
acc
=
NULL
)
const
=
0
;
//
virtual
TCoordSysId
GetCS
()
const
=
0
;
};
};
///////////////////////////////////////////////////////////////////////////////
//
//
class
TGeometryModel
{
public
:
{
public
:
double
Re
;
//
double
alpha
;
//
};
};
///////////////////////////////////////////////////////////////////////////////
//
//
class
IAtmosphereModel
{
public
:
{
public
:
// .
virtual
~
IAtmosphereModel
()
{}
;
{};
// .
//
virtual
double
Density
(
const
TimeJD
&
t
,
const
Vect3
&
v
,
const
Vect3
&
vSun
)
...
...
@@ -55,46 +55,46 @@ class IAtmosphereModel
virtual
bool
IsSunPosNeed
()
const
=
0
;
// ?
virtual
bool
IsTableNeed
()
const
=
0
;
};
};
///////////////////////////////////////////////////////////////////////////////
// ,
// ,
class
TGeoSolarFlux
{
public
:
{
public
:
double
f135
;
// 135 - 77
double
f90
;
// 90 - ???
double
f81
;
// 81 - ???
double
f135w
;
// 135
double
f81w
;
// 81 - 90
double
f01
;
// 1 -
double
kp
;
// ( )
int
ap
;
//
double
kp
;
// ( )
int
ap
;
//
double
three_hours_kp
[
8
];
//
bool
iskp3
;
};
};
///////////////////////////////////////////////////////////////////////////////
//
//
class
ITableGeoSolarFlux
{
public
:
{
public
:
//
virtual
~
ITableGeoSolarFlux
()
{}
;
{}
;
//
virtual
const
TGeoSolarFlux
*
Get_F107
(
const
TimeJD
&
tm
)
const
=
0
;
//
virtual
const
double
*
Get_Kp3hour
(
const
TimeJD
&
tm
)
const
=
0
;
//
virtual
double
Get_Kp3hourMod
(
const
TimeJD
&
tm
)
const
=
0
;
};
};
///////////////////////////////////////////////////////////////////////////////
//
//
class
IGravityModel
{
public
:
{
public
:
//
virtual
~
IGravityModel
()
{}
;
{};
//
virtual
double
c
(
unsigned
int
n
,
unsigned
int
m
)
const
=
0
;
virtual
double
d
(
unsigned
int
n
,
unsigned
int
m
)
const
=
0
;
...
...
@@ -103,16 +103,18 @@ class IGravityModel
virtual
unsigned
int
M
()
const
=
0
;
//
virtual
TGravityModelId
GetID
()
const
=
0
;
virtual
const
double
*
const
*
get_cc
()
const
{
return
0
;
}
virtual
const
double
*
const
*
get_dd
()
const
{
return
0
;
}
double
mu
;
//
double
Re
;
//
double
alpha
;
//
};
};
///////////////////////////////////////////////////////////////////////////////
//
//
class
IPlanet
{
public
:
{
public
:
//
IPlanet
()
{};
...
...
@@ -135,6 +137,6 @@ class IPlanet
double
omega
;
//
double
RShad
;
//
TGeometryModel
Geometry
;
};
};
///////////////////////////////////////////////////////////////////////////////
#endif
bnolib/ODESystem.cpp
View file @
cbaaa495
...
...
@@ -7,6 +7,8 @@
#include "ODESystem.h"
#include "GeoCoords.h"
#include "IAstroBase.h"
#include "EarthGravity.h"
///////////////////////////////////////////////////////////////////////////////
//
//-----------------------------------------------------------------------------
...
...
@@ -216,18 +218,22 @@ void ODEPhaseSystem::EarthNonCentralAcc(Vect3 &acc, const Vect3 &pos)
double
p0
=
p0_1
;
double
cn0
,
t1
;
const
double
*
const
*
CC
=
EarthGravity
->
get_cc
();
const
double
*
const
*
DD
=
EarthGravity
->
get_dd
();
int
n
;
for
(
n
=
2
;
n
<=
Ng
;
n
++
)
{
ro1
*=
ro
;
Ron
[
n
]
=
ro1
;
cn0
=
EarthGravity
->
c
(
n
,
0
)
*
ro1
;
x0
+=
cn0
*
(
n
+
1
)
*
p0
;
//cn0 = EarthGravity->c(n, 0) * ro1;
cn0
=
CC
[
0
][
n
]
*
ro1
;
x0
+=
cn0
*
(
n
+
1
)
*
p0
;
x2
+=
cn0
*
Pm
[
n
];
if
(
n
==
Ng
)
break
;
t1
=
(
2
*
n
+
1
)
*
zr
;
Pm
[
n
+
1
]
=
(
t1
*
Pm
[
n
]
-
(
n
+
1
)
*
Pm
[
n
-
1
])
/
n
;
Pm
[
n
+
1
]
=
(
t1
*
Pm
[
n
]
-
(
n
+
1
)
*
Pm
[
n
-
1
])
/
n
;
p0
=
(
t1
*
p0_1
-
n
*
p0_2
)
/
(
n
+
1
);
p0_2
=
p0_1
;
p0_1
=
p0
;
...
...
@@ -244,7 +250,7 @@ void ODEPhaseSystem::EarthNonCentralAcc(Vect3 &acc, const Vect3 &pos)
double
z12
=
0
;
int
m
;
double
cm
=
0.0
,
sm
=
0.0
,
cc
;
double
cm
=
0.0
,
sm
=
0.0
,
cc
;
for
(
m
=
1
;
m
<=
Mg
;
m
++
)
{
double
x01
=
0
;
...
...
@@ -264,8 +270,13 @@ void ODEPhaseSystem::EarthNonCentralAcc(Vect3 &acc, const Vect3 &pos)
for
(;
n
<=
Mg
;
n
++
)
{
t1
=
Ron
[
n
];
double
cnm
=
EarthGravity
->
c
(
n
,
m
)
*
t1
;
double
dnm
=
EarthGravity
->
d
(
n
,
m
)
*
t1
;
//double cnm = EarthGravity->c(n, m) * t1;
double
cnm
=
CC
[
m
][
n
]
*
t1
;
//double dnm = EarthGravity->d(n, m) * t1;
double
dnm
=
DD
[
m
][
n
]
*
t1
;
t1
=
Pm
[
n
];
double
t2
=
cnm
*
t1
;
...
...
bnolib/ODESystem.h
View file @
cbaaa495
...
...
@@ -110,4 +110,3 @@ class ODEVarSystem : public ODEPhaseSystem
///////////////////////////////////////////////////////////////////////////////
#endif
bnolib/SGravity.h
View file @
cbaaa495
...
...
@@ -12,61 +12,89 @@
// ( )
///////////////////////////////////////////////////////////////////////////////
class
SGravityModel
:
public
IGravityModel
{
public
:
{
public
:
//
SGravityModel
()
{};
{}
//
SGravityModel
(
double
m
,
double
r
,
double
a
)
{
mu
=
m
;
Re
=
r
;
alpha
=
a
;};
{
mu
=
m
;
Re
=
r
;
alpha
=
a
;
}
//
virtual
double
c
(
unsigned
int
/*n*/
,
unsigned
int
/*m*/
)
const
{
return
0
;};
{
return
0
;
}
virtual
double
d
(
unsigned
int
/*n*/
,
unsigned
int
/*m*/
)
const
{
return
0
;};
{
return
0
;
}
//
virtual
unsigned
int
N
()
const
{
return
0
;};
{
return
0
;
}
virtual
unsigned
int
M
()
const
{
return
0
;};
{
return
0
;
};
//
virtual
TGravityModelId
GetID
()
const
{
return
grIdMu
;};
{
return
grIdMu
;
};
};
///////////////////////////////////////////////////////////////////////////////
// PZ90
///////////////////////////////////////////////////////////////////////////////
class
EarthPZ90GravityModel
:
public
IGravityModel
{
public
:
{
public
:
//
EarthPZ90GravityModel
();
//
virtual
double
c
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
CC
[
m
][
n
];};
{
return
CC
[
m
][
n
];
};
virtual
double
d
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
DD
[
m
][
n
];
};
{
return
DD
[
m
][
n
];
};
virtual
const
double
*
const
*
get_cc
()
const
{
return
CC
;
}
virtual
const
double
*
const
*
get_dd
()
const
{
return
DD
;
}
//
virtual
unsigned
int
N
()
const
{
return
36
;
};
{
return
36
;
};
virtual
unsigned
int
M
()
const
{
return
36
;
};
{
return
36
;
};
//
virtual
TGravityModelId
GetID
()
const
{
return
grIdPZ90
;};
{
return
grIdPZ90
;
};
protected
:
protected
:
//
double
**
CC
;
double
**
DD
;
};
};
///////////////////////////////////////////////////////////////////////////////
// ( )
///////////////////////////////////////////////////////////////////////////////
...
...
@@ -76,21 +104,43 @@ public:
//
EarthPZ902GravityModel
();
double
**
getCC
()
const
{
return
CC
;
}
double
**
getDD
()
const
{
return
DD
;
}
//
virtual
double
c
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
CC
[
m
][
n
];};
{
return
CC
[
m
][
n
];
};
virtual
double
d
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
DD
[
m
][
n
];
};
{
return
DD
[
m
][
n
];
};
virtual
const
double
*
const
*
get_cc
()
const
{
return
CC
;
}
virtual
const
double
*
const
*
get_dd
()
const
{
return
DD
;
}
//
virtual
unsigned
int
N
()
const
{
return
36
;
};
{
return
36
;
};
virtual
unsigned
int
M
()
const
{
return
36
;
};
{
return
36
;
};
//
virtual
TGravityModelId
GetID
()
const
{
return
grIdPZ902s
;};
{
return
grIdPZ902s
;
};
protected
:
//
...
...
@@ -101,8 +151,8 @@ protected:
// ( )
///////////////////////////////////////////////////////////////////////////////
class
GravityModel
:
public
IGravityModel
{
public
:
{
public
:
// ,
//
GravityModel
(
TGravityModelId
Id
,
unsigned
int
N
,
unsigned
int
M
,
...
...
@@ -112,29 +162,49 @@ class GravityModel : public IGravityModel
//
virtual
~
GravityModel
()
{
freeAll
();};
{
freeAll
();
};
//
virtual
double
c
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
CC
[
m
][
n
];};
{
return
CC
[
m
][
n
];
};
virtual
double
d
(
unsigned
int
n
,
unsigned
int
m
)
const
{
return
DD
[
m
][
n
];
};
{
return
DD
[
m
][
n
];
};
//
double
c
(
unsigned
int
n
,
unsigned
int
m
,
double
value
)
{
return
(
CC
[
m
][
n
]
=
value
);
};
{
return
(
CC
[
m
][
n
]
=
value
);
};
double
d
(
unsigned
int
n
,
unsigned
int
m
,
double
value
)
{
return
(
DD
[
m
][
n
]
=
value
);
};
{
return
(
DD
[
m
][
n
]
=
value
);
};
virtual
const
double
*
const
*
get_cc
()
const
{
return
CC
;
}
virtual
const
double
*
const
*
get_dd
()
const
{
return
DD
;
}
//
virtual
unsigned
int
N
()
const
{
return
N_
;
};
{
return
N_
;
};
virtual
unsigned
int
M
()
const
{
return
M_
;
};
{
return
M_
;
};
//
virtual
TGravityModelId
GetID
()
const
{
return
Id
;};
{
return
Id
;
};
//
//
...
...
@@ -149,7 +219,7 @@ class GravityModel : public IGravityModel
//
TGravityModelId
Id
;
protected
:
protected
:
//
double
**
CC
;
double
**
DD
;
...
...
@@ -162,6 +232,6 @@ class GravityModel : public IGravityModel
void
freeAll
();
//
void
SetSize
(
unsigned
int
N
,
unsigned
int
M
);
};
};
///////////////////////////////////////////////////////////////////////////////
#endif
bnolib/ephemeris.cpp
View file @
cbaaa495
...
...
@@ -151,7 +151,7 @@ bool Ephemeride::ReadData(const TimeJD &start, const TimeJD &end)
//---------------------------------------------------------------------------
void
Ephemeride
::
CalculatePolynom
(
double
t_cheb
,
double
*
coeff
,
double
*
coord
,
double
*
coord_dt
,
double
*
coord_dt2
)
const
{
{
double
b2
=
0.0
;
double
b1
=
0.0
;
double
b
;
...
...
@@ -188,20 +188,21 @@ void Ephemeride::CalculatePolynom(double t_cheb, double *coeff, double *coord,
if
(
coord_dt
)
*
coord_dt
=
b1
+
b_s
*
t_cheb
-
b2_s
;
if
(
coord_dt2
)
*
coord_dt2
=
2.0
*
b1_s
+
b1_ss
*
t_cheb
-
b2_ss
;
}
*
coord_dt2
=
2.0
*
b1_s
+
b1_ss
*
t_cheb
-
b2_ss
;
}
//---------------------------------------------------------------------------
void
Ephemeride
::
GetPosition
(
const
TimeJD
&
t
,
Vect3
*
pos
,
Vect3
*
vel
,
Vect3
*
acc
)
const
{
TimeJD
tdb
(
t
);
{
TAssert
(
XCoefs
!=
NULL
);
TAssert
(
tdb
>=
StartTime
&&
tdb
<=
EndTime
);
//
TAssert(XCoefs != NULL);
//
TAssert(tdb >= StartTime && tdb <= EndTime);
if
(
GetFromCash
(
t
,
pos
,
vel
,
acc
))
return
;
TimeJD
tdb
(
t
);
double
diff
=
(
tdb
-
StartTime
).
GetDouble
();
double
tch
=
2.0
*
fmod
(
diff
/
DInterval
[
BodyID
],
1.0
)
-
1.0
;
int
offset
=
(
int
)
floor
(
diff
/
DInterval
[
BodyID
])
*
(
Order
[
BodyID
]
+
1
);
...
...
@@ -247,7 +248,7 @@ void Ephemeride::GetPosition(const TimeJD &t, Vect3 *pos,
PutToCash
(
t
,
pos
,
vel
,
acc
);
return
;
}
}
//---------------------------------------------------------------------------
//
bool
Ephemeride
::
GetFromCash
(
const
TimeJD
&
t
,
Vect3
*
pos
,
Vect3
*
vel
,
Vect3
*
acc
)
const
...
...
utils/TextFunctions.h
View file @
cbaaa495
...
...
@@ -185,7 +185,7 @@ static bool ReadFile(std::string path, std::string &str)
size_t
res
=
fread
(
buf
,
len
,
1
,
fp
);
//read into buffer
fclose
(
fp
);
str
=
std
::
string
(
buf
);
delete
buf
;
delete
[]
buf
;
if
(
!
res
){
return
false
;
...
...
utils/interpolate.cpp
View file @
cbaaa495
...
...
@@ -104,10 +104,6 @@ void XInterpolator::calc_positions(const SInitOrbit& orbit, const TimeJD& beg, c
TimeJD
beg_ext
=
ShiftDate
(
beg
,
-
n
*
step
);
TimeJD
end_ext
=
ShiftDate
(
end
,
+
n
*
step
);
// std::string s_beg = DateToStr(beg);
// std::string s_date = DateToStr(orbDate);
// std::string s_end = DateToStr(end);
if
(
orbit
.
GetDate
()
<=
beg_ext
){
propagate
(
orbit
,
beg_ext
,
end_ext
,
1
,
result
);
}
else
if
(
orbit
.
GetDate
()
>=
end_ext
){
...
...
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