Promote 'CharArrayNullTerm' to EclIO::PaddedOutputString
Space-padded vectors of N (usually 8) characters is the typical representation of character data in ECLIPSE output files. Support this type natively in the ECLIPSE IO library.
This commit is contained in:
parent
82b0a2d82b
commit
725ac521ba
@ -280,7 +280,6 @@ if(ENABLE_ECL_OUTPUT)
|
||||
tests/test_AggregateMSWData.cpp
|
||||
tests/test_AggregateConnectionData.cpp
|
||||
tests/test_ArrayDimChecker.cpp
|
||||
tests/test_CharArrayNullTerm.cpp
|
||||
tests/test_EclipseIO.cpp
|
||||
tests/test_DoubHEAD.cpp
|
||||
tests/test_InteHEAD.cpp
|
||||
@ -288,6 +287,7 @@ if(ENABLE_ECL_OUTPUT)
|
||||
tests/test_LogiHEAD.cpp
|
||||
tests/test_OutputStream.cpp
|
||||
tests/test_regionCache.cpp
|
||||
tests/test_PaddedOutputString.cpp
|
||||
tests/test_Restart.cpp
|
||||
tests/test_RFT.cpp
|
||||
tests/test_Solution.cpp
|
||||
@ -577,6 +577,7 @@ if(ENABLE_ECL_OUTPUT)
|
||||
opm/io/eclipse/ERft.hpp
|
||||
opm/io/eclipse/ERst.hpp
|
||||
opm/io/eclipse/ESmry.hpp
|
||||
opm/io/eclipse/PaddedOutputString.hpp
|
||||
opm/io/eclipse/OutputStream.hpp
|
||||
opm/output/data/Cells.hpp
|
||||
opm/output/data/Solution.hpp
|
||||
@ -591,7 +592,6 @@ if(ENABLE_ECL_OUTPUT)
|
||||
opm/output/eclipse/AggregateConnectionData.hpp
|
||||
opm/output/eclipse/AggregateMSWData.hpp
|
||||
opm/output/eclipse/AggregateWellData.hpp
|
||||
opm/output/eclipse/CharArrayNullTerm.hpp
|
||||
opm/output/eclipse/DoubHEAD.hpp
|
||||
opm/output/eclipse/EclipseGridInspector.hpp
|
||||
opm/output/eclipse/EclipseIO.hpp
|
||||
|
@ -17,8 +17,8 @@
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef OPM_CHARARRAY_HEADER_HPP
|
||||
#define OPM_CHARARRAY_HEADER_HPP
|
||||
#ifndef OPM_PADDEDOUTPUTSTRING_HEADER_HPP
|
||||
#define OPM_PADDEDOUTPUTSTRING_HEADER_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
@ -26,7 +26,7 @@
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
|
||||
namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
namespace Opm { namespace EclIO {
|
||||
|
||||
/// Null-terminated, left adjusted, space padded array of N characters.
|
||||
///
|
||||
@ -36,30 +36,30 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
///
|
||||
/// \tparam N Number of characters.
|
||||
template <std::size_t N>
|
||||
class CharArrayNullTerm
|
||||
class PaddedOutputString
|
||||
{
|
||||
public:
|
||||
CharArrayNullTerm()
|
||||
PaddedOutputString()
|
||||
{
|
||||
this->clear();
|
||||
}
|
||||
|
||||
explicit CharArrayNullTerm(const std::string& s)
|
||||
: CharArrayNullTerm()
|
||||
explicit PaddedOutputString(const std::string& s)
|
||||
: PaddedOutputString()
|
||||
{
|
||||
this->copy_in(s.c_str(), s.size());
|
||||
}
|
||||
|
||||
~CharArrayNullTerm() = default;
|
||||
~PaddedOutputString() = default;
|
||||
|
||||
CharArrayNullTerm(const CharArrayNullTerm& rhs) = default;
|
||||
CharArrayNullTerm(CharArrayNullTerm&& rhs) = default;
|
||||
PaddedOutputString(const PaddedOutputString& rhs) = default;
|
||||
PaddedOutputString(PaddedOutputString&& rhs) = default;
|
||||
|
||||
CharArrayNullTerm& operator=(const CharArrayNullTerm& rhs) = default;
|
||||
CharArrayNullTerm& operator=(CharArrayNullTerm&& rhs) = default;
|
||||
PaddedOutputString& operator=(const PaddedOutputString& rhs) = default;
|
||||
PaddedOutputString& operator=(PaddedOutputString&& rhs) = default;
|
||||
|
||||
/// Assign from \code std::string \endcode.
|
||||
CharArrayNullTerm& operator=(const std::string& s)
|
||||
PaddedOutputString& operator=(const std::string& s)
|
||||
{
|
||||
this->clear();
|
||||
this->copy_in(s.data(), s.size());
|
||||
@ -99,5 +99,5 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
}
|
||||
};
|
||||
|
||||
}}} // Opm::RestartIO::Helpers
|
||||
#endif // CHARARRAY_HEADER
|
||||
}} // Opm::EclIO
|
||||
#endif // OPM_PADDEDOUTPUTSTRING_HEADER_HPP
|
@ -20,9 +20,10 @@
|
||||
#ifndef OPM_AGGREGATE_GROUP_DATA_HPP
|
||||
#define OPM_AGGREGATE_GROUP_DATA_HPP
|
||||
|
||||
#include <opm/output/eclipse/CharArrayNullTerm.hpp>
|
||||
#include <opm/output/eclipse/WindowedArray.hpp>
|
||||
|
||||
#include <opm/io/eclipse/PaddedOutputString.hpp>
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -80,7 +81,7 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
return this->xGroup_.data();
|
||||
}
|
||||
|
||||
const std::vector<CharArrayNullTerm<8>>& getZGroup() const
|
||||
const std::vector<EclIO::PaddedOutputString<8>>& getZGroup() const
|
||||
{
|
||||
return this->zGroup_.data();
|
||||
}
|
||||
@ -158,7 +159,7 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
WindowedArray<double> xGroup_;
|
||||
|
||||
/// Aggregate 'ZWEL' array (Character) for all wells.
|
||||
WindowedArray<CharArrayNullTerm<8>> zGroup_;
|
||||
WindowedArray<EclIO::PaddedOutputString<8>> zGroup_;
|
||||
|
||||
/// Maximum number of wells in a group.
|
||||
int nWGMax_;
|
||||
|
@ -21,7 +21,6 @@
|
||||
#define OPM_AGGREGATE_MSW_DATA_HPP
|
||||
|
||||
#include <opm/output/data/Wells.hpp>
|
||||
#include <opm/output/eclipse/CharArrayNullTerm.hpp>
|
||||
#include <opm/output/eclipse/WindowedArray.hpp>
|
||||
|
||||
#include <string>
|
||||
|
@ -20,9 +20,10 @@
|
||||
#ifndef OPM_AGGREGATE_WELL_DATA_HPP
|
||||
#define OPM_AGGREGATE_WELL_DATA_HPP
|
||||
|
||||
#include <opm/output/eclipse/CharArrayNullTerm.hpp>
|
||||
#include <opm/output/eclipse/WindowedArray.hpp>
|
||||
|
||||
#include <opm/io/eclipse/PaddedOutputString.hpp>
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -74,7 +75,7 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
}
|
||||
|
||||
/// Retrieve Character Well Data Array.
|
||||
const std::vector<CharArrayNullTerm<8>>& getZWell() const
|
||||
const std::vector<EclIO::PaddedOutputString<8>>& getZWell() const
|
||||
{
|
||||
return this->zWell_.data();
|
||||
}
|
||||
@ -92,7 +93,7 @@ namespace Opm { namespace RestartIO { namespace Helpers {
|
||||
WindowedArray<double> xWell_;
|
||||
|
||||
/// Aggregate 'ZWEL' array (Character) for all wells.
|
||||
WindowedArray<CharArrayNullTerm<8>> zWell_;
|
||||
WindowedArray<EclIO::PaddedOutputString<8>> zWell_;
|
||||
|
||||
/// Maximum number of groups in model.
|
||||
int nWGMax_;
|
||||
|
@ -410,12 +410,12 @@ namespace {
|
||||
}
|
||||
|
||||
Opm::RestartIO::Helpers::WindowedArray<
|
||||
Opm::RestartIO::Helpers::CharArrayNullTerm<8>
|
||||
Opm::EclIO::PaddedOutputString<8>
|
||||
>
|
||||
allocate(const std::vector<int>& inteHead)
|
||||
{
|
||||
using WV = Opm::RestartIO::Helpers::WindowedArray<
|
||||
Opm::RestartIO::Helpers::CharArrayNullTerm<8>
|
||||
Opm::EclIO::PaddedOutputString<8>
|
||||
>;
|
||||
|
||||
return WV {
|
||||
|
@ -750,12 +750,12 @@ namespace {
|
||||
}
|
||||
|
||||
Opm::RestartIO::Helpers::WindowedArray<
|
||||
Opm::RestartIO::Helpers::CharArrayNullTerm<8>
|
||||
Opm::EclIO::PaddedOutputString<8>
|
||||
>
|
||||
allocate(const std::vector<int>& inteHead)
|
||||
{
|
||||
using WV = Opm::RestartIO::Helpers::WindowedArray<
|
||||
Opm::RestartIO::Helpers::CharArrayNullTerm<8>
|
||||
Opm::EclIO::PaddedOutputString<8>
|
||||
>;
|
||||
|
||||
return WV {
|
||||
|
@ -32,6 +32,8 @@
|
||||
|
||||
#include <opm/output/eclipse/libECLRestart.hpp>
|
||||
|
||||
#include <opm/io/eclipse/PaddedOutputString.hpp>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
||||
@ -168,7 +170,7 @@ namespace {
|
||||
}
|
||||
|
||||
std::vector<const char*>
|
||||
serialize_ZWEL(const std::vector<Opm::RestartIO::Helpers::CharArrayNullTerm<8>>& zwel)
|
||||
serialize_ZWEL(const std::vector<EclIO::PaddedOutputString<8>>& zwel)
|
||||
{
|
||||
std::vector<const char*> data(zwel.size(), nullptr);
|
||||
std::size_t it = 0;
|
||||
|
@ -1,36 +1,36 @@
|
||||
#define BOOST_TEST_MODULE Aggregate_Well_Data
|
||||
#define BOOST_TEST_MODULE Padded_Output_String
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include <opm/output/eclipse/CharArrayNullTerm.hpp>
|
||||
#include <opm/io/eclipse/PaddedOutputString.hpp>
|
||||
|
||||
// Convenience alias.
|
||||
template <std::size_t N>
|
||||
using AChar = ::Opm::RestartIO::Helpers::CharArrayNullTerm<N>;
|
||||
using PadString = ::Opm::EclIO::PaddedOutputString<N>;
|
||||
|
||||
// =====================================================================
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(AChar8)
|
||||
BOOST_AUTO_TEST_SUITE(PadString8)
|
||||
|
||||
BOOST_AUTO_TEST_CASE (Basic_Operations)
|
||||
{
|
||||
// Default Constructor
|
||||
{
|
||||
const auto s = AChar<8>{};
|
||||
const auto s = PadString<8>{};
|
||||
|
||||
BOOST_CHECK_EQUAL(s.c_str(), std::string(8, ' '));
|
||||
}
|
||||
|
||||
// Construct from Constant String
|
||||
{
|
||||
const auto s = AChar<8>{"Inj-1"};
|
||||
const auto s = PadString<8>{"Inj-1"};
|
||||
|
||||
BOOST_CHECK_EQUAL(s.c_str(), std::string{"Inj-1 "});
|
||||
}
|
||||
|
||||
// Copy Construction
|
||||
{
|
||||
const auto s1 = AChar<8>{"Inj-1"};
|
||||
const auto s1 = PadString<8>{"Inj-1"};
|
||||
const auto s2 = s1;
|
||||
|
||||
BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "});
|
||||
@ -38,7 +38,7 @@ BOOST_AUTO_TEST_CASE (Basic_Operations)
|
||||
|
||||
// Move Construction
|
||||
{
|
||||
auto s1 = AChar<8>{"Inj-1"};
|
||||
auto s1 = PadString<8>{"Inj-1"};
|
||||
const auto s2 = std::move(s1);
|
||||
|
||||
BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "});
|
||||
@ -46,8 +46,8 @@ BOOST_AUTO_TEST_CASE (Basic_Operations)
|
||||
|
||||
// Assignment Operator
|
||||
{
|
||||
const auto s1 = AChar<8>{"Inj-1"};
|
||||
auto s2 = AChar<8>{"Prod-2"};
|
||||
const auto s1 = PadString<8>{"Inj-1"};
|
||||
auto s2 = PadString<8>{"Prod-2"};
|
||||
|
||||
s2 = s1;
|
||||
BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "});
|
||||
@ -55,8 +55,8 @@ BOOST_AUTO_TEST_CASE (Basic_Operations)
|
||||
|
||||
// Move Assignment Operator
|
||||
{
|
||||
auto s1 = AChar<8>{"Inj-1"};
|
||||
auto s2 = AChar<8>{"Prod-2"};
|
||||
auto s1 = PadString<8>{"Inj-1"};
|
||||
auto s2 = PadString<8>{"Prod-2"};
|
||||
|
||||
s2 = std::move(s1);
|
||||
BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "});
|
||||
@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE (Basic_Operations)
|
||||
|
||||
// Assign std::string
|
||||
{
|
||||
auto s = AChar<8>{"@Hi Hoo@"};
|
||||
auto s = PadString<8>{"@Hi Hoo@"};
|
||||
|
||||
s = "Prod-2";
|
||||
BOOST_CHECK_EQUAL(s.c_str(), std::string{"Prod-2 "});
|
||||
@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE (String_Shortening)
|
||||
{
|
||||
// Construct from string of more than N characters
|
||||
{
|
||||
const auto s = AChar<10>{
|
||||
const auto s = PadString<10>{
|
||||
"String too long"
|
||||
};
|
||||
|
||||
@ -84,7 +84,7 @@ BOOST_AUTO_TEST_CASE (String_Shortening)
|
||||
|
||||
// Assign string of more than N characters
|
||||
{
|
||||
auto s = AChar<11>{};
|
||||
auto s = PadString<11>{};
|
||||
|
||||
s = "This string has too many characters";
|
||||
|
Loading…
Reference in New Issue
Block a user