simulkade / FVTool

Finite volume toolbox for Matlab/Octave
http://fvt.simulkade.com
BSD 2-Clause "Simplified" License
99 stars 56 forks source link

Boundary conditions #8

Closed Whatsoever closed 8 years ago

Whatsoever commented 8 years ago

Dear Dr. Eftekhari,

Thank you for provided us with a flexible quite simple software. I just do not get how to use the boundary conditions or which kind of approach It uses. In a 1D (so far i am interested in that), I see that the matrix will be: | a1 a2 0 .....0 | A =| .....O ........... | where a1 = -(BC.left.b/2 + BC.left.a/dx_1) | 0 .....0 a3 a4 | a2 = -(BC.left.b/2 + BC.left.a/dx_1) a3 = BC.right.b/2 + BC.right.a/dx_end a4 = BC.right.b/2 - BC.right.a/dx_end

and the vector of boundary conditions: |q1 | q1 = -(BC.left.c) q = | 0 | |q2 | q2 = BC.right.c

So I must implement the values of a, b, and c for each side:

If I want a dirichlet boundary such as c(0, t) =C0; (left side constant), how do it do it? (equal for the right side?)

and

If I want a flux boundary (cauchy boundary) c(0, t) = C0 + (D/v) dC(0, t)/dx ; (left side constant), how do it do it? (equal for the right side?)

and a no flux boundary such as v = 0 and dC(0, t)/dx =0;(left side constant), how do it do it? (equal for the right side?)

Thank a lot

Best Regards,

Daniel

simulkade commented 8 years ago

Hi Daniel,

Thank you for your comment, and sorry for the lack of a proper documentation. I have implemented the boundary as: a grad(phi).e + b phi = c, where e is the unit vector. For a Dirichlet boundary, you can write: BC.left.a(:)=0.0; BC.left.b(:)=1.0; BC.left.c(:)=C0;

For a Neumann boundary (constant flux, i.e., D d phi/dx=q), write: BC.left.a(:)=D; BC.left.b(:)=0.0; BC.left.c(:)=q;

and for a Mixed or Robin boundary c(0, t) = C0 + (D/v) dC(0, t)/dx, or after rearrangement (D/v) dC(0, t)/dx - c(0, t) = -C0 BC.left.a(:)=D/v; BC.left.b(:)=-1.0; BC.left.c(:)=-C0;

I hope it helps.

Whatsoever commented 8 years ago

Cool, lot of thanks.