UDQConfig object has merged DEFINE & ASSIGN Log use of UDA for output purposes Output UDQ keywords to restart file Add size() method to UDQConfig Add UDQVarTYpe member to UDQInput class Add UDQIndex type to keep track of sequence number of variable types Add unit to UDQInput class use maps Add operator[] to UDQConfig class Use UDQInput class when creating restart file UDQInput: use correct input index Add UDQActive::get() method Make sure UDQ DEFINE overwrite correctly WIP WIP - further code to output IGPH vector WIP Fix IUAD input index Output use_index for IUAD Fix bug with size of IUAD array UAD usage hashing based on udqstring and controltype Add UDQ test and input file Refactor UDQActive - handles vanishing UDA minor correction for iuad[1] and for test_UDQ_x.cpp Further work for making unit tests for UDQ restart data WIP Further work unit tests WIP some minor corrections WIP changes to add first version of BOOST test for IUDQ WIP Added code to write InteHead and DoubHead data as well as IGPH to restart file, Further added unit tests to the writing of UDQ data add code to output IUAP array Fixed group-group2 transition, disable Restart output WIP Initial changes to add DUDW array to restart output WIP further work on DUDW data WIP - further work to output and test DUDW vector data to restart file Further changes to write DUDW array to Restartfile
144 lines
4.1 KiB
C++
Executable File
144 lines
4.1 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;
|
|
int maxWellsInField;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
struct Group {
|
|
int ngroups;
|
|
};
|
|
|
|
struct UdqParam {
|
|
int udqParam_1;
|
|
};
|
|
|
|
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);
|
|
InteHEAD& ngroups(const Group& gr);
|
|
InteHEAD& udqParam_1(const UdqParam& udqpar);
|
|
|
|
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
|