-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGeppert_field_decay.cpp
96 lines (77 loc) · 3.8 KB
/
Geppert_field_decay.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <cmath>
#include "stars.h"
using namespace std;
//-----------------------------------------------------------------
// Период вращения нейтронной звезды. Формулы для периода с учётом
// убывания магнитного поля получены в основной работе методом
// интегрирования дифференциального уравнения для электромагнитного
// дипольного излучения и токовых потерь
double MFDPons::get_P (double t, double B, double i_incl, double P) {
double P_res, I, tmp;
// I = 2./5. * M*M_sol*pow(R,2);
// t = t - tau;
I = 1e45;
// alpha = paramet_B->get_alpha();
// tau_ohm = paramet_B->get_tau_ohm();
double tau_mu = 3.*pow(light_velocity,3)*I/2./pow(B,2)/pow(1e6,6);
if (t<=1e6) {
tmp = alpha*pow(e, -t/tau_ohm);
P_res = sqrt(P*P - 8*3.2e7*pi*pi*tau_ohm/tau_mu*(log(abs(tmp-alpha-1))/alpha/alpha-(alpha+1)/(tmp*alpha*alpha-alpha*alpha*alpha-alpha*alpha)) + 8*3.2e7*pi*pi*tau_ohm/tau_mu/alpha/alpha*(alpha+1));
} else {
tmp = get_P(1e6, B, i_incl, P);
P_res = sqrt(tmp*tmp + 16*pi*pi*pow(1e6, 6)*pow(get_B(t, B, i_incl, P),2)/3./I/pow(light_velocity, 3)*t/lsec);
}
return P_res;
}
//-------------------------------------------------------------------
double MFDPons::get_incl (double t, double B, double i_incl, double P) {
return i_incl;
}
//-------------------------------------------------------------------
// Первая производная периода. Формулы взяты из исходного дифферен-
// циального уравнения
double MFDPons::get_dot_P (double t, double B, double i_incl, double P) {
double res, I;
I=1e45;
double tau_mu = 3.*pow(light_velocity,3)*I/2./pow(B,2)/pow(1e6,6);
if (t>1e6) {
res = 4*pi*pi/tau_mu*pow(e, -2.*1e6/tau_ohm)/get_P(t, B, i_incl, P)/pow(1.+alpha*(1.-pow(e,-1e6/tau_ohm)), 2);
} else {
res = 4*pi*pi/tau_mu*pow(e, -2*t/tau_ohm)/get_P(t, B, i_incl, P)/pow(1.+alpha*(1.-pow(e,-t/tau_ohm)), 2);
}
return res;
}
//-------------------------------------------------------------------
//------------------------------------------------------------------
// Падение магнитного поля в соотвествии со статьёй Pons, 2009
// Формула получена из личной переписки
double MFDPons::get_B (double T, double B, double i_incl, double P) {
double res_B;
// double alpha = paramet_B->get_alpha();
// double tau_ohm = paramet_B->get_tau_ohm();
// T = T - tau;
if (T<1e6) {
res_B = B * pow(e, -T/tau_ohm) / (1.+alpha*(1.-pow(e, -T/tau_ohm)));
} else {
res_B = B * pow(e, -1e6/tau_ohm) / (1.+alpha*(1.-pow(e, -1e6/tau_ohm)));
}
return res_B;
}
//------------------------------------------------------------------
void MFDPons::print_description (ostream * out) {
*out<<"#// Model of magnetic field decay is the same as in article //"<<endl;
*out<<"#// by Pons et al. (2007). Before 1e6 years field decays and //"<<endl;
*out<<"#// after it is constant. //"<<endl;
*out<<"#//----------------------------------------------------------//"<<endl;
}
void MFDPons::print_parameters (ostream * out) {
*out<<"// Parameters of magnetic field decay //"<<endl;
*out<<"//----------------------------------------------------------//"<<endl;
*out<<"// alpha - "<<alpha<<endl;
*out<<"// tau_ohm - "<<tau_ohm<<endl;
*out<<"//----------------------------------------------------------//"<<endl;
}
MFDPons::MFDPons (vector <double> * values) {
alpha = values->at(1);
tau_ohm = values->at(3);
}