Packer Testing: Is the flow laminar in my test?

laminar flow-packer test

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:

  1. Radius of the borehole
  2. Length of test interval
  3. Total open area subjected to injection within the test interval
  4. porosity of the test zone.
laminar flow-packer test

laminar flow-packer test

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()

Leave a Comment

Your email address will not be published. Required fields are marked *