Ejemplo n.º 1
0
 def count_A(
     self,
     state_n,
     state_n_plus,
 ):
     p_cap_der = Layer.count_p_cap_graph_der(state_n.get_s_water())
     ro_der = Layer.water.ro_water_0 * Layer.water.c_f_water
     A = (state_n_plus.get_fi() * state_n_plus.get_ro_oil()) / (
         state_n_plus.get_fi() * state_n_plus.get_ro_water() -
         state_n.get_s_water() * state_n.get_fi() * ro_der * p_cap_der)
     return A
Ejemplo n.º 2
0
    def update_saturation(self, cell_container):
        def count_coeff_2(flow_plus, flow_minus):
            right_state_plus = flow_plus.get_right_cell(
            ).get_cell_state_n_plus()
            left_state_plus = flow_plus.get_left_cell().get_cell_state_n_plus()

            right_state_minus = flow_minus.get_right_cell(
            ).get_cell_state_n_plus()
            left_state_minus = flow_minus.get_left_cell(
            ).get_cell_state_n_plus()

            coeff_2_part = flow_plus.get_water_flow() * (right_state_plus.get_pressure_oil() - left_state_plus.get_pressure_oil())\
                           + flow_plus.get_water_flow() * (right_state_plus.get_pressure_cap() - left_state_plus.get_pressure_cap())\
                           + flow_minus.get_water_flow() * (left_state_minus.get_pressure_oil() - right_state_minus.get_pressure_oil())\
                           + flow_minus.get_water_flow() * (left_state_minus.get_pressure_cap() - right_state_minus.get_pressure_cap())

            # TODO: заменить расчет плотности в gamma если нужно
            gamma = left_state_plus.get_ro_water() * Layer.g
            gamma_part = flow_plus.get_water_flow() * gamma * (flow_plus.get_right_cell().z_coordinate - flow_plus.get_left_cell().z_coordinate)\
                         + flow_minus.get_water_flow() * gamma * (flow_minus.get_left_cell().z_coordinate - flow_minus.get_right_cell().z_coordinate)

            coeff_2_part -= gamma_part
            return coeff_2_part

        for k in range(1, Layer.N_z - 1):
            for i in range(1, Layer.N_x - 1):
                for j in range(1, Layer.N_y - 1):
                    #==================== Все значения для воды ========================
                    cell = cell_container.get_cell(k, i, j)
                    flow_x_plus = cell.get_flow_coefficient(
                        'x', FlowComponents.plus.value)
                    flow_x_minus = cell.get_flow_coefficient(
                        'x', FlowComponents.minus.value)

                    flow_y_plus = cell.get_flow_coefficient(
                        'y', FlowComponents.plus.value)
                    flow_y_minus = cell.get_flow_coefficient(
                        'y', FlowComponents.minus.value)

                    flow_z_plus = cell.get_flow_coefficient(
                        'z', FlowComponents.plus.value)
                    flow_z_minus = cell.get_flow_coefficient(
                        'z', FlowComponents.minus.value)

                    state_n = cell.get_cell_state_n()
                    state_n_plus = cell.get_cell_state_n_plus()
                    #================ water ================
                    # TODO: Запихать эти штуки класс для воды или нефти
                    ro_der = Layer.water.ro_water_0 * Layer.water.c_f_water
                    fi_der = Layer.fi_0 * Layer.c_r

                    p_cap_der = Layer.count_p_cap_graph_der(
                        state_n.get_s_water())
                    pressure_water = state_n_plus.get_pressure_water()

                    #================ коэффициенты d ===============
                    d_11 = (1.0 / self.tau) * state_n.get_s_water() * (
                        state_n.get_fi() * ro_der +
                        fi_der * state_n_plus.get_ro_water())
                    d_12 = (1.0 / self.tau) * (
                        state_n_plus.get_fi() * state_n_plus.get_ro_water() -
                        state_n.get_s_water() * state_n.get_fi() *
                        state_n_plus.get_ro_water() * p_cap_der)

                    coeff_2 = count_coeff_2(
                        flow_x_plus, flow_x_minus) + count_coeff_2(
                            flow_y_plus, flow_y_minus) + count_coeff_2(
                                flow_z_plus, flow_z_minus)

                    coeff_3 = -(d_11 / d_12) * (
                        state_n_plus.get_pressure_oil() -
                        state_n.get_pressure_oil())

                    s_water_new = state_n.get_s_water() + (
                        1.0 / d_12) * coeff_2 + coeff_3
                    if cell.has_well:
                        s_water_new = s_water_new - (
                            1.0 / d_12) * cell.well.get_water_well_index() * (
                                pressure_water - cell.well.p_well)
                    state_n_plus.set_s_water(s_water_new)
                    state_n_plus.set_s_oil(1.0 - s_water_new)