Files
mfem/fem/adios2datacollection.cpp
T
Veselin Dobrev c9d9d0f8ff Various tweaks in the template + SIMD code. Make sure the SIMD
interinsics can be used when CUDA is enabled.

A few tweaks related to adios2 when building with GNU make.
2020-05-15 12:33:07 -07:00

93 lines
2.5 KiB
C++

// Copyright (c) 2010-2020, Lawrence Livermore National Security, LLC. Produced
// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
// LICENSE and NOTICE for details. LLNL-CODE-806117.
//
// This file is part of the MFEM library. For more information and source code
// availability visit https://mfem.org.
//
// MFEM is free software; you can redistribute it and/or modify it under the
// terms of the BSD-3 license. We welcome feedback and contributions, see file
// CONTRIBUTING.md for details.
//
// Created on: Jan 7, 2020
// Author: William F Godoy godoywf@ornl.gov
// adios2: Adaptable Input/Output System https://github.com/ornladios/ADIOS2
#include "adios2datacollection.hpp"
#ifdef MFEM_USE_ADIOS2
namespace mfem
{
#ifdef MFEM_USE_MPI
ADIOS2DataCollection::ADIOS2DataCollection(MPI_Comm comm,
const std::string& collection_name, Mesh* mesh,
const std::string engine_type) : DataCollection(collection_name, mesh),
stream( new adios2stream(name, adios2stream::openmode::out, comm, engine_type) )
{
SetMesh(mesh);
}
#else
ADIOS2DataCollection::ADIOS2DataCollection(
const std::string& collection_name, Mesh* mesh,
const std::string engine_type): DataCollection(collection_name, mesh),
stream( new adios2stream(name, adios2stream::openmode::out, engine_type) )
{
SetMesh(mesh);
}
#endif
ADIOS2DataCollection::~ADIOS2DataCollection()
{
stream->Close();
}
void ADIOS2DataCollection::Save()
{
stream->BeginStep();
// only save mesh once (moving mesh, not yet supported)
if (stream->CurrentStep() == 0)
{
if (mesh == nullptr)
{
const std::string error_message =
"MFEM ADIOS2DataCollection Save error: Mesh is null. Please call SetMesh before Save\n";
mfem_error(error_message.c_str());
}
stream->Print(*mesh);
}
// reduce footprint
if (myid == 0)
{
stream->SetTime(time);
stream->SetCycle(cycle);
}
for (const auto& field : field_map)
{
const std::string& variable_name = field.first;
field.second->Save(*stream.get(), variable_name);
}
stream->EndStep();
}
void ADIOS2DataCollection::SetParameter(const std::string key,
const std::string value) noexcept
{
stream->SetParameter(key, value);
}
void ADIOS2DataCollection::SetLevelsOfDetail(const int levels_of_detail)
noexcept
{
stream->SetRefinementLevel(levels_of_detail);
}
} //end namespace mfem
#endif // MFEM_USE_ADIOS2