int main(int i_argc, char *i_argv[]) { const char *bogus_var_names[] = { "velocity-u", "velocity-v", nullptr }; if (!simVars.setupFromMainParameters(i_argc, i_argv, bogus_var_names)) { std::cout << std::endl; std::cout << "Program-specific options:" << std::endl; std::cout << " --velocity-u [advection velocity u]" << std::endl; std::cout << " --velocity-v [advection velocity v]" << std::endl; return -1; } if (std::isinf(simVars.bogus.var[0]) || std::isinf(simVars.bogus.var[1])) { std::cout << "Both velocities have to be set, see parameters --velocity-u, --velocity-v" << std::endl; return -1; } param_velocity_u = simVars.bogus.var[0]; param_velocity_v = simVars.bogus.var[1]; SimulationSWE *simulationSWE = new SimulationSWE; #if SWEET_GUI if (simVars.misc.gui_enabled) { VisSweet<SimulationSWE> visSweet(simulationSWE); } else #endif { simulationSWE->reset(); while (!simulationSWE->should_quit()) { simulationSWE->run_timestep(); if (simVars.misc.verbosity > 2) std::cout << simVars.timecontrol.current_simulation_time << std::endl; if (simVars.timecontrol.max_simulation_time != -1) if (simVars.timecontrol.current_simulation_time > simVars.timecontrol.max_simulation_time) break; if (simVars.timecontrol.max_timesteps_nr != -1) if (simVars.timecontrol.current_timestep_nr > simVars.timecontrol.max_timesteps_nr) break; } } delete simulationSWE; return 0; }
int main(int i_argc, char *i_argv[]) { const char *bogus_var_names[] = { "velocity-u", "velocity-v", nullptr }; if (!simVars.setupFromMainParameters(i_argc, i_argv, bogus_var_names)) { std::cout << std::endl; std::cout << "Program-specific options:" << std::endl; std::cout << " --velocity-u [advection velocity u]" << std::endl; std::cout << " --velocity-v [advection velocity v]" << std::endl; return -1; } if (std::isinf(simVars.bogus.var[0]) != 0 || std::isinf(simVars.bogus.var[1]) != 0) { std::cout << "Both velocities have to be set, see parameters --velocity-u, --velocity-v" << std::endl; return -1; } planeDataConfigInstance.setupAuto(simVars.disc.res_physical, simVars.disc.res_spectral); SimulationSWE *simulationSWE = new SimulationSWE; #if SWEET_GUI VisSweet<SimulationSWE> visSweet(simulationSWE); #else simulationSWE->reset(); while (!simulationSWE->should_quit()) { simulationSWE->run_timestep(); if (simVars.misc.verbosity > 2) std::cout << simVars.timecontrol.current_simulation_time << std::endl; if (simVars.timecontrol.current_simulation_time > simVars.timecontrol.max_simulation_time) break; } #endif delete simulationSWE; return 0; }
int main(int i_argc, char *i_argv[]) { if (!simVars.setupFromMainParameters(i_argc, i_argv)) { return -1; } planeDataConfigInstance.setupAuto(simVars.disc.res_physical, simVars.disc.res_spectral); SimulationSWE *simulationSWE = new SimulationSWE; std::ostringstream buf; #if SWEET_GUI if (simVars.misc.gui_enabled) { VisSweet<SimulationSWE> visSweet(simulationSWE); } else #endif { simulationSWE->reset(); Stopwatch time; time.reset(); double diagnostics_energy_start, diagnostics_mass_start, diagnostics_potential_entrophy_start; if (simVars.misc.verbosity > 1) { simulationSWE->update_diagnostics(); diagnostics_energy_start = simVars.diag.total_energy; diagnostics_mass_start = simVars.diag.total_mass; diagnostics_potential_entrophy_start = simVars.diag.total_potential_enstrophy; } while (true) { if (simVars.misc.verbosity > 1) { simulationSWE->timestep_output(buf); std::string output = buf.str(); buf.str(""); std::cout << output << std::flush; } if (simulationSWE->should_quit()) break; simulationSWE->run_timestep(); if (simulationSWE->instability_detected()) { std::cout << "INSTABILITY DETECTED" << std::endl; break; } } time.stop(); double seconds = time(); std::cout << "Simulation time: " << seconds << " seconds" << std::endl; std::cout << "Time per time step: " << seconds/(double)simVars.timecontrol.current_timestep_nr << " sec/ts" << std::endl; std::cout << "Timesteps: " << simVars.timecontrol.current_timestep_nr << std::endl; if (simVars.misc.verbosity > 1) { std::cout << "DIAGNOSTICS ENERGY DIFF:\t" << std::abs((simVars.diag.total_energy-diagnostics_energy_start)/diagnostics_energy_start) << std::endl; std::cout << "DIAGNOSTICS MASS DIFF:\t" << std::abs((simVars.diag.total_mass-diagnostics_mass_start)/diagnostics_mass_start) << std::endl; std::cout << "DIAGNOSTICS POTENTIAL ENSTROPHY DIFF:\t" << std::abs((simVars.diag.total_potential_enstrophy-diagnostics_potential_entrophy_start)/diagnostics_potential_entrophy_start) << std::endl; if (simVars.setup.benchmark_scenario_id == 2 || simVars.setup.benchmark_scenario_id == 3 || simVars.setup.benchmark_scenario_id == 4) { std::cout << "DIAGNOSTICS BENCHMARK DIFF H:\t" << simulationSWE->benchmark_diff_h << std::endl; std::cout << "DIAGNOSTICS BENCHMARK DIFF U:\t" << simulationSWE->benchmark_diff_u << std::endl; std::cout << "DIAGNOSTICS BENCHMARK DIFF V:\t" << simulationSWE->benchmark_diff_v << std::endl; } } } delete simulationSWE; return 0; }