void layer_iset_cell_value( layer_type * layer , int i , int j , int value) { int g = layer_get_global_cell_index( layer , i , j ); cell_type * cell = &layer->data[g]; layer->cell_sum += (value - cell->cell_value); cell->cell_value = value; if (i > 0) { int neighbour_value = layer_iget_cell_value( layer , i - 1 , j); if (value == neighbour_value) { cell->edges[LEFT_EDGE] = 0; layer_cancel_edge( layer , i - 1, j , RIGHT_EDGE); } else cell->edges[LEFT_EDGE] = -value; } else cell->edges[LEFT_EDGE] = -value; if (i < (layer->nx - 1)) { int neighbour_value = layer_iget_cell_value( layer , i + 1 , j); if (value == neighbour_value) { cell->edges[RIGHT_EDGE] = 0; layer_cancel_edge( layer , i + 1, j , LEFT_EDGE); } else cell->edges[RIGHT_EDGE] = value; } else cell->edges[RIGHT_EDGE] = value; if (j < (layer->ny - 1)) { int neighbour_value = layer_iget_cell_value( layer , i , j + 1); if (value == neighbour_value) { cell->edges[TOP_EDGE] = 0; layer_cancel_edge( layer , i , j + 1, BOTTOM_EDGE); } else cell->edges[TOP_EDGE] = -value; } else cell->edges[TOP_EDGE] = -value; if (j > 0) { int neighbour_value = layer_iget_cell_value( layer , i , j - 1); if (value == neighbour_value) { cell->edges[BOTTOM_EDGE] = 0; layer_cancel_edge( layer , i , j - 1, TOP_EDGE); } else cell->edges[BOTTOM_EDGE] = value; } else cell->edges[BOTTOM_EDGE] = value; }
void fault_block_layer_scan_layer( fault_block_layer_type * fault_layer , layer_type * layer) { int i,j; int_vector_type * i_list = int_vector_alloc(0,0); int_vector_type * j_list = int_vector_alloc(0,0); for (j = 0; j < layer_get_ny( layer ); j++) { for (i = 0; i < layer_get_nx( layer); i++) { int cell_value = layer_iget_cell_value( layer , i , j ); if (cell_value != 0) { layer_trace_block_content( layer , true , i , j , cell_value , i_list , j_list ); { int c; int block_id = fault_block_layer_get_next_id( fault_layer ); fault_block_type * fault_block = fault_block_layer_add_block( fault_layer , block_id ); for (c=0; c < int_vector_size( i_list ); c++) fault_block_add_cell( fault_block , int_vector_iget( i_list , c ), int_vector_iget( j_list , c )); } } } } int_vector_free( i_list ); int_vector_free( j_list ); }
int layer_replace_cell_values( layer_type * layer , int old_value , int new_value) { int i,j; int replace_count = 0; for (j=0; j < layer->ny; j++) { for (i=0; i < layer->nx; i++) { if (layer_iget_cell_value( layer , i , j ) == old_value) { layer_iset_cell_value( layer , i , j , new_value); replace_count++; } } } return replace_count; }
bool fault_block_layer_export( const fault_block_layer_type * layer , ecl_kw_type * faultblock_kw) { if (ecl_type_is_int(ecl_kw_get_data_type( faultblock_kw )) && (ecl_kw_get_size( faultblock_kw ) == ecl_grid_get_global_size( layer->grid ))) { int i,j; for (j=0; j < ecl_grid_get_ny( layer->grid ); j++) { for (i=0; i < ecl_grid_get_nx( layer->grid ); i++) { int g = ecl_grid_get_global_index3( layer->grid , i, j , layer->k ); int cell_value = layer_iget_cell_value( layer->layer , i , j ); ecl_kw_iset_int( faultblock_kw , g , cell_value); } } return true; } else return false; }
void layer_update_connected_cells( layer_type * layer , int i , int j , int org_value , int new_value) { if (org_value != new_value) { if (layer_iget_cell_value( layer , i , j ) == org_value) { layer_iset_cell_value( layer , i , j , new_value); if (i < (layer->nx - 1) && layer_cell_contact( layer , i,j,i+1,j)) layer_update_connected_cells( layer , i + 1 , j , org_value , new_value); if (i > 0 && layer_cell_contact( layer , i,j,i-1,j)) layer_update_connected_cells( layer , i - 1 , j , org_value , new_value); if (j < (layer->ny - 1) && layer_cell_contact( layer , i,j,i,j+1)) layer_update_connected_cells( layer , i , j + 1, org_value , new_value); if (j > 0 && layer_cell_contact( layer , i,j,i,j-1)) layer_update_connected_cells( layer , i , j - 1, org_value , new_value); } } }