 
         if(fp->layers[k]->type == CONV)
         {
-            coeffs_from_previous_layer_conv<<<num_out_neurons_last_layer, 1>>>(linf_coeff, lsup_coeff, linf_coeff_tmp, lsup_coeff_tmp, aux_coeffs, fp->layers[k]->output_size[0], fp->layers[k]->output_size[1], fp->layers[k]->output_size[2], fp->layers[k]->input_size[0], fp->layers[k]->input_size[1], fp->layers[k]->input_size[2], fp->layers[k]->filter_size[0], fp->layers[k]->filter_size[1], fp->layers[k]->strides[0], fp->layers[k]->strides[1], fp->layers[k]->pad[0], fp->layers[k]->pad[1]);
+            coeffs_from_previous_layer_conv<<<num_out_neurons_last_layer, dim3(fp->layers[k]->input_size[2], fp->layers[k]->filter_size[1], fp->layers[k]->filter_size[0])>>>(linf_coeff, lsup_coeff, linf_coeff_tmp, lsup_coeff_tmp, fp->layers[k]->filter_weights, fp->layers[k]->output_size[0], fp->layers[k]->output_size[1], fp->layers[k]->output_size[2], fp->layers[k]->input_size[0], fp->layers[k]->input_size[1], fp->layers[k]->input_size[2], fp->layers[k]->filter_size[0], fp->layers[k]->filter_size[1], fp->layers[k]->strides[0], fp->layers[k]->strides[1], fp->layers[k]->pad[0], fp->layers[k]->pad[1]);
 
             csts_from_previous_layer_conv<<<num_out_neurons_last_layer, 1>>>(linf_coeff, lsup_coeff, linf_cst, lsup_cst, linf_cst_tmp, lsup_cst_tmp, fp->layers[k]->filter_bias, num_out_neurons_last_layer, fp->layers[k]->output_size[0], fp->layers[k]->output_size[1], fp->layers[k]->output_size[2]);
         }

        cudaFree(lsup_coeff_tmp);
        cudaFree(uinf_coeff_tmp);
        cudaFree(usup_coeff_tmp);

        if(fp->layers[k]->type == CONV)
        {
            cudaFree(aux_coeffs);
            cudaFree(aux_csts);
        }
    }

    compute_lb_from_expr<<<num_out_neurons_last_layer, 1>>>(lb_array, linf_coeff, lsup_coeff, linf_cst, fp->input_inf, fp->input_sup, num_out_neurons_last_layer, num_in_neurons_first_layer);

        sparse_to_dense(fp->layers[layerno], coeffs, csts);

        std::cout << "INITIAL" << std::endl;

        std::cout << "Parameters: " << std::endl
            << "x_pad = " << fp->layers[layerno]->pad[0] << " x_filter_size = " << fp->layers[layerno]->filter_size[0] << " x_stride = " << fp->layers[layerno]->strides[0] << std::endl;

        const size_t out_x_0 = 0;
        const size_t out_y_0 = 0;

        const long int x_min_0 = fp->layers[layerno]->strides[0]*out_x_0 - fp->layers[layerno]->pad[0];
        const long int x_max_0 = fp->layers[layerno]->strides[0]*out_x_0 + fp->layers[layerno]->filter_size[0] - fp->layers[layerno]->pad[0];

        std::cout << "xmin_0 " << x_min_0 << " xmax_0 " << x_max_0 << std::endl;

        const long int y_min_0 = fp->layers[layerno]->strides[1]*out_y_0 - fp->layers[layerno]->pad[1];
        const long int y_max_0 = fp->layers[layerno]->strides[1]*out_y_0 + fp->layers[layerno]->filter_size[1] - fp->layers[layerno]->pad[1];

        std::cout << "ymin_0 " << y_min_0 << " ymax_0 " << y_max_0 << std::endl;

        const long int out_x_1 = 1;
        const long int out_y_1 = 1;

        const long int x_min_1 = fp->layers[layerno]->strides[0]*out_x_1 - fp->layers[layerno]->pad[0];
        const long int x_max_1 = fp->layers[layerno]->strides[0]*out_x_1 + fp->layers[layerno]->filter_size[0] - fp->layers[layerno]->pad[0];

        std::cout << "xmin_1 " << x_min_1 << " xmax_1 " << x_max_1 << std::endl;

        const long int y_min_1 = fp->layers[layerno]->strides[1]*out_y_1 - fp->layers[layerno]->pad[1];
        const long int y_max_1 = fp->layers[layerno]->strides[1]*out_y_1 + fp->layers[layerno]->filter_size[1] - fp->layers[layerno]->pad[1];

        std::cout << "ymin_1 " << y_min_1 << " ymax_1 " << y_max_1 << std::endl;

        offset_x = x_min_0;
        offset_y = y_min_0;

        std::cout << "offset_x " << offset_x << " offset_y " << offset_y << std::endl;

        length_x = x_max_0 - x_min_0;
        length_y = y_max_0 - y_min_0;

        std::cout << "length_x " << length_x << " length_y " << length_y << std::endl;

        shift_x = x_min_1 - x_min_0;
        shift_y = y_min_1 - y_min_0;

        std::cout << "shift_x " << shift_x << " shift_y " << shift_y << std::endl;

        const long int mat_min_min_0 =  x_min_0     *fp->layers[layerno]->input_size[1]*fp->layers[layerno]->input_size[2] + y_min_0*fp->layers[layerno]->input_size[2];
        const long int mat_min_max_0 =  x_min_0     *fp->layers[layerno]->input_size[1]*fp->layers[layerno]->input_size[2] + y_max_0*fp->layers[layerno]->input_size[2];
