#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "bft_error.h"
#include "bft_mem.h"
#include "bft_printf.h"
#include "cs_block_dist.h"
#include "cs_math.h"
#include "cs_mesh.h"
#include "cs_mesh_builder.h"
#include "cs_mesh_cartesian.h"
Functions | |
static void | _intersect_intervals (const cs_gnum_t *i1, const cs_gnum_t *i2, cs_gnum_t *i3) |
Compute intersection between two intervals. More... | |
static cs_mesh_cartesian_params_t * | _get_structured_mesh_by_id (const int id) |
Get a cartesian mesh parameters based on id. More... | |
static cs_mesh_cartesian_params_t * | _get_structured_mesh_by_name_try (const char *name) |
Get function for structured mesh based on its name. More... | |
static cs_mesh_cartesian_params_t * | _cs_mesh_cartesian_init (const char *name, const int ndir) |
Create the mesh parameters structure. More... | |
static _cs_mesh_cartesian_direction_t * | _cs_mesh_cartesian_create_direction (cs_mesh_cartesian_law_t law, int ncells, cs_real_t smin, cs_real_t smax, cs_real_t progression) |
Create parameters for a direction. More... | |
static void | _add_nx_face (cs_mesh_cartesian_params_t *mp, cs_mesh_builder_t *mb, cs_lnum_t f_id, cs_gnum_t nx, cs_gnum_t ny, cs_gnum_t nz, cs_gnum_t i, cs_gnum_t j, cs_gnum_t k) |
Add a face with x-normal. More... | |
static void | _add_ny_face (cs_mesh_cartesian_params_t *mp, cs_mesh_builder_t *mb, cs_lnum_t f_id, cs_gnum_t nx, cs_gnum_t ny, cs_gnum_t nz, cs_gnum_t i, cs_gnum_t j, cs_gnum_t k) |
Add a face with y-normal. More... | |
static void | _add_nz_face (cs_mesh_cartesian_params_t *mp, cs_mesh_builder_t *mb, cs_lnum_t f_id, cs_gnum_t nx, cs_gnum_t ny, cs_gnum_t nz, cs_gnum_t i, cs_gnum_t j, cs_gnum_t k) |
Add a face with z-normal. More... | |
int | cs_mesh_cartesian_get_number_of_meshes (void) |
Return number of structured meshes to build. More... | |
cs_mesh_cartesian_params_t * | cs_mesh_cartesian_by_id (const int id) |
Return pointer to cartesian mesh parameters structure. More... | |
cs_mesh_cartesian_params_t * | cs_mesh_cartesian_by_name_try (const char *name) |
Get function for structured mesh based on its name. More... | |
cs_mesh_cartesian_params_t * | cs_mesh_cartesian_by_name (const char *name) |
Get function for structured mesh based on its name. More... | |
cs_mesh_cartesian_params_t * | cs_mesh_cartesian_create (const char *name) |
Create cartesian mesh structure. More... | |
int | cs_mesh_cartesian_define_simple (const char *name, int ncells[3], cs_real_t xyz[6]) |
Define a simple cartesian mesh with a constant step in all directions. More... | |
void | cs_mesh_cartesian_define_dir_user (cs_mesh_cartesian_params_t *mp, int idir, int ncells, cs_real_t vtx_coord[]) |
Define directions parameters based on a user input. More... | |
void | cs_mesh_cartesian_define_dir_geom_by_part (cs_mesh_cartesian_params_t *mp, int idir, int n_parts, const cs_real_t part_coords[], const cs_lnum_t n_part_cells[], const cs_real_t amp_factors[]) |
Define direction parameters based on a piecewise definition. Each part follows a geometric (or uniform) sequence. To get the uniform sequence, set the amplification factor to 1 in the wanted part. More... | |
void | cs_mesh_cartesian_define_from_csv (const char *name, const char *csv_file_name) |
Define a simple cartesian mesh based on a CSV file. CSV file needs to contain : (1) First line which is empty or contains a header (2) Second line containing number of vertices per direction: format is 'nx;ny;nz' (3) Third line is empty or contains a header (4) Fourth line and onwards contains vertices coordinates for each direction. Format is "X1[i];X2[i];X3[i]" for index i. If current vertex index is beyond max value for a given direction, an empty value is expected. For example, if for index 'j' the first direction is empty, format is : ';X2[j];X3[j]'. More... | |
void | cs_mesh_cartesian_define_dir_params (cs_mesh_cartesian_params_t *mp, int idim, cs_mesh_cartesian_law_t law, int ncells, cs_real_t smin, cs_real_t smax, cs_real_t progression) |
Define parameters for a given direction. More... | |
int | cs_mesh_cartesian_need_build (void) |
Indicate if a cartesian mesh is to be built. More... | |
const char * | cs_mesh_cartesian_get_name (int id) |
Get name of structured mesh. More... | |
int | cs_mesh_cartesian_get_gc_id_shift (int id) |
Get group class id shift of cartesian mesh. More... | |
void | cs_mesh_cartesian_set_gc_id_shift (int id, int shift) |
Set group class id shift of cartesian mesh. More... | |
cs_gnum_t | cs_mesh_cartesian_get_n_g_cells (int id) |
Get global number of cells of a cartesian mesh. More... | |
cs_gnum_t | cs_mesh_cartesian_get_n_g_faces (int id) |
Get global number of faces of a cartesian mesh. More... | |
cs_gnum_t | cs_mesh_cartesian_get_n_g_vtx (int id) |
Get global number of vertices of a cartesian mesh. More... | |
int | cs_mesh_cartesian_get_ncells (int id, int idim) |
Get number of cells in a given direction. More... | |
void | cs_mesh_cartesian_block_connectivity (int id, cs_mesh_t *m, cs_mesh_builder_t *mb, long echo) |
Build unstructured connectivity needed for partitionning. More... | |
void | cs_mesh_cartesian_finalize_definition (void) |
Compute all global values for meshes. More... | |
void | cs_mesh_cartesian_params_destroy (void) |
Destroy cartesian mesh parameters. More... | |
void | cs_mesh_cartesian_set_max_number_of_blocks (int n_blocks) |
Set maximum number of cartesian blocks (by default is set to None) More... | |
Variables | |
static int | _build_mesh_cartesian = 0 |
static int | _n_structured_meshes = 0 |
static cs_mesh_cartesian_params_t ** | _mesh_params = nullptr |
static int | _n_structured_meshes_max = -1 |
|
static |
Add a face with x-normal.
[in] | mp | pointer to cartesian mesh parameters |
[in,out] | mb | pointer to cs_mesh_builder_t structure |
[in] | f_id | id of added face |
[in] | nx | number of cells in x direction |
[in] | ny | number of cells in x direction |
[in] | nz | number of cells in x direction |
[in] | i | i index (x) direction |
[in] | j | j index (x) direction |
[in] | k | k index (x) direction |
|
static |
Add a face with y-normal.
[in] | mp | pointer to cartesian mesh parameters |
[in,out] | mb | pointer to cs_mesh_builder_t structure |
[in] | f_id | id of added face |
[in] | nx | number of cells in x direction |
[in] | ny | number of cells in x direction |
[in] | nz | number of cells in x direction |
[in] | i | i index (x) direction |
[in] | j | j index (x) direction |
[in] | k | k index (x) direction |
|
static |
Add a face with z-normal.
[in] | mp | pointer to cartesian mesh parameters |
[in,out] | mb | pointer to cs_mesh_builder_t structure |
[in] | f_id | id of added face |
[in] | nx | number of cells in x direction |
[in] | ny | number of cells in x direction |
[in] | nz | number of cells in x direction |
[in] | i | i index (x) direction |
[in] | j | j index (x) direction |
[in] | k | k index (x) direction |
|
static |
Create parameters for a direction.
[in] | law | 1D discreization law : constant, geometric or parabolic |
[in] | ncells | Number of cells for this direction |
[in] | smin | Min coordinate value for this direction |
[in] | smax | Max coordinate value for this direction |
[in] | progression | Progression value, only used for geometric or parabolic laws. |
|
static |
Create the mesh parameters structure.
[in] | ndir | number of directions |
|
static |
Get a cartesian mesh parameters based on id.
[in] | id | Id of the mesh parameters asked |
|
static |
Get function for structured mesh based on its name.
[in] | name | Name of mesh |
|
static |
Compute intersection between two intervals.
[in] | i1 | First interval |
[in] | i2 | Second interval |
[out] | i3 | Intersection interval |
void cs_mesh_cartesian_block_connectivity | ( | int | id, |
cs_mesh_t * | m, | ||
cs_mesh_builder_t * | mb, | ||
long | echo | ||
) |
Build unstructured connectivity needed for partitionning.
[in] | id | Id of the cartesian mesh |
[in] | m | pointer to cs_mesh_t structure |
[in] | mb | pointer to cs_mesh_builder_t structure |
[in] | echo | verbosity flag |
cs_mesh_cartesian_params_t * cs_mesh_cartesian_by_id | ( | const int | id | ) |
Return pointer to cartesian mesh parameters structure.
[in] | id | Id of the cartesian mesh |
cs_mesh_cartesian_params_t * cs_mesh_cartesian_by_name | ( | const char * | name | ) |
Get function for structured mesh based on its name.
[in] | name | Name of mesh |
cs_mesh_cartesian_params_t * cs_mesh_cartesian_by_name_try | ( | const char * | name | ) |
Get function for structured mesh based on its name.
[in] | name | Name of mesh |
cs_mesh_cartesian_params_t * cs_mesh_cartesian_create | ( | const char * | name | ) |
Create cartesian mesh structure.
[in] | name | Name of mesh to create |
void cs_mesh_cartesian_define_dir_geom_by_part | ( | cs_mesh_cartesian_params_t * | mp, |
int | idir, | ||
int | n_parts, | ||
const cs_real_t | part_coords[], | ||
const cs_lnum_t | n_part_cells[], | ||
const cs_real_t | amp_factors[] | ||
) |
Define direction parameters based on a piecewise definition. Each part follows a geometric (or uniform) sequence. To get the uniform sequence, set the amplification factor to 1 in the wanted part.
A direction is split in several parts. Each part contains a number of cells, its starting and ending position (stored in a compact way) inside part_coords, the amplification factor (f) between the first and last cell size of each part. Notice that if f = 1, this leads to a uniform refinement. If f > 1, (resp f < 1) this leads to a growing (resp. decreasing) geometric progression of the cell size when moving along the direction of increasing coordinates.
[in] | mp | Pointer to mesh parameters |
[in] | idir | Direction index. 0->X, 1->Y, 2->Z |
[in] | n_parts | Number of parts to define the direction |
[in] | part_coords | Position delimiting each part (size = n_parts + 1) |
[in] | n_part_cells | Number of cells in each part (size = n_parts) |
[in] | amp_factors | Amplification factor in each part (size = n_parts) |
void cs_mesh_cartesian_define_dir_params | ( | cs_mesh_cartesian_params_t * | mp, |
int | idim, | ||
cs_mesh_cartesian_law_t | law, | ||
int | ncells, | ||
cs_real_t | smin, | ||
cs_real_t | smax, | ||
cs_real_t | progression | ||
) |
Define parameters for a given direction.
[in] | mp | Pointer to mesh parameters |
[in] | idim | Geometrical direction: 0->X, 1->Y, 2->Z |
[in] | law | 1D discretization law: constant, geometric or parabolic |
[in] | ncells | Number of cells for this direction |
[in] | smin | Min coordinate value for this direction |
[in] | smax | Max coordinate value for this direction |
[in] | progression | Progression value, only used for geometric or parabolic laws. |
void cs_mesh_cartesian_define_dir_user | ( | cs_mesh_cartesian_params_t * | mp, |
int | idir, | ||
int | ncells, | ||
cs_real_t | vtx_coord[] | ||
) |
Define directions parameters based on a user input.
[in] | mp | Pointer to mesh parameters |
[in] | idir | Direction index. 0->X, 1->Y, 2->Z |
[in] | ncells | Number of cells for the direction |
[in] | vtx_coord | Array of size ncells+1 containing 1D coordinate values for vertices on the given direction |
void cs_mesh_cartesian_define_from_csv | ( | const char * | name, |
const char * | csv_file_name | ||
) |
Define a simple cartesian mesh based on a CSV file. CSV file needs to contain : (1) First line which is empty or contains a header (2) Second line containing number of vertices per direction: format is 'nx;ny;nz' (3) Third line is empty or contains a header (4) Fourth line and onwards contains vertices coordinates for each direction. Format is "X1[i];X2[i];X3[i]" for index i. If current vertex index is beyond max value for a given direction, an empty value is expected. For example, if for index 'j' the first direction is empty, format is : ';X2[j];X3[j]'.
[in] | name | Name of new mesh |
[in] | csv_file_name | name of CSV file containing mesh information. |
int cs_mesh_cartesian_define_simple | ( | const char * | name, |
int | ncells[3], | ||
cs_real_t | xyz[6] | ||
) |
Define a simple cartesian mesh with a constant step in all directions.
[in] | name | Name of mesh to create |
[in] | ncells | Array of size 3 containing number of cells in each direction |
[in] | xyz | Array of size 6 containing min values, followed by max values for the three directions. |
void cs_mesh_cartesian_finalize_definition | ( | void | ) |
Compute all global values for meshes.
int cs_mesh_cartesian_get_gc_id_shift | ( | int | id | ) |
Get group class id shift of cartesian mesh.
[in] | id | Id of the cartesian mesh |
cs_gnum_t cs_mesh_cartesian_get_n_g_cells | ( | int | id | ) |
Get global number of cells of a cartesian mesh.
[in] | id | Id of the cartesian mesh |
cs_gnum_t cs_mesh_cartesian_get_n_g_faces | ( | int | id | ) |
Get global number of faces of a cartesian mesh.
[in] | id | Id of the cartesian mesh |
cs_gnum_t cs_mesh_cartesian_get_n_g_vtx | ( | int | id | ) |
Get global number of vertices of a cartesian mesh.
[in] | id | Id of the cartesian mesh |
const char * cs_mesh_cartesian_get_name | ( | int | id | ) |
Get name of structured mesh.
[in] | id | Id of the cartesian mesh |
int cs_mesh_cartesian_get_ncells | ( | int | id, |
int | idim | ||
) |
Get number of cells in a given direction.
[in] | id | Id of the cartesian mesh |
[in] | idim | Index of direction: 0->X, 1->Y, 2->Z |
int cs_mesh_cartesian_get_number_of_meshes | ( | void | ) |
Return number of structured meshes to build.
int cs_mesh_cartesian_need_build | ( | void | ) |
Indicate if a cartesian mesh is to be built.
void cs_mesh_cartesian_params_destroy | ( | void | ) |
Destroy cartesian mesh parameters.
void cs_mesh_cartesian_set_gc_id_shift | ( | int | id, |
int | shift | ||
) |
Set group class id shift of cartesian mesh.
[in] | id | Id of the cartesian mesh |
[in] | shift | Value of shift index |
void cs_mesh_cartesian_set_max_number_of_blocks | ( | int | n_blocks | ) |
Set maximum number of cartesian blocks (by default is set to None)
[in] | n_blocks | maximum number of cartesian blocks which can be created |
|
static |
|
static |
|
static |
|
static |