Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90035978
pppm_old.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Oct 28, 17:13
Size
4 KB
Mime Type
text/x-c
Expires
Wed, Oct 30, 17:13 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21997302
Attached To
rLAMMPS lammps
pppm_old.h
View Options
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef KSPACE_CLASS
KSpaceStyle
(
pppm
/
old
,
PPPMOld
)
#else
#ifndef LMP_PPPM_OLD_H
#define LMP_PPPM_OLD_H
#include "lmptype.h"
#include "mpi.h"
#ifdef FFT_SINGLE
typedef
float
FFT_SCALAR
;
#define MPI_FFT_SCALAR MPI_FLOAT
#else
typedef
double
FFT_SCALAR
;
#define MPI_FFT_SCALAR MPI_DOUBLE
#endif
#include "kspace.h"
namespace
LAMMPS_NS
{
class
PPPMOld
:
public
KSpace
{
public:
PPPMOld
(
class
LAMMPS
*
,
int
,
char
**
);
virtual
~
PPPMOld
();
virtual
void
init
();
virtual
void
setup
();
virtual
void
compute
(
int
,
int
);
virtual
int
timing
(
int
,
double
&
,
double
&
);
virtual
double
memory_usage
();
virtual
void
compute_group_group
(
int
,
int
,
int
);
protected:
int
me
,
nprocs
;
int
nfactors
;
int
*
factors
;
double
qsum
,
qsqsum
;
double
cutoff
;
double
volume
;
double
delxinv
,
delyinv
,
delzinv
,
delvolinv
;
double
shift
,
shiftone
;
int
peratom_allocate_flag
;
int
nxlo_in
,
nylo_in
,
nzlo_in
,
nxhi_in
,
nyhi_in
,
nzhi_in
;
int
nxlo_out
,
nylo_out
,
nzlo_out
,
nxhi_out
,
nyhi_out
,
nzhi_out
;
int
nxlo_ghost
,
nxhi_ghost
,
nylo_ghost
,
nyhi_ghost
,
nzlo_ghost
,
nzhi_ghost
;
int
nxlo_fft
,
nylo_fft
,
nzlo_fft
,
nxhi_fft
,
nyhi_fft
,
nzhi_fft
;
int
nlower
,
nupper
;
int
ngrid
,
nfft
,
nfft_both
;
int
nbuf
,
nbuf_peratom
;
FFT_SCALAR
***
density_brick
;
FFT_SCALAR
***
vdx_brick
,
***
vdy_brick
,
***
vdz_brick
;
FFT_SCALAR
***
u_brick
;
FFT_SCALAR
***
v0_brick
,
***
v1_brick
,
***
v2_brick
;
FFT_SCALAR
***
v3_brick
,
***
v4_brick
,
***
v5_brick
;
double
*
greensfn
;
double
**
vg
;
double
*
fkx
,
*
fky
,
*
fkz
;
FFT_SCALAR
*
density_fft
;
FFT_SCALAR
*
work1
,
*
work2
;
FFT_SCALAR
*
buf1
,
*
buf2
,
*
buf3
,
*
buf4
;
double
*
gf_b
;
FFT_SCALAR
**
rho1d
,
**
rho_coeff
;
// group-group interactions
int
group_allocate_flag
;
FFT_SCALAR
***
density_A_brick
,
***
density_B_brick
;
FFT_SCALAR
*
density_A_fft
,
*
density_B_fft
;
class
FFT3d
*
fft1
,
*
fft2
;
class
Remap
*
remap
;
int
**
part2grid
;
// storage for particle -> grid mapping
int
nmax
;
int
triclinic
;
// domain settings, orthog or triclinic
double
*
boxlo
;
// TIP4P settings
int
typeH
,
typeO
;
// atom types of TIP4P water H and O atoms
double
qdist
;
// distance from O site to negative charge
double
alpha
;
// geometric factor
void
set_grid
();
virtual
void
allocate
();
virtual
void
allocate_peratom
();
virtual
void
deallocate
();
virtual
void
deallocate_peratom
();
int
factorable
(
int
);
double
rms
(
double
,
double
,
bigint
,
double
,
double
**
);
double
diffpr
(
double
,
double
,
double
,
double
,
double
**
);
void
compute_gf_denom
();
virtual
void
particle_map
();
virtual
void
make_rho
();
virtual
void
brick2fft
();
virtual
void
fillbrick
();
virtual
void
fillbrick_peratom
();
virtual
void
poisson
();
virtual
void
poisson_peratom
();
virtual
void
fieldforce
();
virtual
void
fieldforce_peratom
();
void
procs2grid2d
(
int
,
int
,
int
,
int
*
,
int
*
);
void
compute_rho1d
(
const
FFT_SCALAR
&
,
const
FFT_SCALAR
&
,
const
FFT_SCALAR
&
);
void
compute_rho_coeff
();
void
slabcorr
();
// group-group interactions
virtual
void
allocate_groups
();
virtual
void
deallocate_groups
();
virtual
void
make_rho_groups
(
int
,
int
,
int
);
virtual
void
poisson_groups
(
int
);
/* ----------------------------------------------------------------------
denominator for Hockney-Eastwood Green's function
of x,y,z = sin(kx*deltax/2), etc
inf n-1
S(n,k) = Sum W(k+pi*j)**2 = Sum b(l)*(z*z)**l
j=-inf l=0
= -(z*z)**n /(2n-1)! * (d/dx)**(2n-1) cot(x) at z = sin(x)
gf_b = denominator expansion coeffs
------------------------------------------------------------------------- */
inline
double
gf_denom
(
const
double
&
x
,
const
double
&
y
,
const
double
&
z
)
const
{
double
sx
,
sy
,
sz
;
sz
=
sy
=
sx
=
0.0
;
for
(
int
l
=
order
-
1
;
l
>=
0
;
l
--
)
{
sx
=
gf_b
[
l
]
+
sx
*
x
;
sy
=
gf_b
[
l
]
+
sy
*
y
;
sz
=
gf_b
[
l
]
+
sz
*
z
;
}
double
s
=
sx
*
sy
*
sz
;
return
s
*
s
;
};
};
}
#endif
#endif
Event Timeline
Log In to Comment