#include "cs_defs.h"
#include <assert.h>
#include <math.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "cs_headers.h"

void
cs_user_mesh_modify(cs_mesh_t *mesh)
{
  {
    /* Define extrusion parameters for each face */
    int n_zones = 1;
    const char *sel_criteria[] = {"aerofoil_surf"};
    const int zone_layers[] = {5};
    const double zone_thickness[] = {-1};
    const float zone_expansion[] = {1};
    cs_mesh_extrude_face_info_t *efi = cs_mesh_extrude_face_info_create(mesh);
    cs_lnum_t n_faces;
    cs_lnum_t *face_list;
    BFT_MALLOC(face_list, mesh->n_b_faces, cs_lnum_t);
    for (int z_id = 0; z_id < n_zones; z_id++) {
      cs_selector_get_b_face_list(sel_criteria[z_id], &n_faces, face_list);
      cs_mesh_extrude_set_info_by_zone(efi,
                                       zone_layers[z_id],
                                       zone_thickness[z_id],
                                       zone_expansion[z_id],
                                       n_faces,
                                       face_list);
    }
    BFT_FREE(face_list);
    /* Determine vertex values for extrusion */
    cs_mesh_extrude_vectors_t *e = cs_mesh_extrude_vectors_create(efi);
    /* Insert boundary layer */
    cs_mesh_extrude_face_info_destroy(&efi);
    cs_mesh_boundary_layer_insert(mesh, e, 0.2, false, 0, NULL);
    cs_mesh_extrude_vectors_destroy(&e);
  }
}
