[petsc-users] Understanding PETSC: boundary layer flow with SNES

Pavel Schor schor.pavel at gmail.com
Tue Nov 17 09:06:46 CST 2015


Dear PETSC users,
I am a newbie to PETSC and I try to understand it. My first attempt is 
to solve 2D laminar boundary layer equations:

     u*du/dx +v*du/dy  = Ue*(dUe/dx). -nu*d2u/dy2
     dudx + dvdy = 0

B.C.:
     y=0:    u=0,    v=0
     y=H:    u(x)=Ue(x)
Where H is height of the domain, Ue(x) is edge velocity given by a 
potential flow solver. I assume Ue(x)=10.0


I have several questions regarding the workflow in PETSC, I took SNES 
example29 (2D cavity flow) and I tried to modify it:

1) There are vectors x and f. I suppose vector x to represent the values 
of velocity and vector f to represent velocity residuals. Please is this 
correct?

Based on example29 and my assumption, I calculated the velocity:
   dhx = (PetscReal)(info->mx-1);  dhy = (PetscReal)(info->my-1);
   dx = 1.0/dhx;                   dy = 1./dhy;
     u          = x[j][i].u;
     v          = x[j][i].v;
     dudx        = (x[j][i+1].u - x[j][i-1].u)/2.0/dx;
     dudy        = (x[j+1][i].u - x[j-1][i].u)/2.0/dy;
     dvdy        = (x[j+1][i].v - x[j-1][i].v)/2.0/dy;
     d2udy2        = (-2.0*u + x[j-1][i].u + x[j+1][i].u)/dy/dy;

     /* U velocity */
     f[j][i].u  = u*dudx +v*dudy -Ue*dUedx -nu*d2udy2;

     /* V velocity */
     f[j][i].v  = dudx + dvdy;

The code does not work. With initial conditions x[j][i].u=Ue; and 
x[0][i].u=0.0; the result is the same as the initial conditions.

2) In SNES example29, there are boundary conditions specified on vector 
f? For example:

   /* Test whether we are on the top edge of the global array */
   if (yinte == info->my) {
     j = info->my - 1;
     yinte = yinte - 1;
     /* top edge */
     for (i=info->xs; i<info->xs+info->xm; i++) {
         f[j][i].u     = x[j][i].u - lid;
         f[j][i].v     = x[j][i].v;

I don't understand the last two lines. I just deleted the conditions for 
left and right edges and replaced f[j][i].u     = x[j][i].u - lid; with 
f[j][i].u     = x[j][i].u - Ue;

3) Please could someone explain the normalization on following lines? 
(Taken from example 29)

       /*
          Define mesh intervals ratios for uniform grid.

          Note: FD formulae below are normalized by multiplying through by
          local volume element (i.e. hx*hy) to obtain coefficients O(1) 
in two dimensions.

       */
       dhx = (PetscReal)(info->mx-1);  dhy = (PetscReal) (info->my-1);
       hx = 1.0/dhx;                      hy = 1.0/dhy;
       hxdhy = hx*dhy;                 hydhx = hy*dhx;


Thanks in advance & Kind regards
Pavel Schor
PhD. student, Institute of aerospace engineering, Brno University of 
technology


More information about the petsc-users mailing list