Skip to content
Snippets Groups Projects
Select Git revision
  • 20ef4384f6229b7fc695e6682751a8dd8b426e4b
  • master default protected
2 results

abstract_parameters.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    abstract_parameters.cpp 2.72 KiB
    /* This file is a part of Numsimulation project
    Developed as part of Numerical Flow Simulation course
    Author: Kyrylo Sovailo */
    
    #include <simple/simple.h>
    
    simple::AbstractParameters::AbstractParameters(numsimulation::ParameterReader &reader)
    {
        //Grid parameters
        grid_size[0] = reader.get_real("GRID_SIZE_X"); grid_size[1] = reader.get_real("GRID_SIZE_Y");
        area_threshold = reader.get_real("AREA_THRESHOLD");
    
        // Solver parameters
        if (reader.get_string("METHOD") == "LINEAR") method = Method::linear;
        else if (reader.get_string("METHOD") == "UPWIND") method = Method::upwind;
        else if (reader.get_string("METHOD") == "HYBRID") method = Method::hybrid;
        else if (reader.get_string("METHOD") == "POTENTIAL") method = Method::potential;
        else if (reader.get_string("METHOD") == "EXPONENTIAL") method = Method::exponential;
        else throw std::runtime_error("_main(): Unrecognized numerical method");
        density = reader.get_real("DENSITY");
        viscosity = reader.get_real("VISCOSITY");
        step = reader.get_real("STEP");
        exact = false;
        //Iterative solver parameters
        beta = reader.get_real("BETA");
        max_iteration = reader.get_real("MAX_ITERATION");
        max_e = reader.get_real("MAX_E");
        //Linear solver for P' parameters
        p_max_residual = reader.get_real("P_MAX_RESIDUAL");
        p_max_iteration = reader.get_integer("P_MAX_ITERATION");
        if (reader.get_string("P_SOLVER") == "GAUSS") p_gauss = true;
        else if (reader.get_string("P_SOLVER") == "JACOBI") p_gauss = false;
        else throw std::runtime_error("simple::AbstractParameters::AbstractParameters(): unrecognized solver");
        if (reader.get_string("P_REACTION") == "IGNORE") p_reaction = Reaction::ignore;
        else if (reader.get_string("P_REACTION") == "WARNING") p_reaction = Reaction::warning;
        else if (reader.get_string("P_REACTION") == "ERROR") p_reaction = Reaction::error;
        else throw std::runtime_error("simple::AbstractParameters::AbstractParameters(): unrecognized reaction");
        //Linear solver for V* parameters
        v_max_residual = reader.get_real("V_MAX_RESIDUAL");
        v_max_iteration = reader.get_integer("V_MAX_ITERATION");
        if (reader.get_string("V_SOLVER") == "GAUSS") v_gauss = true;
        else if (reader.get_string("V_SOLVER") == "JACOBI") v_gauss = false;
        else throw std::runtime_error("simple::AbstractParameters::AbstractParameters(): unrecognized solver");
        if (reader.get_string("V_REACTION") == "IGNORE") v_reaction = Reaction::ignore;
        else if (reader.get_string("V_REACTION") == "WARNING") v_reaction = Reaction::warning;
        else if (reader.get_string("V_REACTION") == "ERROR") v_reaction = Reaction::error;
        else throw std::runtime_error("simple::AbstractParameters::AbstractParameters(): unrecognized reaction");
    }