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