Loading [MathJax]/extensions/TeX/AMSmath.js
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
h5md.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010-2025 The ESPResSo project
3 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010
4 * Max-Planck-Institute for Polymer Research, Theory Group
5 *
6 * This file is part of ESPResSo.
7 *
8 * ESPResSo is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * ESPResSo is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include "config/config.hpp"
23
24#ifdef H5MD
25
26#include "h5md.hpp"
27
28#include "core/MpiCallbacks.hpp"
33
34#include <cassert>
35#include <cmath>
36#include <string>
37#include <vector>
38
39namespace ScriptInterface {
40namespace Writer {
41
44 {{"file_path", m_h5md, &::Writer::H5md::File::file_path},
45 {"script_path", m_h5md, &::Writer::H5md::File::script_path},
46 {"fields", AutoParameter::read_only,
47 [this]() { return make_vector_of_variants(m_output_fields); }},
48 {"mass_unit", m_h5md, &::Writer::H5md::File::mass_unit},
49 {"length_unit", m_h5md, &::Writer::H5md::File::length_unit},
50 {"time_unit", m_h5md, &::Writer::H5md::File::time_unit},
51 {"force_unit", m_h5md, &::Writer::H5md::File::force_unit},
52 {"velocity_unit", m_h5md, &::Writer::H5md::File::velocity_unit},
53 {"charge_unit", m_h5md, &::Writer::H5md::File::charge_unit}});
54};
55
57 m_output_fields = get_value<std::vector<std::string>>(params, "fields");
58 m_h5md =
59 make_shared_from_args<::Writer::H5md::File, std::string, std::string,
60 std::vector<std::string>, std::string, std::string,
61 std::string, std::string, std::string, std::string>(
62 params, "file_path", "script_path", "fields", "mass_unit",
63 "length_unit", "time_unit", "force_unit", "velocity_unit",
64 "charge_unit");
65 // MPI communicator is needed to close parallel file handles
66 m_mpi_env_lock = ::Communication::mpiCallbacksHandle()->share_mpi_env();
67}
68
70 m_h5md.reset();
71 assert(m_h5md.use_count() == 0u);
72 m_mpi_env_lock.reset();
73}
74
75Variant H5md::do_call_method(const std::string &name,
76 const VariantMap &parameters) {
77 if (name == "write") {
78 auto const &system = ::System::get_system();
79 auto const particles = system.cell_structure->local_particles();
80 auto const sim_time = system.get_sim_time();
81 auto const time_step = system.get_time_step();
82 auto const n_steps = static_cast<int>(std::round(sim_time / time_step));
83 m_h5md->write(particles, sim_time, n_steps, *system.box_geo);
84 } else if (name == "flush") {
85 m_h5md->flush();
86 } else if (name == "close") {
87 m_h5md->close();
88 } else if (name == "valid_fields") {
89 return make_vector_of_variants(m_h5md->valid_fields());
90 }
91 return {};
92}
93
94} // namespace Writer
95} // namespace ScriptInterface
96
97#endif // H5MD
Communication::MpiCallbacks manages MPI communication using a visitor pattern.
void add_parameters(std::vector< AutoParameter > &&params)
boost::string_ref name() const
void do_construct(VariantMap const &params) override
Definition h5md.cpp:56
Variant do_call_method(const std::string &name, const VariantMap &parameters) override
Definition h5md.cpp:75
Class for writing H5MD files.
auto const & length_unit() const
Retrieve the set length unit.
auto const & time_unit() const
Retrieve the set time unit.
auto const & force_unit() const
Retrieve the set force unit.
auto const & mass_unit() const
Retrieve the set mass unit.
auto const & charge_unit() const
Retrieve the set charge unit.
auto const & velocity_unit() const
Retrieve the set velocity unit.
std::string file_path() const
Retrieve the path to the hdf5 file.
auto const & script_path() const
Retrieve the path to the simulation script.
This file contains the defaults for ESPResSo.
This file contains the asynchronous MPI communication.
std::shared_ptr< MpiCallbacks > mpiCallbacksHandle()
T get_value(Variant const &v)
Extract value of specific type T from a Variant.
std::unordered_map< std::string, Variant > VariantMap
Definition Variant.hpp:69
auto make_vector_of_variants(std::vector< T > const &v)
Definition Variant.hpp:88
std::shared_ptr< T > make_shared_from_args(VariantMap const &vals, ArgNames &&...args)
Make a new std::shared_ptr<T> with arguments extracted from a 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.
Definition Variant.hpp:67
System & get_system()
static SteepestDescentParameters params
Currently active steepest descent instance.
static constexpr const ReadOnly read_only