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
tsoc
openmm
Commits
f267c51a
"ssh:/git@developer.sourcefind.cn:2222/tsoc/openmm.git" did not exist on "765e274095bb761941e0f2eab36fd79449f3669d"
Commit
f267c51a
authored
Sep 20, 2012
by
Peter Eastman
Browse files
Fixed bugs in GK force
parent
c2461875
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
16 additions
and
49 deletions
+16
-49
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.cpp
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.cpp
+6
-22
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.h
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.h
+0
-4
plugins/amoeba/platforms/cuda2/src/kernels/multipoleInducedField.cu
...oeba/platforms/cuda2/src/kernels/multipoleInducedField.cu
+10
-23
No files found.
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.cpp
View file @
f267c51a
...
@@ -1365,31 +1365,19 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in
...
@@ -1365,31 +1365,19 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in
else
{
else
{
cu
.
clearBuffer
(
*
gkKernel
->
getInducedField
());
cu
.
clearBuffer
(
*
gkKernel
->
getInducedField
());
cu
.
clearBuffer
(
*
gkKernel
->
getInducedFieldPolar
());
cu
.
clearBuffer
(
*
gkKernel
->
getInducedFieldPolar
());
vector
<
float
>
d
,
dp
;
gkKernel
->
getInducedDipoles
()
->
download
(
d
);
gkKernel
->
getInducedDipolesPolar
()
->
download
(
dp
);
printf
(
"dipole
\n
"
);
for
(
int
i
=
0
;
i
<
cu
.
getNumAtoms
();
i
++
)
printf
(
"%d %g %g %g, %g %g %g
\n
"
,
i
,
d
[
3
*
i
],
d
[
3
*
i
+
1
],
d
[
3
*
i
+
2
],
dp
[
3
*
i
],
dp
[
3
*
i
+
1
],
dp
[
3
*
i
+
2
]);
void
*
computeInducedFieldArgs
[]
=
{
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
cu
.
getPosq
().
getDevicePointer
(),
void
*
computeInducedFieldArgs
[]
=
{
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
cu
.
getPosq
().
getDevicePointer
(),
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
startTileIndex
,
&
numTileIndices
,
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
startTileIndex
,
&
numTileIndices
,
&
gkKernel
->
getInducedField
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedFieldPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedField
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedFieldPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipoles
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipolesPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipoles
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipolesPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getBornRadii
()
->
getDevicePointer
(),
&
dampingAndThole
->
getDevicePointer
()};
&
gkKernel
->
getBornRadii
()
->
getDevicePointer
(),
&
dampingAndThole
->
getDevicePointer
()};
cu
.
executeKernel
(
computeInducedFieldKernel
,
computeInducedFieldArgs
,
numForceThreadBlocks
*
forceThreadBlockSize
,
forceThreadBlockSize
);
cu
.
executeKernel
(
computeInducedFieldKernel
,
computeInducedFieldArgs
,
numForceThreadBlocks
*
forceThreadBlockSize
,
forceThreadBlockSize
);
vector
<
long
long
>
f
,
fp
;
gkKernel
->
getInducedField
()
->
download
(
f
);
gkKernel
->
getInducedFieldPolar
()
->
download
(
fp
);
printf
(
"field
\n
"
);
for
(
int
i
=
0
;
i
<
cu
.
getNumAtoms
();
i
++
)
printf
(
"%d %g %g %g, %g %g %g
\n
"
,
i
,
f
[
i
]
/
(
double
)
0xFFFFFFFF
,
f
[
i
+
cu
.
getPaddedNumAtoms
()]
/
(
double
)
0xFFFFFFFF
,
f
[
i
+
2
*
cu
.
getPaddedNumAtoms
()]
/
(
double
)
0xFFFFFFFF
,
fp
[
i
]
/
(
double
)
0xFFFFFFFF
,
fp
[
i
+
cu
.
getPaddedNumAtoms
()]
/
(
double
)
0xFFFFFFFF
,
fp
[
i
+
2
*
cu
.
getPaddedNumAtoms
()]
/
(
double
)
0xFFFFFFFF
);
void
*
updateInducedGkFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
void
*
updateInducedGkFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
&
gkKernel
->
getField
()
->
getDevicePointer
(),
&
gkKernel
->
getFieldPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedField
()
->
getDevicePointer
(),
&
gkKernel
->
getField
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedField
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedFieldPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipoles
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipolesPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedFieldPolar
()
->
getDevicePointer
(),
&
gkKernel
->
getInducedDipoles
()
->
getDevicePointer
(),
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
&
gkKernel
->
getInducedDipolesPolar
()
->
getDevicePointer
(),
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedGkFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedGkFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
}
}
void
*
updateInducedFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
&
npt
,
&
npt
,
&
inducedField
->
getDevicePointer
(),
void
*
updateInducedFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
&
npt
,
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
...
@@ -1517,7 +1505,7 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in
...
@@ -1517,7 +1505,7 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in
void
*
pmeRecordInducedFieldDipolesArgs
[]
=
{
&
pmePhid
->
getDevicePointer
(),
&
pmePhip
->
getDevicePointer
(),
void
*
pmeRecordInducedFieldDipolesArgs
[]
=
{
&
pmePhid
->
getDevicePointer
(),
&
pmePhip
->
getDevicePointer
(),
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
cu
.
getInvPeriodicBoxSizePointer
()};
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
cu
.
getInvPeriodicBoxSizePointer
()};
cu
.
executeKernel
(
pmeRecordInducedFieldDipolesKernel
,
pmeRecordInducedFieldDipolesArgs
,
cu
.
getNumAtoms
());
cu
.
executeKernel
(
pmeRecordInducedFieldDipolesKernel
,
pmeRecordInducedFieldDipolesArgs
,
cu
.
getNumAtoms
());
void
*
updateInducedFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
&
npt
,
&
npt
,
&
inducedField
->
getDevicePointer
(),
void
*
updateInducedFieldArgs
[]
=
{
&
field
->
getDevicePointer
(),
&
fieldPolar
->
getDevicePointer
(),
&
npt
,
&
inducedField
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
inducedFieldPolar
->
getDevicePointer
(),
&
inducedDipole
->
getDevicePointer
(),
&
inducedDipolePolar
->
getDevicePointer
(),
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
&
polarizability
->
getDevicePointer
(),
&
inducedDipoleErrors
->
getDevicePointer
()};
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
cu
.
executeKernel
(
updateInducedFieldKernel
,
updateInducedFieldArgs
,
cu
.
getNumThreadBlocks
()
*
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
,
cu
.
ThreadBlockSize
*
elementSize
*
2
);
...
@@ -1734,7 +1722,7 @@ private:
...
@@ -1734,7 +1722,7 @@ private:
};
};
CudaCalcAmoebaGeneralizedKirkwoodForceKernel
::
CudaCalcAmoebaGeneralizedKirkwoodForceKernel
(
std
::
string
name
,
const
Platform
&
platform
,
CudaContext
&
cu
,
System
&
system
)
:
CudaCalcAmoebaGeneralizedKirkwoodForceKernel
::
CudaCalcAmoebaGeneralizedKirkwoodForceKernel
(
std
::
string
name
,
const
Platform
&
platform
,
CudaContext
&
cu
,
System
&
system
)
:
CalcAmoebaGeneralizedKirkwoodForceKernel
(
name
,
platform
),
cu
(
cu
),
system
(
system
),
params
(
NULL
),
bornRadii
(
NULL
),
field
(
NULL
),
fieldPolar
(
NULL
),
CalcAmoebaGeneralizedKirkwoodForceKernel
(
name
,
platform
),
cu
(
cu
),
system
(
system
),
params
(
NULL
),
bornRadii
(
NULL
),
field
(
NULL
),
inducedField
(
NULL
),
inducedFieldPolar
(
NULL
),
inducedDipoleS
(
NULL
),
inducedDipolePolarS
(
NULL
),
bornSum
(
NULL
),
bornForce
(
NULL
)
{
inducedField
(
NULL
),
inducedFieldPolar
(
NULL
),
inducedDipoleS
(
NULL
),
inducedDipolePolarS
(
NULL
),
bornSum
(
NULL
),
bornForce
(
NULL
)
{
}
}
...
@@ -1746,8 +1734,6 @@ CudaCalcAmoebaGeneralizedKirkwoodForceKernel::~CudaCalcAmoebaGeneralizedKirkwood
...
@@ -1746,8 +1734,6 @@ CudaCalcAmoebaGeneralizedKirkwoodForceKernel::~CudaCalcAmoebaGeneralizedKirkwood
delete
bornRadii
;
delete
bornRadii
;
if
(
field
!=
NULL
)
if
(
field
!=
NULL
)
delete
field
;
delete
field
;
if
(
fieldPolar
!=
NULL
)
delete
fieldPolar
;
if
(
inducedField
!=
NULL
)
if
(
inducedField
!=
NULL
)
delete
inducedField
;
delete
inducedField
;
if
(
inducedFieldPolar
!=
NULL
)
if
(
inducedFieldPolar
!=
NULL
)
...
@@ -1777,7 +1763,6 @@ void CudaCalcAmoebaGeneralizedKirkwoodForceKernel::initialize(const System& syst
...
@@ -1777,7 +1763,6 @@ void CudaCalcAmoebaGeneralizedKirkwoodForceKernel::initialize(const System& syst
params
=
CudaArray
::
create
<
float2
>
(
cu
,
paddedNumAtoms
,
"amoebaGkParams"
);
params
=
CudaArray
::
create
<
float2
>
(
cu
,
paddedNumAtoms
,
"amoebaGkParams"
);
bornRadii
=
new
CudaArray
(
cu
,
paddedNumAtoms
,
elementSize
,
"bornRadii"
);
bornRadii
=
new
CudaArray
(
cu
,
paddedNumAtoms
,
elementSize
,
"bornRadii"
);
field
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
sizeof
(
long
long
),
"gkField"
);
field
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
sizeof
(
long
long
),
"gkField"
);
fieldPolar
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
sizeof
(
long
long
),
"gkFieldPolar"
);
bornSum
=
CudaArray
::
create
<
long
long
>
(
cu
,
paddedNumAtoms
,
"bornSum"
);
bornSum
=
CudaArray
::
create
<
long
long
>
(
cu
,
paddedNumAtoms
,
"bornSum"
);
bornForce
=
CudaArray
::
create
<
long
long
>
(
cu
,
paddedNumAtoms
,
"bornForce"
);
bornForce
=
CudaArray
::
create
<
long
long
>
(
cu
,
paddedNumAtoms
,
"bornForce"
);
inducedDipoleS
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
elementSize
,
"inducedDipoleS"
);
inducedDipoleS
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
elementSize
,
"inducedDipoleS"
);
...
@@ -1787,7 +1772,6 @@ void CudaCalcAmoebaGeneralizedKirkwoodForceKernel::initialize(const System& syst
...
@@ -1787,7 +1772,6 @@ void CudaCalcAmoebaGeneralizedKirkwoodForceKernel::initialize(const System& syst
inducedFieldPolar
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
sizeof
(
long
long
),
"gkInducedFieldPolar"
);
inducedFieldPolar
=
new
CudaArray
(
cu
,
3
*
paddedNumAtoms
,
sizeof
(
long
long
),
"gkInducedFieldPolar"
);
}
}
cu
.
addAutoclearBuffer
(
*
field
);
cu
.
addAutoclearBuffer
(
*
field
);
cu
.
addAutoclearBuffer
(
*
fieldPolar
);
cu
.
addAutoclearBuffer
(
*
bornSum
);
cu
.
addAutoclearBuffer
(
*
bornSum
);
cu
.
addAutoclearBuffer
(
*
bornForce
);
cu
.
addAutoclearBuffer
(
*
bornForce
);
vector
<
float2
>
paramsVector
(
paddedNumAtoms
);
vector
<
float2
>
paramsVector
(
paddedNumAtoms
);
...
...
plugins/amoeba/platforms/cuda2/src/AmoebaCudaKernels.h
View file @
f267c51a
...
@@ -470,9 +470,6 @@ public:
...
@@ -470,9 +470,6 @@ public:
CudaArray
*
getField
()
{
CudaArray
*
getField
()
{
return
field
;
return
field
;
}
}
CudaArray
*
getFieldPolar
()
{
return
fieldPolar
;
}
CudaArray
*
getInducedField
()
{
CudaArray
*
getInducedField
()
{
return
inducedField
;
return
inducedField
;
}
}
...
@@ -494,7 +491,6 @@ private:
...
@@ -494,7 +491,6 @@ private:
CudaArray
*
bornRadii
;
CudaArray
*
bornRadii
;
CudaArray
*
bornForce
;
CudaArray
*
bornForce
;
CudaArray
*
field
;
CudaArray
*
field
;
CudaArray
*
fieldPolar
;
CudaArray
*
inducedField
;
CudaArray
*
inducedField
;
CudaArray
*
inducedFieldPolar
;
CudaArray
*
inducedFieldPolar
;
CudaArray
*
inducedDipoleS
;
CudaArray
*
inducedDipoleS
;
...
...
plugins/amoeba/platforms/cuda2/src/kernels/multipoleInducedField.cu
View file @
f267c51a
...
@@ -149,32 +149,16 @@ __device__ void computeOneInteraction(AtomData& atom1, AtomData& atom2, real3 de
...
@@ -149,32 +149,16 @@ __device__ void computeOneInteraction(AtomData& atom1, AtomData& atom2, real3 de
atom2
.
fieldPolarS
+=
rr3
*
atom1
.
inducedDipolePolarS
+
dDotDelta
*
deltaR
;
atom2
.
fieldPolarS
+=
rr3
*
atom1
.
inducedDipolePolarS
+
dDotDelta
*
deltaR
;
}
}
real
rb2
=
atom1
.
bornRadius
*
atom2
.
bornRadius
;
real
rb2
=
atom1
.
bornRadius
*
atom2
.
bornRadius
;
real
expterm
=
EXP
(
-
r2
/
(
GK_C
*
rb2
));
real
expterm
=
EXP
(
-
r2
/
(
GK_C
*
rb2
));
real
expc
=
expterm
/
GK_C
;
real
expc
=
expterm
/
GK_C
;
real
gf2
=
RECIP
(
r2
+
rb2
*
expterm
);
real
gf2
=
RECIP
(
r2
+
rb2
*
expterm
);
real
gf
=
SQRT
(
gf2
);
real
gf
=
SQRT
(
gf2
);
real
gf3
=
gf2
*
gf
;
real
gf3
=
gf2
*
gf
;
real
gf5
=
gf3
*
gf2
;
real
gf5
=
gf3
*
gf2
;
// reaction potential auxiliary terms
real
a10
=
-
gf3
;
real
a10
=
-
gf3
;
// reaction potential gradient auxiliary terms
real
expc1
=
1
-
expc
;
real
expc1
=
1
-
expc
;
real
a11
=
expc1
*
3
*
gf5
;
real
a11
=
expc1
*
3
*
gf5
;
// unweighted dipole reaction potential gradient tensor
real3
gux
=
GK_FD
*
make_real3
(
a10
+
deltaR
.
x
*
deltaR
.
x
*
a11
,
deltaR
.
x
*
deltaR
.
y
*
a11
,
deltaR
.
x
*
deltaR
.
z
*
a11
);
real3
gux
=
GK_FD
*
make_real3
(
a10
+
deltaR
.
x
*
deltaR
.
x
*
a11
,
deltaR
.
x
*
deltaR
.
y
*
a11
,
deltaR
.
x
*
deltaR
.
z
*
a11
);
real3
guy
=
make_real3
(
gux
.
y
,
GK_FD
*
(
a10
+
deltaR
.
y
*
deltaR
.
y
*
a11
),
GK_FD
*
deltaR
.
y
*
deltaR
.
z
*
a11
);
real3
guy
=
make_real3
(
gux
.
y
,
GK_FD
*
(
a10
+
deltaR
.
y
*
deltaR
.
y
*
a11
),
GK_FD
*
deltaR
.
y
*
deltaR
.
z
*
a11
);
real3
guz
=
make_real3
(
gux
.
z
,
guy
.
z
,
GK_FD
*
(
a10
+
deltaR
.
z
*
deltaR
.
z
*
a11
));
real3
guz
=
make_real3
(
gux
.
z
,
guy
.
z
,
GK_FD
*
(
a10
+
deltaR
.
z
*
deltaR
.
z
*
a11
));
...
@@ -280,6 +264,11 @@ extern "C" __global__ void computeInducedField(
...
@@ -280,6 +264,11 @@ extern "C" __global__ void computeInducedField(
localData
[
threadIdx
.
x
].
inducedDipolePolar
=
data
.
inducedDipolePolar
;
localData
[
threadIdx
.
x
].
inducedDipolePolar
=
data
.
inducedDipolePolar
;
localData
[
threadIdx
.
x
].
thole
=
data
.
thole
;
localData
[
threadIdx
.
x
].
thole
=
data
.
thole
;
localData
[
threadIdx
.
x
].
damp
=
data
.
damp
;
localData
[
threadIdx
.
x
].
damp
=
data
.
damp
;
#ifdef USE_GK
localData
[
threadIdx
.
x
].
inducedDipoleS
=
data
.
inducedDipoleS
;
localData
[
threadIdx
.
x
].
inducedDipolePolarS
=
data
.
inducedDipolePolarS
;
localData
[
threadIdx
.
x
].
bornRadius
=
data
.
bornRadius
;
#endif
for
(
unsigned
int
j
=
0
;
j
<
TILE_SIZE
;
j
++
)
{
for
(
unsigned
int
j
=
0
;
j
<
TILE_SIZE
;
j
++
)
{
real3
delta
=
localData
[
tbx
+
j
].
pos
-
data
.
pos
;
real3
delta
=
localData
[
tbx
+
j
].
pos
-
data
.
pos
;
#ifdef USE_PERIODIC
#ifdef USE_PERIODIC
...
@@ -435,9 +424,8 @@ extern "C" __global__ void computeInducedField(
...
@@ -435,9 +424,8 @@ extern "C" __global__ void computeInducedField(
}
}
extern
"C"
__global__
void
updateInducedFieldBySOR
(
const
long
long
*
__restrict__
fixedField
,
const
long
long
*
__restrict__
fixedFieldPolar
,
extern
"C"
__global__
void
updateInducedFieldBySOR
(
const
long
long
*
__restrict__
fixedField
,
const
long
long
*
__restrict__
fixedFieldPolar
,
const
long
long
*
__restrict__
fixedFieldS
,
const
long
long
*
__restrict__
fixedFieldPolarS
,
const
long
long
*
__restrict__
fixedFieldS
,
const
long
long
*
__restrict__
inducedField
,
const
long
long
*
__restrict__
inducedFieldPolar
,
const
long
long
*
__restrict__
inducedField
,
const
long
long
*
__restrict__
inducedFieldPolar
,
real
*
__restrict__
inducedDipole
,
real
*
__restrict__
inducedDipole
,
real
*
__restrict__
inducedDipolePolar
,
const
float
*
__restrict__
polarizability
,
float2
*
__restrict__
errors
)
{
real
*
__restrict__
inducedDipolePolar
,
const
float
*
__restrict__
polarizability
,
float2
*
__restrict__
errors
)
{
extern
__shared__
real2
buffer
[];
extern
__shared__
real2
buffer
[];
const
float
polarSOR
=
0.55
f
;
const
float
polarSOR
=
0.55
f
;
#ifdef USE_EWALD
#ifdef USE_EWALD
...
@@ -455,10 +443,9 @@ extern "C" __global__ void updateInducedFieldBySOR(const long long* __restrict__
...
@@ -455,10 +443,9 @@ extern "C" __global__ void updateInducedFieldBySOR(const long long* __restrict__
int
fieldIndex
=
atom
+
component
*
PADDED_NUM_ATOMS
;
int
fieldIndex
=
atom
+
component
*
PADDED_NUM_ATOMS
;
real
previousDipole
=
inducedDipole
[
dipoleIndex
];
real
previousDipole
=
inducedDipole
[
dipoleIndex
];
real
previousDipolePolar
=
inducedDipolePolar
[
dipoleIndex
];
real
previousDipolePolar
=
inducedDipolePolar
[
dipoleIndex
];
long
long
fixed
=
fixedField
[
fieldIndex
]
+
(
fixedFieldS
==
NULL
?
(
long
long
)
0
:
fixedFieldS
[
fieldIndex
]);
long
long
fixedS
=
(
fixedFieldS
==
NULL
?
(
long
long
)
0
:
fixedFieldS
[
fieldIndex
]);
long
long
fixedPolar
=
fixedFieldPolar
[
fieldIndex
]
+
(
fixedFieldPolarS
==
NULL
?
(
long
long
)
0
:
fixedFieldPolarS
[
fieldIndex
]);
real
newDipole
=
scale
*
((
fixedField
[
fieldIndex
]
+
fixedS
+
inducedField
[
fieldIndex
])
*
fieldScale
+
ewaldScale
*
previousDipole
);
real
newDipole
=
scale
*
((
fixed
+
inducedField
[
fieldIndex
])
*
fieldScale
+
ewaldScale
*
previousDipole
);
real
newDipolePolar
=
scale
*
((
fixedFieldPolar
[
fieldIndex
]
+
fixedS
+
inducedFieldPolar
[
fieldIndex
])
*
fieldScale
+
ewaldScale
*
previousDipolePolar
);
real
newDipolePolar
=
scale
*
((
fixedPolar
+
inducedFieldPolar
[
fieldIndex
])
*
fieldScale
+
ewaldScale
*
previousDipolePolar
);
newDipole
=
previousDipole
+
polarSOR
*
(
newDipole
-
previousDipole
);
newDipole
=
previousDipole
+
polarSOR
*
(
newDipole
-
previousDipole
);
newDipolePolar
=
previousDipolePolar
+
polarSOR
*
(
newDipolePolar
-
previousDipolePolar
);
newDipolePolar
=
previousDipolePolar
+
polarSOR
*
(
newDipolePolar
-
previousDipolePolar
);
inducedDipole
[
dipoleIndex
]
=
newDipole
;
inducedDipole
[
dipoleIndex
]
=
newDipole
;
...
...
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