37 if (
name ==
"get_slice_size") {
40 if (
name ==
"get_slice_ranges") {
43 if (
name ==
"get_lb_sip") {
46 if (
name ==
"get_value_shape") {
47 auto const name = get_value<std::string>(
params,
"name");
48 if (m_shape_val.count(
name) == 0) {
50 throw std::runtime_error(
"Unknown fluid property '" +
name +
"'");
53 return m_shape_val.at(
name);
55 if (
name ==
"get_lattice_speed") {
56 return 1. / m_conv_velocity;
60 auto const call = [
this, &
params](
auto method_ptr,
61 std::vector<int>
const &data_dims,
63 auto &obj = *m_lb_fluid;
64 if constexpr (std::is_invocable_v<
decltype(method_ptr),
LatticeModel *,
74 if (
name ==
"get_population") {
75 auto const pop_size = m_shape_val.at(
"population");
78 if (
name ==
"set_population") {
79 auto const pop_size = m_shape_val.at(
"population");
82 if (
name ==
"get_density") {
85 if (
name ==
"set_density") {
88 if (
name ==
"get_velocity") {
91 if (
name ==
"set_velocity") {
94 if (
name ==
"get_is_boundary") {
97 if (
name ==
"get_velocity_at_boundary") {
99 1. / m_conv_velocity);
101 if (
name ==
"set_velocity_at_boundary") {
104 m_lb_fluid->reallocate_ubb_field();
107 if (
name ==
"get_pressure_tensor") {
111 if (
name ==
"get_pressure_tensor_neq") {
113 if (
context()->is_head_node()) {
114 auto constexpr c_sound_sq = 1. / 3.;
115 auto const density = m_lb_fluid->get_density();
116 auto const diagonal_term =
density * c_sound_sq / m_conv_press;
118 auto &vec = *(boost::get<std::vector<double>>(
119 &(boost::get<std::vector<Variant>>(&variant)->at(0))));
120 for (
auto it = vec.begin(); it < vec.end(); it += 9) {
121 *(it + 0) -= diagonal_term;
122 *(it + 4) -= diagonal_term;
123 *(it + 8) -= diagonal_term;
128 if (
name ==
"get_last_applied_force") {
132 if (
name ==
"set_last_applied_force") {
Interface of a lattice-based fluid model.
virtual std::vector< double > get_slice_velocity(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice velocity.
virtual void set_slice_velocity_at_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< std::optional< Utils::Vector3d > > const &velocity)=0
Set slice velocity boundary conditions.
virtual std::vector< double > get_slice_density(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice density.
virtual std::vector< double > get_slice_population(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice population.
virtual std::vector< std::optional< Utils::Vector3d > > get_slice_velocity_at_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice velocity boundary conditions.
virtual void set_slice_population(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< double > const &population)=0
Set slice population.
virtual std::vector< double > get_slice_pressure_tensor(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice pressure tensor.
virtual void set_slice_density(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< double > const &density)=0
Set slice density.
virtual void set_slice_velocity(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< double > const &velocity)=0
Set slice velocity.
virtual std::vector< bool > get_slice_is_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Check if slice has velocity boundary conditions.
virtual void set_slice_last_applied_force(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< double > const &force)=0
Set stored force that was applied on slice in the last time step.
virtual std::vector< double > get_slice_last_applied_force(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get stored force that was applied on slice in the last time step.
virtual void parallel_try_catch(std::function< void()> const &cb) const =0
boost::string_ref name() const
Context * context() const
Responsible context.
Variant do_call_method(std::string const &name, VariantMap const ¶ms) override
Variant gather_3d(VariantMap const ¶ms, std::vector< int > const &data_dims, LatticeModel const &lattice_model, std::vector< T >(LatticeModel::*getter)(Utils::Vector3i const &, Utils::Vector3i const &) const, double units_conversion=1.) const
Utils::Vector3i m_slice_upper_corner
Utils::Vector3i m_slice_lower_corner
void scatter_3d(VariantMap const ¶ms, std::vector< int > const &data_dims, LatticeModel &lattice_model, void(LatticeModel::*setter)(Utils::Vector3i const &, Utils::Vector3i const &, std::vector< T > const &), double units_conversion=1.)
This file contains the defaults for ESPResSo.
std::unordered_map< std::string, Variant > VariantMap
boost::make_recursive_variant< None, bool, int, std::size_t, double, std::string, ObjectRef, Utils::Vector3b, Utils::Vector3i, Utils::Vector2d, Utils::Vector3d, Utils::Vector4d, std::vector< int >, std::vector< double >, std::vector< boost::recursive_variant_ >, std::unordered_map< int, boost::recursive_variant_ >, std::unordered_map< std::string, boost::recursive_variant_ > >::type Variant
Possible types for parameters.
static SteepestDescentParameters params
Currently active steepest descent instance.