# How to construct an effective preconditioner for this particular problem

A quick introduction to my problem

I am currently developing a method for simulation of water waves in three dimensions based on potential flow theory. The computational bottleneck of the method is to solve the equation $$$$f(x,y) = \bigg( \cos\Big( \eta(x,y) \nabla \ \Big) - \sin \Big( \eta(x,y) \nabla \Big) \cdot \tan \Big( h \nabla \Big) \bigg) g(x,y) \tag{1} \label{equation1}$$$$ for the function $$g(x,y)$$. Here $$f(x,y)$$ and $$\eta(x,y)$$ are known functions, $$h$$ is a positive constant, $$\nabla = (\partial_x, \partial_y)$$ and the operators $$\cos\Big( \eta(x,y) \nabla \ \Big)$$, $$\sin \Big( \eta(x,y) \nabla \Big)$$ and $$\tan \Big( h \nabla \Big)$$ are defined in terms of their Taylor series, for example $$$$\cos \Big( \eta(x,y) \nabla \Big) = \sum_{m = 0}^{M} \frac{(-1)^m}{(2m)!} \eta(x,y)^{2m} \nabla^{2m}.$$$$ I solve this equation by truncating the $$\cos$$ and $$\sin$$ operators at order $$M$$ and using the Fourier collocation method in which all functions are approximated by truncated Fourier series, for example $$$$f(x,y) = \sum_{n_x = -N_x}^{Nx-1} \sum_{n_y = -N_y}^{Ny-1} \widehat{f}_{n_x, n_y} \exp \Big( i \, \mathbf{k}_{n_x, n_y} \cdot (x,y) \Big).$$$$ Truncating the infinite operators at order $$M$$ gives an approximate equation for $$g(x,y)$$ which reads \begin{aligned} (1) \, \, \, f(x,y) = & \sum_{m = 0}^{\left \lfloor{M/2}\right \rfloor } \frac{1}{(2m)!} \eta(x,y)^{2m} \sum_{n_x = -N_x}^{Nx-1} \sum_{n_y = -N_y}^{Ny-1} | \mathbf{k}_{n_x, n_y} |^{2m} \widehat{g}_{n_x, n_y} \exp \Big( i \, \mathbf{k}_{n_x, n_y} \cdot (x,y) \Big) \\ & + \sum_{m = 0}^{\left \lfloor{(M-1)/2}\right \rfloor } \frac{1}{(2m+1)!} \eta(x,y)^{2m+1} \sum_{n_x = -N_x}^{Nx-1} \sum_{n_y = -N_y}^{Ny-1} | \mathbf{k}_{n_x, n_y} |^{2m+1} \tanh\Big( |\mathbf{k}_{n_x, n_y}| h \Big) \\ & \times \widehat{g}_{n_x, n_y} \exp \Big( i \, \mathbf{k}_{n_x, n_y} \cdot (x,y) \Big). \end{aligned} Since the right hand side of this equation is easily evaluated when using the fast Fourier transform and because the matrix representation of the operator turning the values of $$g(x,y)$$ into the values of $$f(x,y)$$ is a full matrix, I solve this equation iteratively using the GMRES method. Unfortunately, this typically requires many iterations.

My question

I would like to ask for ideas and suggestions for how to construct a preconditioner for equation $$\eqref{equation1}$$ above.

What have I tried so far

So far I have tested the following ideas, but unfortunately none of them have worked:

1. Approximating the operator $$\cos\Big( \eta(x,y) \nabla \ \Big) - \sin \Big( \eta(x,y) \nabla \Big) \cdot \tan \Big( h \nabla \Big)$$ by keeping terms up to second order. This gives the operator $$1 - (\eta(x,y)^2/2 + h \eta(x,y)) \nabla^2$$ which I have discretized using the simplest possible finite difference method.
2. Not truncating the infinite operators gives rise to the equation \begin{aligned} f(x,y) = & \sum_{n_x = -N_x}^{Nx-1} \sum_{n_y = -N_y}^{Ny-1} \bigg( \cosh \Big( |\mathbf{k}_{n_x, n_y}| \eta(x,y) \Big) + \sinh \Big( |\mathbf{k}_{n_x, n_y}| \eta(x,y) \Big) \\ & \tanh\Big( |\mathbf{k}_{n_x, n_y}| h \Big) \bigg) \widehat{g}_{n_x, n_y} \exp \Big( i \, \mathbf{k}_{n_x, n_y} \cdot (x,y) \Big). \end{aligned} I have tried replacing $$\cosh \Big( |\mathbf{k}_{n_x, n_y}| \eta(x,y) \Big)$$ and $$\sinh \Big( |\mathbf{k}_{n_x, n_y}| \eta(x,y) \Big)$$ by their average values over the computational domain in order to get something independent of $$x$$ and $$y$$ inside the summation such that the equation can easily be inverted using the fast Fourier transform.
3. Constructing the matrix representation of the operator to be inverted and ilu-decomposing it with different drop tolerances. For large drop tolerances this preconditioner does not help much, while for small drop tolerances this preconditioner is effective but this is because essentially the whole matrix is decomposed.
4. Performing a literature search. Among the different preconditioning strategies for potential flow water waves, I have not been able to find a strategy applicable to the equation I am trying to solve.
• Not directly related to the question. Are you using restarted GMRES? Jun 12 '19 at 19:47
• What is the value of M, i.e., how many terms are you taking in the expansion of the differential operators? Jun 12 '19 at 20:32
• So far I have not used restarted GMRES. Typically $M \approx 10$. Jun 13 '19 at 6:02
• @MathiasKlahn and you probably should not in your case. restarting makes the convergence of GMRES worse. Jun 13 '19 at 16:06
• @AntonMenshov I agree. Restarted GMRES only becomes a reasonable thing to do when storage becomes a problem. At least that is my experience. Thanks for the suggestion though. Jun 14 '19 at 6:55