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