aboutsummaryrefslogtreecommitdiff
path: root/Source/Initialization/VelocityProperties.cpp
blob: 6a0e74ecfc3e8eb0a4f9f44bebaa3cc323679024 (plain) (blame)
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
/* Copyright 2021 Hannah Klion
 *
 *
 * This file is part of WarpX.
 *
 * License: BSD-3-Clause-LBNL
 */

#include "VelocityProperties.H"

VelocityProperties::VelocityProperties (amrex::ParmParse& pp) {
    // Set defaults
    std::string vel_dist_s = "constant";
    std::string vel_dir_s = "x";
    m_velocity = 0;

    pp.query("bulk_vel_dir", vel_dir_s);
    if(vel_dir_s[0] == '-'){
        m_sign_dir = -1;
    }
    else {
        m_sign_dir = 1;
    }

    if ((vel_dir_s == "x" || vel_dir_s[1] == 'x') ||
       (vel_dir_s == "X" || vel_dir_s[1] == 'X')){
        m_dir = 0;
    }
    else if ((vel_dir_s == "y" || vel_dir_s[1] == 'y') ||
               (vel_dir_s == "Y" || vel_dir_s[1] == 'Y')){
        m_dir = 1;
    }
    else if ((vel_dir_s == "z" || vel_dir_s[1] == 'z') ||
            (vel_dir_s == "Z" || vel_dir_s[1] == 'Z')) {
        m_dir = 2;
    }
    else {
        std::stringstream stringstream;
        stringstream << "Cannot interpret <s_name>.bulk_vel_dir input '" << vel_dir_s <<
            "'. Please enter +/- x, y, or z with no whitespace between the sign and" <<
            " other character.";
        vel_dir_s = stringstream.str();
        amrex::Abort(vel_dir_s.c_str());
    }

    pp.query("beta_distribution_type", vel_dist_s);
    if (vel_dist_s == "constant") {
        queryWithParser(pp, "beta", m_velocity);
        m_type = VelConstantValue;
        if (m_velocity >= 1 || m_velocity <= -1) {
            std::stringstream stringstream;
            stringstream << "Magnitude of velocity beta = " << m_velocity <<
                " is greater than or equal to 1";
            amrex::Abort(stringstream.str().c_str());
        }
    }
    else if (vel_dist_s == "parser") {
        std::string str_beta_function;
        Store_parserString(pp, "beta_function(x,y,z)", str_beta_function);
        m_ptr_velocity_parser =
            std::make_unique<amrex::Parser>(makeParser(str_beta_function,{"x","y","z"}));
        m_type = VelParserFunction;
    }
    else {
        std::stringstream stringstream;
        std::string string;
        stringstream << "Velocity distribution type '" << vel_dist_s << "' not recognized." << std::endl;
        string = stringstream.str();
        amrex::Abort(string.c_str());
    }
}