8.1
general documentation
cs_gradient.h File Reference
#include "cs_base.h"
#include "cs_halo.h"
#include "cs_internal_coupling.h"
#include "cs_mesh.h"
#include "cs_mesh_quantities.h"
+ Include dependency graph for cs_gradient.h:

Go to the source code of this file.

Enumerations

enum  cs_gradient_type_t {
  CS_GRADIENT_GREEN_ITER , CS_GRADIENT_LSQ , CS_GRADIENT_GREEN_LSQ , CS_GRADIENT_GREEN_VTX ,
  CS_GRADIENT_GREEN_R
}
 
enum  cs_gradient_limit_t { CS_GRADIENT_LIMIT_NONE = -1 , CS_GRADIENT_LIMIT_CELL = 0 , CS_GRADIENT_LIMIT_FACE = 1 }
 

Functions

void cs_gradient_initialize (void)
 Initialize gradient computation API. More...
 
void cs_gradient_finalize (void)
 Finalize gradient computation API. More...
 
void cs_gradient_free_quantities (void)
 Free saved gradient quantities. More...
 
void cs_gradient_scalar (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int hyd_p_flag, int w_stride, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, cs_real_3_t f_ext[], const cs_real_t bc_coeff_a[], const cs_real_t bc_coeff_b[], cs_real_t var[restrict], cs_real_t *restrict c_weight, const cs_internal_coupling_t *cpl, cs_real_t grad[restrict][3])
 Compute cell gradient of scalar field or component of vector or tensor field. More...
 
void cs_gradient_vector (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, const cs_real_t bc_coeff_a[][3], const cs_real_t bc_coeff_b[][3][3], cs_real_t var[restrict][3], cs_real_t *restrict c_weight, const cs_internal_coupling_t *cpl, cs_real_t gradv[restrict][3][3])
 Compute cell gradient of vector field. More...
 
void cs_gradient_tensor (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, const cs_real_6_t bc_coeff_a[], const cs_real_66_t bc_coeff_b[], cs_real_6_t *restrict var, cs_real_63_t *restrict grad)
 Compute cell gradient of tensor. More...
 
void cs_gradient_scalar_synced_input (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int hyd_p_flag, int w_stride, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, cs_real_t f_ext[][3], const cs_real_t bc_coeff_a[], const cs_real_t bc_coeff_b[], const cs_real_t var[restrict], const cs_real_t c_weight[restrict], const cs_internal_coupling_t *cpl, cs_real_t grad[restrict][3])
 Compute cell gradient of scalar field or component of vector or tensor field. More...
 
void cs_gradient_vector_synced_input (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, const cs_real_t bc_coeff_a[][3], const cs_real_t bc_coeff_b[][3][3], const cs_real_t var[restrict][3], const cs_real_t c_weight[restrict], const cs_internal_coupling_t *cpl, cs_real_t grad[restrict][3][3])
 Compute cell gradient of vector field. More...
 
void cs_gradient_tensor_synced_input (const char *var_name, cs_gradient_type_t gradient_type, cs_halo_type_t halo_type, int inc, int n_r_sweeps, int verbosity, cs_gradient_limit_t clip_mode, double epsilon, double clip_coeff, const cs_real_t bc_coeff_a[][6], const cs_real_t bc_coeff_b[][6][6], const cs_real_t var[restrict][6], cs_real_63_t *restrict grad)
 Compute cell gradient of tensor. More...
 
void cs_gradient_scalar_cell (const cs_mesh_t *m, const cs_mesh_quantities_t *fvq, cs_lnum_t c_id, cs_halo_type_t halo_type, const cs_real_t bc_coeff_a[], const cs_real_t bc_coeff_b[], const cs_real_t var[], const cs_real_t c_weight[], cs_real_t grad[3])
 Compute the gradient of a scalar field at a given cell using least-squares reconstruction. More...
 
void cs_gradient_vector_cell (const cs_mesh_t *m, const cs_mesh_quantities_t *fvq, cs_lnum_t c_id, cs_halo_type_t halo_type, const cs_real_t bc_coeff_a[][3], const cs_real_t bc_coeff_b[][3][3], const cs_real_t var[restrict][3], const cs_real_t c_weight[], cs_real_t grad[3][3])
 Compute the gradient of a vector field at a given cell using least-squares reconstruction. More...
 
void cs_gradient_tensor_cell (const cs_mesh_t *m, const cs_mesh_quantities_t *fvq, cs_lnum_t c_id, cs_halo_type_t halo_type, const cs_real_t bc_coeff_a[][6], const cs_real_t bc_coeff_b[][6][6], const cs_real_t var[restrict][6], const cs_real_t c_weight[], cs_real_t grad[6][3])
 Compute the gradient of a tensor field at a given cell using least-squares reconstruction. More...
 
void cs_gradient_type_by_imrgra (int imrgra, cs_gradient_type_t *gradient_type, cs_halo_type_t *halo_type)
 
void cs_gradient_porosity_balance (int inc)
 compute the steady balance due to porous modelling for the pressure gradient. More...
 

Variables

const char * cs_gradient_type_name []
 

Enumeration Type Documentation

◆ cs_gradient_limit_t

Enumerator
CS_GRADIENT_LIMIT_NONE 

no limiter

CS_GRADIENT_LIMIT_CELL 

cell values extrapolated by cell gradient to neighbor cells can not exceed the limiting factor times the actual value

CS_GRADIENT_LIMIT_FACE 

cell values extrapolated by face gradient (mean of cell gradients) extrapolated to neighbor cells can not exceed the limiting factor times the actual value

◆ cs_gradient_type_t

Enumerator
CS_GRADIENT_GREEN_ITER 

Iterative

CS_GRADIENT_LSQ 

Least-squares

CS_GRADIENT_GREEN_LSQ 

Green-Gauss reconstruction with least squares gradient face values

CS_GRADIENT_GREEN_VTX 

Green-Gauss with vertex interpolation

CS_GRADIENT_GREEN_R 

Green-Gauss times a renormalization matrix (to be exact on affine functions)

Function Documentation

◆ cs_gradient_finalize()

void cs_gradient_finalize ( void  )

Finalize gradient computation API.

◆ cs_gradient_free_quantities()

void cs_gradient_free_quantities ( void  )

Free saved gradient quantities.

This is required when the mesh changes, so that the on-demand computation will be updated.

◆ cs_gradient_initialize()

void cs_gradient_initialize ( void  )

Initialize gradient computation API.

◆ cs_gradient_porosity_balance()

void cs_gradient_porosity_balance ( int  inc)

compute the steady balance due to porous modelling for the pressure gradient.

Parameters
[in]incif 0, solve on increment; 1 otherwise

◆ cs_gradient_scalar()

void cs_gradient_scalar ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  hyd_p_flag,
int  w_stride,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
cs_real_3_t  f_ext[],
const cs_real_t  bc_coeff_a[],
const cs_real_t  bc_coeff_b[],
cs_real_t  var[restrict],
cs_real_t *restrict  c_weight,
const cs_internal_coupling_t cpl,
cs_real_t  grad[restrict][3] 
)

Compute cell gradient of scalar field or component of vector or tensor field.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]hyd_p_flagflag for hydrostatic pressure
[in]w_stridestride for weighting coefficient
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]f_extexterior force generating the hydrostatic pressure
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in,out]vargradient's base variable
[in,out]c_weightcell variable weight, or NULL
[in]cplassociated internal coupling, or NULL
[out]gradgradient

◆ cs_gradient_scalar_cell()

void cs_gradient_scalar_cell ( const cs_mesh_t m,
const cs_mesh_quantities_t fvq,
cs_lnum_t  c_id,
cs_halo_type_t  halo_type,
const cs_real_t  bc_coeff_a[],
const cs_real_t  bc_coeff_b[],
const cs_real_t  var[],
const cs_real_t  c_weight[],
cs_real_t  grad[3] 
)

Compute the gradient of a scalar field at a given cell using least-squares reconstruction.

This assumes ghost cell values which might be used are already synchronized.

When boundary conditions are provided, both the bc_coeff_a and bc_coeff_b arrays must be given. If boundary values are known, bc_coeff_a can point to the boundary values array, and bc_coeff_b set to NULL. If bc_coeff_a is NULL, bc_coeff_b is ignored.

Parameters
[in]mpointer to associated mesh structure
[in]fvqpointer to associated finite volume quantities
[in]c_idcell id
[in]halo_typehalo type
[in]bc_coeff_aboundary condition term a, or NULL
[in]bc_coeff_bboundary condition term b, or NULL
[in]vargradient's base variable
[in]c_weightcell variable weight, or NULL
[out]gradgradient

◆ cs_gradient_scalar_synced_input()

void cs_gradient_scalar_synced_input ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  hyd_p_flag,
int  w_stride,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
cs_real_t  f_ext[][3],
const cs_real_t  bc_coeff_a[],
const cs_real_t  bc_coeff_b[],
const cs_real_t  var[restrict],
const cs_real_t  c_weight[restrict],
const cs_internal_coupling_t cpl,
cs_real_t  grad[restrict][3] 
)

Compute cell gradient of scalar field or component of vector or tensor field.

This variant of the cs_gradient_scalar function assumes ghost cell values for input arrays (var and optionally c_weight) have already been synchronized.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]hyd_p_flagflag for hydrostatic pressure
[in]w_stridestride for weighting coefficient
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]f_extexterior force generating the hydrostatic pressure
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in]vargradient's base variable
[in]c_weightcell variable weight, or NULL
[in]cplassociated internal coupling, or NULL
[out]gradgradient

◆ cs_gradient_tensor()

void cs_gradient_tensor ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
const cs_real_6_t  bc_coeff_a[],
const cs_real_66_t  bc_coeff_b[],
cs_real_6_t *restrict  var,
cs_real_63_t *restrict  grad 
)

Compute cell gradient of tensor.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in,out]vargradient's base variable
[out]gradgradient ( $ \der{t_ij}{x_k} $ is grad[][ij][k])

◆ cs_gradient_tensor_cell()

void cs_gradient_tensor_cell ( const cs_mesh_t m,
const cs_mesh_quantities_t fvq,
cs_lnum_t  c_id,
cs_halo_type_t  halo_type,
const cs_real_t  bc_coeff_a[][6],
const cs_real_t  bc_coeff_b[][6][6],
const cs_real_t  var[restrict][6],
const cs_real_t  c_weight[],
cs_real_t  grad[6][3] 
)

Compute the gradient of a tensor field at a given cell using least-squares reconstruction.

This assumes ghost cell values which might be used are already synchronized.

When boundary conditions are provided, both the bc_coeff_a and bc_coeff_b arrays must be given. If boundary values are known, bc_coeff_a can point to the boundary values array, and bc_coeff_b set to NULL. If bc_coeff_a is NULL, bc_coeff_b is ignored.

Parameters
[in]mpointer to associated mesh structure
[in]fvqpointer to associated finite volume quantities
[in]c_idcell id
[in]halo_typehalo type
[in]bc_coeff_aboundary condition term a, or NULL
[in]bc_coeff_bboundary condition term b, or NULL
[in]vargradient's base variable
[in]c_weightcell variable weight, or NULL
[out]gradgradient

◆ cs_gradient_tensor_synced_input()

void cs_gradient_tensor_synced_input ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
const cs_real_t  bc_coeff_a[][6],
const cs_real_t  bc_coeff_b[][6][6],
const cs_real_t  var[restrict][6],
cs_real_63_t *restrict  grad 
)

Compute cell gradient of tensor.

This variant of the cs_gradient_tensor function assumes ghost cell values for input arrays (var and optionally c_weight) have already been synchronized.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in,out]vargradient's base variable
[out]gradgradient ( $ \der{t_ij}{x_k} $ is grad[][ij][k])

◆ cs_gradient_type_by_imrgra()

void cs_gradient_type_by_imrgra ( int  imrgra,
cs_gradient_type_t gradient_type,
cs_halo_type_t halo_type 
)

◆ cs_gradient_vector()

void cs_gradient_vector ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
const cs_real_t  bc_coeff_a[][3],
const cs_real_t  bc_coeff_b[][3][3],
cs_real_t  var[restrict][3],
cs_real_t *restrict  c_weight,
const cs_internal_coupling_t cpl,
cs_real_t  gradv[restrict][3][3] 
)

Compute cell gradient of vector field.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in,out]vargradient's base variable
[in,out]c_weightcell variable weight, or NULL
[in]cplassociated internal coupling, or NULL
[out]gradvgradient ( $ \der{u_i}{x_j} $ is gradv[][i][j])

◆ cs_gradient_vector_cell()

void cs_gradient_vector_cell ( const cs_mesh_t m,
const cs_mesh_quantities_t fvq,
cs_lnum_t  c_id,
cs_halo_type_t  halo_type,
const cs_real_t  bc_coeff_a[][3],
const cs_real_t  bc_coeff_b[][3][3],
const cs_real_t  var[restrict][3],
const cs_real_t  c_weight[],
cs_real_t  grad[3][3] 
)

Compute the gradient of a vector field at a given cell using least-squares reconstruction.

This assumes ghost cell values which might be used are already synchronized.

When boundary conditions are provided, both the bc_coeff_a and bc_coeff_b arrays must be given. If boundary values are known, bc_coeff_a can point to the boundary values array, and bc_coeff_b set to NULL. If bc_coeff_a is NULL, bc_coeff_b is ignored.

Parameters
[in]mpointer to associated mesh structure
[in]fvqpointer to associated finite volume quantities
[in]c_idcell id
[in]halo_typehalo type
[in]bc_coeff_aboundary condition term a, or NULL
[in]bc_coeff_bboundary condition term b, or NULL
[in]vargradient's base variable
[in]c_weightcell variable weight, or NULL
[out]gradgradient

◆ cs_gradient_vector_synced_input()

void cs_gradient_vector_synced_input ( const char *  var_name,
cs_gradient_type_t  gradient_type,
cs_halo_type_t  halo_type,
int  inc,
int  n_r_sweeps,
int  verbosity,
cs_gradient_limit_t  clip_mode,
double  epsilon,
double  clip_coeff,
const cs_real_t  bc_coeff_a[][3],
const cs_real_t  bc_coeff_b[][3][3],
const cs_real_t  var[restrict][3],
const cs_real_t  c_weight[restrict],
const cs_internal_coupling_t cpl,
cs_real_t  grad[restrict][3][3] 
)

Compute cell gradient of vector field.

This variant of the cs_gradient_vector function assumes ghost cell values for input arrays (var and optionally c_weight) have already been synchronized.

Parameters
[in]var_namevariable name
[in]gradient_typegradient type
[in]halo_typehalo type
[in]incif 0, solve on increment; 1 otherwise
[in]n_r_sweepsif > 1, number of reconstruction sweeps (only used by CS_GRADIENT_GREEN_ITER)
[in]verbosityverbosity level
[in]clip_modeclipping mode
[in]epsilonprecision for iterative gradient calculation
[in]clip_coeffclipping coefficient
[in]bc_coeff_aboundary condition term a
[in]bc_coeff_bboundary condition term b
[in]vargradient's base variable
[in]c_weightcell variable weight, or NULL
[in]cplassociated internal coupling, or NULL
[out]gradgradient ( $ \der{u_i}{x_j} $ is gradv[][i][j])

Variable Documentation

◆ cs_gradient_type_name

const char* cs_gradient_type_name[]
extern