pydfnWorks
python wrapper for dfnWorks
generator.py
Go to the documentation of this file.
1 import os
2 import sys
3 import shutil
4 from time import time
5 import subprocess
6 from pydfnworks.dfnGen.meshing.mesh_dfn_helper import parse_params_file
7 
8 
9 def dfn_gen(self, output=True, visual_mode=None):
10  ''' Wrapper script the runs the dfnGen workflow:
11  1) make_working_directory: Create a directory with name of job
12  2) check_input: Check input parameters and create a clean version of the input file
13  3) create_network: Create network. DFNGEN v2.0 is called and creates the network
14  4) output_report: Generate a PDF summary of the DFN generation
15  5) mesh_network: calls module dfnGen_meshing and runs LaGriT to mesh the DFN
16 
17  Parameters
18  ----------
19  self : object
20  DFN Class object
21  output : bool
22  If True, output pdf will be created. If False, no pdf is made
23  visual_mode : None
24  If the user wants to run in a different meshing mode from what is in params.txt, set visual_mode = True/False on command line to override meshing mode
25 
26  Returns
27  -------
28  None
29 
30  Notes
31  -----
32  Details of each portion of the routine are in those sections
33 
34  '''
35  tic_gen = time()
36  # Create Working directory
37  tic = time()
38  self.make_working_directory()
39  self.dump_time('Function: make_working_directory', time() - tic)
40 
41  # Check input file
42  tic = time()
43  self.check_input()
44  self.dump_time('Function: check_input', time() - tic)
45 
46  # Create network
47  tic = time()
48  self.create_network()
49  self.dump_time('Function: create_network', time() - tic)
50 
51  if output:
52  tic = time()
53  self.output_report()
54  self.dump_time('output_report', time() - tic)
55 
56  # Mesh Network
57  tic = time()
58  self.mesh_network(visual_mode=visual_mode)
59  self.dump_time('Function: mesh_network', time() - tic)
60  print('=' * 80)
61  print('dfnGen Complete')
62  print('=' * 80)
63  self.dump_time('Process: dfnGen', time() - tic_gen)
64 
65 
66 def make_working_directory(self, delete=False):
67  ''' Make working directory for dfnWorks Simulation
68 
69  Parameters
70  ----------
71  self : object
72  DFN Class object
73 
74  Returns
75  -------
76  None
77 
78  Notes
79  -----
80  If directory already exists, user is prompted if they want to overwrite and proceed. If not, program exits.
81  '''
82 
83  if not delete:
84  try:
85  os.mkdir(self.jobname)
86  except OSError:
87  if os.path.isdir(self.jobname):
88  print('\nFolder ', self.jobname, ' exists')
89  keep = input('Do you want to delete it? [yes/no] \n')
90  if keep == 'yes' or keep == 'y':
91  print('Deleting', self.jobname)
92  shutil.rmtree(self.jobname)
93  print('Creating', self.jobname)
94  os.mkdir(self.jobname)
95  elif keep == 'no' or 'n':
96  error = "Not deleting folder. Exiting Program\n"
97  sys.stderr.write(error)
98  sys.exit(1)
99  else:
100  error = "Unknown Response. Exiting Program\n"
101  sys.stderr.write(error)
102  sys.exit(1)
103  else:
104  error = f"Unable to create working directory {self.jobname}\n. Please check the provided path.\nExiting\n"
105  sys.stderr.write(error)
106  sys.exit(1)
107  else:
108  shutil.rmtree(self.jobname)
109  print('Creating ', self.jobname)
110  os.mkdir(self.jobname)
111 
112  os.mkdir(self.jobname + '/radii')
113  os.mkdir(self.jobname + '/intersections')
114  os.mkdir(self.jobname + '/polys')
115  os.chdir(self.jobname)
116 
117  print("Current directory is now: %s\n" % os.getcwd())
118  print("Jobname is %s" % self.jobname)
119 
120 
121 def create_network(self):
122  ''' Execute dfnGen
123 
124  Parameters
125  ----------
126  self : object
127  DFN Class
128 
129  Returns
130  -------
131  None
132 
133  Notes
134  -----
135  After generation is complete, this script checks whether the generation of the fracture network failed or succeeded based on the existence of the file params.txt.
136  '''
137  print('--> Running DFNGEN')
138  # copy input file into job folder
139  cmd = os.environ[
140  'DFNGEN_EXE'] + ' ' + self.local_dfnGen_file[:
141  -4] + '_clean.dat' + ' ' + self.jobname
142 
143  print("Running %s" % cmd)
144  subprocess.call(cmd, shell=True)
145 
146  if os.path.isfile("params.txt") is False:
147  error = "ERROR! Generation Failed\nExiting Program.\n"
148  sys.stderr.write(error)
149  sys.exit(1)
150  else:
151  num_poly, h, _, _, _ = parse_params_file(quiet=True)
152  self.num_frac = num_poly
153  self.h = h
154  print('-' * 80)
155  print("Generation Succeeded")
156  print('-' * 80)
def dfn_gen(self, output=True, visual_mode=None)
Definition: generator.py:9
def make_working_directory(self, delete=False)
Definition: generator.py:66