50 for (idx=0; idx<neles; idx++) {
52 diag[idx] = 1.0/(dt[idx]*factor);
54 for (jdx=0; jdx<nface; jdx++) {
56 lamf = fspr[neles*jdx + idx]*1.01;
59 fspr[neles*jdx + idx] = lamf;
62 diag[idx] += 0.5*lamf*fnorm_vol[neles*jdx + idx];
78 UCFD_FLOAT du[NFVARS], dfj[NFVARS], df[NFVARS], nf[NDIMS];
82 for (idx=0; idx<neles; idx++) {
84 for (kdx=0; kdx<NFVARS; kdx++) {
89 for (jdx=0; jdx<nface; jdx++) {
91 for (kdx=0; kdx<NDIMS; kdx++) {
92 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
96 neib = nei_ele[neles*jdx + idx];
100 for (kdx=0; kdx<NFVARS; kdx++) {
101 u[kdx] = uptsb[neles*kdx + neib];
102 du[kdx] = u[kdx] + dub[neles*kdx + neib];
108 for (kdx=0; kdx<NFVARS; kdx++) {
112 for (kdx=0; kdx<NFVARS; kdx++) {
113 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
114 * dub[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
119 for (kdx=0; kdx<NFVARS; kdx++)
120 dub[neles*kdx + idx] = (rhsb[neles*kdx + idx] - 0.5*df[kdx])/diag[idx];
133 UCFD_FLOAT du[NVARS], dfj[NTURBVARS], df[NTURBVARS], nf[NDIMS];
137 for (idx=0; idx<neles; idx++) {
139 for (kdx=0; kdx<NTURBVARS; kdx++) {
144 for (jdx=0; jdx<nface; jdx++) {
146 for (kdx=0; kdx<NDIMS; kdx++) {
147 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
151 neib = nei_ele[neles*jdx + idx];
155 for (kdx=0; kdx<NVARS; kdx++) {
156 u[kdx] = uptsb[neles*kdx + neib];
160 for (kdx=NFVARS; kdx<NVARS; kdx++) {
161 du[kdx] += dub[neles*kdx + neib];
167 for (kdx=0; kdx<NTURBVARS; kdx++) {
171 for (kdx=0; kdx<NTURBVARS; kdx++) {
172 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
173 * dub[neles*(kdx+NFVARS) + neib]) * fnorm_vol[neles*jdx + idx];
178 for (kdx=0; kdx<NTURBVARS; kdx++) {
179 dub[neles*(kdx+NFVARS) + idx] = (rhsb[neles*(kdx+NFVARS)+idx] - \
180 0.5*df[kdx])/(diag[idx]+dsrc[neles*(kdx+NFVARS)+idx]);
197 UCFD_FLOAT du[NFVARS], dfj[NFVARS], df[NFVARS], nf[NDIMS];
201 for (idx=neles-1; idx>-1; idx--) {
203 for (kdx=0; kdx<NFVARS; kdx++) {
208 for (jdx=0; jdx<nface; jdx++) {
210 for (kdx=0; kdx<NDIMS; kdx++) {
211 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
215 neib = nei_ele[neles*jdx + idx];
219 for (kdx=0; kdx<NFVARS; kdx++) {
220 u[kdx] = uptsb[neles*kdx + neib];
221 du[kdx] = u[kdx] + rhsb[neles*kdx + neib];
227 for (kdx=0; kdx<NFVARS; kdx++) {
231 for (kdx=0; kdx<NFVARS; kdx++) {
232 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
233 * rhsb[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
238 for (kdx=0; kdx<NFVARS; kdx++) {
239 rhsb[neles*kdx + idx] = dub[neles*kdx + idx] - 0.5*df[kdx]/diag[idx];
255 UCFD_FLOAT du[NVARS], dfj[NTURBVARS], df[NTURBVARS], nf[NDIMS];
259 for (idx=neles-1; idx>-1; idx--) {
261 for (kdx=0; kdx<NTURBVARS; kdx++) {
266 for (jdx=0; jdx<nface; jdx++) {
268 for (kdx=0; kdx<NDIMS; kdx++) {
269 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
273 neib = nei_ele[neles*jdx + idx];
277 for (kdx=0; kdx<NVARS; kdx++) {
278 u[kdx] = uptsb[neles*kdx + neib];
282 for (kdx=NFVARS; kdx<NVARS; kdx++) {
283 du[kdx] += rhsb[neles*kdx + neib];
289 for (kdx=0; kdx<NTURBVARS; kdx++) {
293 for (kdx=0; kdx<NTURBVARS; kdx++) {
294 df[kdx] += (dfj[kdx] - fspr[neles*jdx+idx] \
295 * rhsb[neles*(kdx+NFVARS)+neib])*fnorm_vol[neles*jdx+idx];
300 for (kdx=0; kdx<NTURBVARS; kdx++) {
301 rhsb[neles*(kdx+NFVARS)+idx] = dub[neles*(kdx+NFVARS)+idx] - \
302 0.5*df[kdx]/(diag[idx] + dsrc[neles*(kdx+NFVARS)+idx]);
318 for (idx=0; idx<neles; idx++) {
320 for (kdx=0; kdx<NFVARS; kdx++) {
322 uptsb[neles*kdx + idx] += rhsb[neles*kdx + idx];
338 for (idx=0; idx<neles; idx++) {
340 for (kdx=0; kdx<NVARS; kdx++) {
342 uptsb[neles*kdx + idx] += rhsb[neles*kdx + idx];
void ns_flux_container(UCFD_FLOAT *u, UCFD_FLOAT *nf, UCFD_FLOAT *f)
Computes flux for Navier-Stokes equations.
void rans_flux_container(UCFD_FLOAT *u, UCFD_FLOAT *nf, UCFD_FLOAT *f)
Computes flux for RANS equations.
Header file for numerical flux funtions.
void lusgs_serial_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb)
Updates solution array.
void serial_pre_lusgs(UCFD_INT neles, UCFD_INT nface, UCFD_FLOAT factor, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *dt, UCFD_FLOAT *diag, UCFD_FLOAT *fspr)
Computes Diagonal matrix for LU-SGS method.
void ns_serial_upper_sweep(UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *vec_fnorm, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *diag, UCFD_FLOAT *fspr)
Upper sweep of LU-SGS method for Navier-Stokes equations.
void lusgs_serial_ns_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb)
Updates solution array.
void rans_serial_lower_sweep(UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *vec_fnorm, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *diag, UCFD_FLOAT *fspr, UCFD_FLOAT *dsrc)
Lower sweep of LU-SGS method for RANS equations.
void ns_serial_lower_sweep(UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *vec_fnorm, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *diag, UCFD_FLOAT *fspr)
Lower sweep of LU-SGS method for Navier-Stokes equations.
void rans_serial_upper_sweep(UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *vec_fnorm, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *diag, UCFD_FLOAT *fspr, UCFD_FLOAT *dsrc)
Upper sweep of LU-SGS method for RANS equations.
Header file for serial LU-SGS method.