@@ -6,31 +6,57 @@ namespace RK
6
6
{
7
7
public static class Solver
8
8
{
9
- static double [ ] SolveOnePoint ( double tInit , double [ ] yInit ,
9
+ public const double Pi = Math . PI ;
10
+
11
+ public static double [ ] InitialConditions ( double phi0 , double theta0 , double psi0 )
12
+ {
13
+ var sPh0 = Math . Sin ( phi0 * Pi / 2 ) ;
14
+ var sPs0 = Math . Sin ( psi0 * Pi / 2 ) ;
15
+ var sTh0 = Math . Sin ( theta0 * Pi / 2 ) ;
16
+ var cPh0 = Math . Cos ( phi0 * Pi / 2 ) ;
17
+ var cPs0 = Math . Cos ( psi0 * Pi / 2 ) ;
18
+ var cTh0 = Math . Cos ( theta0 * Pi / 2 ) ;
19
+
20
+ var lambda0 = cPh0 * cPs0 * cTh0 + sPh0 * sPs0 * sTh0 ;
21
+ var lambda1 = sPh0 * cPs0 * cTh0 - cPh0 * sPs0 * sTh0 ;
22
+ var lambda2 = cPh0 * cPs0 * sTh0 + sPh0 * sPs0 * cTh0 ;
23
+ var lambda3 = cPh0 * sPs0 * cTh0 - sPh0 * cPs0 * sTh0 ;
24
+ return new [ ] { lambda0 , lambda1 , lambda2 , lambda3 , 0 , 1 , 0 } ;
25
+
26
+ }
27
+
28
+ private static double Psi ( this double [ ] y )
29
+ {
30
+ var alpha1 = y [ 0 ] * y [ 0 ] + y [ 1 ] * y [ 1 ] - y [ 2 ] * y [ 2 ] - y [ 3 ] * y [ 3 ] ;
31
+ var beta1 = 2 * ( y [ 1 ] * y [ 2 ] + y [ 0 ] * y [ 3 ] ) ;
32
+ return Math . Abs ( Math . Atan ( beta1 / alpha1 ) ) ;
33
+ }
34
+
35
+ private static double Phi ( this double [ ] y )
36
+ {
37
+ var gamma2 = 2 * ( y [ 2 ] * y [ 3 ] + y [ 0 ] * y [ 1 ] ) ;
38
+ var gamma3 = y [ 0 ] * y [ 0 ] - y [ 1 ] * y [ 1 ] - y [ 2 ] * y [ 2 ] + y [ 3 ] * y [ 3 ] ;
39
+ return Math . Abs ( Math . Atan ( gamma2 / gamma3 ) ) ;
40
+ }
41
+
42
+ private static double Theta ( this double [ ] y )
43
+ {
44
+ var gamma1 = 2 * ( y [ 1 ] * y [ 3 ] - y [ 0 ] * y [ 2 ] ) ;
45
+ return Math . Abs ( - Math . Asin ( gamma1 ) ) ;
46
+ }
47
+
48
+ static void SolveOnePoint ( double tInit , double [ ] yInit ,
10
49
double epsilon , double delta ,
11
50
double timePeriod , double timeStep )
12
51
{
13
52
var rk4 = new GravitationalMomentEquations ( epsilon , delta ) ;
14
53
rk4 . SetInit ( tInit , yInit ) ;
15
- var write = new StreamWriter ( "Test.txt" ) ;
16
-
54
+
17
55
while ( rk4 . GetTime ( ) < timePeriod )
18
56
{
19
- write . WriteLine ( "{0}\t {1}\t {2}\t {3}\t {4}\t {5}\t {6}\t {7}" ,
20
- Convert . ToString ( rk4 . GetTime ( ) , CultureInfo . InvariantCulture ) ,
21
- Convert . ToString ( rk4 . Y [ 0 ] , CultureInfo . InvariantCulture ) ,
22
- Convert . ToString ( rk4 . Y [ 1 ] , CultureInfo . InvariantCulture ) ,
23
- Convert . ToString ( rk4 . Y [ 2 ] , CultureInfo . InvariantCulture ) ,
24
- Convert . ToString ( rk4 . Y [ 3 ] , CultureInfo . InvariantCulture ) ,
25
- Convert . ToString ( rk4 . Y [ 4 ] , CultureInfo . InvariantCulture ) ,
26
- Convert . ToString ( rk4 . Y [ 5 ] , CultureInfo . InvariantCulture ) ,
27
- Convert . ToString ( rk4 . Y [ 6 ] , CultureInfo . InvariantCulture ) ) ;
28
-
57
+ //rk4.Y
29
58
rk4 . NextStep ( timeStep ) ;
30
59
}
31
-
32
- write . Close ( ) ;
33
- return rk4 . Y ;
34
60
}
35
61
}
36
62
}
0 commit comments