FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
dist_file_io.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
9#include <kernel/util/binary_stream.hpp>
11#include <kernel/util/string.hpp>
12#include <kernel/util/dist.hpp>
13
14#include <sstream>
15
16namespace FEAT
17{
120 {
121 public:
127 static constexpr std::uint64_t magic_combined = 0x4644433354414546ull;
128
148 static void read_common(std::stringstream& stream, const String& filename, const Dist::Comm& comm, int root_rank = 0);
149
151 static void read_common(std::stringstream& stream, const String& filename)
152 {
154 read_common(stream, filename, comm);
155 }
156
176 static void read_common(BinaryStream& stream, const String& filename, const Dist::Comm& comm, int root_rank = 0);
177
179 static void read_common(BinaryStream& stream, const String& filename)
180 {
182 read_common(stream, filename, comm);
183 }
184
201 static void read_sequence(std::stringstream& stream, const String& pattern, const Dist::Comm& comm);
202
204 static void read_sequence(std::stringstream& stream, const String& pattern)
205 {
207 read_sequence(stream, pattern, comm);
208 }
209
210
227 static void read_sequence(BinaryStream& stream, const String& pattern, const Dist::Comm& comm);
228
230 static void read_sequence(BinaryStream& stream, const String& pattern)
231 {
233 read_sequence(stream, pattern, comm);
234 }
235
253 static void write_sequence(std::stringstream& stream, const String& pattern, const Dist::Comm& comm, bool truncate = true);
254
256 static void write_sequence(std::stringstream& stream, const String& pattern, bool truncate = true)
257 {
259 write_sequence(stream, pattern, comm, truncate);
260 }
261
281 static void write_sequence(BinaryStream& stream, const String& pattern, const Dist::Comm& comm, bool truncate = true);
282
284 static void write_sequence(BinaryStream& stream, const String& pattern, bool truncate = true)
285 {
287 write_sequence(stream, pattern, comm, truncate);
288 }
289
307 static void read_ordered(void* buffer, const std::size_t size, const String& filename, const Dist::Comm& comm);
308
310 static void read_ordered(void* buffer, const std::size_t size, const String& filename)
311 {
313 read_ordered(buffer, size, filename, comm);
314 }
315
339 static void write_ordered(const void* buffer, const std::size_t size, const String& filename, const Dist::Comm& comm, bool truncate = true);
340
342 static void write_ordered(const void* buffer, const std::size_t size, const String& filename, bool truncate = true)
343 {
345 write_ordered(buffer, size, filename, comm, truncate);
346 }
347
368 static void write_ordered(BinaryStream& stream, const String& filename, const Dist::Comm& comm, bool truncate = true)
369 {
370 write_ordered(stream.data(), std::size_t(stream.size()), filename, comm, truncate);
371 }
372
374 static void write_ordered(BinaryStream& stream, const String& filename, bool truncate = true)
375 {
377 write_ordered(stream.data(), std::size_t(stream.size()), filename, comm, truncate);
378 }
379
410 static void read_combined(std::vector<char>& common, std::vector<char>& buffer,
411 const String& filename, const Dist::Comm& comm, int root_rank = 0, bool bcast_common = true);
412
414 static void read_combined(BinaryStream& common, BinaryStream& buffer,
415 const String& filename, const Dist::Comm& comm, int root_rank = 0, bool bcast_common = true)
416 {
417 read_combined(common.container(), buffer.container(), filename, comm, root_rank, bcast_common);
418 }
419
444 static void write_combined(const std::vector<char>& common, const std::vector<char>& buffer,
445 const String& filename, const Dist::Comm& comm, int root_rank = 0);
446
448 static void write_combined(const BinaryStream& common, const BinaryStream& buffer,
449 const String& filename, const Dist::Comm& comm, int root_rank = 0)
450 {
451 write_combined(common.container(), buffer.container(), filename, comm, root_rank);
452 }
453
454 protected:
456 static String _rankname(const String& pattern, int rank);
458 static void _read_file(std::stringstream& stream, const String& filename);
460 static void _read_file(BinaryStream& stream, const String& filename);
462 static void _write_file(std::stringstream& stream, const String& filename, bool truncate);
464 static void _write_file(BinaryStream& stream, const String& filename, bool truncate);
465 }; // class DistFileIO
466} // namespace FEAT
FEAT Kernel base header.
Binary Stream class.
std::vector< char > & container()
Returns a reference to the internal vector container.
char * data()
Returns the data array of the stream.
std::streamsize size() const
Returns the current size of the stream.
Communicator class.
Definition: dist.hpp:1349
static Comm world()
Returns a copy of the world communicator.
Definition: dist.cpp:429
Distributed File Input/Output class.
static void write_sequence(std::stringstream &stream, const String &pattern, bool truncate=true)
Writes a rank-indexed text file sequence.
static void write_sequence(std::stringstream &stream, const String &pattern, const Dist::Comm &comm, bool truncate=true)
Writes a rank-indexed text file sequence.
static void write_ordered(const void *buffer, const std::size_t size, const String &filename, bool truncate=true)
Writes a buffer into a common binary file in rank order.
static void read_sequence(BinaryStream &stream, const String &pattern)
Reads a rank-indexed text file sequence.
static void write_sequence(BinaryStream &stream, const String &pattern, bool truncate=true)
Writes a rank-indexed text file sequence.
static void write_ordered(BinaryStream &stream, const String &filename, const Dist::Comm &comm, bool truncate=true)
Writes a binary stream into a common binary file in rank order.
static constexpr std::uint64_t magic_combined
Magic number for combined distributed files as used by read_combined() and write_combined()
static void _write_file(std::stringstream &stream, const String &filename, bool truncate)
auxiliary function: write a string stream to a file
static void read_ordered(void *buffer, const std::size_t size, const String &filename)
Reads a buffer from a common binary file in rank order.
static void write_ordered(const void *buffer, const std::size_t size, const String &filename, const Dist::Comm &comm, bool truncate=true)
Writes a buffer into a common binary file in rank order.
static void read_common(std::stringstream &stream, const String &filename, const Dist::Comm &comm, int root_rank=0)
Reads a common text file for all ranks.
static void read_ordered(void *buffer, const std::size_t size, const String &filename, const Dist::Comm &comm)
Reads a buffer from a common binary file in rank order.
static void write_combined(const std::vector< char > &common, const std::vector< char > &buffer, const String &filename, const Dist::Comm &comm, int root_rank=0)
Writes a combined shared/ordered binary file.
static void read_sequence(std::stringstream &stream, const String &pattern)
Reads a rank-indexed text file sequence.
static void write_ordered(BinaryStream &stream, const String &filename, bool truncate=true)
Writes a buffer into a common binary file in rank order.
static void read_combined(std::vector< char > &common, std::vector< char > &buffer, const String &filename, const Dist::Comm &comm, int root_rank=0, bool bcast_common=true)
Reads a combined shared/ordered binary file as written by the write_combined function.
static String _rankname(const String &pattern, int rank)
auxiliary function: build a rank filename from a pattern
static void read_combined(BinaryStream &common, BinaryStream &buffer, const String &filename, const Dist::Comm &comm, int root_rank=0, bool bcast_common=true)
Reads a combined shared/ordered binary file as written by the write_combined function.
static void _read_file(std::stringstream &stream, const String &filename)
auxiliary function: read a file into a string stream
static void write_combined(const BinaryStream &common, const BinaryStream &buffer, const String &filename, const Dist::Comm &comm, int root_rank=0)
Writes a combined shared/ordered binary file.
static void read_common(std::stringstream &stream, const String &filename)
Reads a common text file for all ranks.
static void read_common(BinaryStream &stream, const String &filename)
Reads a common text file for all ranks.
static void read_sequence(std::stringstream &stream, const String &pattern, const Dist::Comm &comm)
Reads a rank-indexed text file sequence.
String class implementation.
Definition: string.hpp:47
FEAT namespace.
Definition: adjactor.hpp:12