Lines Matching +full:- +full:j
2 Uses 2-dimensional distributed arrays.\n\
3 A 2-dim simplified Radiative Transport test problem is used, with analytic Jacobian. \n\
9 -tleft <tl>, where <tl> indicates the left Diriclet BC \n\
10 -tright <tr>, where <tr> indicates the right Diriclet BC \n\
11 -beta <beta>, where <beta> indicates the exponent in T \n\n";
17 - Div(alpha* T^beta (GRAD T)) = 0.
26 A finite volume approximation with the usual 5-point stencil
38 /* User-defined application context */
66 PetscCall(PetscOptionsGetReal(NULL, NULL, "-tleft", &user.tleft, NULL)); in main()
67 PetscCall(PetscOptionsGetReal(NULL, NULL, "-tright", &user.tright, NULL)); in main()
68 PetscCall(PetscOptionsGetReal(NULL, NULL, "-beta", &user.beta, NULL)); in main()
69 user.bm1 = user.beta - 1.0; in main()
107 /* -------------------- Form initial approximation ----------------- */
111 PetscInt i, j, xs, ys, xm, ym; in FormInitialGuess() local
119 tleft = user->tleft; in FormInitialGuess()
125 for (j = ys; j < ys + ym; j++) { in FormInitialGuess()
126 for (i = xs; i < xs + xm; i++) x[j][i] = tleft; in FormInitialGuess()
131 /* -------------------- Evaluate Function F(x) --------------------- */
135 PetscInt i, j, mx, my, xs, ys, xm, ym; in FormFunction() local
148 hx = one / (PetscReal)(mx - 1); in FormFunction()
149 hy = one / (PetscReal)(my - 1); in FormFunction()
152 tleft = user->tleft; in FormFunction()
153 tright = user->tright; in FormFunction()
154 beta = user->beta; in FormFunction()
164 for (j = ys; j < ys + ym; j++) { in FormFunction()
166 t0 = x[j][i]; in FormFunction()
168 if (i > 0 && i < mx - 1 && j > 0 && j < my - 1) { in FormFunction()
171 tw = x[j][i - 1]; in FormFunction()
174 fw = dw * (t0 - tw); in FormFunction()
176 te = x[j][i + 1]; in FormFunction()
179 fe = de * (te - t0); in FormFunction()
181 ts = x[j - 1][i]; in FormFunction()
184 fs = ds * (t0 - ts); in FormFunction()
186 tn = x[j + 1][i]; in FormFunction()
189 fn = dn * (tn - t0); in FormFunction()
192 /* left-hand boundary */ in FormFunction()
196 fw = dw * (t0 - tw); in FormFunction()
198 te = x[j][i + 1]; in FormFunction()
201 fe = de * (te - t0); in FormFunction()
203 if (j > 0) { in FormFunction()
204 ts = x[j - 1][i]; in FormFunction()
207 fs = ds * (t0 - ts); in FormFunction()
210 if (j < my - 1) { in FormFunction()
211 tn = x[j + 1][i]; in FormFunction()
214 fn = dn * (tn - t0); in FormFunction()
217 } else if (i == mx - 1) { in FormFunction()
218 /* right-hand boundary */ in FormFunction()
219 tw = x[j][i - 1]; in FormFunction()
222 fw = dw * (t0 - tw); in FormFunction()
227 fe = de * (te - t0); in FormFunction()
229 if (j > 0) { in FormFunction()
230 ts = x[j - 1][i]; in FormFunction()
233 fs = ds * (t0 - ts); in FormFunction()
236 if (j < my - 1) { in FormFunction()
237 tn = x[j + 1][i]; in FormFunction()
240 fn = dn * (tn - t0); in FormFunction()
243 } else if (j == 0) { in FormFunction()
244 /* bottom boundary,and i <> 0 or mx-1 */ in FormFunction()
245 tw = x[j][i - 1]; in FormFunction()
248 fw = dw * (t0 - tw); in FormFunction()
250 te = x[j][i + 1]; in FormFunction()
253 fe = de * (te - t0); in FormFunction()
257 tn = x[j + 1][i]; in FormFunction()
260 fn = dn * (tn - t0); in FormFunction()
262 } else if (j == my - 1) { in FormFunction()
263 /* top boundary,and i <> 0 or mx-1 */ in FormFunction()
264 tw = x[j][i - 1]; in FormFunction()
267 fw = dw * (t0 - tw); in FormFunction()
269 te = x[j][i + 1]; in FormFunction()
272 fe = de * (te - t0); in FormFunction()
274 ts = x[j - 1][i]; in FormFunction()
277 fs = ds * (t0 - ts); in FormFunction()
282 f[j][i] = -hydhx * (fe - fw) - hxdhy * (fn - fs); in FormFunction()
291 /* -------------------- Evaluate Jacobian F(x) --------------------- */
295 PetscInt i, j, mx, my, xs, ys, xm, ym; in FormJacobian() local
308 hx = one / (PetscReal)(mx - 1); in FormJacobian()
309 hy = one / (PetscReal)(my - 1); in FormJacobian()
312 tleft = user->tleft; in FormJacobian()
313 tright = user->tright; in FormJacobian()
314 beta = user->beta; in FormJacobian()
315 bm1 = user->bm1; in FormJacobian()
316 coef = user->coef; in FormJacobian()
325 for (j = ys; j < ys + ym; j++) { in FormJacobian()
327 t0 = x[j][i]; in FormJacobian()
329 if (i > 0 && i < mx - 1 && j > 0 && j < my - 1) { in FormJacobian()
332 tw = x[j][i - 1]; in FormJacobian()
337 gw = coef * bw * (t0 - tw); in FormJacobian()
339 te = x[j][i + 1]; in FormJacobian()
344 ge = coef * be * (te - t0); in FormJacobian()
346 ts = x[j - 1][i]; in FormJacobian()
351 gs = coef * bs * (t0 - ts); in FormJacobian()
353 tn = x[j + 1][i]; in FormJacobian()
358 gn = coef * bn * (tn - t0); in FormJacobian()
360 v[0] = -hxdhy * (ds - gs); in FormJacobian()
361 col[0].j = j - 1; in FormJacobian()
363 v[1] = -hydhx * (dw - gw); in FormJacobian()
364 col[1].j = j; in FormJacobian()
365 col[1].i = i - 1; in FormJacobian()
366 v[2] = hxdhy * (ds + dn + gs - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
367 col[2].j = row.j = j; in FormJacobian()
369 v[3] = -hydhx * (de + ge); in FormJacobian()
370 col[3].j = j; in FormJacobian()
372 v[4] = -hxdhy * (dn + gn); in FormJacobian()
373 col[4].j = j + 1; in FormJacobian()
378 /* left-hand boundary */ in FormJacobian()
384 gw = coef * bw * (t0 - tw); in FormJacobian()
386 te = x[j][i + 1]; in FormJacobian()
391 ge = coef * be * (te - t0); in FormJacobian()
393 /* left-hand bottom boundary */ in FormJacobian()
394 if (j == 0) { in FormJacobian()
395 tn = x[j + 1][i]; in FormJacobian()
400 gn = coef * bn * (tn - t0); in FormJacobian()
402 v[0] = hxdhy * (dn - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
403 col[0].j = row.j = j; in FormJacobian()
405 v[1] = -hydhx * (de + ge); in FormJacobian()
406 col[1].j = j; in FormJacobian()
408 v[2] = -hxdhy * (dn + gn); in FormJacobian()
409 col[2].j = j + 1; in FormJacobian()
413 /* left-hand interior boundary */ in FormJacobian()
414 } else if (j < my - 1) { in FormJacobian()
415 ts = x[j - 1][i]; in FormJacobian()
420 gs = coef * bs * (t0 - ts); in FormJacobian()
422 tn = x[j + 1][i]; in FormJacobian()
427 gn = coef * bn * (tn - t0); in FormJacobian()
429 v[0] = -hxdhy * (ds - gs); in FormJacobian()
430 col[0].j = j - 1; in FormJacobian()
432 v[1] = hxdhy * (ds + dn + gs - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
433 col[1].j = row.j = j; in FormJacobian()
435 v[2] = -hydhx * (de + ge); in FormJacobian()
436 col[2].j = j; in FormJacobian()
438 v[3] = -hxdhy * (dn + gn); in FormJacobian()
439 col[3].j = j + 1; in FormJacobian()
442 /* left-hand top boundary */ in FormJacobian()
444 ts = x[j - 1][i]; in FormJacobian()
449 gs = coef * bs * (t0 - ts); in FormJacobian()
451 v[0] = -hxdhy * (ds - gs); in FormJacobian()
452 col[0].j = j - 1; in FormJacobian()
454 v[1] = hxdhy * (ds + gs) + hydhx * (dw + de + gw - ge); in FormJacobian()
455 col[1].j = row.j = j; in FormJacobian()
457 v[2] = -hydhx * (de + ge); in FormJacobian()
458 col[2].j = j; in FormJacobian()
463 } else if (i == mx - 1) { in FormJacobian()
464 /* right-hand boundary */ in FormJacobian()
465 tw = x[j][i - 1]; in FormJacobian()
470 gw = coef * bw * (t0 - tw); in FormJacobian()
477 ge = coef * be * (te - t0); in FormJacobian()
479 /* right-hand bottom boundary */ in FormJacobian()
480 if (j == 0) { in FormJacobian()
481 tn = x[j + 1][i]; in FormJacobian()
486 gn = coef * bn * (tn - t0); in FormJacobian()
488 v[0] = -hydhx * (dw - gw); in FormJacobian()
489 col[0].j = j; in FormJacobian()
490 col[0].i = i - 1; in FormJacobian()
491 v[1] = hxdhy * (dn - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
492 col[1].j = row.j = j; in FormJacobian()
494 v[2] = -hxdhy * (dn + gn); in FormJacobian()
495 col[2].j = j + 1; in FormJacobian()
499 /* right-hand interior boundary */ in FormJacobian()
500 } else if (j < my - 1) { in FormJacobian()
501 ts = x[j - 1][i]; in FormJacobian()
506 gs = coef * bs * (t0 - ts); in FormJacobian()
508 tn = x[j + 1][i]; in FormJacobian()
513 gn = coef * bn * (tn - t0); in FormJacobian()
515 v[0] = -hxdhy * (ds - gs); in FormJacobian()
516 col[0].j = j - 1; in FormJacobian()
518 v[1] = -hydhx * (dw - gw); in FormJacobian()
519 col[1].j = j; in FormJacobian()
520 col[1].i = i - 1; in FormJacobian()
521 v[2] = hxdhy * (ds + dn + gs - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
522 col[2].j = row.j = j; in FormJacobian()
524 v[3] = -hxdhy * (dn + gn); in FormJacobian()
525 col[3].j = j + 1; in FormJacobian()
528 /* right-hand top boundary */ in FormJacobian()
530 ts = x[j - 1][i]; in FormJacobian()
535 gs = coef * bs * (t0 - ts); in FormJacobian()
537 v[0] = -hxdhy * (ds - gs); in FormJacobian()
538 col[0].j = j - 1; in FormJacobian()
540 v[1] = -hydhx * (dw - gw); in FormJacobian()
541 col[1].j = j; in FormJacobian()
542 col[1].i = i - 1; in FormJacobian()
543 v[2] = hxdhy * (ds + gs) + hydhx * (dw + de + gw - ge); in FormJacobian()
544 col[2].j = row.j = j; in FormJacobian()
549 /* bottom boundary,and i <> 0 or mx-1 */ in FormJacobian()
550 } else if (j == 0) { in FormJacobian()
551 tw = x[j][i - 1]; in FormJacobian()
556 gw = coef * bw * (t0 - tw); in FormJacobian()
558 te = x[j][i + 1]; in FormJacobian()
563 ge = coef * be * (te - t0); in FormJacobian()
565 tn = x[j + 1][i]; in FormJacobian()
570 gn = coef * bn * (tn - t0); in FormJacobian()
572 v[0] = -hydhx * (dw - gw); in FormJacobian()
573 col[0].j = j; in FormJacobian()
574 col[0].i = i - 1; in FormJacobian()
575 v[1] = hxdhy * (dn - gn) + hydhx * (dw + de + gw - ge); in FormJacobian()
576 col[1].j = row.j = j; in FormJacobian()
578 v[2] = -hydhx * (de + ge); in FormJacobian()
579 col[2].j = j; in FormJacobian()
581 v[3] = -hxdhy * (dn + gn); in FormJacobian()
582 col[3].j = j + 1; in FormJacobian()
586 /* top boundary,and i <> 0 or mx-1 */ in FormJacobian()
587 } else if (j == my - 1) { in FormJacobian()
588 tw = x[j][i - 1]; in FormJacobian()
593 gw = coef * bw * (t0 - tw); in FormJacobian()
595 te = x[j][i + 1]; in FormJacobian()
600 ge = coef * be * (te - t0); in FormJacobian()
602 ts = x[j - 1][i]; in FormJacobian()
607 gs = coef * bs * (t0 - ts); in FormJacobian()
609 v[0] = -hxdhy * (ds - gs); in FormJacobian()
610 col[0].j = j - 1; in FormJacobian()
612 v[1] = -hydhx * (dw - gw); in FormJacobian()
613 col[1].j = j; in FormJacobian()
614 col[1].i = i - 1; in FormJacobian()
615 v[2] = hxdhy * (ds + gs) + hydhx * (dw + de + gw - ge); in FormJacobian()
616 col[2].j = row.j = j; in FormJacobian()
618 v[3] = -hydhx * (de + ge); in FormJacobian()
619 col[3].j = j; in FormJacobian()
642 args: -pc_type mg -ksp_type fgmres -da_refine 2 -pc_mg_galerkin pmat -snes_view
647 …args: -pc_type mg -ksp_type fgmres -da_refine 2 -pc_mg_galerkin pmat -snes_view -snes_type newtont…
652 …args: -pc_type mg -ksp_type fgmres -da_refine 2 -pc_mg_galerkin pmat -snes_view -snes_type newtont…