ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
CylindricalLBVelocityProfileAtParticlePositions.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2016-2022 The ESPResSo project
3
*
4
* This file is part of ESPResSo.
5
*
6
* ESPResSo is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* ESPResSo is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
#include "
CylindricalLBVelocityProfileAtParticlePositions.hpp
"
20
21
#include "
BoxGeometry.hpp
"
22
#include "system/System.hpp"
23
#include "
utils_histogram.hpp
"
24
25
#include <
utils/Histogram.hpp
>
26
#include <
utils/math/coordinate_transformation.hpp
>
27
28
#include <utility>
29
#include <vector>
30
31
namespace
Observables
{
32
std::vector<double>
CylindricalLBVelocityProfileAtParticlePositions::evaluate
(
33
boost::mpi::communicator
const
&comm,
34
ParticleReferenceRange
const
&local_particles,
35
const
ParticleObservables::traits<Particle>
&
traits
)
const
{
36
using
pos_type
=
decltype
(
traits
.position(std::declval<Particle>()));
37
using
vel_type
=
Utils::Vector3d
;
38
39
std::vector<pos_type>
local_folded_positions
{};
40
std::vector<vel_type>
local_velocities
{};
41
local_folded_positions
.reserve(local_particles.size());
42
local_velocities
.reserve(local_particles.size());
43
44
auto
&
system
=
System::get_system
();
45
auto
const
&box_geo = *
system
.box_geo;
46
auto
&lb =
system
.lb;
47
lb.ghost_communication_vel();
48
49
std::vector<Utils::Vector3d>
folded_pos
{};
50
folded_pos
.reserve(local_particles.size());
51
for
(
auto
const
&p : local_particles) {
52
folded_pos
.emplace_back(box_geo.folded_position(
traits
.position(p)));
53
}
54
auto
const
interpolated_vel
=
55
lb.get_coupling_interpolated_velocities(
folded_pos
);
56
auto
vel_it
=
interpolated_vel
.begin();
57
for
(
auto
const
&pos :
folded_pos
) {
58
auto
const
pos_shifted
= pos -
transform_params
->center();
59
auto
const
pos_cyl
=
Utils::transform_coordinate_cartesian_to_cylinder
(
60
pos_shifted
,
transform_params
->axis(),
transform_params
->orientation());
61
auto
const
vel_cyl
=
Utils::transform_vector_cartesian_to_cylinder
(
62
*
vel_it
,
transform_params
->axis(),
pos_shifted
);
63
local_folded_positions
.emplace_back(
pos_cyl
);
64
local_velocities
.emplace_back(
vel_cyl
);
65
++
vel_it
;
66
}
67
68
auto
const
[
global_folded_positions
,
global_velocities
] =
69
detail::gather(comm,
local_folded_positions
,
local_velocities
);
70
71
if
(comm.rank() != 0) {
72
return
{};
73
}
74
75
Utils::CylindricalHistogram<double, 3>
histogram
(
n_bins
(),
limits
());
76
detail::accumulate(
histogram
,
global_folded_positions
,
global_velocities
);
77
return
detail::normalize_by_bin_size(
histogram
);
78
}
79
80
}
// namespace Observables
BoxGeometry.hpp
CylindricalLBVelocityProfileAtParticlePositions.hpp
Histogram.hpp
Observables::CylindricalLBVelocityProfileAtParticlePositions::evaluate
std::vector< double > evaluate(boost::mpi::communicator const &comm, ParticleReferenceRange const &particles, const ParticleObservables::traits< Particle > &) const override
Definition
CylindricalLBVelocityProfileAtParticlePositions.cpp:32
Observables::CylindricalProfileObservable::transform_params
std::shared_ptr< Utils::CylindricalTransformationParameters > transform_params
Definition
CylindricalProfileObservable.hpp:43
Observables::ProfileObservable::n_bins
auto n_bins() const
Definition
core/observables/ProfileObservable.hpp:70
Observables::ProfileObservable::limits
auto limits() const
Definition
core/observables/ProfileObservable.hpp:72
Utils::CylindricalHistogram
Histogram in cylindrical coordinates.
Definition
Histogram.hpp:201
stream
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
Definition
common_cuda.cu:34
coordinate_transformation.hpp
Convert coordinates from the Cartesian system to the cylindrical system.
Observables
Definition
BondAngles.hpp:37
Observables::ParticleReferenceRange
std::vector< std::reference_wrapper< Particle const > > ParticleReferenceRange
Definition
core/observables/PidObservable.hpp:47
System::get_system
System & get_system()
Definition
core/system/System.cpp:132
Utils::Vector3d
VectorXd< 3 > Vector3d
Definition
Vector.hpp:185
Utils::transform_vector_cartesian_to_cylinder
Vector3d transform_vector_cartesian_to_cylinder(Vector3d const &vec, Vector3d const &axis, Vector3d const &pos)
Vector transformation from Cartesian to cylindrical coordinates.
Definition
coordinate_transformation.hpp:147
Utils::transform_coordinate_cartesian_to_cylinder
Vector3d transform_coordinate_cartesian_to_cylinder(Vector3d const &pos)
Coordinate transformation from Cartesian to cylindrical coordinates.
Definition
coordinate_transformation.hpp:70
traits
Definition
traits.hpp:24
ParticleObservables::traits
Definition
properties.hpp:27
utils_histogram.hpp
src
core
observables
CylindricalLBVelocityProfileAtParticlePositions.cpp
Generated on Tue Dec 9 2025 02:28:52 for ESPResSo by
1.9.8