8.1
general documentation
cs_gradient.cxx File Reference

Gradient reconstruction. More...

#include "cs_defs.h"
#include <algorithm>
#include <cmath>
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
#include "bft_error.h"
#include "bft_mem.h"
#include "bft_printf.h"
#include "cs_array.h"
#include "cs_array_reduce.h"
#include "cs_bad_cells_regularisation.h"
#include "cs_blas.h"
#include "cs_boundary_conditions.h"
#include "cs_cell_to_vertex.h"
#include "cs_ext_neighborhood.h"
#include "cs_field.h"
#include "cs_field_pointer.h"
#include "cs_gradient_boundary.h"
#include "cs_halo.h"
#include "cs_halo_perio.h"
#include "cs_internal_coupling.h"
#include "cs_log.h"
#include "cs_math.h"
#include "cs_mesh.h"
#include "cs_mesh_adjacencies.h"
#include "cs_mesh_quantities.h"
#include "cs_parall.h"
#include "cs_porous_model.h"
#include "cs_prototypes.h"
#include "cs_timer.h"
#include "cs_timer_stats.h"
#include "cs_gradient.h"
#include "cs_gradient_priv.h"
+ Include dependency graph for cs_gradient.cxx:

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...
 

Detailed Description

Gradient reconstruction.

Please refer to the gradient reconstruction section of the theory guide for more informations.

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])