48 double *fnorm_vol,
double *dt,
double *diag,
double *fspr)
55 #pragma omp parallel for private(jdx, lamf)
56 for (idx=0; idx<neles; idx++) {
58 diag[idx] = 1.0/(dt[idx]*factor);
60 for (jdx=0; jdx<nface; jdx++) {
62 lamf = fspr[neles*jdx + idx]*1.01;
65 fspr[neles*jdx + idx] = lamf;
68 diag[idx] += 0.5*lamf*fnorm_vol[neles*jdx + idx];
83 int *nei_ele,
int *icolor,
int *lcolor,
double *fnorm_vol,
double *vec_fnorm, \
84 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr)
86 int _idx, idx, jdx, kdx, neib, curr_level;
87 double du[nfvars], dfj[nfvars], df[nfvars], nf[
ndims];
88 double u[nfvars], f[nfvars];
91 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, \
92 du, dfj, df, nf, u, f)
93 for (_idx=n0; _idx<ne; _idx++) {
95 curr_level = lcolor[idx];
98 for (kdx=0; kdx<nfvars; kdx++) {
103 for (jdx=0; jdx<nface; jdx++) {
106 for (kdx=0; kdx<
ndims; kdx++) {
107 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
111 neib = nei_ele[neles*jdx + idx];
114 if (lcolor[neib] < curr_level) {
116 for (kdx=0; kdx<nfvars; kdx++) {
117 u[kdx] = uptsb[neles*kdx + neib];
118 du[kdx] = u[kdx] + dub[neles*kdx + neib];
124 for (kdx=0; kdx<nfvars; kdx++) {
128 for (kdx=0; kdx<nfvars; kdx++) {
129 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
130 * dub[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
136 for (kdx=0; kdx<nfvars; kdx++)
137 dub[neles*kdx + idx] = (rhsb[neles*kdx + idx] - 0.5*df[kdx])/diag[idx];
147 int *nei_ele,
int *icolor,
int *lcolor,
double *fnorm_vol,
double *vec_fnorm, \
148 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr,
double *dsrc)
150 int _idx, idx, jdx, kdx, neib, curr_level;
151 int dnv =
nvars - nfvars;
152 double du[
nvars], dfj[dnv], df[dnv], nf[
ndims];
153 double u[
nvars], f[dnv];
155 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, \
156 du, dfj, df, nf, u, f)
158 for (_idx=n0; _idx<ne; _idx++) {
160 curr_level = lcolor[idx];
163 for (kdx=0; kdx<dnv; kdx++) {
168 for (jdx=0; jdx<nface; jdx++) {
171 for (kdx=0; kdx<
ndims; kdx++) {
172 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
176 neib = nei_ele[neles*jdx + idx];
179 if (lcolor[neib] < curr_level) {
181 for (kdx=0; kdx<
nvars; kdx++) {
182 u[kdx] = uptsb[neles*kdx + neib];
186 for (kdx=nfvars; kdx<
nvars; kdx++) {
187 du[kdx] += dub[neles*kdx + neib];
193 for (kdx=0; kdx<dnv; kdx++) {
197 for (kdx=0; kdx<dnv; kdx++) {
198 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
199 * dub[neles*(kdx+nfvars) + neib]) * fnorm_vol[neles*jdx + idx];
205 for (kdx=0; kdx<dnv; kdx++) {
206 dub[neles*(kdx+nfvars) + idx] = (rhsb[neles*(kdx+nfvars)+idx] - \
207 0.5*df[kdx])/(diag[idx]+dsrc[neles*(kdx+nfvars)+idx]);
221 int *nei_ele,
int *icolor,
int *lcolor,
double *fnorm_vol,
double *vec_fnorm, \
222 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr)
224 int _idx, idx, jdx, kdx, neib, curr_level;
225 double du[nfvars], dfj[nfvars], df[nfvars], nf[
ndims];
226 double u[nfvars], f[nfvars];
229 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, \
230 du, dfj, df, nf, u, f)
231 for (_idx=n0; _idx<ne; _idx++) {
233 curr_level = lcolor[idx];
236 for (kdx=0; kdx<nfvars; kdx++) {
241 for (jdx=0; jdx<nface; jdx++) {
244 for (kdx=0; kdx<
ndims; kdx++) {
245 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
249 neib = nei_ele[neles*jdx + idx];
252 if (lcolor[neib] > curr_level) {
254 for (kdx=0; kdx<nfvars; kdx++) {
255 u[kdx] = uptsb[neles*kdx + neib];
256 du[kdx] = u[kdx] + rhsb[neles*kdx + neib];
262 for (kdx=0; kdx<nfvars; kdx++) {
266 for (kdx=0; kdx<nfvars; kdx++) {
267 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
268 * rhsb[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
274 for (kdx=0; kdx<nfvars; kdx++) {
275 rhsb[neles*kdx + idx] = dub[neles*kdx + idx] - 0.5*df[kdx]/diag[idx];
288 int *nei_ele,
int *icolor,
int *lcolor,
double *fnorm_vol,
double *vec_fnorm, \
289 double *uptsb,
double *rhsb,
double *dub,
double *diag,
double *fspr,
double *dsrc)
291 int _idx, idx, jdx, kdx, neib, curr_level;
292 int dnv =
nvars - nfvars;
293 double du[
nvars], dfj[dnv], df[dnv], nf[
ndims];
294 double u[
nvars], f[dnv];
296 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, \
297 du, dfj, df, nf, u, f)
299 for (_idx=n0; _idx<ne; _idx++) {
301 curr_level = lcolor[idx];
304 for (kdx=0; kdx<dnv; kdx++) {
309 for (jdx=0; jdx<nface; jdx++) {
312 for (kdx=0; kdx<
ndims; kdx++) {
313 nf[kdx] = vec_fnorm[
ndims*neles*jdx + neles*kdx + idx];
317 neib = nei_ele[neles*jdx + idx];
320 if (lcolor[neib] > curr_level) {
322 for (kdx=0; kdx<
nvars; kdx++) {
323 u[kdx] = uptsb[neles*kdx + neib];
327 for (kdx=nfvars; kdx<
nvars; kdx++) {
328 du[kdx] += rhsb[neles*kdx + neib];
334 for (kdx=0; kdx<dnv; kdx++) {
338 for (kdx=0; kdx<dnv; kdx++) {
339 df[kdx] += (dfj[kdx] - fspr[neles*jdx+idx] \
340 * rhsb[neles*(kdx+nfvars)+neib])*fnorm_vol[neles*jdx+idx];
346 for (kdx=0; kdx<dnv; kdx++) {
347 rhsb[neles*(kdx+nfvars)+idx] = dub[neles*(kdx+nfvars)+idx] - \
348 0.5*df[kdx]/(diag[idx] + dsrc[neles*(kdx+nfvars)+idx]);
364 #pragma omp parallel for private(kdx)
366 for (idx=0; idx<neles; idx++) {
368 for (kdx=0; kdx<
nvars; kdx++) {
370 uptsb[neles*kdx + idx] += rhsb[neles*kdx + idx];
void parallel_pre_lusgs(int neles, int nface, double factor, double *fnorm_vol, double *dt, double *diag, double *fspr)
Computes Diagonal matrix for Colored LU-SGS method.
void parallel_update(int neles, int nvars, double *uptsb, double *rhsb)
Updates solution array.
void rans_parallel_upper_sweep(int n0, int ne, int neles, int nvars, int nfvars, int nface, int ndims, int *nei_ele, int *icolor, int *lcolor, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr, double *dsrc)
Upper sweep of Colored LU-SGS method for RANS equations.
void ns_parallel_upper_sweep(int n0, int ne, int neles, int nfvars, int nface, int ndims, int *nei_ele, int *icolor, int *lcolor, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr)
Upper sweep of Colored LU-SGS method for Navier-Stokes equations.
void ns_parallel_lower_sweep(int n0, int ne, int neles, int nfvars, int nface, int ndims, int *nei_ele, int *icolor, int *lcolor, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr)
Lower sweep of Colored LU-SGS method for Navier-Stokes equations.
void rans_parallel_lower_sweep(int n0, int ne, int neles, int nvars, int nfvars, int nface, int ndims, int *nei_ele, int *icolor, int *lcolor, double *fnorm_vol, double *vec_fnorm, double *uptsb, double *rhsb, double *dub, double *diag, double *fspr, double *dsrc)
Lower sweep of Colored LU-SGS method for RANS equations.
Header file for Colored LU-SGS method.
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.