Beispiel #1
0
 def test_Pipe_calc_p_grad_pam(self):
     p_bar = 100
     t_c = 80
     pipe = Pipe.Pipe()
     self.assertAlmostEqual(pipe.calc_p_grad_pam(p_bar, t_c),
                            10247.413809815911,
                            delta=0.0001)
    def test_Beggs_Brill_hyrd_cor(self):
        pipe = Pipe.Pipe(hydr_cor = hydr_cor_Beggs_Brill.Beggs_Brill_cor())

        p_bar = 11.713 * 10
        t_c = 82
        self.assertAlmostEqual(pipe.calc_p_grad_pam(p_bar, t_c), 10511.938363972778,
                               delta=0.00000001)
Beispiel #3
0
 def test_Pipe_calc_p_grad_pam(self):
     p_bar = 100
     t_c = 80
     pipe = Pipe.Pipe()
     self.assertAlmostEqual(pipe.calc_p_grad_pam(p_bar, t_c),
                            7880.809498348545,
                            delta=0.0001)
Beispiel #4
0
    def test_Beggs_Brill_hyrd_cor(self):
        pipe = Pipe.Pipe(hydr_cor=hydr_cor_Beggs_Brill.Beggs_Brill_cor())

        p_bar = 11.713 * 10
        t_c = 82
        self.assertAlmostEqual(pipe.calc_p_grad_pam(p_bar, t_c),
                               7810.134558034709,
                               delta=0.00000001)
Beispiel #5
0
 def test_Pipe_calc_t_grad_cm_in_casing(self):
     p_bar = 100
     t_c = 80
     pipe = Pipe.Pipe()
     pipe.section_casing = True
     self.assertAlmostEqual(pipe.calc_t_grad_cm(p_bar, t_c),
                            0.017798062343446185,
                            delta=0.0001)
Beispiel #6
0
 def test_Pipe_calc_t_grad_cm_in_tube(self):
     p_bar = 100
     t_c = 80
     pipe = Pipe.Pipe()
     pipe.section_casing = False
     self.assertAlmostEqual(pipe.calc_t_grad_cm(p_bar, t_c),
                            0.020113527637494258,
                            delta=0.0001)
Beispiel #7
0
 def test_Pipe_calc_t_grad_cm_in_casing(self):
     p_bar = 100
     t_c = 80
     pipe = Pipe.Pipe()
     pipe.section_casing = True
     self.assertAlmostEqual(pipe.calc_t_grad_cm(p_bar, t_c),
                            0.018679578601707502,
                            delta=0.0001)
Beispiel #8
0
    def __init__(self,
                 fluid=0,
                 well_profile=0,
                 hydr_corr=0,
                 temp_corr=0,
                 pipe=0,
                 reservoir=-1,
                 gamma_oil=0.86,
                 gamma_gas=0.6,
                 gamma_wat=1.0,
                 rsb_m3m3=200.0,
                 h_conductor_mes_m=500,
                 h_conductor_vert_m=500,
                 h_intake_mes_m=1000,
                 h_intake_vert_m=1000,
                 h_bottomhole_mes_m=1500,
                 h_bottomhole_vert_m=1500,
                 d_casing_inner_m=0.120,
                 d_tube_inner_m=0.062,
                 qliq_on_surface_m3day=100,
                 fw_on_surface_perc=10,
                 p_bottomhole_bar=200,
                 t_bottomhole_c=92,
                 p_wellhead_bar=20,
                 t_wellhead_c=20,
                 t_earth_init_on_surface_c=3,
                 t_earth_init_in_reservoir_c=90,
                 geothermal_grad_cm=0.03,
                 p_reservoir_bar=None,
                 well_work_time_sec=60 * 24 * 60 * 60,
                 step_lenth_in_calc_along_wellbore_m=10,
                 without_annulus_space=False,
                 save_all=True,
                 solver_using=0,
                 activate_rus_mode=0,
                 multiplier_for_pi=1,
                 pb_bar=90):
        """
        При создании модели скважины необходимо задать ее конструкцию, PVT свойства флюидов и режим работы
        вместе с граничными условиями. Кроме параметров, которые предлагается задать при
        инициализации, можно изменить и другие, входящие в состав модели, путем обращения к необходимым
        модулям. На что стоит обрать внимание: некоторые параметры выставлены по умолчанию и изменение
        всех интересующих параметров необходимо выполнить до процесса расчета.

        :param h_conductor_mes_m: измеренная глубина конца кондуктора, м
        :param h_conductor_vert_m: вертикальная глубина конца кондуктора, м
        :param h_intake_mes_m: измеренная глубина конца колонны НКТ (спуска НКТ), м
        :param h_intake_vert_m: вертикальная глубина конца колонны НКТ (спуска НКТ), м
        :param h_bottomhole_mes_m: измеренная глубина забоя, м
        :param h_bottomhole_vert_m: вертикальная глубина забоя, м
        :param qliq_on_surface_m3day: дебит жидкости на поверхности, м3/сутки
        :param fw_on_surface_perc: обводненность продукции на поверхности, %
        :param d_casing_inner_m: внутренний диаметр обсадной колонны, м
        :param d_tube_inner_m: внутренни диаметр НКТ
        :param p_bottomhole_bar: давление на забое, бар
        :param t_bottomhole_c: температура на забое, С
        :param p_wellhead_bar: давление на устье, бар
        :param t_wellhead_c: температура на устье, С
        :param t_earth_init_on_surface_c: начальная температура земли на поверхности (нейтрального слоя), С
        :param t_earth_init_in_reservoir_c: начальная температура пласта, С
        :param geothermal_grad_cm: геотермический градиент, С/м
        :param well_work_time_sec: время работы скважины, сек
        :param step_lenth_in_calc_along_wellbore_m: длина шага вдоль ствола скважины в расчете, м
        """

        self.h_conductor_mes_m = h_conductor_mes_m
        self.h_conductor_vert_m = h_conductor_vert_m
        self.h_intake_mes_m = h_intake_mes_m
        self.h_intake_vert_m = h_intake_vert_m
        self.h_bottomhole_mes_m = h_bottomhole_mes_m
        self.h_bottomhole_vert_m = h_bottomhole_vert_m
        self.d_casing_inner_m = d_casing_inner_m
        self.d_tube_inner_m = d_tube_inner_m

        self.p_bottomhole_bar = p_bottomhole_bar
        self.t_bottomhole_c = t_bottomhole_c
        self.p_wellhead_bar = p_wellhead_bar
        self.t_wellhead_c = t_wellhead_c

        self.well_work_time_sec = well_work_time_sec

        self.step_lenth_in_calc_along_wellbore_m = step_lenth_in_calc_along_wellbore_m

        self.t_earth_init_on_surface_c = t_earth_init_on_surface_c
        self.t_earth_init_in_reservoir_c = t_earth_init_in_reservoir_c
        self.geothermal_grad_cm = geothermal_grad_cm
        self.p_reservoir_bar = p_reservoir_bar

        if well_profile == 0:
            self.well_profile = deviation_survey.simple_well_deviation_survey()
        elif well_profile == 1:
            self.well_profile = deviation_survey.well_deviation_survey()

        if pipe == 0:
            self.pipe = uPipe.Pipe()

        if hydr_corr == 0:
            self.pipe.hydr_cor = hydr_cor_Beggs_Brill.Beggs_Brill_cor()

        if temp_corr == 0:
            self.pipe.temp_cor = temp_cor_Hasan_Kabir.Hasan_Kabir_cor()
        elif temp_corr == 1:
            self.pipe.temp_cor = temp_cor_simple_line.SimpleLineCor()

        if fluid == 0:
            self.pipe.fluid_flow.fl = PVT_fluids.FluidStanding(
                gamma_oil=gamma_oil,
                gamma_gas=gamma_gas,
                gamma_wat=gamma_wat,
                rsb_m3m3=rsb_m3m3)
        elif fluid == 1:
            self.pipe.fluid_flow.fl = BlackOil_model.Fluid(
                gamma_oil=gamma_oil,
                gamma_gas=gamma_gas,
                gamma_wat=gamma_wat,
                rsb_m3m3=rsb_m3m3,
                t_res_c=t_bottomhole_c,
                pb_bar=pb_bar)
        if activate_rus_mode:
            self.pipe.fluid_flow.fl = BlackOil_model.Fluid(
                gamma_oil=gamma_oil,
                gamma_gas=gamma_gas,
                gamma_wat=gamma_wat,
                rsb_m3m3=rsb_m3m3,
                t_res_c=t_bottomhole_c,
                pb_bar=pb_bar,
                activate_rus_cor=1)

        self.data = data_workflow.Data()

        self.qliq_on_surface_m3day = qliq_on_surface_m3day
        self.fw_on_surface_perc = fw_on_surface_perc

        self.h_calculated_vert_m = None
        self.h_calculated_mes_m = None
        self.p_calculated_bar = None
        self.t_calculated_c = None
        self.t_calculated_earth_init = None
        self.t_grad_calculated_cm = None
        self.p_grad_calculated_barm = None

        self.without_annulus_space = without_annulus_space
        self.save_all = save_all

        if reservoir == -1:
            self.ipr = None
        elif reservoir == 0:
            self.ipr = IPR_simple_line.IPRSimpleLine()
            if self.p_reservoir_bar == None:
                self.p_reservoir_bar = 1000 * uc.g * self.h_bottomhole_vert_m / 100000
            self.ipr.pi_m3daybar = self.ipr.calc_pi_m3daybar(
                self.qliq_on_surface_m3day, self.p_bottomhole_bar,
                self.p_reservoir_bar)

        self.direction_up = None
        self.solver_using = solver_using

        self.multiplier_for_pi = multiplier_for_pi
        self.time_calculated_sec = None
        self.calculation_number_in_one_step = None
Beispiel #9
0
    def __init__(self,
                 h_conductor_mes_m=500,
                 h_conductor_vert_m=500,
                 h_intake_mes_m=1000,
                 h_intake_vert_m=1000,
                 h_bottomhole_mes_m=1500,
                 h_bottomhole_vert_m=1500,
                 qliq_on_surface_m3day=100,
                 fw_perc=10,
                 d_casing_inner_m=0.062,
                 d_tube_inner_m=0.120,
                 p_bottomhole_bar=200,
                 t_bottomhole_c=92,
                 p_wellhead_bar=20,
                 t_wellhead_c=20,
                 t_earth_init_on_surface_c=3,
                 t_earth_init_in_reservoir_c=90,
                 geothermal_grad_cm=0.03,
                 well_work_time_sec=60 * 24 * 60 * 60,
                 step_lenth_in_calc_along_wellbore_m=10):
        """
        При создании модели скважины необходимо задать ее конструкцию, PVT свойства флюидов и режим работы
        вместе с граничными условиями. Кроме параметров, которые предлагается задать при
        инициализации, можно изменить и другие, входящие в состав модели, путем обращения к необходимым
        модулям. На что стоит обрать внимание: некоторые параметры выставлены по умолчанию и изменение
        всех интересующих параметров необходимо выполнить до процесса расчета.

        :param h_conductor_mes_m: измеренная глубина конца кондуктора, м
        :param h_conductor_vert_m: вертикальная глубина конца кондуктора, м
        :param h_intake_mes_m: измеренная глубина конца колонны НКТ (спуска НКТ), м
        :param h_intake_vert_m: вертикальная глубина конца колонны НКТ (спуска НКТ), м
        :param h_bottomhole_mes_m: измеренная глубина забоя, м
        :param h_bottomhole_vert_m: вертикальная глубина забоя, м
        :param qliq_on_surface_m3day: дебит жидкости на поверхности, м3/сутки
        :param fw_perc: обводненность продукции на поверхности, %
        :param d_casing_inner_m: внутренний диаметр обсадной колонны, м
        :param d_tube_inner_m: внутренни диаметр НКТ
        :param p_bottomhole_bar: давление на забое, бар
        :param t_bottomhole_c: температура на забое, С
        :param p_wellhead_bar: давление на устье, бар
        :param t_wellhead_c: температура на устье, С
        :param t_earth_init_on_surface_c: начальная температура земли на поверхности (нейтрального слоя), С
        :param t_earth_init_in_reservoir_c: начальная температура пласта, С
        :param geothermal_grad_cm: геотермический градиент, С/м
        :param well_work_time_sec: время работы скважины, сек
        :param step_lenth_in_calc_along_wellbore_m: длина шага вдоль ствола скважины в расчете, м
        """

        self.h_conductor_mes_m = h_conductor_mes_m
        self.h_conductor_vert_m = h_conductor_vert_m

        self.h_intake_mes_m = h_intake_mes_m
        self.h_intake_vert_m = h_intake_vert_m

        self.h_bottomhole_mes_m = h_bottomhole_mes_m
        self.h_bottomhole_vert_m = h_bottomhole_vert_m

        self.d_casing_inner_m = d_casing_inner_m
        self.d_tube_inner_m = d_tube_inner_m

        self.p_bottomhole_bar = p_bottomhole_bar
        self.t_bottomhole_c = t_bottomhole_c

        self.p_wellhead_bar = p_wellhead_bar
        self.t_wellhead_c = t_wellhead_c

        self.well_work_time_sec = well_work_time_sec

        self.step_lenth_in_calc_along_wellbore_m = step_lenth_in_calc_along_wellbore_m

        self.t_earth_init_on_surface_c = t_earth_init_on_surface_c
        self.t_earth_init_in_reservoir_c = t_earth_init_in_reservoir_c
        self.geothermal_grad_cm = geothermal_grad_cm

        self.well_profile = well_profile.simple_well_deviation_survey()

        self.casing_pipe = pipe.Pipe()
        self.tube_pipe = pipe.Pipe()

        self.data = data_workflow.Data()

        self.qliq_on_surface_m3day = qliq_on_surface_m3day
        self.fw_perc = fw_perc

        self.h_calculated_vert_m = None
        self.h_calculated_mes_m = None
        self.p_calculated_bar = None
        self.t_calculated_c = None
        self.t_calculated_earth_init = None
        self.t_grad_calculated_cm = None
        self.p_grad_calculated_barm = None