Merge pull request #181 from andlaus/polymer_fixes

Polymer fixes
This commit is contained in:
Joakim Hove
2014-04-17 23:09:42 +02:00
8 changed files with 318 additions and 4 deletions

View File

@@ -0,0 +1,58 @@
/*
Copyright (C) 2014 by Andreas Lauser
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_PARSER_PLYADS_TABLE_HPP
#define OPM_PARSER_PLYADS_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class PlyadsTable : protected SimpleTable {
typedef SimpleTable ParentType;
public:
/*!
* \brief Read the PLYADS keyword and provide some convenience
* methods for it.
*/
PlyadsTable(Opm::DeckKeywordConstPtr keyword, int recordIdx = 0)
: ParentType(keyword,
std::vector<std::string>{
"PolymerConcentration",
"AdsorbedPolymer"
},
recordIdx,
/*firstEntityOffset=*/0)
{}
int numRows() const
{ return ParentType::numRows(); };
int numColumns() const
{ return ParentType::numColumns(); };
const std::vector<double> &getPolymerConcentrationColumn() const
{ return ParentType::getColumn(0); }
const std::vector<double> &getAdsorbedPolymerColumn() const
{ return ParentType::getColumn(0); }
};
}
#endif // OPM_PARSER_PLYADS_TABLE_HPP

View File

@@ -0,0 +1,55 @@
/*
Copyright (C) 2014 by Andreas Lauser
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_PARSER_PLYMAX_TABLE_HPP
#define OPM_PARSER_PLYMAX_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class PlymaxTable : protected SimpleTable {
typedef SimpleTable ParentType;
public:
/*!
* \brief Read the PLYMAX keyword and provide some convenience
* methods for it.
*/
PlymaxTable(Opm::DeckKeywordConstPtr keyword, int recordIdx = 0)
: ParentType(keyword,
std::vector<std::string>{"C_POLYMER", "C_POLYMER_MAX"},
recordIdx,
/*firstEntityOffset=*/0)
{}
int numRows() const
{ return ParentType::numRows(); };
int numColumns() const
{ return ParentType::numColumns(); };
const std::vector<double> &getPolymerConcentrationColumn() const
{ return ParentType::getColumn(0); }
const std::vector<double> &getMaxPolymerConcentrationColumn() const
{ return ParentType::getColumn(1); }
};
}
#endif // OPM_PARSER_SIMPLE_TABLE_HPP

View File

@@ -0,0 +1,78 @@
/*
Copyright (C) 2014 by Andreas Lauser
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_PARSER_PLYROCK_TABLE_HPP
#define OPM_PARSER_PLYROCK_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class PlyrockTable : protected SimpleTable {
typedef SimpleTable ParentType;
public:
/*!
* \brief Read the PLYROCK keyword and provide some convenience
* methods for it.
*/
PlyrockTable(Opm::DeckKeywordConstPtr keyword, int recordIdx = 0)
: ParentType(keyword,
std::vector<std::string>{
"DeadPoreVolume",
"ResidualResistanceFactor",
"RockDensityFactor",
"AdsorbtionIndex",
"MaxAdsorbtion"
},
recordIdx,
/*firstEntityOffset=*/0)
{}
int numRows() const
{ return ParentType::numRows(); };
int numColumns() const
{ return ParentType::numColumns(); };
const std::vector<double> &getDeadPoreVolumeColumn() const
{ return ParentType::getColumn(0); }
const std::vector<double> &getResidualResistanceFactorColumn() const
{ return ParentType::getColumn(1); }
const std::vector<double> &getRockDensityFactorColumn() const
{ return ParentType::getColumn(2); }
// is column is actually an integer, but this is not yet
// supported by opm-parser (yet?) as it would require quite a
// few changes in the table support classes (read: it would
// probably require a lot of template vodoo) and some in the
// JSON-to-C conversion code. In the meantime, the index is
// just a double which can be converted to an integer in the
// calling code. (Make sure, that you don't interpolate
// indices, though!)
const std::vector<double> &getAdsorbtionIndexColumn() const
{ return ParentType::getColumn(3); }
const std::vector<double> &getMaxAdsorbtionColumn() const
{ return ParentType::getColumn(4); }
};
}
#endif // OPM_PARSER_PLYROCK_TABLE_HPP

View File

@@ -0,0 +1,58 @@
/*
Copyright (C) 2014 by Andreas Lauser
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_PARSER_PLYVISC_TABLE_HPP
#define OPM_PARSER_PLYVISC_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class PlyviscTable : protected SimpleTable {
typedef SimpleTable ParentType;
public:
/*!
* \brief Read the PLYVISC keyword and provide some convenience
* methods for it.
*/
PlyviscTable(Opm::DeckKeywordConstPtr keyword, int recordIdx = 0)
: ParentType(keyword,
std::vector<std::string>{
"PolymerConcentration",
"ViscosityMultiplier"
},
recordIdx,
/*firstEntityOffset=*/0)
{}
int numRows() const
{ return ParentType::numRows(); };
int numColumns() const
{ return ParentType::numColumns(); };
const std::vector<double> &getPolymerConcentrationColumn() const
{ return ParentType::getColumn(0); }
const std::vector<double> &getViscosityMultiplierColumn() const
{ return ParentType::getColumn(0); }
};
}
#endif // OPM_PARSER_PLYVISC_TABLE_HPP

View File

@@ -0,0 +1,55 @@
/*
Copyright (C) 2014 by Andreas Lauser
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_PARSER_TLMIXPAR_TABLE_HPP
#define OPM_PARSER_TLMIXPAR_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class TlmixparTable : protected SimpleTable {
typedef SimpleTable ParentType;
public:
/*!
* \brief Read the TLMIXPAR keyword and provide some convenience
* methods for it.
*/
TlmixparTable(Opm::DeckKeywordConstPtr keyword, int recordIdx = 0)
: ParentType(keyword,
std::vector<std::string>{"ViscosityParameter", "DensityParameter"},
recordIdx,
/*firstEntityOffset=*/0)
{}
int numRows() const
{ return ParentType::numRows(); };
int numColumns() const
{ return ParentType::numColumns(); };
const std::vector<double> &getViscosityParameterColumn() const
{ return ParentType::getColumn(0); }
const std::vector<double> &getDensityParameterColumn() const
{ return ParentType::getColumn(1); }
};
}
#endif // OPM_PARSER_SIMPLE_TABLE_HPP

View File

@@ -0,0 +1,5 @@
{"name" : "MISCIBLE", "size" : 1, "items" : [
{"name" : "NTMISC" , "value_type" : "INT" , "default" : 1},
{"name" : "NSMISC" , "value_type" : "INT" , "default" : 20},
{"name" : "TWOPOINT" , "value_type" : "STRING" , "default" : "NONE"},
]}

View File

@@ -1,8 +1,6 @@
{"name" : "PLYMAX" , "size" : {"keyword" : "REGDIMS" , "item" : "NPLMIX"} , "items" :
{"name" : "PLYMAX" , "size" : {"keyword" : "MISCIBLE" , "item" : "NTMISC"} , "items" :
[
{"name" : "MAX_PLOYMER_CONCENTRATION" , "value_type" : "DOUBLE" , "dimension" : "PolymerDensity"},
{"name" : "MAX_POLYMER_CONCENTRATION" , "value_type" : "DOUBLE" , "dimension" : "PolymerDensity"},
{"name" : "MAX_SALT_CONCENTRATION" , "value_type" : "DOUBLE" , "dimension" : "PolymerDensity"}
]
}

View File

@@ -0,0 +1,7 @@
{"name" : "TLMIXPAR" , "size" : {"keyword" : "MISCIBLE" , "item" : "NTMISC"} , "items" :
[
{"name" : "TL_VISCOSITY_PARAMETER" , "value_type" : "DOUBLE" , "dimension" : "1"},
{"name" : "TL_DENSITY_PARAMETER" , "value_type" : "DOUBLE" , "dimension" : "1"}
]
}