Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
INMOST
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Terekhov
INMOST
Commits
38603367
Commit
38603367
authored
Jun 23, 2017
by
Kirill Terekhov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some corretions for processing of wells in GRDECL
parent
a1dd7aac
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
31 deletions
+83
-31
Source/IO/mesh_ecl_file.cpp
Source/IO/mesh_ecl_file.cpp
+82
-30
Source/Mesh/mesh.cpp
Source/Mesh/mesh.cpp
+1
-1
No files found.
Source/IO/mesh_ecl_file.cpp
View file @
38603367
...
...
@@ -67,6 +67,7 @@
//this controls what is recorded into tag CTRL of well sets
#define ECL_WCTRL_RATE 0
#define ECL_WCTRL_BHP 1
#define ECL_WCTRL_RESV 2
//this controls what is recorded into tag PHASE of well sets
#define ECL_WPHASE_WATER 0
...
...
@@ -86,6 +87,7 @@
#define ECL_WTAG_CTRL 4
#define ECL_WTAG_TYPE 5
#define ECL_WTAG_PHASE 6
#define ECL_WTAG_BHP 7
//eclipse states
#define ECL_NEVER -1
...
...
@@ -2072,8 +2074,9 @@ namespace INMOST
wconprodinje_cur
.
second
.
type
=
"PROD"
;
else
wconprodinje_cur
.
second
.
type
=
"WATER"
;
memset
(
wconprodinje_cur
.
second
.
urats
.
rats
,
0
,
sizeof
(
double
)
*
5
);
wconprodinje_cur
.
second
.
bhp
=
1.0e+5
;
//default psia in eclipse
for
(
int
k
=
0
;
k
<
5
;
++
k
)
wconprodinje_cur
.
second
.
urats
.
rats
[
k
]
=
-
1
;
wconprodinje_cur
.
second
.
bhp
=
-
1
;
//default psia in eclipse
if
(
wconprod
)
state
=
ECL_WCONPRODINJE_OPEN
;
else
...
...
@@ -2095,25 +2098,33 @@ namespace INMOST
}
if
(
p
==
pend
)
break
;
case
ECL_WCONPRODINJE_TYPE
:
if
(
ReadName
(
p
,
pend
,
rec
,
&
nchars
)
)
if
(
state
==
ECL_WCONPRODINJE_TYPE
)
{
if
(
rec
[
0
]
!=
'*'
)
wconprodinje_cur
.
second
.
type
=
std
::
string
(
rec
);
state
=
ECL_WCONPRODINJE_OPEN
;
p
+=
nchars
;
while
(
isspace
(
*
p
)
&&
p
<
pend
)
++
p
;
}
else
{
std
::
cout
<<
__FILE__
<<
":"
<<
__LINE__
<<
" cannot read data "
<<
p
<<
" in "
<<
fs
.
back
().
first
.
second
<<
":"
<<
fs
.
back
().
second
<<
std
::
endl
;
throw
BadFile
;
if
(
ReadName
(
p
,
pend
,
rec
,
&
nchars
))
{
if
(
rec
[
0
]
!=
'*'
)
wconprodinje_cur
.
second
.
type
=
std
::
string
(
rec
);
state
=
ECL_WCONPRODINJE_OPEN
;
p
+=
nchars
;
while
(
isspace
(
*
p
)
&&
p
<
pend
)
++
p
;
}
else
{
std
::
cout
<<
__FILE__
<<
":"
<<
__LINE__
<<
" cannot read data "
<<
p
<<
" in "
<<
fs
.
back
().
first
.
second
<<
":"
<<
fs
.
back
().
second
<<
std
::
endl
;
throw
BadFile
;
}
if
(
p
==
pend
)
break
;
}
if
(
p
==
pend
)
break
;
case
ECL_WCONPRODINJE_OPEN
:
if
(
ReadName
(
p
,
pend
,
rec
,
&
nchars
))
{
if
(
rec
[
0
]
!=
'*'
)
wconprodinje_cur
.
second
.
type
=
std
::
string
(
rec
);
{
if
(
std
::
string
(
rec
)
==
"OPEN"
)
wconprodinje_cur
.
second
.
open
=
true
;
else
wconprodinje_cur
.
second
.
open
=
false
;
}
state
=
ECL_WCONPRODINJE_CTRL
;
p
+=
nchars
;
while
(
isspace
(
*
p
)
&&
p
<
pend
)
++
p
;
...
...
@@ -4860,6 +4871,7 @@ namespace INMOST
TagReal
tagopen
=
CreateTag
(
"WELL_STATE"
,
DATA_REAL
,
CELL
|
ESET
,
CELL
|
ESET
,
1
);
TagReal
tagctrl
=
CreateTag
(
"WELL_CTRL"
,
DATA_REAL
,
ESET
,
ESET
,
1
);
TagReal
tagz
=
CreateTag
(
"WELL_DEPTH"
,
DATA_REAL
,
ESET
,
ESET
,
1
);
TagReal
tagbhp
=
CreateTag
(
"WELL_BHP"
,
DATA_REAL
,
ESET
,
ESET
,
1
);
TagBulk
tagdir
=
CreateTag
(
"WELL_DIRECTION"
,
DATA_BULK
,
CELL
,
CELL
,
1
);
TagRealArray
tagschd_time
=
CreateTag
(
"SCHEDULE_TIME"
,
DATA_REAL
,
ESET
,
ESET
);
//time of simulation that activates record
TagBulkArray
tagschd_tag
=
CreateTag
(
"SCHEDULE_TAG"
,
DATA_BULK
,
ESET
,
ESET
);
//names of changed tags separated by '\0'
...
...
@@ -4884,7 +4896,8 @@ namespace INMOST
//default behavior
tagz
[
set
]
=
wspec
.
depth
;
tagopen
[
set
]
=
false
;
tagcval
[
set
]
=
1.0e+5
;
tagbhp
[
set
]
=
-
1
;
tagcval
[
set
]
=
-
1
;
tagph
[
set
]
=
ECL_WPHASE_WATER
;
tagctrl
[
set
]
=
ECL_WCTRL_BHP
;
tagtype
[
set
]
=
ECL_WTYPE_PROD
;
...
...
@@ -5003,39 +5016,46 @@ namespace INMOST
{
if
(
jt
->
first
==
1
)
//first record
{
tagbhp
[
set
]
=
jt
->
second
.
bhp
;
tagopen
[
set
]
=
jt
->
second
.
open
;
if
(
jt
->
second
.
type
==
"PROD"
)
{
tagtype
[
set
]
=
ECL_WTYPE_PROD
;
if
(
jt
->
second
.
ctrl
==
"ORAT"
)
{
tagph
[
set
]
=
ECL_WPHASE_
WATER
;
tagph
[
set
]
=
ECL_WPHASE_
OIL
;
tagctrl
[
set
]
=
ECL_WCTRL_RATE
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
orat
;
}
else
if
(
jt
->
second
.
type
==
"GRAT"
)
else
if
(
jt
->
second
.
ctrl
==
"WRAT"
)
{
tagph
[
set
]
=
ECL_WPHASE_WATER
;
tagctrl
[
set
]
=
ECL_WCTRL_RATE
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
wrat
;
}
else
if
(
jt
->
second
.
ctrl
==
"GRAT"
)
{
tagph
[
set
]
=
ECL_WPHASE_GAS
;
tagctrl
[
set
]
=
ECL_WCTRL_RATE
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
grat
;
}
else
if
(
jt
->
second
.
type
==
"LRAT"
)
else
if
(
jt
->
second
.
ctrl
==
"LRAT"
)
{
tagph
[
set
]
=
ECL_WPHASE_MULTI
;
tagctrl
[
set
]
=
ECL_WCTRL_RATE
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
lrat
;
}
else
if
(
jt
->
second
.
type
==
"RESV"
)
//TODO10.3: what should we do with this?
else
if
(
jt
->
second
.
ctrl
==
"RESV"
)
//TODO10.3: what should we do with this?
{
tagph
[
set
]
=
ECL_WPHASE_MULTI
;
tagctrl
[
set
]
=
ECL_WCTRL_R
ATE
;
tagctrl
[
set
]
=
ECL_WCTRL_R
ESV
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
resv
;
}
else
if
(
jt
->
second
.
type
==
"BHP"
)
else
if
(
jt
->
second
.
ctrl
==
"BHP"
)
{
tagph
[
set
]
=
ECL_WPHASE_MULTI
;
tagctrl
[
set
]
=
ECL_WCTRL_
RATE
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
prat
.
lrat
;
tagctrl
[
set
]
=
ECL_WCTRL_
BHP
;
tagcval
[
set
]
=
jt
->
second
.
bhp
;
}
}
else
...
...
@@ -5056,7 +5076,7 @@ namespace INMOST
}
else
if
(
jt
->
second
.
ctrl
==
"RESV"
)
//TODO10.3:
{
tagctrl
[
set
]
=
ECL_WCTRL_R
ATE
;
tagctrl
[
set
]
=
ECL_WCTRL_R
ESV
;
tagcval
[
set
]
=
jt
->
second
.
urats
.
irat
.
resv
;
}
else
if
(
jt
->
second
.
ctrl
==
"BHP"
)
...
...
@@ -5069,27 +5089,36 @@ namespace INMOST
}
else
//schedule change
{
schedule
sopen
,
stype
,
sph
,
sctrl
,
scval
;
schedule
sopen
,
stype
,
sph
,
sctrl
,
scval
,
sbhp
;
sbhp
.
element
=
set
->
GetHandle
();
sopen
.
element
=
set
->
GetHandle
();
stype
.
element
=
set
->
GetHandle
();
sph
.
element
=
set
->
GetHandle
();
sctrl
.
element
=
set
->
GetHandle
();
scval
.
element
=
set
->
GetHandle
();
sbhp
.
tagnum
=
ECL_WTAG_BHP
;
sopen
.
tagnum
=
ECL_WTAG_STATE
;
stype
.
tagnum
=
ECL_WTAG_TYPE
;
sph
.
tagnum
=
ECL_WTAG_PHASE
;
sctrl
.
tagnum
=
ECL_WTAG_CTRL
;
scval
.
tagnum
=
ECL_WTAG_CVAL
;
sbhp
.
value
=
jt
->
second
.
bhp
;
sopen
.
value
=
jt
->
second
.
open
;
if
(
jt
->
second
.
type
==
"PROD"
)
{
stype
.
value
=
ECL_WTYPE_PROD
;
if
(
jt
->
second
.
ctrl
==
"ORAT"
)
{
sph
.
value
=
ECL_WPHASE_
WATER
;
sph
.
value
=
ECL_WPHASE_
OIL
;
sctrl
.
value
=
ECL_WCTRL_RATE
;
scval
.
value
=
jt
->
second
.
urats
.
prat
.
orat
;
}
else
if
(
jt
->
second
.
ctrl
==
"WRAT"
)
{
sph
.
value
=
ECL_WPHASE_WATER
;
sctrl
.
value
=
ECL_WCTRL_RATE
;
scval
.
value
=
jt
->
second
.
urats
.
prat
.
wrat
;
}
else
if
(
jt
->
second
.
type
==
"GRAT"
)
{
sph
.
value
=
ECL_WPHASE_GAS
;
...
...
@@ -5105,7 +5134,7 @@ namespace INMOST
else
if
(
jt
->
second
.
type
==
"RESV"
)
//TODO10.3: what should we do with this?
{
sph
.
value
=
ECL_WPHASE_MULTI
;
sctrl
.
value
=
ECL_WCTRL_R
ATE
;
sctrl
.
value
=
ECL_WCTRL_R
ESV
;
scval
.
value
=
jt
->
second
.
urats
.
prat
.
resv
;
}
else
if
(
jt
->
second
.
type
==
"BHP"
)
...
...
@@ -5133,7 +5162,7 @@ namespace INMOST
}
else
if
(
jt
->
second
.
ctrl
==
"RESV"
)
//TODO10.3:
{
sctrl
.
value
=
ECL_WCTRL_R
ATE
;
sctrl
.
value
=
ECL_WCTRL_R
ESV
;
scval
.
value
=
jt
->
second
.
urats
.
irat
.
resv
;
}
else
if
(
jt
->
second
.
ctrl
==
"BHP"
)
...
...
@@ -5143,6 +5172,7 @@ namespace INMOST
}
}
//add records
wschd
[
jt
->
first
].
push_back
(
sbhp
);
wschd
[
jt
->
first
].
push_back
(
sopen
);
wschd
[
jt
->
first
].
push_back
(
stype
);
wschd
[
jt
->
first
].
push_back
(
sph
);
...
...
@@ -5170,7 +5200,29 @@ namespace INMOST
}
}
if
(
verbosity
>
1
)
std
::
cout
<<
"Total scheduled records "
<<
changes
<<
std
::
endl
;
std
::
cout
<<
"Total scheduled records "
<<
changes
<<
" for well "
<<
set
->
GetName
()
<<
std
::
endl
;
//debug
/*
{
for (int k = 0; k < (int)tagschd_time[set].size(); ++k)
{
std::cout << std::setw(4) << k << " " << std::setw(12) << tagschd_time[set][k] << " ";
switch (tagschd_tag[set][k])
{
case ECL_WTAG_BHP: std::cout << "BHP "; break;
case ECL_WTAG_CTRL: std::cout << "CTRL "; break;
case ECL_WTAG_CVAL: std::cout << "CVAL "; break;
case ECL_WTAG_PHASE: std::cout << "PHASE"; break;
case ECL_WTAG_STATE: std::cout << "OPEN "; break;
case ECL_WTAG_TYPE: std::cout << "TYPE "; break;
case ECL_WTAG_WI: std::cout << "WI "; break;
}
std::cout << " " << std::setw(12) << tagschd_val[set][k] << " on ";
std::cout << ElementTypeName(tagschd_elem[set][k].GetElementType());
std::cout << ":" << tagschd_elem[set][k].LocalID() << std::endl;
}
}
*/
}
set
->
RemMarkerElements
(
added
);
well_sets
.
push_back
(
set
->
GetHandle
());
...
...
Source/Mesh/mesh.cpp
View file @
38603367
...
...
@@ -2455,7 +2455,7 @@ namespace INMOST
if
(
e
->
GetName
()
==
name
)
return
e
;
}
return
ElementSet
(
this
,
InvalidHandle
()
);
return
InvalidElementSet
(
);
}
ElementArray
<
ElementSet
>
Mesh
::
GetSetsByPrefix
(
std
::
string
name
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment