Files
opm-common/opm/output/eclipse/InteHEAD.hpp
2018-05-10 07:09:47 +02:00

133 lines
3.9 KiB
C++
Executable File

/*
Copyright 2016, 2017, 2018 Statoil ASA.
This file is part of the Open Porous Media Project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_INTEHEAD_HEADER_INCLUDED
#define OPM_INTEHEAD_HEADER_INCLUDED
#include <array>
#include <ctime>
#include <memory>
#include <vector>
namespace Opm { namespace RestartIO {
class InteHEAD
{
public:
enum class UnitSystem {
Metric, Field, Lab, PVT_M
};
struct WellTableDim {
int numWells;
int maxPerf;
int maxWellInGroup;
int maxGroupInField;
};
struct WellSegDims {
int nsegwl;
int nswlmx;
int nsegmx;
int nlbrmx;
int nisegz;
int nrsegz;
int nilbrz;
};
struct RegDims {
int ntfip;
int nmfipr;
int nrfreg;
int ntfreg;
int nplmix;
};
struct TimePoint {
int year;
int month; // 1..12
int day; // 1..31
int hour; // 0..23
int minute; // 0..59
int second; // 0..59
int microseconds; // 0..999999
};
struct Phases {
int oil;
int water;
int gas;
};
struct TuningPar {
int newtmx;
int newtmn;
int litmax;
int litmin;
int mxwsit;
int mxwpit;
};
InteHEAD();
~InteHEAD() = default;
InteHEAD(const InteHEAD& rhs) = default;
InteHEAD(InteHEAD&& rhs) = default;
InteHEAD& operator=(const InteHEAD& rhs) = default;
InteHEAD& operator=(InteHEAD&& rhs) = default;
InteHEAD& dimensions(const int nx, const int ny, const int nz);
InteHEAD& dimensions(const std::array<int,3>& cartDims);
InteHEAD& numActive(const int nactive);
InteHEAD& unitConventions(const UnitSystem& usys);
InteHEAD& wellTableDimensions(const WellTableDim& wtdim);
InteHEAD& calendarDate(const TimePoint& date);
InteHEAD& activePhases(const Phases& phases);
InteHEAD& params_NWELZ(const int niwelz, const int nswelz, const int nxwelz, const int nzwelz);
InteHEAD& params_NCON(const int niconz, const int nsconz, const int nxconz);
InteHEAD& params_GRPZ(const std::array<int, 4>& grpz);
InteHEAD& params_NAAQZ(const int ncamax, const int niaaqz, const int nsaaqz, const int nxaaqz, const int nicaqz, const int nscaqz, const int nacaqz);
InteHEAD& stepParam(const int tstep, const int report_step);
InteHEAD& tuningParam(const TuningPar& tunpar);
InteHEAD& variousParam(const int version, const int iprog);
InteHEAD& wellSegDimensions(const WellSegDims& wsdim);
InteHEAD& regionDimensions(const RegDims& rdim);
const std::vector<int>& data() const
{
return this->data_;
}
private:
std::vector<int> data_;
};
std::time_t makeUTCTime(const std::tm& timePoint);
InteHEAD::TimePoint
getSimulationTimePoint(const std::time_t start,
const double elapsed);
}} // Opm::RestartIO
#endif // OPM_INTEHEAD_HEADER_INCLUDED