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