45 double *fnorm_vol,
double *dt,
double *diag,
double *fspr)
51 for (idx=0; idx<neles; idx++) {
53 diag[idx] = 1.0/(dt[idx]*factor);
55 for (jdx=0; jdx<nface; jdx++) {
57 lamf = fspr[neles*jdx + idx]*1.01;
60 fspr[neles*jdx + idx] = lamf;
63 diag[idx] += 0.5*lamf*fnorm_vol[neles*jdx + idx];
76 int *nei_ele,
int *mapping,
int *unmapping,
double *fnorm_vol,
double *vec_fnorm, \
77 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr)
79 int _idx, idx, jdx, kdx, neib;
80 double du[nfvars], dfj[nfvars], df[nfvars], nf[
ndims];
81 double u[nfvars], f[nfvars];
84 for (_idx=0; _idx<neles; _idx++) {
88 for (kdx=0; kdx<nfvars; kdx++) {
93 for (jdx=0; jdx<nface; jdx++) {
96 for (kdx=0; kdx<
ndims; kdx++) {
97 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
101 neib = nei_ele[neles*jdx + idx];
104 if (unmapping[neib] < _idx) {
106 for (kdx=0; kdx<nfvars; kdx++) {
107 u[kdx] = uptsb[neles*kdx + neib];
108 du[kdx] = u[kdx] + dub[neles*kdx + neib];
114 for (kdx=0; kdx<nfvars; kdx++) {
118 for (kdx=0; kdx<nfvars; kdx++) {
119 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
120 * dub[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
126 for (kdx=0; kdx<nfvars; kdx++)
127 dub[neles*kdx + idx] = (rhsb[neles*kdx + idx] - 0.5*df[kdx])/diag[idx];
137 int *nei_ele,
int *mapping,
int *unmapping,
double *fnorm_vol,
double *vec_fnorm, \
138 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr,
double *dsrc)
140 int _idx, idx, jdx, kdx, neib;
141 int dnv =
nvars - nfvars;
142 double du[
nvars], dfj[dnv], df[dnv], nf[
ndims];
143 double u[
nvars], f[dnv];
146 for (_idx=0; _idx<neles; _idx++) {
150 for (kdx=0; kdx<dnv; kdx++) {
155 for (jdx=0; jdx<nface; jdx++) {
158 for (kdx=0; kdx<
ndims; kdx++) {
159 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
163 neib = nei_ele[neles*jdx + idx];
166 if (unmapping[neib] < _idx) {
168 for (kdx=0; kdx<
nvars; kdx++) {
169 u[kdx] = uptsb[neles*kdx + neib];
173 for (kdx=nfvars; kdx<
nvars; kdx++) {
174 du[kdx] += dub[neles*kdx + neib];
180 for (kdx=0; kdx<dnv; kdx++) {
184 for (kdx=0; kdx<dnv; kdx++) {
185 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
186 * dub[neles*(kdx+nfvars) + neib]) * fnorm_vol[neles*jdx + idx];
192 for (kdx=0; kdx<dnv; kdx++) {
193 dub[neles*(kdx+nfvars) + idx] = (rhsb[neles*(kdx+nfvars)+idx] - \
194 0.5*df[kdx])/(diag[idx]+dsrc[neles*(kdx+nfvars)+idx]);
208 int *nei_ele,
int *mapping,
int *unmapping,
double *fnorm_vol,
double *vec_fnorm, \
209 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr)
211 int _idx, idx, jdx, kdx, neib;
212 double du[nfvars], dfj[nfvars], df[nfvars], nf[
ndims];
213 double u[nfvars], f[nfvars];
216 for (_idx=neles-1; _idx>-1; _idx--) {
220 for (kdx=0; kdx<nfvars; kdx++) {
225 for (jdx=0; jdx<nface; jdx++) {
228 for (kdx=0; kdx<
ndims; kdx++) {
229 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
233 neib = nei_ele[neles*jdx + idx];
236 if (unmapping[neib] > _idx) {
238 for (kdx=0; kdx<nfvars; kdx++) {
239 u[kdx] = uptsb[neles*kdx + neib];
240 du[kdx] = u[kdx] + rhsb[neles*kdx + neib];
246 for (kdx=0; kdx<nfvars; kdx++) {
250 for (kdx=0; kdx<nfvars; kdx++) {
251 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
252 * rhsb[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
258 for (kdx=0; kdx<nfvars; kdx++) {
259 rhsb[neles*kdx + idx] = dub[neles*kdx + idx] - 0.5*df[kdx]/diag[idx];
272 int *nei_ele,
int *mapping,
int *unmapping,
double *fnorm_vol,
double *vec_fnorm, \
273 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr,
double *dsrc)
275 int _idx, idx, jdx, kdx, neib;
276 int dnv =
nvars - nfvars;
277 double du[
nvars], dfj[dnv], df[dnv], nf[
ndims];
278 double u[
nvars], f[dnv];
281 for (_idx=neles-1; _idx>-1; _idx--) {
285 for (kdx=0; kdx<dnv; kdx++) {
290 for (jdx=0; jdx<nface; jdx++) {
293 for (kdx=0; kdx<
ndims; kdx++) {
294 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
298 neib = nei_ele[neles*jdx + idx];
301 if (unmapping[neib] > _idx) {
303 for (kdx=0; kdx<
nvars; kdx++) {
304 u[kdx] = uptsb[neles*kdx + neib];
308 for (kdx=nfvars; kdx<
nvars; kdx++) {
309 du[kdx] += rhsb[neles*kdx + neib];
315 for (kdx=0; kdx<dnv; kdx++) {
319 for (kdx=0; kdx<dnv; kdx++) {
320 df[kdx] += (dfj[kdx] - fspr[neles*jdx+idx] \
321 * rhsb[neles*(kdx+nfvars)+neib])*fnorm_vol[neles*jdx+idx];
327 for (kdx=0; kdx<dnv; kdx++) {
328 rhsb[neles*(kdx+nfvars)+idx] = dub[neles*(kdx+nfvars)+idx] - \
329 0.5*df[kdx]/(diag[idx] + dsrc[neles*(kdx+nfvars)+idx]);
344 for (
int idx=0; idx<neles; idx++) {
346 for (
int kdx=0; kdx<
nvars; kdx++) {
348 uptsb[neles*kdx + idx] += rhsb[neles*kdx + idx];
void ns_flux_container(int nfvars, int ndims, double *u, double *nf, double *f)
Computes flux for Navier-Stokes equations.
void rans_flux_container(int nfvars, int ndims, int nturbvars, double *u, double *nf, double *f)
Computes flux for RANS equations.
Header file for numerical flux funtions.
void ns_serial_upper_sweep(int neles, int nfvars, int nface, int ndims, int *nei_ele, int *mapping, int *unmapping, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr)
Upper sweep of LU-SGS method for Navier-Stokes equations.
void rans_serial_upper_sweep(int neles, int nvars, int nfvars, int nface, int ndims, int *nei_ele, int *mapping, int *unmapping, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr, double *dsrc)
Upper sweep of LU-SGS method for RANS equations.
void rans_serial_lower_sweep(int neles, int nvars, int nfvars, int nface, int ndims, int *nei_ele, int *mapping, int *unmapping, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr, double *dsrc)
Lower sweep of LU-SGS method for RANS equations.
void ns_serial_lower_sweep(int neles, int nfvars, int nface, int ndims, int *nei_ele, int *mapping, int *unmapping, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr)
Lower sweep of LU-SGS method for Navier-Stokes equations.
void serial_pre_lusgs(int neles, int nface, double factor, double *fnorm_vol, double *dt, double *diag, double *fspr)
Computes Diagonal matrix for LU-SGS method.
void serial_update(int neles, int nvars, double *uptsb, double *rhsb)
Updates solution array.
Header file for serial LU-SGS method.