31#define nsmatdim NFVARS*NFVARS
32#define ransmatdim NTURBVARS*NTURBVARS
47 #pragma omp parallel for private(jdx, kdx, row, col, fv, dmat, dti)
48 for (idx=0; idx<neles; idx++) {
50 for (row=0; row<NFVARS; row++) {
51 for (col=0; col<NFVARS; col++)
56 for (jdx=0; jdx<nface; jdx++) {
57 fv = fnorm_vol[neles*jdx + idx];
58 for (row=0; row<NFVARS; row++) {
59 for (col=0; col<NFVARS; col++) {
61 += fjmat[idx+neles*jdx+nface*neles*col+NFVARS*nface*neles*row]*fv;
67 dti = 1.0/(dt[idx]*factor);
68 for (kdx=0; kdx<NFVARS; kdx++) {
69 dmat[kdx][kdx] += dti;
76 for (row=0; row<NFVARS; row++) {
77 for (col=0; col<NFVARS; col++) {
78 diag[idx+neles*col+neles*NFVARS*row] = dmat[row][col];
100 #pragma omp parallel for private(jdx, kdx, row, col, fv, tmat, uf, dsrcf)
101 for (idx=0; idx<neles; idx++) {
103 for (row=0; row<NTURBVARS; row++) {
104 for (col=0; col<NTURBVARS; col++)
105 tmat[row][col] = 0.0;
108 for (kdx=0; kdx<NVARS; kdx++) {
109 uf[kdx] = uptsb[idx+neles*kdx];
110 dsrcf[kdx] = dsrc[idx+neles*kdx];
114 for (jdx=0; jdx<nface; jdx++) {
115 fv = fnorm_vol[neles*jdx + idx];
116 for (row=0; row<NTURBVARS; row++) {
117 for (col=0; col<NTURBVARS; col++) {
119 += tjmat[idx+neles*jdx+nface*neles*col+NTURBVARS*nface*neles*row]*fv;
126 printf(
"Error::Invalid `NTURBVARS` value\n");
129 for (kdx=0; kdx<NTURBVARS; kdx++) {
130 tmat[kdx][kdx] += 1.0/(dt[idx]*factor);
137 for (row=0; row<NTURBVARS; row++) {
138 for (col=0; col<NTURBVARS; col++) {
139 tdiag[idx+neles*col+neles*NTURBVARS*row] = tmat[row][col];
159 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
165 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, row, col, rhs, dmat, val, fv)
166 for (_idx=n0; _idx<ne; _idx++) {
168 curr_level = lcolor[idx];
171 for (kdx=0; kdx<NFVARS; kdx++) {
172 rhs[kdx] = rhsb[idx+kdx*neles];
175 for (row=0; row<NFVARS; row++) {
176 for (col=0; col<NFVARS; col++) {
177 dmat[row][col] = diag[idx+neles*col+NFVARS*neles*row];
181 for (jdx=0; jdx<nface; jdx++) {
182 neib = nei_ele[idx+neles*jdx];
184 if (lcolor[neib] != curr_level) {
185 fv = fnorm_vol[idx+neles*jdx];
187 for (row=0; row<NFVARS; row++) {
189 for (col=0; col<NFVARS; col++) {
190 val += fjmat[idx+neles*jdx+nface*neles*col+NFVARS*nface*neles*row] \
191 * dub[neib+neles*col];
198 lusub(NFVARS, dmat, rhs);
200 for (kdx=0; kdx<NFVARS; kdx++) {
201 dub[idx+neles*kdx] = rhs[kdx];
219 UCFD_INT _idx, idx, jdx, kdx, neib, curr_level;
222 UCFD_FLOAT rhs[NTURBVARS], tmat[NTURBVARS][NTURBVARS];
225 #pragma omp parallel for private(idx, jdx, kdx, neib, curr_level, row, col, rhs, tmat, val, fv)
226 for (_idx=n0; _idx<ne; _idx++) {
228 curr_level = lcolor[idx];
231 for (kdx=0; kdx<NTURBVARS; kdx++) {
232 rhs[kdx] = rhsb[idx+(kdx+NFVARS)*neles];
235 for (row=0; row<NTURBVARS; row++) {
236 for (col=0; col<NTURBVARS; col++) {
237 tmat[row][col] = tdiag[idx+neles*col+neles*NTURBVARS*row];
241 for (jdx=0; jdx<nface; jdx++) {
242 neib = nei_ele[idx+neles*jdx];
244 if (lcolor[neib] != curr_level) {
245 fv = fnorm_vol[idx+neles*jdx];
247 for (row=0; row<NTURBVARS; row++) {
249 for (col=0; col<NTURBVARS; col++) {
250 val += tjmat[idx+neles*jdx+nface*neles*col+NTURBVARS*nface*neles*row] \
251 * dub[neib+neles*(col+NFVARS)];
259 lusub(NTURBVARS, tmat, rhs);
262 for (kdx=0; kdx<NTURBVARS; kdx++) {
263 dub[idx+neles*(kdx+NFVARS)] = rhs[kdx];
276 #pragma omp parallel for private(kdx)
277 for (idx=0; idx<neles; idx++) {
278 for (kdx=0; kdx<NFVARS; kdx++) {
279 uptsb[idx+neles*kdx] += dub[idx+neles*kdx];
282 dub[idx+neles*kdx] = 0.0;
297 #pragma omp parallel for private(kdx)
298 for (idx=0; idx<neles; idx++) {
299 for (kdx=0; kdx<NVARS; kdx++) {
300 uptsb[idx+neles*kdx] += dub[idx+neles*kdx];
303 dub[idx+neles*kdx] = 0.0;
void ns_parallel_block_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 *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *diag, UCFD_FLOAT *fjmat)
void ns_parallel_pre_blusgs(UCFD_INT neles, UCFD_INT nface, UCFD_FLOAT factor, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *dt, UCFD_FLOAT *diag, UCFD_FLOAT *fjmat)
void blusgs_parallel_ns_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *dub, UCFD_FLOAT *subres)
void rans_parallel_pre_blusgs(UCFD_INT neles, UCFD_INT nface, UCFD_FLOAT factor, UCFD_FLOAT *fnorm_vol, UCFD_FLOAT *uptsb, UCFD_FLOAT *dt, UCFD_FLOAT *tdiag, UCFD_FLOAT *tjmat, UCFD_FLOAT *dsrc)
void blusgs_parallel_update(UCFD_INT neles, UCFD_FLOAT *uptsb, UCFD_FLOAT *dub, UCFD_FLOAT *subres)
void rans_parallel_block_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 *rhsb, UCFD_FLOAT *dub, UCFD_FLOAT *tdiag, UCFD_FLOAT *tjmat)
Header file for colored Block LU-SGS method.
ucfd_status_t rans_source_jacobian(UCFD_FLOAT *uf, UCFD_FLOAT tmat[NTURBVARS][NTURBVARS], UCFD_FLOAT *dsrc)
Computes source term Jacobian matrix for RANS equations.
Header file for numerical flux funtions.
void lusub(UCFD_FLOAT *LU, UCFD_FLOAT *b)
Forward/Backward substitution function.
void ludcmp(UCFD_FLOAT *A)
LU Decomposition function.
@ UCFD_STATUS_NOT_SUPPORTED