-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_tpfa.py
92 lines (64 loc) · 2.15 KB
/
example_tpfa.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import numpy as np
import scipy.sparse as sps
from porepy.viz import exporter
from porepy.fracs import importer
from porepy.params import tensor
from porepy.params.bc import BoundaryCondition
from porepy.params.data import Parameters
from porepy.numerics import elliptic
from example_data import TPFAModelData
from example_advective import AdvectiveModel, AdvectiveModelData
# ------------------------------------------------------------------------------#
def add_data(gb, domain, tol):
extra = {
"domain": domain,
"tol": tol,
"special_fracture": 6,
"aperture": 1e-2,
"gb": gb,
"km": 1,
"kf_low": 1e-4,
"kf_high": 1e4,
}
gb.add_node_props(["frac_num"])
for g, d in gb:
d["problem"] = TPFAModelData(g, d, **extra)
if g.dim == 3 or g.dim == 1:
d["frac_num"] = -1 * np.ones(g.num_cells)
else:
d["frac_num"] = g.frac_num * np.ones(g.num_cells)
# ------------------------------------------------------------------------------#
def main():
tol = 1e-6
problem_kwargs = {}
problem_kwargs["file_name"] = "solution"
problem_kwargs["folder_name"] = "tpfa"
h = 0.08
grid_kwargs = {}
grid_kwargs["mesh_size"] = {
"mode": "constant",
"value": h,
"bound_value": h,
"tol": tol,
}
file_dfm = "dfm.csv"
gb, domain = importer.dfm_3d_from_csv(file_dfm, tol, **grid_kwargs)
gb.compute_geometry()
problem = elliptic.EllipticModel(gb, **problem_kwargs)
# Assign parameters
add_data(gb, domain, tol)
problem.solve()
problem.split()
problem.pressure("pressure")
problem.discharge("discharge")
problem.save(["pressure", "frac_num"])
problem_kwargs["file_name"] = "transport"
for g, d in gb:
d["problem"] = AdvectiveModelData(g, d, domain, tol)
advective = AdvectiveModel(gb, **problem_kwargs)
advective.solve()
advective.save()
# ------------------------------------------------------------------------------#
if __name__ == "__main__":
main()
# ------------------------------------------------------------------------------#