11 #include "../VariousFunctions/variousFunctions.h"
12 #include "../Exceptions/error.h"
13 #include "../Logging/Output.h"
14 #include "../VariousFunctions/erf.h"
25 bool ReadFromFile(
T &variable, ifstream ¶meters_file,
string variable_name,
string default_value =
"") {
30 parameters_file.clear();
31 parameters_file.seekg(0, ios::beg);
33 string word1=
"", word2=
"";
35 if (!parameters_file.eof()) {
36 while (parameters_file) {
39 parameters_file >> word1;
42 if (word2 == variable_name) {
43 parameters_file >> string_value;
51 if (string_value !=
"") {
57 }
else if (default_value !=
"") {
61 Output::echo(0,
"%s (default value)\n", ostr.str().c_str());
64 throw error_msg(
"ERROR",
"Parameter value %s was not found.\n", variable_name.c_str());
74 ifstream parameters_file;
75 parameters_file.open(filename.c_str());
76 if (parameters_file == NULL) {
77 throw error_msg(
"CONST_FILE_OPEN_ERR",
"Error reading %s for parameters.", filename.c_str());
87 timeStep = timeStep/24.0;
89 totalIterationsNumber = int(nDays/timeStep)+1;
91 ReadFromFile(useRadialDiffusion, parameters_file,
"useRadialDiffusion",
"true");
92 ReadFromFile(useAlphaDiffusion, parameters_file,
"useAlphaDiffusion",
"true");
93 ReadFromFile(useEnergyDiffusion, parameters_file,
"useEnergyDiffusion",
"true");
94 ReadFromFile(useEnergyAlphaMixedTerms, parameters_file,
"usePcAlphaMixedTerms",
"true");
96 if (useRadialDiffusion) {
98 ReadFromFile(DLLType, parameters_file,
"DLLType",
"DLLT_B");
101 Kp.AllocateMemory(totalIterationsNumber);
102 ReadFromFile(useKp, parameters_file,
"useKp",
string(
"file"));
103 if (useKp ==
"file") {
111 ReadFromFile(useBf, parameters_file,
"useBf",
string(
"file"));
112 Bf.AllocateMemory(totalIterationsNumber);
114 if (useBf ==
"file") {
119 }
else if (useBf ==
"constant") {
126 for (
int i = 0; i < totalIterationsNumber; i++) {
128 throw error_msg(
"BF_ERROR",
"Negative or zero Bf[time[%d]=%f]=%f after loading and interpolation.\n", i, timeStep*i, Bf[i]);
133 ReadFromFile(useLpp, parameters_file,
"useLpp",
string(
"No"));
134 Lpp.AllocateMemory(totalIterationsNumber);
135 if (useLpp ==
"file") {
136 ReadFromFile(fileLpp, parameters_file,
"fileLpp",
string(
""));
137 load_1d(Lpp, fileLpp, timeStep);
138 }
else if (useLpp ==
"constant") {
139 ReadFromFile(constLpp, parameters_file,
"constLpp",
"0.0");
141 }
else if (useLpp ==
"calculate" ||
str2bool(useLpp) ==
true) {
144 int iteration, back_it;
145 for (iteration = 0; iteration < totalIterationsNumber; iteration++) {
146 for (back_it = iteration; (fabs(timeStep * back_it - timeStep * iteration) <= 1.0) && (back_it >= 0); back_it--) {
147 Kp24 = (Kp24 > Kp[back_it]) ? Kp24 : Kp[back_it];
149 Lpp[iteration] = (5.6 - 0.46*Kp24);
158 ReadFromFile(usetau, parameters_file,
"usetau",
string(
"constant"));
159 tau.AllocateMemory(totalIterationsNumber);
160 if (usetau ==
"x/Kp") {
163 for (
int i = 0; i < totalIterationsNumber; i++) {
164 tau[i] = tmp_tau/
max(Kp[i], 0.01);
167 }
if (
str2bool(usetau) ==
true || usetau ==
"constant") {
174 ReadFromFile(usetauLpp, parameters_file,
"usetauLpp",
string(
"constant"));
175 tauLpp.AllocateMemory(totalIterationsNumber);
176 if (
str2bool(usetauLpp) ==
true || usetauLpp ==
"constant") {
184 ReadFromFile(outputModelMatrix, parameters_file,
"outputModelMatrix",
"false");
185 ReadFromFile(NoNegative, parameters_file,
"NoNegative",
"false");
186 ReadFromFile(useLossCone, parameters_file,
"useLossCone",
"true");
189 ReadFromFile(general_Output_parameters.timeStep, parameters_file,
"general_Output_parameters.timeStep",
"1");
190 ReadFromFile(general_Output_parameters.iterStep, parameters_file,
"general_Output_parameters.iterStep",
"1");
192 general_Output_parameters.timeStep = general_Output_parameters.timeStep/24.0;
193 ReadFromFile(general_Output_parameters.logFileName, parameters_file,
"general_Output_parameters.logFileName",
"logfile.log");
194 ReadFromFile(general_Output_parameters.folderName, parameters_file,
"general_Output_parameters.folderName",
"./");
195 ReadFromFile(general_Output_parameters.fileName1D, parameters_file,
"general_Output_parameters.fileName1D",
"Out1D.plt");
198 ReadFromFile(radialDiffusionGrid_type, parameters_file,
"radialDiffusionGrid_type");
199 ReadFromFile(localDiffusionsGrid_type, parameters_file,
"localDiffusionsGrid_type");
201 if (radialDiffusionGrid_type ==
"GT_FILE")
202 ReadFromFile(radialDiffusionGrid_filename, parameters_file,
"radialDiffusionGrid_filename");
203 if (localDiffusionsGrid_type ==
"GT_FILE")
204 ReadFromFile(localDiffusionsGrid_filename, parameters_file,
"localDiffusionsGrid_filename");
206 ReadFromFile(localDiffusionsGrid_L.name, parameters_file,
"localDiffusionsGrid_L.name",
string(
"L"));
207 ReadFromFile(localDiffusionsGrid_L.size, parameters_file,
"localDiffusionsGrid_L.size");
208 ReadFromFile(localDiffusionsGrid_L.useLogScale, parameters_file,
"localDiffusionsGrid_L.useLogScale");
209 ReadFromFile(localDiffusionsGrid_L.min, parameters_file,
"localDiffusionsGrid_L.min");
210 ReadFromFile(localDiffusionsGrid_L.max, parameters_file,
"localDiffusionsGrid_L.max");
213 ReadFromFile(localDiffusionsGrid_epc.name, parameters_file,
"localDiffusionsGrid_epc.name",
string(
"Energy, MeV"));
214 ReadFromFile(localDiffusionsGrid_epc.size, parameters_file,
"localDiffusionsGrid_epc.size");
215 ReadFromFile(localDiffusionsGrid_epc.useLogScale, parameters_file,
"localDiffusionsGrid_epc.useLogScale");
216 ReadFromFile(localDiffusionsGrid_epc.min, parameters_file,
"localDiffusionsGrid_epc.min");
217 ReadFromFile(localDiffusionsGrid_epc.max, parameters_file,
"localDiffusionsGrid_epc.max");
219 localDiffusionsGrid_pc = localDiffusionsGrid_epc;
220 localDiffusionsGrid_pc.min =
VF::pfunc(localDiffusionsGrid_epc.min);
221 localDiffusionsGrid_pc.max =
VF::pfunc(localDiffusionsGrid_epc.max);
223 ReadFromFile(localDiffusionsGrid_alpha.name, parameters_file,
"localDiffusionsGrid_alpha.name",
string(
"Pitch angle, deg"));
224 ReadFromFile(localDiffusionsGrid_alpha.size, parameters_file,
"localDiffusionsGrid_alpha.size");
225 ReadFromFile(localDiffusionsGrid_alpha.useLogScale, parameters_file,
"localDiffusionsGrid_alpha.useLogScale");
226 ReadFromFile(localDiffusionsGrid_alpha.min, parameters_file,
"localDiffusionsGrid_alpha.min");
227 ReadFromFile(localDiffusionsGrid_alpha.max, parameters_file,
"localDiffusionsGrid_alpha.max");
230 localDiffusionsGrid_alpha.min = localDiffusionsGrid_alpha.min*
VC::pi/180;
231 localDiffusionsGrid_alpha.max = localDiffusionsGrid_alpha.max*
VC::pi/180;
236 radialDiffusionGrid_L = localDiffusionsGrid_L;
237 radialDiffusionGrid_epc = localDiffusionsGrid_epc;
238 radialDiffusionGrid_alpha = localDiffusionsGrid_alpha;
239 radialDiffusionGrid_pc = localDiffusionsGrid_pc;
242 ReadFromFile(L_LowerBoundaryCondition.type, parameters_file,
"L_LowerBoundaryCondition.type",
"BCT_CONSTANT_PSD");
243 if (L_LowerBoundaryCondition.type ==
"BCT_FILE"
244 || L_LowerBoundaryCondition.type ==
"BCT_FILE_GRID"
245 || L_LowerBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
246 ReadFromFile(L_LowerBoundaryCondition.filename, parameters_file,
"L_LowerBoundaryCondition.filename");
248 ReadFromFile(L_LowerBoundaryCondition.value, parameters_file,
"L_LowerBoundaryCondition.value",
"1e-9");
251 ReadFromFile(L_UpperBoundaryCondition.type, parameters_file,
"L_UpperBoundaryCondition.type",
"BCT_CONSTANT_PSD");
252 if (L_UpperBoundaryCondition.type ==
"BCT_FILE"
253 || L_UpperBoundaryCondition.type ==
"BCT_FILE_GRID"
254 || L_UpperBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
255 ReadFromFile(L_UpperBoundaryCondition.filename, parameters_file,
"L_UpperBoundaryCondition.filename");
257 ReadFromFile(L_UpperBoundaryCondition.value, parameters_file,
"L_UpperBoundaryCondition.value",
"1e-9");
260 ReadFromFile(pc_LowerBoundaryCondition.type, parameters_file,
"pc_LowerBoundaryCondition.type",
"BCT_CONSTANT_PSD");
261 if (pc_LowerBoundaryCondition.type ==
"BCT_FILE"
262 || pc_LowerBoundaryCondition.type ==
"BCT_FILE_GRID"
263 || pc_LowerBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
264 ReadFromFile(pc_LowerBoundaryCondition.filename, parameters_file,
"pc_LowerBoundaryCondition.filename");
266 ReadFromFile(pc_LowerBoundaryCondition.value, parameters_file,
"pc_LowerBoundaryCondition.value",
"1e-9");
269 ReadFromFile(pc_UpperBoundaryCondition.type, parameters_file,
"pc_UpperBoundaryCondition.type",
"BCT_CONSTANT_PSD");
270 if (pc_UpperBoundaryCondition.type ==
"BCT_FILE"
271 || pc_UpperBoundaryCondition.type ==
"BCT_FILE_GRID"
272 || pc_UpperBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
273 ReadFromFile(pc_UpperBoundaryCondition.filename, parameters_file,
"pc_UpperBoundaryCondition.filename");
275 ReadFromFile(pc_UpperBoundaryCondition.value, parameters_file,
"pc_UpperBoundaryCondition.value",
"1e-9");
278 ReadFromFile(alpha_LowerBoundaryCondition.type, parameters_file,
"alpha_LowerBoundaryCondition.type",
"BCT_CONSTANT_PSD");
279 if (alpha_LowerBoundaryCondition.type ==
"BCT_FILE"
280 || alpha_LowerBoundaryCondition.type ==
"BCT_FILE_GRID"
281 || alpha_LowerBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
282 ReadFromFile(alpha_LowerBoundaryCondition.filename, parameters_file,
"alpha_LowerBoundaryCondition.filename");
284 ReadFromFile(alpha_LowerBoundaryCondition.value, parameters_file,
"alpha_LowerBoundaryCondition.value",
"1e-9");
287 ReadFromFile(alpha_UpperBoundaryCondition.type, parameters_file,
"alpha_UpperBoundaryCondition.type",
"BCT_CONSTANT_PSD");
288 if (alpha_UpperBoundaryCondition.type ==
"BCT_FILE"
289 || alpha_UpperBoundaryCondition.type ==
"BCT_FILE_GRID"
290 || alpha_UpperBoundaryCondition.type ==
"BCT_MULTIPLE_FILES") {
291 ReadFromFile(alpha_UpperBoundaryCondition.filename, parameters_file,
"alpha_UpperBoundaryCondition.filename");
293 ReadFromFile(alpha_UpperBoundaryCondition.value, parameters_file,
"alpha_UpperBoundaryCondition.value",
"1e-9");
296 ReadFromFile(psdRadialDiffusion.initial_PSD_Kp0, parameters_file,
"psdRadialDiffusion.initial_PSD_Kp0",
"0.0");
298 if (psdRadialDiffusion.initial_PSD_Kp0 <= 1e-99) {
299 psdRadialDiffusion.initial_PSD_Kp0 = Kp[0];
300 Output::echo(0,
"psdRadialDiffusion.initial_PSD_Kp0 set to %f.\n", psdRadialDiffusion.initial_PSD_Kp0);
304 ReadFromFile(psdRadialDiffusion.initial_PSD_Type, parameters_file,
"psdRadialDiffusion.initial_PSD_Type",
"IPSDT_STEADY_STATE");
305 if (psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_STEADY_STATE" || psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_STEADY_STATE_L7"
306 || psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_STEADY_STATE_FROM_BOUNDARY") {
307 ReadFromFile(psdRadialDiffusion.initial_PSD_tauSteadyState, parameters_file,
"psdRadialDiffusion.initial_PSD_tauSteadyState",
"0.0");
308 if (psdRadialDiffusion.initial_PSD_tauSteadyState <= 1.e-98) {
309 psdRadialDiffusion.initial_PSD_tauSteadyState = 4.0/psdRadialDiffusion.initial_PSD_Kp0;
310 Output::echo(0,
"psdRadialDiffusion.initial_PSD_tauSteadyState set to %f.\n", psdRadialDiffusion.initial_PSD_tauSteadyState);
314 }
else if (psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_STEADY_STATE_TWO_ZONE") {
316 ReadFromFile(psdRadialDiffusion.initial_PSD_tauSteadyState, parameters_file,
"psdRadialDiffusion.initial_PSD_tauSteadyState",
"0.0");
317 if (psdRadialDiffusion.initial_PSD_tauSteadyState <= 1.e-98) {
318 psdRadialDiffusion.initial_PSD_tauSteadyState = 4.0/psdRadialDiffusion.initial_PSD_Kp0;
319 Output::echo(0,
"psdRadialDiffusion.initial_PSD_tauSteadyState set to %f.\n", psdRadialDiffusion.initial_PSD_tauSteadyState);
322 ReadFromFile(psdRadialDiffusion.usetauLpp_SteadyState, parameters_file,
"psdRadialDiffusion.usetauLpp_SteadyState",
string(
"combined"));
323 if (psdRadialDiffusion.usetauLpp_SteadyState ==
"constant") {
324 ReadFromFile(psdRadialDiffusion.initial_PSD_tauLppSteadyState, parameters_file,
"psdRadialDiffusion.initial_PSD_tauLppSteadyState");
327 }
else if (psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_FILE"
328 || psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_FILE_GRID"
329 || psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_ORBIT_FLUX_2D"){
333 ReadFromFile(psdRadialDiffusion.initial_PSD_fileName, parameters_file,
"psdRadialDiffusion.initial_PSD_fileName");
337 ReadFromFile(psdRadialDiffusion.initial_PSD_some_constant_value, parameters_file,
"psdRadialDiffusion.initial_PSD_some_constant_value",
"1e-99");
338 ReadFromFile(psdRadialDiffusion.initial_PSD_J_L7_function, parameters_file,
"psdRadialDiffusion.initial_PSD_J_L7_function",
"J_L7_corrected");
340 ReadFromFile(psdRadialDiffusion.initial_PSD_outer_psd, parameters_file,
"psdRadialDiffusion.initial_PSD_outer_psd",
"1.0");
341 ReadFromFile(psdRadialDiffusion.initial_PSD_inner_psd, parameters_file,
"psdRadialDiffusion.initial_PSD_inner_psd",
"0.0");
343 ReadFromFile(psdRadialDiffusion.output_PSD_folderName, parameters_file,
"psdRadialDiffusion.output_PSD_folderName", general_Output_parameters.folderName );
344 ReadFromFile(psdRadialDiffusion.output_PSD_fileName4D, parameters_file,
"psdRadialDiffusion.output_PSD_fileName4D",
"OutPSD_rad.dat");
346 ReadFromFile(psdRadialDiffusion.output_PSD_timeStep, parameters_file,
"psdRadialDiffusion.output_PSD_timeStep",
"1");
348 psdRadialDiffusion.output_PSD_timeStep = psdRadialDiffusion.output_PSD_timeStep/24.0;
350 psdRadialDiffusion.approximationMethod =
"AM_Split_C";
351 psdRadialDiffusion.solutionMethod =
"SM_Tridiag";
354 psdLocalDiffusions.initial_PSD_Type =
"IPSDT_CONSTANT";
355 psdLocalDiffusions.initial_PSD_some_constant_value = psdRadialDiffusion.initial_PSD_some_constant_value;
357 ReadFromFile(psdLocalDiffusions.output_PSD_folderName, parameters_file,
"psdLocalDiffusions.output_PSD_folderName", general_Output_parameters.folderName);
358 ReadFromFile(psdLocalDiffusions.output_PSD_fileName4D, parameters_file,
"psdLocalDiffusions.output_PSD_fileName4D",
string(
"OutPSD.dat"));
360 ReadFromFile(psdLocalDiffusions.output_PSD_timeStep, parameters_file,
"psdLocalDiffusions.output_PSD_timeStep",
"1");
362 psdLocalDiffusions.output_PSD_timeStep = psdLocalDiffusions.output_PSD_timeStep/24.0;
364 ReadFromFile(psdLocalDiffusions.approximationMethod, parameters_file,
"psdLocalDiffusions.approximationMethod",
"AM_Split_C");
365 if (psdLocalDiffusions.approximationMethod ==
"AM_Split_C" || psdLocalDiffusions.approximationMethod ==
"AM_Split_LR") {
366 ReadFromFile(psdLocalDiffusions.solutionMethod, parameters_file,
"psdLocalDiffusions.solutionMethod",
"SM_Tridiag");
368 ReadFromFile(psdLocalDiffusions.solutionMethod, parameters_file,
"psdLocalDiffusions.solutionMethod",
"SM_Relaxation");
370 if (psdLocalDiffusions.solutionMethod ==
"SM_GMRES" || psdLocalDiffusions.solutionMethod ==
"SM_GMRES2") {
371 ReadFromFile(psdLocalDiffusions.GMRES_parameters.SOL_maxiter, parameters_file,
"psdLocalDiffusions.GMRES_parameters.SOL_maxiter",
"100");
372 ReadFromFile(psdLocalDiffusions.GMRES_parameters.SOL_i_max, parameters_file,
"psdLocalDiffusions.GMRES_parameters.SOL_i_max",
"25");
373 ReadFromFile(psdLocalDiffusions.GMRES_parameters.SOL_max_iter_err, parameters_file,
"psdLocalDiffusions.GMRES_parameters.SOL_max_iter_err",
"1e-1");
374 ReadFromFile(psdLocalDiffusions.GMRES_parameters.preconditioner_type, parameters_file,
"psdLocalDiffusions.GMRES_parameters.preconditioner_type",
"none");
375 ReadFromFile(psdLocalDiffusions.GMRES_parameters.use_normalization, parameters_file,
"psdLocalDiffusions.GMRES_parameters.use_normalization",
"Yes");
380 ReadFromFile(SL.SL_L_top, parameters_file,
"SL.SL_L_top",
"false");
382 ReadFromFile(SL.SL_L_top_filename, parameters_file,
"SL.SL_L_top_filename");
384 ReadFromFile(SL.SL_E_min, parameters_file,
"SL.SL_E_min",
"false");
386 ReadFromFile(SL.SL_E_min_filename, parameters_file,
"SL.SL_E_min_filename");
390 ReadFromFile(interpolation.type, parameters_file,
"interpolation.type",
"IT_SPLINE");
391 ReadFromFile(interpolation.useLog, parameters_file,
"interpolation.useLog",
"Log_10");
392 ReadFromFile(interpolation.linearSplineCoef, parameters_file,
"interpolation.linearSplineCoef",
"1");
393 ReadFromFile(interpolation.maxSecondDerivative, parameters_file,
"interpolation.maxSecondDerivative",
"1e2");
400 if (psdRadialDiffusion.initial_PSD_Type ==
"IPSDT_STEADY_STATE_FROM_BOUNDARY"
401 && (L_UpperBoundaryCondition.type !=
"BCT_FILE"
402 && L_UpperBoundaryCondition.type !=
"BCT_FILE_GRID"
403 && L_UpperBoundaryCondition.type !=
"BCT_MULTIPLE_FILES")
404 )
throw error_msg(
"PARAMETERS_ERROR",
"Outer L boundary can not be used for PSD steady state, cause it is set to be created from PSD itself.");
406 if ((psdLocalDiffusions.approximationMethod ==
"AM_Block_LR" || psdLocalDiffusions.approximationMethod ==
"AM_Block_C") && !(localDiffusionsGrid_pc.size > 1 && localDiffusionsGrid_alpha.size > 1)) {
407 throw error_msg(
"BLOCK_WITH_1D",
"Block method can not be used with 1D");
410 if (localDiffusionsGrid_pc.size < 3 && useEnergyDiffusion)
411 throw error_msg(
"ERROR",
"Not enough grid points for energy diffusion (localDiffusionsGrid.pc.size = %d and useEnergyDiffusion = Yes)", localDiffusionsGrid_pc.size);
413 if (localDiffusionsGrid_alpha.size < 3 && useAlphaDiffusion)
414 throw error_msg(
"ERROR",
"Not enough grid points for pitch angle diffusion (localDiffusionsGrid.alpha.size = %d and useAlphaDiffusion = Yes)", localDiffusionsGrid_alpha.size);
416 if (localDiffusionsGrid_L.size < 3 && useRadialDiffusion)
417 throw error_msg(
"ERROR",
"Not enough grid points for radial diffusion (localDiffusionsGrid.L.size = %d and useRadialDiffusion = Yes)", localDiffusionsGrid_L.size);
420 parameters_file.seekg(0,ios::beg);
421 string word1=
"", word2=
"";
422 string string_value, dxx_parameters_file_name;
423 if (parameters_file != NULL) {
424 while (parameters_file) {
427 parameters_file >> word1;
430 if (word2 ==
"CoeffFileName") {
431 parameters_file >> dxx_parameters_file_name;
439 DxxParametersList.back().Load_dxx_parameters(dxx_parameters_file_name);
447 ReadFromFile(SL.useLmp, parameters_file,
"sourcesAndLosses.useLmp",
"false");
449 ReadFromFile(SL.fileLmp, parameters_file,
"sourcesAndLosses.fileLmp");
452 if (SL.useLmp ==
true){
455 if (localDiffusionsGrid_alpha.size < 1 ){
456 throw error_msg(
"ERROR",
"Not enough alpha grid points for magnitopause shadowing (localDiffusionsGrid_alpha.size = %d)", localDiffusionsGrid_alpha.size);
460 SL.Lmp.AllocateMemory(totalIterationsNumber, localDiffusionsGrid_alpha.size);
461 load_2d(SL.Lmp, SL.fileLmp, timeStep);
477 ifstream dxx_parameters_file;
478 dxx_parameters_file.open(dxx_parameters_file_name.c_str());
479 if (dxx_parameters_file == NULL) {
480 throw error_msg(
"DXX_PARAM_FILE_OPEN_ERR",
"Error reading diffusion coefficients parameters file %s.", dxx_parameters_file_name.c_str());
486 ReadFromFile(waveType, dxx_parameters_file,
"waveType");
487 ReadFromFile(waveName, dxx_parameters_file,
"waveType");
489 ReadFromFile(time_start, dxx_parameters_file,
"time_start");
490 ReadFromFile(time_end, dxx_parameters_file,
"time_end");
492 ReadFromFile(useScale, dxx_parameters_file,
"useScale",
"false");
497 ReadFromFile(loadOrCalculate, dxx_parameters_file,
"loadOrCalculate");
499 ReadFromFile(filetype, dxx_parameters_file,
"filetype");
500 ReadFromFile(filename, dxx_parameters_file,
"filename");
502 ReadFromFile(multiplicator, dxx_parameters_file,
"multiplicator",
"1.0");
503 ReadFromFile(MLT_averaging, dxx_parameters_file,
"MLT_averaging",
"1.0");
505 if (loadOrCalculate ==
"LOC_CALCULATE" || loadOrCalculate ==
"LOC_LOADORCALCULATE") {
506 ReadFromFile(numberDensity, dxx_parameters_file,
"numberDensity");
507 ReadFromFile(Omega_mType, dxx_parameters_file,
"Omega_mType");
510 ReadFromFile(omega_lc, dxx_parameters_file,
"omega_lc");
511 ReadFromFile(omega_uc, dxx_parameters_file,
"omega_uc");
516 ReadFromFile(BwFromLambda, dxx_parameters_file,
"BwFromLambda");
519 ReadFromFile(mirror_point_coeff, dxx_parameters_file,
"mirror_point_coeff",
"0.999");
521 ReadFromFile(lam_min, dxx_parameters_file,
"lam_min",
"0.0");
525 if (numberDensity ==
"ND_CONSTANT") {
528 ReadFromFile(particle, dxx_parameters_file,
"particle");
530 double sigma = (omega_uc - omega_lc) / (2.0 * d_omega);
535 if (Bw <= 0 && BwFromLambda ==
false) {
536 throw error_msg(
"DXX_ERROR",
"BwFromLambda is false and Bw = %f\n", Bw);
537 }
else if (BwFromLambda ==
true && Bw <= 0) {
551 istringstream(input) >> place;
559 istringstream(input) >> place;
584 if (str ==
"Yes" || str ==
"yes" || str ==
"1" || str ==
"True" || str ==
"true")
return true;
592 return (b==
true)?
"Yes":
"No";
609 ifstream input_1d(filename.c_str());
610 if (input_1d != NULL) {
611 vector <double> time1d, value1d;
612 double time_tmp, value_tmp;
613 while (!input_1d.eof()) {
615 input_1d >> time_tmp >> value_tmp;
616 time1d.push_back(time_tmp);
617 value1d.push_back(value_tmp);
622 for (
int it = 0; it < var.
size_x; it++) {
626 while (((++i) < (time1d.size()-1)) && time > time1d[i]) {
630 a = (time - time1d[i-1]) / (time1d[i] - time1d[i-1]);
631 var[it] = value1d[i-1] + a*(value1d[i] - value1d[i-1]);
634 throw error_msg(
"LOAD_1D_ERROR",
"Load 1d file error: file not found %f\n", filename.c_str());
646 vector <double> time1d;
654 if (var_size_x != 0 & var_size_y != 0) {
662 ifstream input_2d(filename.c_str());
664 if (input_2d != NULL) {
666 double time_tmp, value_tmp;
668 while (input_2d >> time_tmp) {
670 time1d.push_back(time_tmp);
672 for(
int f=0; f < var.
size_y; f++){
673 input_2d >> value_tmp;
684 for (it = 0; it < var.
size_x; it++) {
688 while (((++i) < (time1d.size()-1)) && time > time1d[i]) {
694 cout <<
"\n" << setprecision(2) << setw(5) << time <<
' ';
698 for (
int ia = 0; ia < var.
size_y; ia++)
700 a = (time - time1d[i-1]) / (time1d[i] - time1d[i-1]);
701 var[it][ia] = value2d[i-1][ia] + a*(value2d[i][ia] - value2d[i-1][ia]);
704 if (var[it][ia] > 6) cout << 0 <<
' ';
705 else cout << 1 <<
' ';
711 throw error_msg(
"LOAD_2D_ERROR",
"Load 2d file error: file not found %f\n", filename.c_str());
725 if(v.size() <= x) v.resize(x + 1);
726 if(v[x].size() <= y) v[x].resize(y + 1, -1);
void load_1d(Matrix1D< double > &var, string filename, double dt, int var_size)
double max(double v1, double v2)
Return maximum.
bool str2bool(string str)
void AllocateMemory(int size_x, int size_y)
double erf(double x)
Returns the error function erf(x).
int outputLvl
verbose level defined in namespase Output
void echo(int msglvl, const char *format,...)
Basic function! Write the message to the file.
Struct that holds various parameters to be used for Dxx.
void AllocateMemory(int x_size)
vector< T_double_vector > T_2d_double_vector
typedef vector of vector of doubles
double pfunc(double K)
Computation of moumentum from Kinetic energy .
bool Load_dxx_parameters(string filename)
bool Load_parameters(string filename)
bool ReadFromFile(T &variable, ifstream ¶meters_file, string variable_name, string default_value="")
void load_2d(Matrix2D< double > &var, string filename, double dt, int var_size_x, int var_size_y)
void StrToVal(string input, double &place)
double T(double alpha)
Function for bounce time.
Error message - stack of single_errors.
double & T_2d_double_vector_add(T_2d_double_vector &v, size_t x, size_t y)