68 {50, 0.0409, 1.072, -0.0641, -1.054},
69 {100, 0.0711, 0.899, -0.171, -0.720},
70 {500, 0.130, 0.674, -0.271, -0.319},
71 {1000,0.142, 0.657, -0.277, -0.268}
78 if(E0 <= SIparameters[0].E) {
79 C1 = SIparameters[0].
C1;
80 C2 = SIparameters[0].
C2;
81 C3 = SIparameters[0].
C3;
82 C4 = SIparameters[0].
C4;
83 }
else if (E0 >= SIparameters[3].E) {
84 C1 = SIparameters[3].
C1;
85 C2 = SIparameters[3].
C2;
86 C3 = SIparameters[3].
C3;
87 C4 = SIparameters[3].
C4;
89 for(
int i=0;
i<3;
i++) {
90 if(SIparameters[
i].E < E0 && SIparameters[
i+1].E > E0) {
91 Real interp = (E0 - SIparameters[
i].
E) / (SIparameters[
i+1].E - SIparameters[
i].E);
92 C1 = (1.-interp) * SIparameters[
i].C1 + interp * SIparameters[
i+1].C1;
93 C2 = (1.-interp) * SIparameters[
i].C2 + interp * SIparameters[
i+1].C2;
94 C3 = (1.-interp) * SIparameters[
i].C3 + interp * SIparameters[
i+1].C3;
95 C4 = (1.-interp) * SIparameters[
i].C4 + interp * SIparameters[
i+1].C4;
99 return (C2 + C1*Chi)*exp(C4*Chi + C3*Chi*Chi);
103int main(
int argc,
char** argv) {
106 std::cerr <<
"Syntax: sigmaProfiles <Density (1/m³)> <Temperature (K)>" << std::endl;
109 Real rhon = atof(argv[1]);
110 Real T = atof(argv[2]);
111 std::string filename =
"NRLMSIS.dat";
116 66, 68, 71, 74, 78, 82, 87, 92, 98, 104, 111,
117 118, 126, 134, 143, 152, 162, 172, 183, 194
121 ifstream in(filename);
123 cerr <<
"(ionosphere) WARNING: Atmospheric Model file " << filename <<
" could not be opened: " <<
124 strerror(errno) << endl
125 <<
"(ionosphere) All atmospheric values will be zero, and there will be no ionization!" << endl;
128 Real integratedDensity = 0;
129 Real prevDensity = 0;
130 Real prevAltitude = 0;
131 std::vector<std::array<Real, 5>> MSISvalues;
133 Real altitude, massdensity, Odensity, N2density, O2density, neutralTemperature;
134 in >> altitude >> Odensity >> N2density >> O2density >> massdensity >> neutralTemperature;
136 integratedDensity += (altitude - prevAltitude) *1000 * 0.5 * (massdensity + prevDensity);
138 Real nui = 1e-17*(3.67*Odensity + 5.14*N2density + 2.59*O2density);
140 Real nue = 1e-17*(8.9*Odensity + 2.33*N2density + 18.2*O2density);
141 prevAltitude = altitude;
142 prevDensity = massdensity;
143 MSISvalues.push_back({altitude, massdensity, nui, nue, integratedDensity});
147 for(
unsigned int i=1;
i<MSISvalues.size();
i++) {
148 Real altitude = MSISvalues[
i][0];
152 Real interpolationFactor = (alt[altindex] - MSISvalues[
i-1][0]) / (MSISvalues[
i][0] - MSISvalues[
i-1][0]);
156 newLayer.
density = fmax((1.-interpolationFactor) * MSISvalues[
i-1][1] + interpolationFactor * MSISvalues[
i][1], 0.);
157 newLayer.
depth = fmax((1.-interpolationFactor) * MSISvalues[
i-1][4] + interpolationFactor * MSISvalues[
i][4], 0.);
159 newLayer.
nui = fmax((1.-interpolationFactor) * MSISvalues[
i-1][2] + interpolationFactor * MSISvalues[
i][2], 0.);
160 newLayer.
nue = fmax((1.-interpolationFactor) * MSISvalues[
i-1][3] + interpolationFactor * MSISvalues[
i][3], 0.);
172 const Real Bval = 5e-5;
205 const Real eps_ion_keV = 0.035;
237 scatteringRate[e][h] =
max(0., rate);
246 std::cerr <<
"# Temperature of " << T <<
" K == Thermal energy of " << tempenergy <<
" keV" << std::endl;
247 Real integralFlux = 0;
258 * deltaE * exp(-energyparam);
274 std::cout <<
"# Altitude (m)\tn_e (1/m³)\tsigmaP (mho)\tsigmaH (mho)\tsigmaParallel (mho)\tProduction rate (m^-3 s^-1)" << std::endl;
275 std::array<Real, numAtmosphereLevels> electronDensity;
278 Real SigmaParallel=0;
294 Real sigmap = (electronDensity[h]+electronDensity[h-1]) * halfCP;
295 Real sigmah = (electronDensity[h]+electronDensity[h-1]) * halfCH;
296 Real sigmaParallel = (electronDensity[h]+electronDensity[h-1]) * halfCpara;
305 SigmaParallel += sigmaParallel;
307 std::cout <<
atmosphere[h].altitude <<
"\t" << 0.5*(electronDensity[h]+electronDensity[h-1]) <<
"\t" << sigmap/(2.*halfdx) <<
"\t" << sigmah/(2.*halfdx) <<
"\t" << sigmaParallel/(2.*halfdx) <<
"\t" << qref << std::endl;
309 std::cerr << std::endl;
311 std::cerr <<
"Integral energy flux: " << integralFlux <<
" J/m²/s" << std::endl;
312 std::cerr <<
"Height integrated conductivities:" << std::endl;
313 std::cerr <<
" SigmaH = " << SigmaH << std::endl;
314 std::cerr <<
" SigmaP = " << SigmaP << std::endl;
315 std::cerr <<
" Sigma∥ = " << SigmaParallel << std::endl;