Page MenuHomec4science

adimensional_system_thermocarbo.cpp
No OneTemporary

File Metadata

Created
Thu, Sep 26, 04:03

adimensional_system_thermocarbo.cpp

#include "catch.hpp"
#include "utils/log.hpp"
#include "specmicp/adimensional/adimensional_system_solver.hpp"
#include "specmicp/adimensional/adimensional_system_solution.hpp"
#include "specmicp/problem_solver/formulation.hpp"
#include "specmicp/problem_solver/dissolver.hpp"
TEST_CASE("thermocarbo - using adimensional system ", "[Adimensional, Thermocarbo]")
{
specmicp::logger::ErrFile::stream() = &std::cerr;
specmicp::stdlog::ReportLevel() = specmicp::logger::Warning;
SECTION("Thermocarbo")
{
specmicp::database::Database thedatabase("../data/cemdata_specmicp.js");
std::map<std::string, std::string> swapping ({
{"H[+]","HO[-]"},
{"Si(OH)4", "SiO(OH)3[-]"}
});
thedatabase.swap_components(swapping);
specmicp::RawDatabasePtr raw_data = thedatabase.get_database();
specmicp::Formulation formulation;
specmicp::scalar_t mult = 1.0;
formulation.mass_solution = mult*0.156;
formulation.amount_minerals = {{"C3S", mult*0.7}, {"C2S", mult*0.3}};
formulation.extra_components_to_keep = {"HCO3[-]", };
specmicp::Vector total_concentrations = specmicp::Dissolver(raw_data).dissolve(formulation);
specmicp::index_t id_h2o = 0;
specmicp::index_t id_ho = 1;
specmicp::index_t id_co2 = 2;
specmicp::AdimensionalSystemSolverOptions options;
options.charge_keeper = 1;
options.solver_options.maxstep = 50.0;
options.solver_options.maxiter_maxstep = 100;
options.solver_options.use_crashing = false;
options.solver_options.use_scaling = false;
options.solver_options.factor_descent_condition = 1e-10;
options.solver_options.factor_gradient_search_direction = 200;
specmicp::Vector x(raw_data->nb_component+raw_data->nb_mineral);
x.setZero();
x(0) = 0.8;
x.segment(1, raw_data->nb_component-1).setConstant(-2.0);
specmicp::scalar_t dh2co3 = 0.1;
for (int k=0; k<40; ++k)
{
specmicp::AdimensionalSystemSolver solver(raw_data, total_concentrations, options);
specmicp::micpsolver::MiCPPerformance perf = solver.solve(x);
REQUIRE(perf.return_code >= specmicp::micpsolver::MiCPSolverReturnCode::NotConvergedYet);
total_concentrations(id_h2o) += mult*dh2co3;
total_concentrations(id_ho) -= mult*dh2co3;
total_concentrations(id_co2) += mult*dh2co3;
specmicp::AdimensionalSystemSolution solution = solver.get_raw_solution(x);
//std::cout << solution.main_variables(0) << std::endl;
std::cout << 14+solution.main_variables(1) << std::endl;
}
}
}

Event Timeline