This article is about a small but critical check that we should do when conducting packer testing. That is, whether the flow is laminar during the test. The ground water manual talk about how to check for the laminar nature of flow. My interactive computer code in Python would let you find your answer with a few clicks.
Parameters that we need to perform the calculation:
- Radius of the borehole
- Length of test interval
- Total open area subjected to injection within the test interval
- porosity of the test zone.
To use the program online with any browsers but IE, please visit: http://www.codeskulptor.org/#user28_jZE2vITDp3_14.py
for example, in a borehole with 0.125 feet radius; 10 feet test interval, and 4% porosity, if the intake is 10 GPM, the flow would be laminar.
Debug, and send bug report to admin@coalgeology.com
Here is the code:
# Python GUI to calculate Total Open Area of a test section during a Straddle Packer Test and # checking is the flow is laminar. # Simple application of programming in geology # Programmer: Ankan Basu, CPG # Note: Program will not work in INTERNET EXPLORER, use SAFARI, CHROME or FIREFOX. # Contact: admin@coalgeology.com # email: admin@coalgeology.com # Version: 1.1 # Date: 1/3/2014 import simplegui,math message = "Welcome!" r=0 #radius of the hole L=0 #length of the test section of the hole. area=0 #Total open area of the hole face plus the hole button warning='' flow=0 # enter data in gpm; program would convert to cfs porosity=0 def get_data_r(d): global r, warning if d.count("\.")<=1: warning='' d1=d.replace('.', '') if d1.isdigit()==True: d_float=float(d) r=d_float else: warning='Must enter numbers only, clear window before entering new data' else: warning='Must enter numbers only, clear window before entering new data' def get_data_L(d): global L, warning if d.count("\.")<=1: warning='' d1=d.replace('.', '') if d1.isdigit()==True: d_float=float(d) L=d_float else: warning='Must enter numbers only, clear window before entering new data' else: warning='Must enter numbers only, clear window before entering new data' def get_data_flow(d): global flow, warning if d.count("\.")<=1: warning='' d1=d.replace('.', '') if d1.isdigit()==True: d_float=float(d) flow=d_float/448.8 # converts gpm to cfs else: warning='Must enter numbers only, clear window before entering new data' else: warning='Must enter numbers only, clear window before entering new data' def get_data_porosity(d): global porosity, warning if d.count("\.")<=1: warning='' d1=d.replace('.', '') if d1.isdigit()==True: d_float=float(d) porosity=d_float/100 # converts gpm to cfs else: warning='Must enter numbers only, clear window before entering new data' else: warning='Must enter numbers only, clear window before entering new data' def calculate_single_packer_test_area(): global r,L,warning, area,porosity if 0 in [r,L,flow,porosity]: warning='Did you enter all the required data?' else: area=(math.pi*2*r*L)+(math.pi*r*r) print area def calculate_straddle_packer_test_area(): global r,L,warning, area,flow,porosity if 0 in [r,L,flow,porosity]: warning='Did you enter all the required data?' else: area=(math.pi*2*r*L) print area def calculate_is_laminar(): global r,L,warning, area,flow,porosity if 0 in [r,L,flow,porosity,area]: warning='Did you enter all the required data?' else: if ((flow/area)*porosity)>0.1: warning= "flow is turbulant" print ((flow/area)*porosity) else: warning= "flow is laminar" print ((flow/area)*porosity) def reset(): global warning,r,L,area,flow,porosity area,r,L,flow,porosity=0,0,0,0,0 warning="" # Handler to draw on canvas def draw(canvas): #canvas.draw_text('1. Calculate total open area during a packer test', [20,32], 22, "Red") canvas.draw_text('Enter data to the left window, hit enter', [20,52], 22, "Black") canvas.draw_text(str(r)+" : redius of the borehole in feet", [20,80], 18, "Black") canvas.draw_text(str(L)+" : length of test interval in feet", [20,100], 18, "Black") canvas.draw_text(str("%.4f" %flow)+" : flow in CFS", [20,120], 18, "Black") canvas.draw_text(str(porosity)+" % is the porosity", [20,140], 18, "Black") canvas.draw_text('First calculate area in square feet:', [20,200], 22, "Red") canvas.draw_text(str("%.2f" %area)+" : is the area in square feet", [20,230], 18, "Blue") canvas.draw_text('Check if the flow is laminar:', [20,260], 22, "Red") canvas.draw_text(warning, [20,290], 22, "Red") canvas.draw_text('Coded by Ankan Basu, CPG, PG; Hydrogeologist/Geochemist', [20,320], 18, "Black") canvas.draw_text('website www.coalgeology.com', [20,340], 18, "Red") canvas.draw_text('contact admin@coalgeology.com', [20,360], 18, "Black") image2 = simplegui.load_image('http://m.c.lnkd.licdn.com/media/p/1/000/203/012/2815545.jpg') canvas.draw_image(image2, (319 / 2, 319 / 2), (319, 319), (550,50), (319/3, 319/3)) canvas.draw_text('Ankan Basu, CPG ', [490,120], 15, "Black") canvas.draw_text('Hydrogeologist ', [490,140], 17, "Black") # Create a frame and assign callbacks to event handlers frame = simplegui.create_frame("Home", 600, 600,400) frame.set_canvas_background('Aquamarine ') frame.add_input("Enter radius of the borehole in feer, hit enter", get_data_r, 400) frame.add_input("Enter test interval in feet, hit enter", get_data_L, 400) frame.add_input("Enter water intake in GPM", get_data_flow, 400) frame.add_input("Enter porosity as % for example, 4 for 4%", get_data_porosity, 400) frame.add_button("Calculate total open area for single packer test", calculate_single_packer_test_area,400) frame.add_button("Calculate total open area for straddle packer test", calculate_straddle_packer_test_area,400) frame.add_button("Check if the flow is laminar", calculate_is_laminar,400) frame.add_button("Reset all", reset,400) frame.set_draw_handler(draw) # Start the frame animation frame.start()