/*----------------------------------------------------------------------------*/
/*
  This file is generated by code_saturne, a general-purpose CFD tool.
*/
/*----------------------------------------------------------------------------*/

#include "cs_defs.h"
#include "cs_random.h" // 添加随机数生成器的头文件

/*----------------------------------------------------------------------------
 * Standard C library headers
 *----------------------------------------------------------------------------*/

#include <assert.h>
#include <math.h>

#if defined(HAVE_MPI)
#include <mpi.h>
#endif

/*----------------------------------------------------------------------------
 *  Local headers
 *----------------------------------------------------------------------------*/

#include "cs_headers.h"

/*----------------------------------------------------------------------------*/

BEGIN_C_DECLS

/*----------------------------------------------------------------------------*/

cs_real_t *
cs_meg_initialization(const char      *zone_name,
                      const cs_lnum_t  n_elts,
                      const cs_lnum_t *elt_ids,
                      const cs_real_t  xyz[][3],
                      const char      *field_name)
{
  cs_real_t *new_vals = NULL;

  /* User defined initialization for variable velocity over zone all_cells
    ---------------------------------------------------------------------- */

  if (strcmp(zone_name, "all_cells") == 0 &&
      strcmp(field_name, "velocity") == 0) {

    const cs_lnum_t vals_size = n_elts * 3;
    BFT_MALLOC(new_vals, vals_size, cs_real_t);

    cs_real_t disturbance[n_elts * 3];
    cs_random_normal(n_elts * 3, disturbance);

    const cs_real_t scale = 0.1; 
    const cs_real_t mean = 0.0; 

    for (cs_lnum_t e_id = 0; e_id < n_elts; e_id++) {
      cs_lnum_t c_id = elt_ids[e_id];
      
      new_vals[3 * e_id + 0] = 10.6;
      new_vals[3 * e_id + 1] = 0.00;
      new_vals[3 * e_id + 2] = 0.00;

      new_vals[3 * e_id + 0] += scale * (disturbance[3 * e_id + 0] + mean);
      new_vals[3 * e_id + 1] += scale * (disturbance[3 * e_id + 1] + mean);
      new_vals[3 * e_id + 2] += scale * (disturbance[3 * e_id + 2] + mean);
    }
  }
  return new_vals;
}

/*----------------------------------------------------------------------------*/

END_C_DECLS
