Newer
Older
/*
* Distributed under the OSI-approved Apache License, Version 2.0. See
* accompanying file Copyright.txt for details.
*
* DataMan.h
*
* Created on: Jan 10, 2017
* Author: wfg
*/
#ifndef ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_TCC_
#define ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_TCC_
#include "DataManWriter.h"
#include "adios2/ADIOSMPI.h"
namespace adios
{
template <class T>
void DataManWriter::WriteVariableCommon(Variable<T> &variable, const T *values)
{
// here comes your magic at Writing now variable.m_UserValues has the
// data
// passed by the user
// set variable
variable.m_AppValues = values;
m_WrittenVariables.insert(variable.m_Name);
// This part will go away, this is just to monitor variables per rank
if (variable.m_GlobalDimensions.empty())
variable.m_GlobalDimensions = variable.m_LocalDimensions;
if (variable.m_Offsets.empty())
variable.m_Offsets.assign(variable.m_LocalDimensions.size(), 0);
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
json jmsg;
jmsg["doid"] = m_Name;
jmsg["var"] = variable.m_Name;
jmsg["dtype"] = GetType<T>();
jmsg["putshape"] = variable.m_LocalDimensions;
jmsg["varshape"] = variable.m_GlobalDimensions;
jmsg["offset"] = variable.m_Offsets;
jmsg["timestep"] = 0;
m_Man.put(values, jmsg);
if (m_DoMonitor)
{
MPI_Barrier(m_MPIComm);
std::cout << "I am hooked to the DataMan library\n";
std::cout << "putshape " << variable.m_LocalDimensions.size()
<< std::endl;
std::cout << "varshape " << variable.m_GlobalDimensions.size()
<< std::endl;
std::cout << "offset " << variable.m_Offsets.size() << std::endl;
for (int i = 0; i < m_SizeMPI; ++i)
{
if (i == m_RankMPI)
{
std::cout << "Rank: " << m_RankMPI << "\n";
variable.Monitor(std::cout);
std::cout << std::endl;
}
else
{
sleep(1);
}
}
MPI_Barrier(m_MPIComm);
}
}
} // end namespace adios
#endif /* ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_H_ */