This file gathers functions that solve advection diffusion equations with source terms for one time step for a scalar, vector or tensor variable. More...
#include "cs_defs.h"#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <float.h>#include <math.h>#include <mpi.h>#include "bft_mem.h"#include "bft_error.h"#include "bft_printf.h"#include "cs_array.h"#include "cs_balance.h"#include "cs_blas.h"#include "cs_convection_diffusion.h"#include "cs_dispatch.h"#include "cs_field.h"#include "cs_field_pointer.h"#include "cs_halo.h"#include "cs_log.h"#include "cs_math.h"#include "cs_mesh.h"#include "cs_gradient.h"#include "cs_mesh_quantities.h"#include "cs_multigrid.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"#include "cs_matrix_default.h"#include "cs_sles.h"#include "cs_sles_default.h"#include "cs_equation_iterative_solve.h"Functions | |
| void | cs_equation_iterative_solve_scalar (int idtvar, int iterns, int f_id, const char *name, int iescap, int imucpp, cs_real_t normp, cs_equation_param_t *eqp, const cs_real_t pvara[], const cs_real_t pvark[], 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_viscm[], const cs_real_t b_viscm[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_6_t viscel[], const cs_real_2_t weighf[], const cs_real_t weighb[], int icvflb, const int icvfli[], const cs_real_t rovsdt[], cs_real_t smbrp[], cs_real_t pvar[], cs_real_t dpvar[], const cs_real_t xcpp[], cs_real_t eswork[]) |
| Solve an advection diffusion equation with source terms for one time step for the variable | |
| void | cs_equation_iterative_solve_vector (int idtvar, int iterns, int f_id, const char *name, int ivisep, int iescap, cs_equation_param_t *eqp, const cs_real_t pvara[][3], const cs_real_t pvark[][3], const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_viscm[], const cs_real_t b_viscm[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t i_secvis[], const cs_real_t b_secvis[], cs_real_t viscel[][6], const cs_real_2_t weighf[], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_t fimp[][3][3], cs_real_t smbrp[][3], cs_real_t pvar[][3], cs_real_t eswork[][3]) |
| This function solves an advection diffusion equation with source terms for one time step for the vector variable | |
| void | cs_equation_iterative_solve_tensor (int idtvar, int f_id, const char *name, cs_equation_param_t *eqp, const cs_real_t pvara[][6], const cs_real_t pvark[][6], const cs_field_bc_coeffs_t *bc_coeffs_ts, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_viscm[], const cs_real_t b_viscm[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_t viscel[][6], const cs_real_2_t weighf[], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_t fimp[][6][6], cs_real_t smbrp[][6], cs_real_t pvar[][6]) |
| This function solves an advection diffusion equation with source terms for one time step for the symmetric tensor variable | |
This file gathers functions that solve advection diffusion equations with source terms for one time step for a scalar, vector or tensor variable.
| void cs_equation_iterative_solve_scalar | ( | int | idtvar, |
| int | iterns, | ||
| int | f_id, | ||
| const char * | name, | ||
| int | iescap, | ||
| int | imucpp, | ||
| cs_real_t | normp, | ||
| cs_equation_param_t * | eqp, | ||
| const cs_real_t | pvara[], | ||
| const cs_real_t | pvark[], | ||
| 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_viscm[], | ||
| const cs_real_t | b_viscm[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_6_t | viscel[], | ||
| const cs_real_2_t | weighf[], | ||
| const cs_real_t | weighb[], | ||
| int | icvflb, | ||
| const int | icvfli[], | ||
| const cs_real_t | rovsdt[], | ||
| cs_real_t | smbrp[], | ||
| cs_real_t | pvar[], | ||
| cs_real_t | dpvar[], | ||
| const cs_real_t | xcpp[], | ||
| cs_real_t | eswork[] ) |
Solve an advection diffusion equation with source terms for one time step for the variable 
The equation reads:
![\[f_s^{imp}(a^{n+1}-a^n)
+ \divs \left( a^{n+1} \rho \vect{u} - \mu \grad a^{n+1} \right)
= Rhs
\]](form_116.png)
This equation is rewritten as:
![\[f_s^{imp} \delta a
+ \divs \left( \delta a \rho \vect{u} - \mu \grad \delta a \right)
= Rhs^1
\]](form_117.png)
where 

It is in fact solved with the following iterative process:
![\[f_s^{imp} \delta a^k
+ \divs \left(\delta a^k \rho \vect{u}-\mu\grad\delta a^k \right)
= Rhs^k
\]](form_120.png)
where 
Be careful, it is forbidden to modify 
Please refer to the codits section of the theory guide for more informations.
| [in] | idtvar | indicator of the temporal scheme |
| [in] | iterns | external sub-iteration number |
| [in] | f_id | field id (or -1) |
| [in] | name | associated name if f_id < 0, or nullptr |
| [in] | iescap | compute the predictor indicator if 1 |
| [in] | imucpp | indicator
|
| [in] | normp | Reference norm to solve the system (optional) if negative: recomputed here |
| [in] | eqp | pointer to a cs_equation_param_t structure which contains variable calculation options |
| [in] | pvara | variable at the previous time step |
| [in] | pvark | variable at the previous sub-iteration |
| [in] | bc_coeffs | boundary condition structure for the variable |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at boundary faces |
| [in] | i_viscm | |
| [in] | b_viscm | |
| [in] | i_visc | |
| [in] | b_visc | |
| [in] | viscel | symmetric cell tensor |
| [in] | weighf | internal face weight between cells i j in case of tensor diffusion |
| [in] | weighb | boundary face weight for cells i in case of tensor diffusion |
| [in] | icvflb | global indicator of boundary convection flux
|
| [in] | icvfli | boundary face indicator array of convection flux
|
| [in] | rovsdt | |
| [in] | smbrp | Right hand side |
| [in,out] | pvar | current variable |
| [out] | dpvar | last variable increment |
| [in] | xcpp | array of specific heat (Cp) |
| [out] | eswork | prediction-stage error estimator (if iescap > 0) |
| void cs_equation_iterative_solve_tensor | ( | int | idtvar, |
| int | f_id, | ||
| const char * | name, | ||
| cs_equation_param_t * | eqp, | ||
| const cs_real_t | pvara[][6], | ||
| const cs_real_t | pvark[][6], | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_ts, | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_viscm[], | ||
| const cs_real_t | b_viscm[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| cs_real_t | viscel[][6], | ||
| const cs_real_2_t | weighf[], | ||
| const cs_real_t | weighb[], | ||
| int | icvflb, | ||
| const int | icvfli[], | ||
| cs_real_t | fimp[][6][6], | ||
| cs_real_t | smbrp[][6], | ||
| cs_real_t | pvar[][6] ) |
This function solves an advection diffusion equation with source terms for one time step for the symmetric tensor variable 
The equation reads:
![\[\tens{f_s}^{imp}(\tens{\variat}^{n+1}-\tens{\variat}^n)
+ \divt \left( \tens{\variat}^{n+1} \otimes \rho \vect {u}
- \mu \gradtt \tens{\variat}^{n+1}\right)
= \tens{Rhs}
\]](form_137.png)
This equation is rewritten as:
![\[\tens{f_s}^{imp} \delta \tens{\variat}
+ \divt \left( \delta \tens{\variat} \otimes \rho \vect{u}
- \mu \gradtt \delta \tens{\variat} \right)
= \tens{Rhs}^1
\]](form_138.png)
where 

It is in fact solved with the following iterative process:
![\[\tens{f_s}^{imp} \delta \tens{\variat}^k
+ \divt \left( \delta \tens{\variat}^k \otimes \rho \vect{u}
- \mu \gradtt \delta \tens{\variat}^k \right)
= \tens{Rhs}^k
\]](form_141.png)
where 
Be careful, it is forbidden to modify 
| [in] | idtvar | indicator of the temporal scheme |
| [in] | f_id | field id (or -1) |
| [in] | name | associated name if f_id < 0, or nullptr |
| [in] | eqp | pointer to a cs_equation_param_t structure which contains variable calculation options |
| [in] | pvara | variable at the previous time step |
| [in] | pvark | variable at the previous sub-iteration |
| [in] | bc_coeffs_ts | boundary condition structure for the variable |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at boundary faces |
| [in] | i_viscm | |
| [in] | b_viscm | |
| [in] | i_visc | |
| [in] | b_visc | |
| [in] | viscel | symmetric cell tensor |
| [in] | weighf | internal face weight between cells i j in case of tensor diffusion |
| [in] | weighb | boundary face weight for cells i in case of tensor diffusion |
| [in] | icvflb | global indicator of boundary convection flux
|
| [in] | icvfli | boundary face indicator array of convection flux
|
| [in,out] | fimp | |
| [in,out] | smbrp | Right hand side |
| [in,out] | pvar | current variable |
| void cs_equation_iterative_solve_vector | ( | int | idtvar, |
| int | iterns, | ||
| int | f_id, | ||
| const char * | name, | ||
| int | ivisep, | ||
| int | iescap, | ||
| cs_equation_param_t * | eqp, | ||
| const cs_real_t | pvara[][3], | ||
| const cs_real_t | pvark[][3], | ||
| const cs_field_bc_coeffs_t * | bc_coeffs_v, | ||
| const cs_real_t | i_massflux[], | ||
| const cs_real_t | b_massflux[], | ||
| const cs_real_t | i_viscm[], | ||
| const cs_real_t | b_viscm[], | ||
| const cs_real_t | i_visc[], | ||
| const cs_real_t | b_visc[], | ||
| const cs_real_t | i_secvis[], | ||
| const cs_real_t | b_secvis[], | ||
| cs_real_t | viscel[][6], | ||
| const cs_real_2_t | weighf[], | ||
| const cs_real_t | weighb[], | ||
| int | icvflb, | ||
| const int | icvfli[], | ||
| cs_real_t | fimp[][3][3], | ||
| cs_real_t | smbrp[][3], | ||
| cs_real_t | pvar[][3], | ||
| cs_real_t | eswork[][3] ) |
This function solves an advection diffusion equation with source terms for one time step for the vector variable 
The equation reads:
![\[\tens{f_s}^{imp}(\vect{a}^{n+1}-\vect{a}^n)
+ \divv \left( \vect{a}^{n+1} \otimes \rho \vect {u}
- \mu \gradt \vect{a}^{n+1}\right)
= \vect{Rhs}
\]](form_127.png)
This equation is rewritten as:
![\[\tens{f_s}^{imp} \delta \vect{a}
+ \divv \left( \delta \vect{a} \otimes \rho \vect{u}
- \mu \gradt \delta \vect{a} \right)
= \vect{Rhs}^1
\]](form_128.png)
where 

It is in fact solved with the following iterative process:
![\[\tens{f_s}^{imp} \delta \vect{a}^k
+ \divv \left( \delta \vect{a}^k \otimes \rho \vect{u}
- \mu \gradt \delta \vect{a}^k \right)
= \vect{Rhs}^k
\]](form_131.png)
where 
Be careful, it is forbidden to modify 
| [in] | idtvar | indicator of the temporal scheme |
| [in] | iterns | external sub-iteration number |
| [in] | f_id | field id (or -1) |
| [in] | name | associated name if f_id < 0, or nullptr |
| [in] | ivisep | indicator to take
|
| [in] | iescap | compute the predictor indicator if >= 1 |
| [in] | eqp | pointer to a cs_equation_param_t structure which contains variable calculation options |
| [in] | pvara | variable at the previous time step |
| [in] | pvark | variable at the previous sub-iteration pvara (usually pvar= pvara) |
| [in] | bc_coeffs_v | boundary condition structure for the variable |
| [in] | i_massflux | mass flux at interior faces |
| [in] | b_massflux | mass flux at boundary faces |
| [in] | i_viscm | |
| [in] | b_viscm | |
| [in] | i_visc | |
| [in] | b_visc | |
| [in] | i_secvis | secondary viscosity at interior faces |
| [in] | b_secvis | secondary viscosity at boundary faces |
| [in] | viscel | symmetric cell tensor |
| [in] | weighf | internal face weight between cells i j in case of tensor diffusion |
| [in] | weighb | boundary face weight for cells i in case of tensor diffusion |
| [in] | icvflb | global indicator of boundary convection flux
|
| [in] | icvfli | boundary face indicator array of convection flux
|
| [in,out] | fimp | |
| [in,out] | smbrp | Right hand side |
| [in,out] | pvar | current variable |
| [out] | eswork | prediction-stage error estimator (if iescap >= 0) |