Marching Solver for Poisson Equation 大氣四 簡睦樺
Outline A brief review for Poisson equation and marching method Parallel algorithm and consideration for efficiency Results Future works
Poisson Equation A second order partial differential equation with inhomogeneous forcing term is called Poisson equation. i.e. Ω is the domain, L is some operator for boundary condition.
Numerical approximation Let U ij =u(x,y), approximate the equation with finite difference method. For marching method
Marching method Let, where U i,j is the exact solution, U’ i,j is guess solution, e i,j is the difference between U i,j and U’ i,j. ij=0…n+1(U i,0, U 0,j, U i,n+1 and U n+1,j are boundary) We have a initial guess for U’ i,1 and compute U’ i,2 via marching equation.
Let a vector of equation of e, i.e. E 1,1 =[ ] T and E 2,1 =[ ] T and compute the equation of e. Thus, we can construct and system of e in+1 and U’ in+1 –U in+1. i.e. We solve the system and get e i,1, so we can get U i,1
Domain decomposition idea However, the above method may fail easily because the condition number of the system may be to huge. To construct error vector from E i,1, E n+1,1 and other interior point. we can have the local equation for some marching points for which different initial condition march and should have same value.
Parallel Algorithm Use MPI to compute the decomposed domain. Separate the computation into preprocessor and marching.
Preprocessor To compute inverse matrix of the system preprocessor Compute error vector Parallel LU Out put Compute error vector Parallel LU Out put
Marching marching Read data marching Read data marching
Collect error vector Matrix product
Connect Boundary data Marching again to get exact sol.
Operation count For general case, define nx for grid points at x-direction, ny for grid points at y direction, nb is number of sub-domain ~ nx/5. For serial case, preprocessor: Error vector: O(ny*ny*nx) LU: O((ny*nb) 3 ) marching: marching: O(ny*nx) matrix product: O((ny*nb) 2 )
Parallel case ng is number of MPI world. nb>=ng preprocessor: Error vector: O(ny*ny*nx/ng) LU: O((ny*nb) 3 ) marching: marching: O(ny*nx/ng) matrix product: O((ny*nb/ng) 2 )
Compare with other method SerialMarchLUIteration +prep Iteration Prep(ny*nb) 3 (ny*nx) 3 0 march(ny*nb) 2 (ny*nx) 2 (ny*nx) 3 1 time problem (ny*nb) 3 (ny*nx) 3
results Converge error Efficiency improvement Annulus testing case
Converge error Testing case
Error table HErrorRatioorder e-5NaN e e e
Log-log plot
Efficiency For 128*128 case NPTime
Annulus
Future work Parallel LU 3D marching method