1 /*
2    Copyright (c) 2009-2014, Jack Poulson
3    All rights reserved.
4 
5    This file is part of Elemental and is under the BSD 2-Clause License,
6    which can be found in the LICENSE file in the root directory, or at
7    http://opensource.org/licenses/BSD-2-Clause
8 */
9 #pragma once
10 #ifndef ELEM_LAPLACIAN_HPP
11 #define ELEM_LAPLACIAN_HPP
12 
13 #include ELEM_HELMHOLTZ_INC
14 
15 namespace elem {
16 
17 // 1D Laplacian
18 // ============
19 
20 template<typename F>
21 inline void
Laplacian(Matrix<F> & L,Int n)22 Laplacian( Matrix<F>& L, Int n )
23 {
24     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
25     Helmholtz( L, n, F(0) );
26 }
27 
28 template<typename F,Dist U,Dist V>
29 inline void
Laplacian(DistMatrix<F,U,V> & L,Int n)30 Laplacian( DistMatrix<F,U,V>& L, Int n )
31 {
32     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
33     Helmholtz( L, n, F(0) );
34 }
35 
36 template<typename F,Dist U,Dist V>
37 inline void
Laplacian(BlockDistMatrix<F,U,V> & L,Int n)38 Laplacian( BlockDistMatrix<F,U,V>& L, Int n )
39 {
40     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
41     Helmholtz( L, n, F(0) );
42 }
43 
44 // 2D Laplacian
45 // ============
46 
47 template<typename F>
48 inline void
Laplacian(Matrix<F> & L,Int nx,Int ny)49 Laplacian( Matrix<F>& L, Int nx, Int ny )
50 {
51     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
52     Helmholtz( L, nx, ny, F(0) );
53 }
54 
55 template<typename F,Dist U,Dist V>
56 inline void
Laplacian(DistMatrix<F,U,V> & L,Int nx,Int ny)57 Laplacian( DistMatrix<F,U,V>& L, Int nx, Int ny )
58 {
59     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
60     Helmholtz( L, nx, ny, F(0) );
61 }
62 
63 template<typename F,Dist U,Dist V>
64 inline void
Laplacian(BlockDistMatrix<F,U,V> & L,Int nx,Int ny)65 Laplacian( BlockDistMatrix<F,U,V>& L, Int nx, Int ny )
66 {
67     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
68     Helmholtz( L, nx, ny, F(0) );
69 }
70 
71 // 3D Laplacian
72 // ============
73 
74 template<typename F>
75 inline void
Laplacian(Matrix<F> & L,Int nx,Int ny,Int nz)76 Laplacian( Matrix<F>& L, Int nx, Int ny, Int nz )
77 {
78     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
79     Helmholtz( L, nx, ny, nz, F(0) );
80 }
81 
82 template<typename F,Dist U,Dist V>
83 inline void
Laplacian(DistMatrix<F,U,V> & L,Int nx,Int ny,Int nz)84 Laplacian( DistMatrix<F,U,V>& L, Int nx, Int ny, Int nz )
85 {
86     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
87     Helmholtz( L, nx, ny, nz, F(0) );
88 }
89 
90 template<typename F,Dist U,Dist V>
91 inline void
Laplacian(BlockDistMatrix<F,U,V> & L,Int nx,Int ny,Int nz)92 Laplacian( BlockDistMatrix<F,U,V>& L, Int nx, Int ny, Int nz )
93 {
94     DEBUG_ONLY(CallStackEntry cse("Laplacian"))
95     Helmholtz( L, nx, ny, nz, F(0) );
96 }
97 
98 } // namespace elem
99 
100 #endif // ifndef ELEM_LAPLACIAN_HPP
101