Esempio n. 1
0
    def __init__(self, fluid=PVT.FluidStanding(),
                 hydr_cor=hydr_cor_BB.Beggs_Brill_cor(),
                 temp_cor=temp_cor_HK.Hasan_Kabir_cor()):
        """
        Инизицализация подъемника газожидкостной смеси
        :param fluid: модель флюида, класс
        :param hydr_cor: гидравлическая корреляция, класс
        :param temp_cor: температурная корреляция, класс
        """
        self.fluid_flow = PVT.FluidFlow(fluid = fluid)
        self.hydr_cor = hydr_cor
        self.temp_cor = temp_cor

        self.section_casing = False # если True, будет считать ОК

        self.time_sec = 100 * 24 * 60 * 60

        self.t_earth_init_c = 45

        self.angle_to_horizontal_grad = 90

        self.p_bar = None
        self.t_c = None

        self.p_grad_pam = None
        self.t_grad_cm = None
Esempio n. 2
0
 def test_FluidStanding(self):
     pressure_bar = 100
     temp_c = 80
     fluid = PVT_fluids.FluidStanding()
     fluid.calc(pressure_bar, temp_c)
     sum = 0
     for i in fluid.__dict__.items():
         sum += i[-1]
     self.assertAlmostEqual(sum, 11690.655158519261,
                            delta=0.0001)
Esempio n. 3
0
 def test_FluidFlow(self):
     pressure_bar = 100
     temp_c = 80
     fluid_flow = PVT_fluids.FluidFlow()
     fluid_flow.calc(pressure_bar, temp_c)
     sum = 0
     for i in fluid_flow.__dict__.items():
         if type(i[-1]) != type(PVT_fluids.FluidStanding()):
             sum += i[-1]
     self.assertAlmostEqual(sum, 52964.45783497338,
                            delta=0.0001)
Esempio n. 4
0
    def test_calc_depletion_above_and_below_pb(self):
        p_res_init_bar = 250
        t_res_init_c = 80
        r_drainage_m = 250
        porosity_d = 0.25
        q_oil_surf_m3day = 50
        h_eff_res_m = 8
        c_system_1bar = 7.5 * 10**(-5)
        t_end_year = 1
        t_step_days = 30.33
        S_wat_connate_d = 0.25

        fluid = PVT.FluidStanding()
        fluid.pbcal_bar = 100
        fluid.rsb_m3m3 = 100
        fluid.calc(p_res_init_bar, t_res_init_c)

        STOIIP_by_VOL_m3 = uc.pi * r_drainage_m**2 * h_eff_res_m * porosity_d * (
            1 - S_wat_connate_d) / fluid.b_oil_m3m3

        N_cum_oil_recovery_m3 = q_oil_surf_m3day * t_step_days * 45

        MB = MatBalance.MatBalance()

        MB.fluid = fluid
        MB.rp_m3m3 = MB.fluid.rs_m3m3

        MB.STOIIP_by_VOL_m3 = STOIIP_by_VOL_m3
        c_wat_1bar = 4.35 * 10**(-5)
        c_res_1bar = 7.25 * 10**(-5)

        MB.c_wat_1bar = c_wat_1bar
        MB.c_res_1bar = c_res_1bar

        MB.t_reservoir_init_c = t_res_init_c
        MB.p_reservoir_init_bar = p_res_init_bar
        MB.S_wat_connate_d = S_wat_connate_d

        MB.calc_depletion_above_and_below_pb(N_cum_oil_recovery_m3)
        self.assertAlmostEqual(MB.p_reservoir_bar, 51.77749, delta=0.00001)
Esempio n. 5
0
    def __init__(self,
                 ESP_structure,
                 MultiPhaseFlow=PVT_fluids.FluidFlow(),
                 fluid=PVT_fluids.FluidStanding()):
        self.stage_number = ESP_structure.stage_number
        self.power_ESP_nom_kwt = ESP_structure.power_ESP_nom_kwt
        self.freq_hz = ESP_structure.freq_hz
        self.freq_nom_hz = ESP_structure.freq_nom_hz
        self.q_max_ESP_nom_m3day = ESP_structure.q_max_ESP_nom_m3day
        self.q_ESP_nom_m3day = ESP_structure.q_ESP_nom_m3day

        self.esp_calc_data = data_workflow.Data()
        self.fluid_flow_calc_data = data_workflow.Data()
        self.fluid_calc_data = data_workflow.Data()

        self.save_calculated_data = True

        self.polynom_esp_head_wt = None
        self.polynom_esp_efficiency_d = None
        self.polynom_esp_power_wt = None

        self.stage_height_m = 0.05
        self.ESP_lenth = None

        self.k_sep_total_d = 0.9

        self.fluid_flow = MultiPhaseFlow
        self.fluid = fluid

        self.option_correct_viscosity = False

        self.k_rate_degradation_d = 0
        self.k_pressure_degradation_d = 0
        self.stage_number_in_calc = 1

        self.p_intake_bar = None
        self.t_intake_bar = None
        self.power_fluid_stage_wt = None
        self.power_fluid_total_wt = None
        self.power_ESP_stage_wt = None
        self.power_ESP_total_wt = None
        self.dt_stage_c = None
        self.dt_total_c = None
        self.dp_stage_bar = None
        self.dp_total_bar = None
        self.p_bar = None
        self.t_c = None
        self.ESP_efficiency_total_d = None
        self.ESP_efficiency_stage_d = None

        self.gas_fraction_d = None
        self.q_mix_m3day = None
        self.q_mix_degr_m3day = None
        self.stage_head_m = None
        self.ESP_head_total_m = None
        self.mu_mix_cP = None
        self.rho_mix_kgm3 = None
        self.mu_mix_cSt = None
        self.q_max_ESP_m3day = None

        self.check = -1
Esempio n. 6
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