Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
solverstack
ScalFMM
Commits
5684b4b4
Commit
5684b4b4
authored
Nov 13, 2013
by
BRAMAS Berenger
Browse files
Move P2P into sub class for chebyshev
parent
db6cf114
Changes
4
Hide whitespace changes
Inline
Side-by-side
Src/Kernels/Chebyshev/FAbstractChebKernel.hpp
View file @
5684b4b4
...
...
@@ -22,12 +22,10 @@
#include "../../Components/FAbstractKernels.hpp"
#include "../P2P/FP2P.hpp"
#include "FChebP2PKernels.hpp"
#include "./FChebInterpolator.hpp"
class
FTreeCoordinate
;
template
<
KERNEL_FUNCCTION_IDENTIFIER
Identifier
,
int
NVALS
>
struct
DirectInteactionComputer
;
#include "../../Containers/FTreeCoordinate.hpp"
/**
* @author Matthias Messner(matthias.messner@inria.fr)
...
...
@@ -126,113 +124,20 @@ public:
void
P2P
(
const
FTreeCoordinate
&
/* LeafCellCoordinate */
,
// needed for periodic boundary conditions
virtual
void
P2P
(
const
FTreeCoordinate
&
/* LeafCellCoordinate */
,
// needed for periodic boundary conditions
ContainerClass
*
const
FRestrict
TargetParticles
,
const
ContainerClass
*
const
FRestrict
/*SourceParticles*/
,
ContainerClass
*
const
NeighborSourceParticles
[
27
],
const
int
/* size */
)
{
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2P
(
TargetParticles
,
NeighborSourceParticles
);
}
const
int
/* size */
)
=
0
;
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
virtual
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
27
);
}
};
///////////////////////////////////////////////////////
// P2P Wrappers
///////////////////////////////////////////////////////
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
)
=
0
;
/*! Specialization for Laplace potential */
template
<
>
struct
DirectInteactionComputer
<
ONE_OVER_R
,
1
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
FP2P
::
FullMutual
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
FP2P
::
FullRemote
(
inTargets
,
inNeighbors
,
inSize
);
}
};
/*! Specialization for Leonard-Jones potential */
template
<
>
struct
DirectInteactionComputer
<
LEONARD_JONES_POTENTIAL
,
1
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
FP2P
::
FullMutualLJ
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
FP2P
::
FullRemoteLJ
(
inTargets
,
inNeighbors
,
inSize
);
}
};
///////////////////////////////////////////////////////
// In case of multi right hand side
///////////////////////////////////////////////////////
template
<
int
NVALS
>
struct
DirectInteactionComputer
<
ONE_OVER_R
,
NVALS
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullMutual
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullRemote
(
inTargets
,
inNeighbors
,
inSize
);
}
}
};
/*! Specialization for Leonard-Jones potential */
template
<
int
NVALS
>
struct
DirectInteactionComputer
<
LEONARD_JONES_POTENTIAL
,
NVALS
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullMutualLJ
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullRemoteLJ
(
inTargets
,
inNeighbors
,
inSize
);
}
}
};
...
...
Src/Kernels/Chebyshev/FChebKernel.hpp
View file @
5684b4b4
...
...
@@ -203,6 +203,22 @@ public:
}
}
void
P2P
(
const
FTreeCoordinate
&
/* LeafCellCoordinate */
,
// needed for periodic boundary conditions
ContainerClass
*
const
FRestrict
TargetParticles
,
const
ContainerClass
*
const
FRestrict
/*SourceParticles*/
,
ContainerClass
*
const
NeighborSourceParticles
[
27
],
const
int
/* size */
)
{
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2P
(
TargetParticles
,
NeighborSourceParticles
);
}
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
27
);
}
};
...
...
Src/Kernels/Chebyshev/FChebP2PKernels.hpp
0 → 100644
View file @
5684b4b4
#ifndef FCHEBP2PKERNELS_HPP
#define FCHEBP2PKERNELS_HPP
#include "../P2P/FP2P.hpp"
template
<
KERNEL_FUNCCTION_IDENTIFIER
Identifier
,
int
NVALS
>
struct
DirectInteactionComputer
;
///////////////////////////////////////////////////////
// P2P Wrappers
///////////////////////////////////////////////////////
/*! Specialization for Laplace potential */
template
<
>
struct
DirectInteactionComputer
<
ONE_OVER_R
,
1
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
FP2P
::
FullMutual
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
FP2P
::
FullRemote
(
inTargets
,
inNeighbors
,
inSize
);
}
};
/*! Specialization for Leonard-Jones potential */
template
<
>
struct
DirectInteactionComputer
<
LEONARD_JONES_POTENTIAL
,
1
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
FP2P
::
FullMutualLJ
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
FP2P
::
FullRemoteLJ
(
inTargets
,
inNeighbors
,
inSize
);
}
};
///////////////////////////////////////////////////////
// In case of multi right hand side
///////////////////////////////////////////////////////
template
<
int
NVALS
>
struct
DirectInteactionComputer
<
ONE_OVER_R
,
NVALS
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullMutual
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullRemote
(
inTargets
,
inNeighbors
,
inSize
);
}
}
};
/*! Specialization for Leonard-Jones potential */
template
<
int
NVALS
>
struct
DirectInteactionComputer
<
LEONARD_JONES_POTENTIAL
,
NVALS
>
{
template
<
typename
ContainerClass
>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
]){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullMutualLJ
(
TargetParticles
,
NeighborSourceParticles
,
14
);
}
}
template
<
typename
ContainerClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
){
for
(
int
idxRhs
=
0
;
idxRhs
<
NVALS
;
++
idxRhs
){
FP2P
::
FullRemoteLJ
(
inTargets
,
inNeighbors
,
inSize
);
}
}
};
#endif // FCHEBP2PKERNELS_HPP
Src/Kernels/Chebyshev/FChebSymKernel.hpp
View file @
5684b4b4
...
...
@@ -448,6 +448,21 @@ public:
}
}
void
P2P
(
const
FTreeCoordinate
&
/* LeafCellCoordinate */
,
// needed for periodic boundary conditions
ContainerClass
*
const
FRestrict
TargetParticles
,
const
ContainerClass
*
const
FRestrict
/*SourceParticles*/
,
ContainerClass
*
const
NeighborSourceParticles
[
27
],
const
int
/* size */
)
{
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2P
(
TargetParticles
,
NeighborSourceParticles
);
}
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
DirectInteactionComputer
<
MatrixKernelClass
::
Identifier
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
27
);
}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment