#include "cs_defs.h"#include <assert.h>#include <errno.h>#include <stdio.h>#include <stdarg.h>#include <string.h>#include <math.h>#include <float.h>#include "bft_error.h"#include "bft_mem.h"#include "bft_printf.h"#include "cs_blas.h"#include "cs_halo.h"#include "cs_halo_perio.h"#include "cs_log.h"#include "cs_mesh.h"#include "cs_field.h"#include "cs_gradient.h"#include "cs_ext_neighborhood.h"#include "cs_mesh_quantities.h"#include "cs_parameters.h"#include "cs_porous_model.h"#include "cs_prototypes.h"#include "cs_timer.h"#include "cs_parall.h"#include "cs_matrix_building.h"Functions | |
| void | cs_matrix_wrapper_scalar (int iconvp, int idiffp, int ndircp, int isym, double thetap, int imucpp, const cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t rovsdt[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t xcpp[], cs_real_t da[], cs_real_t xa[]) |
| void | cs_matrix_wrapper_vector (int iconvp, int idiffp, int tensorial_diffusion, int ndircp, int isym, cs_lnum_t eb_size, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_33_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_33_t da[], cs_real_t xa[]) |
| void | cs_matrix_wrapper_tensor (int iconvp, int idiffp, int tensorial_diffusion, int ndircp, int isym, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_66_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_66_t da[], cs_real_t xa[]) |
| void | cs_sym_matrix_scalar (const cs_mesh_t *m, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t rovsdt[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_t *restrict da, cs_real_t *restrict xa) |
| Build the diffusion matrix for a scalar field. (symmetric matrix). | |
| void | cs_matrix_scalar (const cs_mesh_t *m, int iconvp, int idiffp, double thetap, int imucpp, const cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t rovsdt[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t xcpp[], cs_real_t *restrict da, cs_real_2_t *restrict xa) |
| Build the advection/diffusion matrix for a scalar field (non-symmetric matrix). | |
| void | cs_sym_matrix_vector (const cs_mesh_t *m, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_33_t fimp[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_33_t *restrict da, cs_real_t *restrict xa) |
| Build the diffusion matrix for a vector field (symmetric matrix). | |
| void | cs_sym_matrix_tensor (const cs_mesh_t *m, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_66_t fimp[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_66_t *restrict da, cs_real_t *restrict xa) |
| Build the diffusion matrix for a tensor field (symmetric matrix). | |
| void | cs_matrix_vector (const cs_mesh_t *m, const cs_mesh_quantities_t *mq, int iconvp, int idiffp, cs_lnum_t eb_size, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_33_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_33_t *restrict da, cs_real_2_t *restrict xa) |
| Build the advection/diffusion matrix for a vector field (non-symmetric matrix). | |
| void | cs_matrix_tensor (const cs_mesh_t *m, int iconvp, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_66_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_66_t *restrict da, cs_real_2_t *restrict xa) |
| Build the advection/diffusion matrix for a tensor field (non-symmetric matrix). | |
| void | cs_matrix_time_step (const cs_mesh_t *m, int iconvp, int idiffp, int isym, const cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_t *restrict da) |
| Build the diagonal of the advection/diffusion matrix for determining the variable time step, flow, Fourier. | |
| void | cs_matrix_anisotropic_diffusion (const cs_mesh_t *m, const cs_mesh_quantities_t *mq, int iconvp, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_33_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_33_t i_visc[], const cs_real_t b_visc[], cs_real_33_t *restrict da, cs_real_332_t *restrict xa) |
| Build the advection/diffusion matrix for a vector field with a tensorial diffusivity. | |
| void | cs_matrix_anisotropic_diffusion_tensor (const cs_mesh_t *m, int iconvp, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_66_t fimp[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_66_t i_visc[], const cs_real_t b_visc[], cs_real_66_t *restrict da, cs_real_662_t *restrict xa) |
| Build the advection/diffusion matrix for a tensor field with a tensorial diffusivity. | |
| void | cs_sym_matrix_anisotropic_diffusion (const cs_mesh_t *m, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_33_t fimp[], const cs_real_33_t i_visc[], const cs_real_t b_visc[], cs_real_33_t *restrict da, cs_real_33_t *restrict xa) |
| Build the diffusion matrix for a vector field with a tensorial diffusivity (symmetric matrix). | |
| void | cs_sym_matrix_anisotropic_diffusion_tensor (const cs_mesh_t *m, int idiffp, double thetap, const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_66_t fimp[], const cs_real_66_t i_visc[], const cs_real_t b_visc[], cs_real_66_t *restrict da, cs_real_66_t *restrict xa) |
| Build the diffusion matrix for a tensor field with a tensorial diffusivity (symmetric matrix). | |
| void cs_matrix_anisotropic_diffusion | ( | const cs_mesh_t * | m, |
| const cs_mesh_quantities_t * | mq, | ||
| int | iconvp, | ||
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_33_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_33_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_33_t *restrict | da, | ||
| cs_real_332_t *restrict | xa ) |
Build the advection/diffusion matrix for a vector field with a tensorial diffusivity.
The advection is upwind, the diffusion is not reconstructed. The matrix is split into a diagonal block (3x3 times number of cells) and an extra diagonal part (of dimension 2 times 3x3 the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | mq | pointer to mesh quantities structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | coefbp | boundary condition array for the variable (implicit part - 3x3 tensor array) |
| [in] | cofbfp | boundary condition array for the variable flux (implicit part - 3x3 tensor array) |
| [in] | fimp | part of the diagonal |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_matrix_anisotropic_diffusion_tensor | ( | const cs_mesh_t * | m, |
| int | iconvp, | ||
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_66_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_66_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_66_t *restrict | da, | ||
| cs_real_662_t *restrict | xa ) |
Build the advection/diffusion matrix for a tensor field with a tensorial diffusivity.
The advection is upwind, the diffusion is not reconstructed. The matrix is split into a diagonal block (6x6 times number of cells) and an extra diagonal part (of dimension 2 times 6x6 the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs_ts | boundary condition structure for the variable |
| [in] | fimp | part of the diagonal |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_matrix_scalar | ( | const cs_mesh_t * | m, |
| int | iconvp, | ||
| int | idiffp, | ||
| double | thetap, | ||
| int | imucpp, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs, | ||
| const cs_real_t | rovsdt[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| const cs_real_t | xcpp[], | ||
| cs_real_t *restrict | da, | ||
| cs_real_2_t *restrict | xa ) |
Build the advection/diffusion matrix for a scalar field (non-symmetric matrix).
Build the advection/diffusion matrix for a scalar field.
The advection is upwind, the diffusion is not reconstructed. The matrix is split into a diagonal block (number of cells) and an extra diagonal part (of dimension 2 time the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | imucpp | indicator
|
| [in] | bc_coeffs | boundary condition structure for the variable |
| [in] | rovsdt | working array |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [in] | xcpp | array of specific heat (Cp) |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_matrix_tensor | ( | const cs_mesh_t * | m, |
| int | iconvp, | ||
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_66_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_66_t *restrict | da, | ||
| cs_real_2_t *restrict | xa ) |
Build the advection/diffusion matrix for a tensor field (non-symmetric matrix).
The advection is upwind, the diffusion is not reconstructed. The matrix is split into a diagonal block (6x6 times number of cells) and an extra diagonal part (of dimension 2 time the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | coefbts | boundary condition array for the variable (Implicit part - 6x6 tensor array) |
| [in] | cofbfts | boundary condition array for the variable flux (Implicit part - 6x6 tensor array) |
| [in] | fimp | part of the diagonal |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_matrix_time_step | ( | const cs_mesh_t * | m, |
| int | iconvp, | ||
| int | idiffp, | ||
| int | isym, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs, | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_t *restrict | da ) |
Build the diagonal of the advection/diffusion matrix for determining the variable time step, flow, Fourier.
| [in] | m | pointer to mesh structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | isym | indicator
|
| [in] | bc_coeffs | boundary condition structure for the variable |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| void cs_matrix_vector | ( | const cs_mesh_t * | m, |
| const cs_mesh_quantities_t * | mq, | ||
| int | iconvp, | ||
| int | idiffp, | ||
| cs_lnum_t | eb_size, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_33_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_33_t *restrict | da, | ||
| cs_real_2_t *restrict | xa ) |
Build the advection/diffusion matrix for a vector field (non-symmetric matrix).
The advection is upwind, the diffusion is not reconstructed. The matrix is split into a diagonal block (3x3 times number of cells) and an extra diagonal part (of dimension 2 time the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | mq | pointer to mesh quantities structure |
| [in] | iconvp | indicator
|
| [in] | idiffp | indicator
|
| [in] | eb_size | extra-diagonal block size
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs_v | boundary condition structure for the variable |
| [in] | fimp | part of the diagonal |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at border faces |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_matrix_wrapper_scalar | ( | int | iconvp, |
| int | idiffp, | ||
| int | ndircp, | ||
| int | isym, | ||
| double | thetap, | ||
| int | imucpp, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs, | ||
| const cs_real_t | rovsdt[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| const cs_real_t | xcpp[], | ||
| cs_real_t | da[], | ||
| cs_real_t | xa[] ) |
| void cs_matrix_wrapper_tensor | ( | int | iconvp, |
| int | idiffp, | ||
| int | tensorial_diffusion, | ||
| int | ndircp, | ||
| int | isym, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_66_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_66_t | da[], | ||
| cs_real_t | xa[] ) |
| void cs_matrix_wrapper_vector | ( | int | iconvp, |
| int | idiffp, | ||
| int | tensorial_diffusion, | ||
| int | ndircp, | ||
| int | isym, | ||
| cs_lnum_t | eb_size, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_33_t | fimp[], | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_33_t | da[], | ||
| cs_real_t | xa[] ) |
| void cs_sym_matrix_anisotropic_diffusion | ( | const cs_mesh_t * | m, |
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_33_t | fimp[], | ||
| const cs_real_33_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_33_t *restrict | da, | ||
| cs_real_33_t *restrict | xa ) |
Build the diffusion matrix for a vector field with a tensorial diffusivity (symmetric matrix).
The diffusion is not reconstructed. The matrix is split into a diagonal block (3x3 times number of cells) and an extra diagonal part (of dimension 3x3 the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs | boundary condition structure for the variable |
| [in] | fimp | |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_sym_matrix_anisotropic_diffusion_tensor | ( | const cs_mesh_t * | m, |
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_66_t | fimp[], | ||
| const cs_real_66_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_66_t *restrict | da, | ||
| cs_real_66_t *restrict | xa ) |
Build the diffusion matrix for a tensor field with a tensorial diffusivity (symmetric matrix).
Build the diffusion matrix for a vector field with a tensorial diffusivity (symmetric matrix).
The diffusion is not reconstructed. The matrix is split into a diagonal block (3x3 times number of cells) and an extra diagonal part (of dimension 3x3 the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs_ts | boundary condition structure for the variable |
| [in] | fimp | |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_sym_matrix_scalar | ( | const cs_mesh_t * | m, |
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs, | ||
| const cs_real_t | rovsdt[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_t *restrict | da, | ||
| cs_real_t *restrict | xa ) |
Build the diffusion matrix for a scalar field. (symmetric matrix).
The diffusion is not reconstructed. The matrix is split into a diagonal block (number of cells) and an extra diagonal part (of dimension the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs | boundary condition structure for the variable (implicit part) |
| [in] | rovsdt | working array |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra diagonal part of the matrix |
| void cs_sym_matrix_tensor | ( | const cs_mesh_t * | m, |
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_66_t | fimp[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_66_t *restrict | da, | ||
| cs_real_t *restrict | xa ) |
Build the diffusion matrix for a tensor field (symmetric matrix).
The diffusion is not reconstructed. The matrix is split into a diagonal block (6x6 times number of cells) and an extra diagonal part (of dimension the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs_ts | boundary condition structure for the variable (Implicit part - 6x6 tensor array) |
| [in] | fimp | part of the diagonal |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |
| void cs_sym_matrix_vector | ( | const cs_mesh_t * | m, |
| int | idiffp, | ||
| double | thetap, | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_33_t | fimp[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_33_t *restrict | da, | ||
| cs_real_t *restrict | xa ) |
Build the diffusion matrix for a vector field (symmetric matrix).
The diffusion is not reconstructed. The matrix is split into a diagonal block (3x3 times number of cells) and an extra diagonal part (of dimension the number of internal faces).
| [in] | m | pointer to mesh structure |
| [in] | idiffp | indicator
|
| [in] | thetap | weighting coefficient for the theta-scheme,
|
| [in] | bc_coeffs_v | boundary condition structure for the variable (implicit part - 3x3 tensor array) |
| [in] | fimp | |
| [in] | i_visc | |
| [in] | b_visc | |
| [out] | da | diagonal part of the matrix |
| [out] | xa | extra interleaved diagonal part of the matrix |