ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
serialization_cereal.h
Go to the documentation of this file.
1#ifndef SERIALIZATION_CEREAL_H
2#define SERIALIZATION_CEREAL_H
3
4#include <cereal/archives/binary.hpp>
5#include <cereal/archives/json.hpp>
6#include <cereal/types/vector.hpp>
7#include <cereal/types/map.hpp>
8#include <cereal/types/set.hpp>
9#include <cereal/types/string.hpp>
10#include <cereal/types/functional.hpp>
11
12#include "../../source_base/vector3.h"
13#include "../../source_base/abfs-vector3_order.h"
14#include "../../source_base/matrix.h"
15
16
17
18template<class Archive, typename T> void serialize( Archive & ar, Abfs::Vector3_Order<T> & v ){ ar(v.x); ar(v.y); ar(v.z); }
19
20namespace ModuleBase
21{
22 template<class Archive, typename T> void serialize( Archive & ar, Vector3<T> & v ){ ar(v.x); ar(v.y); ar(v.z); }
23
24 template<class Archive> void save( Archive & ar, const matrix & m )
25 {
26 ar(m.nr); ar(m.nc);
27 ar(cereal::binary_data(m.c, m.nr*m.nc*sizeof(double)));
28 }
29 template<class Archive> void load( Archive & ar, matrix & m )
30 {
31 int nr, nc;
32 ar(nr); ar(nc);
33 m.create(nr,nc);
34 ar(cereal::binary_data(m.c, m.nr*m.nc*sizeof(double)));
35 }
36}
37
38#include <mpi.h>
39#include <sstream>
40
41namespace ModuleBase
42{
43 template<typename T>
44 void bcast_data_cereal(T &data, const MPI_Comm &mpi_comm, const int &rank_bcast)
45 {
46 int my_rank; MPI_Comm_rank( mpi_comm, &my_rank );
47 if(my_rank==rank_bcast)
48 {
49 std::stringstream ss;
50 {
51 cereal::BinaryOutputArchive ar(ss);
52 ar(data);
53 }
54 const int size = ss.str().size();
55 MPI_Bcast( const_cast<int*>(&size), 1, MPI_INT, rank_bcast, mpi_comm );
56 MPI_Bcast( const_cast<char*>(ss.str().c_str()), size, MPI_CHAR, rank_bcast, mpi_comm );
57 }
58 else
59 {
60 int size;
61 MPI_Bcast( &size, 1, MPI_INT, rank_bcast, mpi_comm );
62 std::vector<char> c(size);
63 MPI_Bcast( c.data(), size, MPI_CHAR, rank_bcast, mpi_comm );
64 std::stringstream ss;
65 ss.rdbuf()->pubsetbuf(c.data(),size);
66 {
67 cereal::BinaryInputArchive ar(ss);
68 ar(data);
69 }
70 }
71 }
72}
73
74#endif
Definition abfs-vector3_order.h:16
3 elements vector
Definition vector3.h:22
T x
Definition vector3.h:24
T y
Definition vector3.h:25
T z
Definition vector3.h:26
Definition matrix.h:19
int nr
Definition matrix.h:23
double * c
Definition matrix.h:25
int nc
Definition matrix.h:24
void create(const int nrow, const int ncol, const bool flag_zero=true)
Definition matrix.cpp:122
#define T
Definition exp.cpp:237
Definition array_pool.h:6
void bcast_data_cereal(T &data, const MPI_Comm &mpi_comm, const int &rank_bcast)
Definition serialization_cereal.h:44
void serialize(Archive &ar, Vector3< T > &v)
Definition serialization_cereal.h:22
void save(Archive &ar, const matrix &m)
Definition serialization_cereal.h:24
void load(Archive &ar, matrix &m)
Definition serialization_cereal.h:29
void serialize(Archive &ar, Abfs::Vector3_Order< T > &v)
Definition serialization_cereal.h:18