52 #pragma omp parallel for private(jdx, lamf)
53 for (idx=0; idx<neles; idx++) {
55 diag[idx] = 1.0/(dt[idx]*factor);
57 for (jdx=0; jdx<nface; jdx++) {
59 lamf = fspr[neles*jdx + idx]*1.01;
62 fspr[neles*jdx + idx] = lamf;
65 diag[idx] += 0.5*lamf*fnorm_vol[neles*jdx + idx];
83 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
84 UCFD_FLOAT du[NFVARS], dfj[NFVARS], df[NFVARS], nf[NDIMS];
88 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, du, dfj, df, nf, u, f)
89 for (_idx=n0; _idx<ne; _idx++) {
91 curr_level = lcolor[idx];
94 for (kdx=0; kdx<NFVARS; kdx++) {
99 for (jdx=0; jdx<nface; jdx++) {
101 for (kdx=0; kdx<NDIMS; kdx++) {
102 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
106 neib = nei_ele[neles*jdx + idx];
109 if (lcolor[neib] < curr_level) {
110 for (kdx=0; kdx<NFVARS; kdx++) {
111 u[kdx] = uptsb[neles*kdx + neib];
112 du[kdx] = u[kdx] + dub[neles*kdx + neib];
118 for (kdx=0; kdx<NFVARS; kdx++) {
122 for (kdx=0; kdx<NFVARS; kdx++) {
123 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
124 * dub[neles*kdx + neib])*fnorm_vol[neles*jdx + idx];
129 for (kdx=0; kdx<NFVARS; kdx++)
130 dub[neles*kdx + idx] = (rhsb[neles*kdx + idx] - 0.5*df[kdx])/diag[idx];
143 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
144 UCFD_FLOAT du[NVARS], dfj[NTURBVARS], df[NTURBVARS], nf[NDIMS];
147 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, du, dfj, df, nf, u, f)
149 for (_idx=n0; _idx<ne; _idx++) {
151 curr_level = lcolor[idx];
154 for (kdx=0; kdx<NTURBVARS; kdx++) {
159 for (jdx=0; jdx<nface; jdx++) {
161 for (kdx=0; kdx<NDIMS; kdx++) {
162 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
166 neib = nei_ele[neles*jdx + idx];
169 if (lcolor[neib] < curr_level) {
170 for (kdx=0; kdx<NVARS; kdx++) {
171 u[kdx] = uptsb[neles*kdx + neib];
175 for (kdx=NFVARS; kdx<NVARS; kdx++) {
176 du[kdx] += dub[neles*kdx + neib];
182 for (kdx=0; kdx<NTURBVARS; kdx++) {
186 for (kdx=0; kdx<NTURBVARS; kdx++) {
187 df[kdx] += (dfj[kdx] - fspr[neles*jdx + idx] \
188 * dub[neles*(kdx+NFVARS) + neib]) * fnorm_vol[neles*jdx + idx];
193 for (kdx=0; kdx<NTURBVARS; kdx++) {
194 dub[neles*(kdx+NFVARS) + idx] = (rhsb[neles*(kdx+NFVARS)+idx] - \
195 0.5*df[kdx])/(diag[idx]+dsrc[neles*(kdx+NFVARS)+idx]);
212 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
213 UCFD_FLOAT du[NFVARS], dfj[NFVARS], df[NFVARS], nf[NDIMS];
217 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, du, dfj, df, nf, u, f)
218 for (_idx=n0; _idx<ne; _idx++) {
220 curr_level = lcolor[idx];
223 for (kdx=0; kdx<NFVARS; kdx++) {
228 for (jdx=0; jdx<nface; jdx++) {
230 for (kdx=0; kdx<NDIMS; kdx++) {
231 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
235 neib = nei_ele[neles*jdx + idx];
238 if (lcolor[neib] > curr_level) {
239 for (kdx=0; kdx<NFVARS; kdx++) {
240 u[kdx] = uptsb[neles*kdx + neib];
241 du[kdx] = u[kdx] + rhsb[neles*kdx + neib];
247 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];
257 for (kdx=0; kdx<NFVARS; kdx++) {
258 rhsb[neles*kdx + idx] = dub[neles*kdx + idx] - 0.5*df[kdx]/diag[idx];
274 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
275 UCFD_FLOAT du[NVARS], dfj[NTURBVARS], df[NTURBVARS], nf[NDIMS];
278 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, du, dfj, df, nf, u, f)
280 for (_idx=n0; _idx<ne; _idx++) {
282 curr_level = lcolor[idx];
285 for (kdx=0; kdx<NTURBVARS; kdx++) {
290 for (jdx=0; jdx<nface; jdx++) {
292 for (kdx=0; kdx<NDIMS; kdx++) {
293 nf[kdx] = vec_fnorm[NDIMS*neles*jdx + neles*kdx + idx];
297 neib = nei_ele[neles*jdx + idx];
300 if (lcolor[neib] > curr_level) {
301 for (kdx=0; kdx<NVARS; kdx++) {
302 u[kdx] = uptsb[neles*kdx + neib];
306 for (kdx=NFVARS; kdx<NVARS; kdx++) {
307 du[kdx] += rhsb[neles*kdx + neib];
313 for (kdx=0; kdx<NTURBVARS; kdx++) {
317 for (kdx=0; kdx<NTURBVARS; kdx++) {
318 df[kdx] += (dfj[kdx] - fspr[neles*jdx+idx] \
319 * rhsb[neles*(kdx+NFVARS)+neib])*fnorm_vol[neles*jdx+idx];
324 for (kdx=0; kdx<NTURBVARS; kdx++) {
325 rhsb[neles*(kdx+NFVARS)+idx] = dub[neles*(kdx+NFVARS)+idx] - \
326 0.5*df[kdx]/(diag[idx] + dsrc[neles*(kdx+NFVARS)+idx]);
342 #pragma omp parallel for private(kdx)
344 for (idx=0; idx<neles; idx++) {
346 for (kdx=0; kdx<NFVARS; kdx++) {
348 uptsb[neles*kdx + idx] += rhsb[neles*kdx + 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(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 Colored LU-SGS method.
void ns_parallel_upper_sweep(UCFD_INT n0, UCFD_INT ne, UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_INT *icolor, UCFD_INT *lcolor, 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 Colored LU-SGS method for Navier-Stokes equations.
void lusgs_parallel_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb)
Updates solution array.
void lusgs_parallel_ns_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *rhsb)
Updates solution array.
void ns_parallel_lower_sweep(UCFD_INT n0, UCFD_INT ne, UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_INT *icolor, UCFD_INT *lcolor, 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 Colored LU-SGS method for Navier-Stokes equations.
void rans_parallel_lower_sweep(UCFD_INT n0, UCFD_INT ne, UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_INT *icolor, UCFD_INT *lcolor, 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 Colored LU-SGS method for RANS equations.
void rans_parallel_upper_sweep(UCFD_INT n0, UCFD_INT ne, UCFD_INT neles, UCFD_INT nface, UCFD_INT *nei_ele, UCFD_INT *icolor, UCFD_INT *lcolor, 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 Colored LU-SGS method for RANS equations.
Header file for Colored LU-SGS method.
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.