2 :filename: plot_fracture_centers.py
3 :synopsis: Make plots of fracture centers for the entire network and by family
5 :maintainer: Jeffrey Hyman
6 .. moduleauthor:: Jeffrey Hyman <jhyman@lanl.gov>
9 import matplotlib.pylab
as plt
13 """ Creates histogram plots of fracture centers in the domain. First all fractures are plotted, then by family.
18 General dictionary of output analysis code. Contains information on number of families, number of fractures, and colors.
20 families: list of fracture family dictionaries
21 Created by get_family_information
23 fractures: list of fracture dictionaries
24 Created by get_fracture_information
32 PDF files are dumped into dfnGen_output_report/figures. There is one figure for all fractures (all_fracture_centers.pdf) and one per family family_{family_id}_fracture_centers.pdf.
35 print(
"--> Plotting Fracture Locations")
38 family_id = fam[
"Global Family"]
40 print(f
"--> Working on fracture family {family_id}")
41 fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 7))
43 for coord
in [
"x",
"y",
"z"]:
47 print(f
"--> Working on {coord} coordinates ")
49 for i
in fam[
"fracture list - all"]:
50 values_all.append(fractures[i][
"center"][coord])
52 for i
in fam[
"fracture list - final"]:
53 values_accepted.append(fractures[i][
"center"][coord])
57 num_bins = max(35, int(len(values_accepted) / 100))
69 tmp = [min(values_all), -0.5 * params[
"domain"][coord]]
71 tmp = [max(values_all), 0.5 * params[
"domain"][coord]]
75 axs[i, j].hist(values_all,
77 color=params[
"all_color"],
78 range=(min_val, max_val),
83 axs[i, j].hist(values_accepted,
85 color=params[
"final_color"],
86 range=(min_val, max_val),
94 axs[i, j].axvline(fam[f
"{coord}_min"], c=
"k", ls=
"--")
95 axs[i, j].axvline(fam[f
"{coord}_max"], c=
"k", ls=
"--")
98 axs[i, j].axvline(fam[f
"{coord}_min"], c=
"k", ls=
"--")
99 axs[i, j].axvline(fam[f
"{coord}_max"], c=
"k", ls=
"--")
102 axs[i, j].axvline(-0.5 * params[
"domain"][coord], c=
"k")
103 axs[i, j].axvline(0.5 * params[
"domain"][coord], c=
"k")
106 axs[i, j].set_title(f
"Fracture Centers: {coord}-Coordinate",
108 axs[i, j].set_xlabel(
"Location [m]", fontsize=14)
109 axs[i, j].set_ylabel(
"Number of Fractures", fontsize=14)
111 del values_all, values_accepted
114 axs[1, 1].set_frame_on(
False)
115 axs[1, 1].get_xaxis().set_visible(
False)
116 axs[1, 1].get_yaxis().set_visible(
False)
118 axs[1, 1].plot(0, 0,
"k--", label=
"Region Boundary")
120 axs[1, 1].plot(0, 0,
"k--", label=
"Layer Boundary")
122 axs[1, 1].plot(0, 0,
"k", label=
"Domain Boundary")
129 label=
"All Accepted Fractures")
132 params[
"final_color"],
135 label=
"Fractures in the Connected Network")
136 axs[1, 1].legend(loc=
"center", fontsize=14, frameon=
False)
140 fileout = f
"family_{family_id}_centers.png"
142 tmp = fam[
"Distribution"]
143 fileout = f
"family_{tmp}_centers.png"
145 if params[
"verbose"]:
146 print(f
"--> Saving File {fileout}")
147 plt.savefig(f
"{params['output_dir']}/family_{family_id}/{fileout}")
151 if params[
"verbose"]:
152 print(
"--> Complete")
155 fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 7))
156 for coord
in [
"x",
"y",
"z"]:
157 if params[
"verbose"]:
158 print(f
"--> Working on {coord} coordinates ")
164 family_id = fam[
"Global Family"]
169 for i
in fam[
"fracture list - final"]:
170 values_accepted.append(fractures[i][
"center"][coord])
174 num_bins = max(35, int(len(values_accepted) / 100))
186 min_val = -0.5 * params[
"domain"][coord]
187 max_val = 0.5 * params[
"domain"][coord]
189 axs[i, j].hist(values_accepted,
192 range=(min_val, max_val),
198 axs[i, j].axvline(-0.5 * params[
"domain"][coord], c=
"k")
199 axs[i, j].axvline(0.5 * params[
"domain"][coord], c=
"k")
202 axs[i, j].set_title(f
"Fracture Centers: {coord}-Coordinate",
204 axs[i, j].set_xlabel(
"Location [m]", fontsize=14)
205 axs[i, j].set_ylabel(
"Number of Fractures", fontsize=14)
207 del values_all, values_accepted
210 axs[1, 1].set_frame_on(
False)
211 axs[1, 1].get_xaxis().set_visible(
False)
212 axs[1, 1].get_yaxis().set_visible(
False)
215 for i
in range(8, 0, -1):
216 for j
in [1, 3.5, 6]:
217 xy_coords.append((j, i))
219 axs[1, 1].plot([2, 3], [9, 9],
"k", linewidth=5)
220 axs[1, 1].text(x=3.25, y=8.9, s=f
"Domain Boundary", fontsize=
"14")
222 for i, fam
in enumerate(families):
223 xx = [xy_coords[i][0], xy_coords[i][0] + 1.5]
224 yy = [xy_coords[i][1], xy_coords[i][1]]
225 axs[1, 1].plot(xx, yy, linewidth=20, alpha=0.4, color=fam[
"color"])
226 axs[1, 1].text(x=xy_coords[i][0] + 0.15,
227 y=xy_coords[i][1] - 0.15,
228 s=f
"Family {fam['Global Family']}",
231 axs[1, 1].axis([0.5, 8.5, xy_coords[i][1] - 1, 10])
235 fileout = f
"all_fracture_centers.png"
237 if params[
"verbose"]:
238 print(f
"--> Saving File {fileout}")
239 plt.savefig(f
"{params['output_dir']}/network/{fileout}")
243 if params[
"verbose"]:
244 print(
"--> Complete")
def plot_fracture_centers(params, families, fractures)