-
Notifications
You must be signed in to change notification settings - Fork 0
/
JsonSummaryWriter.py
76 lines (70 loc) · 2.76 KB
/
JsonSummaryWriter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import json
from AdgprsSummary import AdgprsSummary
class FieldData:
"""
Holds all field data for the summary.
"""
def __init__(self, summary):
self.field = {
'NumWells' : summary.num_wells,
'TIME' : summary.vec_time_steps.tolist(),
'Properties' : {
'FGPT' : summary.vec_gas_cumulative_field.tolist(),
'FOPT' : summary.vec_oil_cumulative_field.tolist(),
'FWPT' : summary.vec_water_cumulative_field.tolist(),
'FOPR' : summary.vec_gas_rates_field.tolist(),
'FGPR' : summary.vec_oil_rates_field.tolist(),
'FWPR' : summary.vec_water_rates_field.tolist(),
'FGIT' : summary.vec_gas_injected_cumulative_field.tolist(),
'FGIR' : summary.vec_gas_injected_rates_field.tolist(),
'FOIT' : summary.vec_oil_injected_cumulative_field.tolist(),
'FOIR' : summary.vec_oil_injected_rates_field.tolist(),
'FWIT' : summary.vec_water_injected_cumulative_field.tolist(),
'FWIR' : summary.vec_water_injected_rates_field.tolist()
}
}
def object(self):
return self.field
class WellData:
"""
Holds all well data for the summary.
Note that production and injection data are not explicitly
separated; if the well is an injector, the rates and cumulatives
are injected; otherwise they are produced.
"""
def __init__(self, summary):
self.wells = []
for w in summary.wells:
if w.is_injector:
is_injector = 1
else:
is_injector = 0
self.wells.append({
'NumPerforations' : w.num_perforations,
'IsInjector' : is_injector,
'Properties' : {
'TIME' : w.vec_time_steps.tolist(),
'WBHP' : w.vec_bhp.tolist(),
'WGR' : w.vec_gas_rates.tolist(),
'WOR' : w.vec_oil_rates.tolist(),
'WWR' : w.vec_water_rates.tolist(),
'WGT' : w.vec_gas_cumulative.tolist(),
'WOT' : w.vec_oil_cumulative.tolist(),
'WWT' : w.vec_water_cumulative.tolist(),
}
})
def object(self):
return self.wells
class JsonSummaryWriter:
"""
Main class. Initializes the data classes and writes the JSON file.
"""
def __init__(self, summary, output_path):
self.field_data = FieldData(summary)
self.well_data = WellData(summary)
summary = {
'Field' : self.field_data.object(),
'Wells' : self.well_data.object()
}
with open(output_path, 'w') as f:
json.dump(summary, f)