On Mar 27, 2019, at 8:07 PM, Sajid Ali via petsc-users 
<petsc-users@mcs.anl.gov<mailto:petsc-users@mcs.anl.gov>> wrote:

Hi,

I'm able to solve the following equation using complex numbers (with ts_type cn 
and pc_type gamg) :
                              u_t = A*u'' + F_t*u;
(where A = -1j/(2k) amd u'' refers to u_xx+u_yy implemented with the familiar 
5-point stencil)

Now, I want to solve the same problem using real numbers. The equivalent 
equations are:
u_t_real   =  1/(2k) * u''_imag + F_real*u_real   - F_imag*u_imag
u_t_imag = -1/(2k) * u''_real   + F_imag*u_real - F_real*u_imag

Thus, if we now take our new u vector to have twice the length of the problem 
we're solving, keeping the first half as real and the second half as imaginary, 
we'd get a matrix that had matrices computing the laplacian via the 5-point 
stencil in the top-right and bottom-left corners and a diagonal [F_real+F_imag, 
F_real-F_imag] term.

I tried doing this and the gamg preconditioner complains about an unsymmetric 
matrix. If i use the default preconditioner, I get DIVERGED_NONLINEAR_SOLVE.

Is there a way to better organize the matrix ?

PS: I'm trying to do this using only real numbers because I realized that the 
optimized avx-512 kernels for KNL are not implemented for complex numbers. 
Would that be implemented soon ?

Can you provide a PETSc log for your code using complex numbers with -ts_type 
cn and -pc_type gamg? I am doubtful that it could benefit much from AVX 
optimizations on KNL.

Thanks,
Hong (Mr.)



Thank You,
Sajid Ali
Applied Physics
Northwestern University

Reply via email to