Merge pull request #3198 from bathmatt/pair-dpd

DPD-BASIC kokkosification
This commit is contained in:
Axel Kohlmeyer
2022-04-08 17:48:28 -04:00
committed by GitHub
38 changed files with 3825 additions and 3182 deletions

View File

@ -88,12 +88,12 @@ OPT.
* :doc:`coul/tt <pair_coul_tt>`
* :doc:`coul/wolf (ko) <pair_coul>`
* :doc:`coul/wolf/cs <pair_cs>`
* :doc:`dpd (gio) <pair_dpd>`
* :doc:`dpd (giko) <pair_dpd>`
* :doc:`dpd/fdt <pair_dpd_fdt>`
* :doc:`dpd/ext <pair_dpd_ext>`
* :doc:`dpd/ext/tstat <pair_dpd_ext>`
* :doc:`dpd/ext (k) <pair_dpd_ext>`
* :doc:`dpd/ext/tstat (k) <pair_dpd_ext>`
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
* :doc:`dpd/tstat (go) <pair_dpd>`
* :doc:`dpd/tstat (gko) <pair_dpd>`
* :doc:`dsmc <pair_dsmc>`
* :doc:`e3b <pair_e3b>`
* :doc:`drip <pair_drip>`

View File

@ -1,20 +1,22 @@
.. index:: pair_style dpd
.. index:: pair_style dpd/gpu
.. index:: pair_style dpd/intel
.. index:: pair_style dpd/kk
.. index:: pair_style dpd/omp
.. index:: pair_style dpd/tstat
.. index:: pair_style dpd/tstat/gpu
.. index:: pair_style dpd/tstat/kk
.. index:: pair_style dpd/tstat/omp
pair_style dpd command
======================
Accelerator Variants: *dpd/gpu*, *dpd/intel*, *dpd/omp*
Accelerator Variants: *dpd/gpu*, *dpd/intel*, *dpd/kk*, *dpd/omp*
pair_style dpd/tstat command
============================
Accelerator Variants: *dpd/tstat/gpu*, *dpd/tstat/omp*
Accelerator Variants: *dpd/tstat/gpu*, *dpd/tstat/kk*, *dpd/tstat/omp*
Syntax
""""""

View File

@ -1,12 +1,18 @@
.. index:: pair_style dpd/ext
.. index:: pair_style dpd/ext/kk
.. index:: pair_style dpd/ext/tstat
.. index:: pair_style dpd/ext/tstat/kk
pair_style dpd/ext command
==========================
Accelerator Variants: dpd/ext/kk
pair_style dpd/ext/tstat command
================================
Accelerator Variants: dpd/ext/tstat/kk
Syntax
""""""
@ -137,6 +143,10 @@ except that A is not included.
----------
.. include:: accel_styles.rst
----------
**Mixing, shift, table, tail correction, restart, rRESPA info**\ :

View File

@ -1,10 +1,16 @@
Examples for Extended Dissipative Particle Dynamics (DPD)
---------------------------------------------------------
This directory contains examples for extended DPD simulations
Examples for Basic Dissipative Particle Dynamics (DPD)
------------------------------------------------------
This directory contains examples for DPD simulations using
pair styles from the DPD-BASIC package.
1) 'dpdext' - test case (DPD fluid) for 'dpdext' pair style (in.dpdext) and an initial
configuration (dpdext.data)
1) 'dpd' - simple example (DPD fluid) for 'dpd' pair style (in.dpd)
2) 'dpdext_tstat' - test case (coarse-grained SPC/E water) for 'dpdext/tstat' pair style
(in.cg_spce), an initial configuration (dpdext.data) and tabulated potential
2) 'dpd_tstat' - coarse-grained SPC/E water example for 'dpd/tstat' pair style
(in.dpd_tstat), an initial configuration (dpdext.data) and tabulated potential
(cg_spce_table.pot) obtained by bottom-up coarse-graining of the atomistic SPC/E water.
3) 'dpdext' - simple example (DPD fluid) for 'dpd/ext' pair style (in.dpdext)
4) 'dpdext_tstat' - coarse-grained SPC/E water example for 'dpd/ext/tstat' pair style
(in.dpdext_tstat), an initial configuration (dpdext.data) and tabulated potential
(cg_spce_table.pot) obtained by bottom-up coarse-graining of the atomistic SPC/E water.

View File

@ -0,0 +1,43 @@
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
region simBox block 0 ${L} 0 ${L} 0 ${L}
create_box 2 simBox
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
create_atoms 2 random 100 13245 simBox
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 1 by 1 MPI processor grid
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_style dpd 1 ${rc} 3854262
pair_style dpd 1 1 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.083 | 3.083 | 3.083 Mbytes
Step Time Temp Press
0 0 1 9.5226009
100 1 1.9913643 9.2036029
200 2 1.6321732 9.2787957
300 3 1.3533438 8.3081433
400 4 1.2125884 8.0809065
500 5 1.0682216 8.0877925
600 6 0.99100473 8.1100319
700 7 0.99731243 7.8225195
800 8 1.0597693 7.8368218
900 9 0.99038588 7.9450569
1000 10 1.077129 7.5857015
1100 11 0.99070336 7.5138128
1200 12 1.013894 7.2794857
1300 13 1.0433203 7.7439871
1400 14 1.0285528 7.5662235
1500 15 0.99180601 7.8376313
1600 16 0.98059071 8.0243735
1700 17 1.0070947 8.3186893
1800 18 0.99507569 7.0786393
1900 19 1.0040168 7.8120389
2000 20 0.98636164 7.472185
2100 21 0.95811165 7.7085985
2200 22 0.93568327 6.9424246
2300 23 0.92804144 8.1239435
2400 24 0.94940276 7.6108611
2500 25 1.0535153 8.0772721
2600 26 1.0902144 7.5609768
2700 27 1.0737336 7.8706755
2800 28 0.93074581 7.3699993
2900 29 1.0440705 7.6454988
3000 30 0.93868164 7.841168
3100 31 1.0172025 7.6856163
3200 32 1.0405368 7.5325735
3300 33 0.96721201 7.8262809
3400 34 0.90430758 7.1693921
3500 35 0.89938433 7.865845
3600 36 0.9907178 7.3462971
3700 37 1.0311879 7.8876401
3800 38 0.98339132 7.3413929
3900 39 1.2111264 8.0968408
4000 40 1.062489 7.7315959
4100 41 0.94737492 7.3386028
4200 42 1.0453816 8.2017304
4300 43 0.97024897 7.7379624
4400 44 0.9553861 7.8047635
4500 45 1.043252 7.7486215
4600 46 0.98611474 8.1237053
4700 47 0.98624285 8.5801642
4800 48 0.97176754 7.1540299
4900 49 1.0165401 7.3853841
5000 50 0.88359115 7.5541592
Loop time of 0.359916 on 1 procs for 5000 steps with 200 atoms
Performance: 12002788.048 tau/day, 13892.116 timesteps/s
99.5% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.24932 | 0.24932 | 0.24932 | 0.0 | 69.27
Neigh | 0.068726 | 0.068726 | 0.068726 | 0.0 | 19.10
Comm | 0.028691 | 0.028691 | 0.028691 | 0.0 | 7.97
Output | 0.00066318 | 0.00066318 | 0.00066318 | 0.0 | 0.18
Modify | 0.0078062 | 0.0078062 | 0.0078062 | 0.0 | 2.17
Other | | 0.004713 | | | 1.31
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 546 ave 546 max 546 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1649 ave 1649 max 1649 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1649
Ave neighs/atom = 8.245
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 2 by 2 MPI processor grid
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_style dpd 1 ${rc} 3854262
pair_style dpd 1 1 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.064 | 3.064 | 3.064 Mbytes
Step Time Temp Press
0 0 1 8.603339
100 1 1.8691059 8.9058297
200 2 1.4500635 8.7420141
300 3 1.3089453 8.3985981
400 4 1.1647803 8.2948808
500 5 1.1399445 7.7421817
600 6 1.0297918 7.2040397
700 7 1.046713 7.6115758
800 8 0.93523712 7.6885563
900 9 0.94701493 7.9662712
1000 10 0.99302416 7.7606189
1100 11 0.98975674 7.5207427
1200 12 0.98661662 7.3565222
1300 13 1.0289377 7.6110453
1400 14 0.9982501 7.8065701
1500 15 1.0043888 7.3957185
1600 16 1.0175816 7.7885955
1700 17 1.0252117 7.5076258
1800 18 1.0275139 8.1052823
1900 19 1.0021054 7.0385989
2000 20 1.0489009 7.7138149
2100 21 0.91250488 7.3540839
2200 22 0.92470996 7.9600233
2300 23 0.96932725 7.3106045
2400 24 0.93443088 7.4594635
2500 25 0.95596038 7.2544715
2600 26 1.0368594 7.6229263
2700 27 0.94639332 7.4869636
2800 28 0.99917354 7.9806636
2900 29 0.95048071 7.0086404
3000 30 0.95226181 7.7807205
3100 31 0.95864429 7.8059442
3200 32 0.85678761 7.3416027
3300 33 0.95951096 7.3467158
3400 34 0.97665772 8.2900991
3500 35 0.92885927 7.5385993
3600 36 1.0455015 8.0627999
3700 37 0.91911809 8.0371736
3800 38 0.92022241 7.5803999
3900 39 1.0465522 7.6920189
4000 40 0.98568475 7.4529825
4100 41 1.0389372 7.2273346
4200 42 1.0257545 7.6081878
4300 43 1.0937573 8.2158237
4400 44 1.0908817 7.5021567
4500 45 1.0482874 7.5924368
4600 46 1.1468439 8.0285157
4700 47 1.119683 8.3365123
4800 48 1.0963877 7.51772
4900 49 1.0766762 7.3137035
5000 50 1.0359203 7.7354572
Loop time of 0.148597 on 4 procs for 5000 steps with 200 atoms
Performance: 29071936.422 tau/day, 33648.075 timesteps/s
98.8% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.059602 | 0.063397 | 0.068622 | 1.3 | 42.66
Neigh | 0.017747 | 0.018193 | 0.018698 | 0.3 | 12.24
Comm | 0.055145 | 0.061014 | 0.065369 | 1.5 | 41.06
Output | 0.00042708 | 0.00050725 | 0.00071024 | 0.0 | 0.34
Modify | 0.0023494 | 0.002532 | 0.0026434 | 0.2 | 1.70
Other | | 0.002953 | | | 1.99
Nlocal: 50 ave 52 max 48 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Nghost: 292.75 ave 299 max 287 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 413.5 ave 441 max 399 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Total # of neighbors = 1654
Ave neighs/atom = 8.27
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -1,4 +1,4 @@
DPD Fluid
Coarse-Grained SPC/E Water
2180 atoms

View File

@ -0,0 +1,354 @@
VOTCA
N 351 R 2.0 9.0
1 2.000000E+00 2.190202E+01 7.229762E+01
2 2.020000E+00 2.048957E+01 6.887333E+01
3 2.040000E+00 1.915004E+01 6.500604E+01
4 2.060000E+00 1.789228E+01 6.069573E+01
5 2.080000E+00 1.672516E+01 5.594242E+01
6 2.100000E+00 1.565754E+01 5.074609E+01
7 2.120000E+00 1.467088E+01 4.787307E+01
8 2.140000E+00 1.374450E+01 4.471740E+01
9 2.160000E+00 1.288407E+01 4.127908E+01
10 2.180000E+00 1.209522E+01 3.755811E+01
11 2.200000E+00 1.138363E+01 3.355449E+01
12 2.220000E+00 1.072913E+01 3.188695E+01
13 2.240000E+00 1.010845E+01 3.017359E+01
14 2.260000E+00 9.522496E+00 2.841440E+01
15 2.280000E+00 8.972182E+00 2.660938E+01
16 2.300000E+00 8.458426E+00 2.475854E+01
17 2.320000E+00 8.014166E+00 2.006698E+01
18 2.340000E+00 7.639767E+00 1.777244E+01
19 2.360000E+00 7.287288E+00 1.787493E+01
20 2.380000E+00 6.908790E+00 2.037445E+01
21 2.400000E+00 6.456330E+00 2.527099E+01
22 2.420000E+00 5.858025E+00 3.384695E+01
23 2.440000E+00 5.130955E+00 3.814748E+01
24 2.460000E+00 4.360629E+00 3.817257E+01
25 2.480000E+00 3.632555E+00 3.392224E+01
26 2.500000E+00 3.032242E+00 2.539647E+01
27 2.520000E+00 2.547993E+00 2.297813E+01
28 2.540000E+00 2.115131E+00 2.025763E+01
29 2.560000E+00 1.739702E+00 1.723497E+01
30 2.580000E+00 1.427747E+00 1.391013E+01
31 2.600000E+00 1.185311E+00 1.028314E+01
32 2.620000E+00 9.860176E-01 9.578245E+00
33 2.640000E+00 8.048986E-01 8.465708E+00
34 2.660000E+00 6.501069E-01 6.945526E+00
35 2.680000E+00 5.297952E-01 5.017699E+00
36 2.700000E+00 4.521166E-01 2.682227E+00
37 2.720000E+00 3.986447E-01 2.615311E+00
38 2.740000E+00 3.494900E-01 2.250522E+00
39 2.760000E+00 3.106097E-01 1.587859E+00
40 2.780000E+00 2.879614E-01 6.273237E-01
41 2.800000E+00 2.875026E-01 -6.310851E-01
42 2.820000E+00 3.002733E-01 -6.543549E-01
43 2.840000E+00 3.140112E-01 -7.277911E-01
44 2.860000E+00 3.297194E-01 -8.513935E-01
45 2.880000E+00 3.484014E-01 -1.025162E+00
46 2.900000E+00 3.710604E-01 -1.249097E+00
47 2.920000E+00 3.974884E-01 -1.380483E+00
48 2.940000E+00 4.257507E-01 -1.432530E+00
49 2.960000E+00 4.542607E-01 -1.405240E+00
50 2.980000E+00 4.814314E-01 -1.298611E+00
51 3.000000E+00 5.056762E-01 -1.112645E+00
52 3.020000E+00 5.266502E-01 -9.832894E-01
53 3.040000E+00 5.449492E-01 -8.451544E-01
54 3.060000E+00 5.603978E-01 -6.982396E-01
55 3.080000E+00 5.728203E-01 -5.425450E-01
56 3.100000E+00 5.820411E-01 -3.780706E-01
57 3.120000E+00 5.882509E-01 -2.409307E-01
58 3.140000E+00 5.915991E-01 -9.190908E-02
59 3.160000E+00 5.918481E-01 6.899430E-02
60 3.180000E+00 5.887601E-01 2.417794E-01
61 3.200000E+00 5.820977E-01 4.264463E-01
62 3.220000E+00 5.733491E-01 4.528343E-01
63 3.240000E+00 5.638075E-01 5.057356E-01
64 3.260000E+00 5.529429E-01 5.851503E-01
65 3.280000E+00 5.402248E-01 6.910784E-01
66 3.300000E+00 5.251230E-01 8.235199E-01
67 3.320000E+00 5.086524E-01 8.236482E-01
68 3.340000E+00 4.921725E-01 8.244583E-01
69 3.360000E+00 4.756696E-01 8.259503E-01
70 3.380000E+00 4.591299E-01 8.281240E-01
71 3.400000E+00 4.425400E-01 8.309796E-01
72 3.420000E+00 4.259181E-01 8.311861E-01
73 3.440000E+00 4.092937E-01 8.312292E-01
74 3.460000E+00 3.926700E-01 8.311089E-01
75 3.480000E+00 3.760504E-01 8.308252E-01
76 3.500000E+00 3.594381E-01 8.303781E-01
77 3.520000E+00 3.428394E-01 8.295412E-01
78 3.540000E+00 3.262547E-01 8.289646E-01
79 3.560000E+00 3.096790E-01 8.286483E-01
80 3.580000E+00 2.931071E-01 8.285923E-01
81 3.600000E+00 2.765336E-01 8.287966E-01
82 3.620000E+00 2.599901E-01 8.254306E-01
83 3.640000E+00 2.435212E-01 8.213359E-01
84 3.660000E+00 2.271415E-01 8.165124E-01
85 3.680000E+00 2.108656E-01 8.109603E-01
86 3.700000E+00 1.947080E-01 8.046794E-01
87 3.720000E+00 1.790243E-01 7.653050E-01
88 3.740000E+00 1.640312E-01 7.356166E-01
89 3.760000E+00 1.495351E-01 7.156143E-01
90 3.780000E+00 1.353421E-01 7.052980E-01
91 3.800000E+00 1.212586E-01 7.046676E-01
92 3.820000E+00 1.072429E-01 6.965706E-01
93 3.840000E+00 9.340878E-02 6.865180E-01
94 3.860000E+00 7.979524E-02 6.745098E-01
95 3.880000E+00 6.644142E-02 6.605462E-01
96 3.900000E+00 5.338643E-02 6.446270E-01
97 3.920000E+00 4.067486E-02 6.268536E-01
98 3.940000E+00 2.829935E-02 6.110218E-01
99 3.960000E+00 1.622105E-02 5.971317E-01
100 3.980000E+00 4.401131E-03 5.851833E-01
101 4.000000E+00 -7.199230E-03 5.751764E-01
102 4.020000E+00 -1.856170E-02 5.611971E-01
103 4.040000E+00 -2.965216E-02 5.479743E-01
104 4.060000E+00 -4.048572E-02 5.355079E-01
105 4.080000E+00 -5.107752E-02 5.237981E-01
106 4.100000E+00 -6.144268E-02 5.128447E-01
107 4.120000E+00 -7.151117E-02 4.939504E-01
108 4.140000E+00 -8.119856E-02 4.747353E-01
109 4.160000E+00 -9.049845E-02 4.551994E-01
110 4.180000E+00 -9.940440E-02 4.353427E-01
111 4.200000E+00 -1.079100E-01 4.151651E-01
112 4.220000E+00 -1.159565E-01 3.900062E-01
113 4.240000E+00 -1.235312E-01 3.679865E-01
114 4.260000E+00 -1.306969E-01 3.491061E-01
115 4.280000E+00 -1.375164E-01 3.333651E-01
116 4.300000E+00 -1.440524E-01 3.207633E-01
117 4.320000E+00 -1.503014E-01 3.040292E-01
118 4.340000E+00 -1.562092E-01 2.866389E-01
119 4.360000E+00 -1.617626E-01 2.685925E-01
120 4.380000E+00 -1.669485E-01 2.498899E-01
121 4.400000E+00 -1.717538E-01 2.305311E-01
122 4.420000E+00 -1.760941E-01 2.036400E-01
123 4.440000E+00 -1.799054E-01 1.776469E-01
124 4.460000E+00 -1.832059E-01 1.525518E-01
125 4.480000E+00 -1.860135E-01 1.283546E-01
126 4.500000E+00 -1.883461E-01 1.050554E-01
127 4.520000E+00 -1.902569E-01 8.558005E-02
128 4.540000E+00 -1.917515E-01 6.344105E-02
129 4.560000E+00 -1.927768E-01 3.863842E-02
130 4.580000E+00 -1.932793E-01 1.117216E-02
131 4.600000E+00 -1.932059E-01 -1.895774E-02
132 4.620000E+00 -1.926829E-01 -3.331832E-02
133 4.640000E+00 -1.918741E-01 -4.753697E-02
134 4.660000E+00 -1.907824E-01 -6.161370E-02
135 4.680000E+00 -1.894105E-01 -7.554851E-02
136 4.700000E+00 -1.877614E-01 -8.934140E-02
137 4.720000E+00 -1.859159E-01 -9.580751E-02
138 4.740000E+00 -1.839049E-01 -1.058976E-01
139 4.760000E+00 -1.816559E-01 -1.196116E-01
140 4.780000E+00 -1.790963E-01 -1.369495E-01
141 4.800000E+00 -1.761537E-01 -1.579114E-01
142 4.820000E+00 -1.728280E-01 -1.744216E-01
143 4.840000E+00 -1.691864E-01 -1.895036E-01
144 4.860000E+00 -1.652574E-01 -2.031575E-01
145 4.880000E+00 -1.610696E-01 -2.153832E-01
146 4.900000E+00 -1.566516E-01 -2.261808E-01
147 4.920000E+00 -1.521084E-01 -2.290714E-01
148 4.940000E+00 -1.474515E-01 -2.375453E-01
149 4.960000E+00 -1.425693E-01 -2.516026E-01
150 4.980000E+00 -1.373502E-01 -2.712432E-01
151 5.000000E+00 -1.316824E-01 -2.964672E-01
152 5.020000E+00 -1.257009E-01 -3.016666E-01
153 5.040000E+00 -1.196162E-01 -3.067953E-01
154 5.060000E+00 -1.134296E-01 -3.118535E-01
155 5.080000E+00 -1.071425E-01 -3.168409E-01
156 5.100000E+00 -1.007564E-01 -3.217577E-01
157 5.120000E+00 -9.430843E-02 -3.230025E-01
158 5.140000E+00 -8.783782E-02 -3.240216E-01
159 5.160000E+00 -8.134907E-02 -3.248150E-01
160 5.180000E+00 -7.484672E-02 -3.253827E-01
161 5.200000E+00 -6.833527E-02 -3.257248E-01
162 5.220000E+00 -6.171989E-02 -3.350608E-01
163 5.240000E+00 -5.496291E-02 -3.398853E-01
164 5.260000E+00 -4.815456E-02 -3.401983E-01
165 5.280000E+00 -4.138506E-02 -3.359997E-01
166 5.300000E+00 -3.474465E-02 -3.272895E-01
167 5.320000E+00 -2.866480E-02 -2.819209E-01
168 5.340000E+00 -2.341879E-02 -2.439062E-01
169 5.360000E+00 -1.885953E-02 -2.132454E-01
170 5.380000E+00 -1.483994E-02 -1.899386E-01
171 5.400000E+00 -1.121296E-02 -1.739857E-01
172 5.420000E+00 -7.974056E-03 -1.497398E-01
173 5.440000E+00 -5.229953E-03 -1.245058E-01
174 5.460000E+00 -3.000413E-03 -9.828350E-02
175 5.480000E+00 -1.305201E-03 -7.107305E-02
176 5.500000E+00 -1.640790E-04 -4.287441E-02
177 5.520000E+00 6.371635E-04 -3.612657E-02
178 5.540000E+00 1.236053E-03 -2.263906E-02
179 5.560000E+00 1.497795E-03 -2.411882E-03
180 5.580000E+00 1.287597E-03 2.455496E-02
181 5.600000E+00 4.706651E-04 5.826147E-02
182 5.620000E+00 -7.026386E-04 5.910929E-02
183 5.640000E+00 -1.895322E-03 6.019943E-02
184 5.660000E+00 -3.112231E-03 6.153190E-02
185 5.680000E+00 -4.358213E-03 6.310668E-02
186 5.700000E+00 -5.638114E-03 6.492378E-02
187 5.720000E+00 -6.949688E-03 6.610584E-02
188 5.740000E+00 -8.277238E-03 6.652145E-02
189 5.760000E+00 -9.605436E-03 6.617062E-02
190 5.780000E+00 -1.091895E-02 6.505335E-02
191 5.800000E+00 -1.220246E-02 6.316963E-02
192 5.820000E+00 -1.341489E-02 5.820182E-02
193 5.840000E+00 -1.453566E-02 5.400257E-02
194 5.860000E+00 -1.558012E-02 5.057189E-02
195 5.880000E+00 -1.656366E-02 4.790978E-02
196 5.900000E+00 -1.750164E-02 4.601622E-02
197 5.920000E+00 -1.840088E-02 4.358369E-02
198 5.940000E+00 -1.923199E-02 3.920163E-02
199 5.960000E+00 -1.995595E-02 3.287003E-02
200 5.980000E+00 -2.053379E-02 2.458889E-02
201 6.000000E+00 -2.092651E-02 1.435822E-02
202 6.020000E+00 -2.120502E-02 1.352840E-02
203 6.040000E+00 -2.146907E-02 1.291186E-02
204 6.060000E+00 -2.172292E-02 1.250861E-02
205 6.080000E+00 -2.197084E-02 1.231865E-02
206 6.100000E+00 -2.221709E-02 1.234198E-02
207 6.120000E+00 -2.246474E-02 1.237271E-02
208 6.140000E+00 -2.270998E-02 1.210114E-02
209 6.160000E+00 -2.294677E-02 1.152726E-02
210 6.180000E+00 -2.316905E-02 1.065107E-02
211 6.200000E+00 -2.337079E-02 9.472569E-03
212 6.220000E+00 -2.332237E-02 -1.276224E-02
213 6.240000E+00 -2.292243E-02 -2.567822E-02
214 6.260000E+00 -2.235736E-02 -2.927535E-02
215 6.280000E+00 -2.181354E-02 -2.355364E-02
216 6.300000E+00 -2.147734E-02 -8.513096E-03
217 6.320000E+00 -2.141633E-02 1.466366E-03
218 6.340000E+00 -2.149820E-02 5.775798E-03
219 6.360000E+00 -2.160956E-02 4.415202E-03
220 6.380000E+00 -2.163701E-02 -2.615423E-03
221 6.400000E+00 -2.146714E-02 -1.531608E-02
222 6.420000E+00 -2.107402E-02 -2.337955E-02
223 6.440000E+00 -2.055660E-02 -2.774728E-02
224 6.460000E+00 -1.998877E-02 -2.841924E-02
225 6.480000E+00 -1.944446E-02 -2.539546E-02
226 6.500000E+00 -1.899759E-02 -1.867591E-02
227 6.520000E+00 -1.869042E-02 -1.259095E-02
228 6.540000E+00 -1.847196E-02 -9.804901E-03
229 6.560000E+00 -1.827623E-02 -1.031775E-02
230 6.580000E+00 -1.803726E-02 -1.412951E-02
231 6.600000E+00 -1.768906E-02 -2.124018E-02
232 6.620000E+00 -1.710949E-02 -3.551655E-02
233 6.640000E+00 -1.631641E-02 -4.259122E-02
234 6.660000E+00 -1.545385E-02 -4.246419E-02
235 6.680000E+00 -1.466585E-02 -3.513545E-02
236 6.700000E+00 -1.409644E-02 -2.060502E-02
237 6.720000E+00 -1.374966E-02 -1.461056E-02
238 6.740000E+00 -1.349054E-02 -1.183851E-02
239 6.760000E+00 -1.325464E-02 -1.228886E-02
240 6.780000E+00 -1.297750E-02 -1.596163E-02
241 6.800000E+00 -1.259469E-02 -2.285680E-02
242 6.820000E+00 -1.213049E-02 -2.349903E-02
243 6.840000E+00 -1.165728E-02 -2.375897E-02
244 6.860000E+00 -1.118268E-02 -2.363664E-02
245 6.880000E+00 -1.071436E-02 -2.313203E-02
246 6.900000E+00 -1.025995E-02 -2.224514E-02
247 6.920000E+00 -9.817276E-03 -2.203990E-02
248 6.940000E+00 -9.377653E-03 -2.193988E-02
249 6.960000E+00 -8.938979E-03 -2.194508E-02
250 6.980000E+00 -8.499148E-03 -2.205550E-02
251 7.000000E+00 -8.056057E-03 -2.227113E-02
252 7.020000E+00 -7.597830E-03 -2.345789E-02
253 7.040000E+00 -7.121492E-03 -2.408210E-02
254 7.060000E+00 -6.638296E-03 -2.414376E-02
255 7.080000E+00 -6.159492E-03 -2.364288E-02
256 7.100000E+00 -5.696331E-03 -2.257946E-02
257 7.120000E+00 -5.301441E-03 -1.729553E-02
258 7.140000E+00 -4.989070E-03 -1.432759E-02
259 7.160000E+00 -4.712898E-03 -1.367562E-02
260 7.180000E+00 -4.426605E-03 -1.533964E-02
261 7.200000E+00 -4.083872E-03 -1.931964E-02
262 7.220000E+00 -3.631995E-03 -2.538390E-02
263 7.240000E+00 -3.087883E-03 -2.854317E-02
264 7.260000E+00 -2.509635E-03 -2.879748E-02
265 7.280000E+00 -1.955351E-03 -2.614680E-02
266 7.300000E+00 -1.483130E-03 -2.059115E-02
267 7.320000E+00 -1.113389E-03 -1.639767E-02
268 7.340000E+00 -8.266321E-04 -1.229279E-02
269 7.360000E+00 -6.210869E-04 -8.276492E-03
270 7.380000E+00 -4.949818E-04 -4.348786E-03
271 7.400000E+00 -4.465449E-04 -5.096684E-04
272 7.420000E+00 -5.304321E-04 8.162452E-03
273 7.440000E+00 -7.436056E-04 1.241897E-02
274 7.460000E+00 -9.977534E-04 1.225988E-02
275 7.480000E+00 -1.204563E-03 7.685191E-03
276 7.500000E+00 -1.275724E-03 -1.305104E-03
277 7.520000E+00 -1.199415E-03 -5.916706E-03
278 7.540000E+00 -1.055417E-03 -8.074089E-03
279 7.560000E+00 -8.928131E-04 -7.777253E-03
280 7.580000E+00 -7.606883E-04 -5.026198E-03
281 7.600000E+00 -7.081267E-04 1.790768E-04
282 7.620000E+00 -7.213835E-04 1.157786E-03
283 7.640000E+00 -7.548855E-04 2.203601E-03
284 7.660000E+00 -8.099749E-04 3.316523E-03
285 7.680000E+00 -8.879938E-04 4.496550E-03
286 7.700000E+00 -9.902843E-04 5.743685E-03
287 7.720000E+00 -1.122403E-03 7.421734E-03
288 7.740000E+00 -1.285295E-03 8.820936E-03
289 7.760000E+00 -1.473382E-03 9.941291E-03
290 7.780000E+00 -1.681087E-03 1.078280E-02
291 7.800000E+00 -1.902835E-03 1.134546E-02
292 7.820000E+00 -2.225281E-03 2.008573E-02
293 7.840000E+00 -2.673724E-03 2.394500E-02
294 7.860000E+00 -3.150542E-03 2.292328E-02
295 7.880000E+00 -3.558115E-03 1.702056E-02
296 7.900000E+00 -3.798824E-03 6.236836E-03
297 7.920000E+00 -3.844315E-03 -1.142168E-03
298 7.940000E+00 -3.774961E-03 -5.247538E-03
299 7.960000E+00 -3.656237E-03 -6.079274E-03
300 7.980000E+00 -3.553615E-03 -3.637376E-03
301 8.000000E+00 -3.532566E-03 2.078155E-03
302 8.020000E+00 -3.611956E-03 5.494873E-03
303 8.040000E+00 -3.737724E-03 6.716053E-03
304 8.060000E+00 -3.865961E-03 5.741694E-03
305 8.080000E+00 -3.952755E-03 2.571796E-03
306 8.100000E+00 -3.954196E-03 -2.793640E-03
307 8.120000E+00 -3.873685E-03 -5.086591E-03
308 8.140000E+00 -3.757567E-03 -6.354313E-03
309 8.160000E+00 -3.626347E-03 -6.596805E-03
310 8.180000E+00 -3.500530E-03 -5.814068E-03
311 8.200000E+00 -3.400620E-03 -4.006101E-03
312 8.220000E+00 -3.334411E-03 -2.730570E-03
313 8.240000E+00 -3.286762E-03 -2.150229E-03
314 8.260000E+00 -3.243768E-03 -2.265076E-03
315 8.280000E+00 -3.191524E-03 -3.075114E-03
316 8.300000E+00 -3.116129E-03 -4.580340E-03
317 8.320000E+00 -2.964210E-03 -1.014102E-02
318 8.340000E+00 -2.729309E-03 -1.287854E-02
319 8.360000E+00 -2.467889E-03 -1.279292E-02
320 8.380000E+00 -2.236413E-03 -9.884157E-03
321 8.400000E+00 -2.091344E-03 -4.152240E-03
322 8.420000E+00 -2.034875E-03 -1.692189E-03
323 8.440000E+00 -2.015752E-03 -4.177491E-04
324 8.460000E+00 -2.010261E-03 -3.289192E-04
325 8.480000E+00 -1.994691E-03 -1.425700E-03
326 8.500000E+00 -1.945329E-03 -3.708091E-03
327 8.520000E+00 -1.867098E-03 -4.115259E-03
328 8.540000E+00 -1.780711E-03 -4.523663E-03
329 8.560000E+00 -1.686143E-03 -4.933304E-03
330 8.580000E+00 -1.583370E-03 -5.344181E-03
331 8.600000E+00 -1.472368E-03 -5.756296E-03
332 8.620000E+00 -1.328792E-03 -8.394009E-03
333 8.640000E+00 -1.144899E-03 -9.787974E-03
334 8.660000E+00 -9.455644E-04 -9.938189E-03
335 8.680000E+00 -7.556630E-04 -8.844656E-03
336 8.700000E+00 -6.000698E-04 -6.507373E-03
337 8.720000E+00 -5.364035E-04 -3.286769E-04
338 8.740000E+00 -5.681458E-04 3.033482E-03
339 8.760000E+00 -6.389659E-04 3.579102E-03
340 8.780000E+00 -6.925330E-04 1.308185E-03
341 8.800000E+00 -6.725164E-04 -3.779270E-03
342 8.820000E+00 -5.113768E-04 -1.169180E-02
343 8.840000E+00 -2.305599E-04 -1.574700E-02
344 8.860000E+00 9.278768E-05 -1.594487E-02
345 8.880000E+00 3.815195E-04 -1.228542E-02
346 8.900000E+00 5.584889E-04 -4.768636E-03
347 8.920000E+00 6.079481E-04 -2.335309E-04
348 8.940000E+00 5.700798E-04 3.964121E-03
349 8.960000E+00 4.516330E-04 7.824320E-03
350 8.980000E+00 2.593567E-04 1.134707E-02
351 9.000000E+00 0.000000E+00 1.453236E-02

View File

@ -0,0 +1,31 @@
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
pair_coeff 1 1 dpd/tstat 10.0 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.38 | 5.38 | 5.38 Mbytes
Step Time Temp Press
0 0 300 7459.7935
100 100 309.27219 6997.2438
200 200 311.23318 9940.3922
300 300 300.14145 7970.3486
400 400 293.17924 8390.7272
500 500 285.9647 7304.1147
600 600 291.15512 6605.1675
700 700 294.54557 7708.3815
800 800 288.72442 8641.2675
900 900 294.83288 7145.1684
1000 1000 291.12446 8525.4556
Loop time of 10.1894 on 1 procs for 1000 steps with 2180 atoms
Performance: 8.479 ns/day, 2.830 hours/ns, 98.141 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 10.02 | 10.02 | 10.02 | 0.0 | 98.34
Neigh | 0.087623 | 0.087623 | 0.087623 | 0.0 | 0.86
Comm | 0.055526 | 0.055526 | 0.055526 | 0.0 | 0.54
Output | 0.00026505 | 0.00026505 | 0.00026505 | 0.0 | 0.00
Modify | 0.013958 | 0.013958 | 0.013958 | 0.0 | 0.14
Other | | 0.01163 | | | 0.11
Nlocal: 2180 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6741 ave 6741 max 6741 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261567 ave 261567 max 261567 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261567
Ave neighs/atom = 119.98486
Neighbor list builds = 14
Dangerous builds = 0
Total wall time: 0:00:10

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
pair_coeff 1 1 dpd/tstat 10.0 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 7929.9249
100 100 305.51763 8531.8105
200 200 304.43334 8697.989
300 300 292.42805 6865.4712
400 400 300.66447 7606.6995
500 500 298.43456 8713.2403
600 600 298.10981 6913.5475
700 700 297.39737 9121.8642
800 800 298.23888 7833.1307
900 900 293.91793 8423.8417
1000 1000 299.65933 7974.9976
Loop time of 2.82436 on 4 procs for 1000 steps with 2180 atoms
Performance: 30.591 ns/day, 0.785 hours/ns, 354.062 timesteps/s
99.7% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.6238 | 2.644 | 2.6909 | 1.7 | 93.61
Neigh | 0.021524 | 0.021958 | 0.022778 | 0.3 | 0.78
Comm | 0.10035 | 0.1479 | 0.16842 | 7.2 | 5.24
Output | 0.00019058 | 0.00021173 | 0.00026852 | 0.0 | 0.01
Modify | 0.0041395 | 0.0041846 | 0.0042798 | 0.1 | 0.15
Other | | 0.006091 | | | 0.22
Nlocal: 545 ave 559 max 536 min
Histogram: 1 0 1 1 0 0 0 0 0 1
Nghost: 3613.5 ave 3634 max 3604 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Neighs: 65402 ave 68101 max 63621 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Total # of neighbors = 261608
Ave neighs/atom = 120.00367
Neighbor list builds = 14
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -4,9 +4,9 @@ variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
units lj
boundary p p p
atom_style atomic
atom_style atomic
dimension 3
newton on
comm_modify vel yes
@ -16,29 +16,27 @@ variable L equal 5.0
lattice fcc 3.0
region simBox block 0 ${L} 0 ${L} 0 ${L}
create_box 2 simBox
#create_atoms 1 region simBox
create_atoms 1 random 100 132456 simBox
create_atoms 2 random 100 132456 simBox
create_atoms 1 random 100 12456 simBox
create_atoms 2 random 100 13245 simBox
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext ${T} ${rc} 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 500
thermo 100
fix 1 all nve
run 50000
run 5000
write_data final.data pair ij

View File

@ -0,0 +1,153 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 1 by 1 MPI processor grid
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext 1 ${rc} 3854262
pair_style dpd/ext 1 1 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/ext, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.083 | 3.083 | 3.083 Mbytes
Step Time Temp Press
0 0 1 10.864186
100 1 1.1314376 7.1955963
200 2 1.0058948 8.4574538
300 3 0.93292241 7.7033353
400 4 0.93599378 7.9649888
500 5 1.0390423 7.9498546
600 6 1.0750333 7.3594973
700 7 1.119325 7.1843859
800 8 0.96727219 6.8327896
900 9 0.98826001 8.1974994
1000 10 1.105819 7.8830702
1100 11 0.99559202 7.8295372
1200 12 0.9210428 8.2045593
1300 13 0.96628584 8.6531905
1400 14 1.1808689 7.7659964
1500 15 0.96208743 7.9977415
1600 16 1.0080123 7.6254557
1700 17 0.96910957 8.3643075
1800 18 1.0562621 7.5966268
1900 19 0.93109173 7.7944606
2000 20 1.1126085 9.3753501
2100 21 1.1328553 7.6293793
2200 22 0.8964042 7.5985061
2300 23 1.0043044 8.0016943
2400 24 1.0319521 8.1249684
2500 25 0.95913468 7.2383318
2600 26 0.99480311 7.6491295
2700 27 0.9735191 7.5004628
2800 28 0.96145308 8.222045
2900 29 1.0131071 6.6390842
3000 30 0.99463836 7.0147693
3100 31 0.96803993 8.2738796
3200 32 0.94066026 9.476403
3300 33 0.97401823 6.409563
3400 34 1.0548493 7.7301555
3500 35 0.98567796 8.2949868
3600 36 0.86621746 7.4759028
3700 37 0.94934175 8.1189998
3800 38 0.9626774 7.7986715
3900 39 0.95728518 6.8669836
4000 40 1.0866412 7.41281
4100 41 0.98873564 6.4612262
4200 42 0.9109925 7.1806331
4300 43 1.0344723 8.4617679
4400 44 0.98920584 7.3622901
4500 45 0.99386139 6.8002442
4600 46 1.0947487 6.8868352
4700 47 0.98789482 7.8428621
4800 48 1.0035907 8.3878628
4900 49 1.0336467 8.1592349
5000 50 1.0870964 8.217988
Loop time of 0.907286 on 1 procs for 5000 steps with 200 atoms
Performance: 4761453.941 tau/day, 5510.942 timesteps/s
99.5% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.79672 | 0.79672 | 0.79672 | 0.0 | 87.81
Neigh | 0.066416 | 0.066416 | 0.066416 | 0.0 | 7.32
Comm | 0.029801 | 0.029801 | 0.029801 | 0.0 | 3.28
Output | 0.0010415 | 0.0010415 | 0.0010415 | 0.0 | 0.11
Modify | 0.0078915 | 0.0078915 | 0.0078915 | 0.0 | 0.87
Other | | 0.005414 | | | 0.60
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 563 ave 563 max 563 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1624 ave 1624 max 1624 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1624
Ave neighs/atom = 8.12
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -0,0 +1,153 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 2 by 2 MPI processor grid
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext 1 ${rc} 3854262
pair_style dpd/ext 1 1 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/ext, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.064 | 3.064 | 3.064 Mbytes
Step Time Temp Press
0 0 1 9.2729849
100 1 1.1416138 7.7058466
200 2 0.91696292 8.1601454
300 3 0.96358166 6.7987934
400 4 0.94726377 7.6196059
500 5 1.0941462 7.5974711
600 6 0.91469027 8.3921536
700 7 1.0912559 7.362721
800 8 0.96537861 9.2089379
900 9 0.9986577 8.0072887
1000 10 0.9580071 7.2399027
1100 11 0.94763774 7.8075521
1200 12 0.9942368 7.5215461
1300 13 1.0312465 8.2684258
1400 14 0.95133276 7.2734722
1500 15 0.97273431 7.1831939
1600 16 1.0052028 7.929104
1700 17 0.93909435 8.2831308
1800 18 1.0647294 8.850861
1900 19 1.0268112 7.2828461
2000 20 0.91293528 8.208191
2100 21 0.94719411 8.3353929
2200 22 0.90507637 9.1708397
2300 23 1.0663386 7.1415871
2400 24 1.0132089 9.2210634
2500 25 1.0633849 8.3368039
2600 26 0.95803955 8.8247976
2700 27 0.95264552 7.3204561
2800 28 0.93548595 7.290555
2900 29 0.96876322 7.4969147
3000 30 0.99554648 8.2055023
3100 31 1.0190751 7.907751
3200 32 1.0887502 7.7247246
3300 33 1.0059692 7.4039814
3400 34 1.0055991 7.3469353
3500 35 1.0067689 7.2161248
3600 36 1.1103667 8.4373236
3700 37 1.0668979 7.1922528
3800 38 0.97902043 5.5426601
3900 39 1.0268733 6.7786635
4000 40 1.0036613 7.8078466
4100 41 1.0714377 7.4129166
4200 42 0.99168608 6.0096099
4300 43 1.084818 7.4932992
4400 44 0.98348896 8.9950057
4500 45 1.045253 6.1309568
4600 46 1.0266723 6.3227645
4700 47 1.0183525 8.1505786
4800 48 1.0527309 8.2824928
4900 49 0.96877903 7.6341751
5000 50 1.0178917 7.5037327
Loop time of 0.320182 on 4 procs for 5000 steps with 200 atoms
Performance: 13492326.176 tau/day, 15616.118 timesteps/s
98.4% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.20185 | 0.21019 | 0.2166 | 1.4 | 65.65
Neigh | 0.017652 | 0.018339 | 0.019085 | 0.5 | 5.73
Comm | 0.076802 | 0.084707 | 0.094197 | 2.6 | 26.46
Output | 0.00057039 | 0.00066408 | 0.00093301 | 0.0 | 0.21
Modify | 0.0025036 | 0.0027709 | 0.0030403 | 0.5 | 0.87
Other | | 0.003508 | | | 1.10
Nlocal: 50 ave 53 max 45 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Nghost: 288.5 ave 300 max 279 min
Histogram: 1 1 0 0 0 0 1 0 0 1
Neighs: 418.25 ave 438 max 384 min
Histogram: 1 0 0 0 0 1 0 0 0 2
Total # of neighbors = 1673
Ave neighs/atom = 8.365
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../dpd_tstat/cg_spce.data

View File

@ -1,354 +0,0 @@
VOTCA
N 351 R 2.0 9.0
1 2.000000E+00 2.190202E+01 7.229762E+01
2 2.020000E+00 2.048957E+01 6.887333E+01
3 2.040000E+00 1.915004E+01 6.500604E+01
4 2.060000E+00 1.789228E+01 6.069573E+01
5 2.080000E+00 1.672516E+01 5.594242E+01
6 2.100000E+00 1.565754E+01 5.074609E+01
7 2.120000E+00 1.467088E+01 4.787307E+01
8 2.140000E+00 1.374450E+01 4.471740E+01
9 2.160000E+00 1.288407E+01 4.127908E+01
10 2.180000E+00 1.209522E+01 3.755811E+01
11 2.200000E+00 1.138363E+01 3.355449E+01
12 2.220000E+00 1.072913E+01 3.188695E+01
13 2.240000E+00 1.010845E+01 3.017359E+01
14 2.260000E+00 9.522496E+00 2.841440E+01
15 2.280000E+00 8.972182E+00 2.660938E+01
16 2.300000E+00 8.458426E+00 2.475854E+01
17 2.320000E+00 8.014166E+00 2.006698E+01
18 2.340000E+00 7.639767E+00 1.777244E+01
19 2.360000E+00 7.287288E+00 1.787493E+01
20 2.380000E+00 6.908790E+00 2.037445E+01
21 2.400000E+00 6.456330E+00 2.527099E+01
22 2.420000E+00 5.858025E+00 3.384695E+01
23 2.440000E+00 5.130955E+00 3.814748E+01
24 2.460000E+00 4.360629E+00 3.817257E+01
25 2.480000E+00 3.632555E+00 3.392224E+01
26 2.500000E+00 3.032242E+00 2.539647E+01
27 2.520000E+00 2.547993E+00 2.297813E+01
28 2.540000E+00 2.115131E+00 2.025763E+01
29 2.560000E+00 1.739702E+00 1.723497E+01
30 2.580000E+00 1.427747E+00 1.391013E+01
31 2.600000E+00 1.185311E+00 1.028314E+01
32 2.620000E+00 9.860176E-01 9.578245E+00
33 2.640000E+00 8.048986E-01 8.465708E+00
34 2.660000E+00 6.501069E-01 6.945526E+00
35 2.680000E+00 5.297952E-01 5.017699E+00
36 2.700000E+00 4.521166E-01 2.682227E+00
37 2.720000E+00 3.986447E-01 2.615311E+00
38 2.740000E+00 3.494900E-01 2.250522E+00
39 2.760000E+00 3.106097E-01 1.587859E+00
40 2.780000E+00 2.879614E-01 6.273237E-01
41 2.800000E+00 2.875026E-01 -6.310851E-01
42 2.820000E+00 3.002733E-01 -6.543549E-01
43 2.840000E+00 3.140112E-01 -7.277911E-01
44 2.860000E+00 3.297194E-01 -8.513935E-01
45 2.880000E+00 3.484014E-01 -1.025162E+00
46 2.900000E+00 3.710604E-01 -1.249097E+00
47 2.920000E+00 3.974884E-01 -1.380483E+00
48 2.940000E+00 4.257507E-01 -1.432530E+00
49 2.960000E+00 4.542607E-01 -1.405240E+00
50 2.980000E+00 4.814314E-01 -1.298611E+00
51 3.000000E+00 5.056762E-01 -1.112645E+00
52 3.020000E+00 5.266502E-01 -9.832894E-01
53 3.040000E+00 5.449492E-01 -8.451544E-01
54 3.060000E+00 5.603978E-01 -6.982396E-01
55 3.080000E+00 5.728203E-01 -5.425450E-01
56 3.100000E+00 5.820411E-01 -3.780706E-01
57 3.120000E+00 5.882509E-01 -2.409307E-01
58 3.140000E+00 5.915991E-01 -9.190908E-02
59 3.160000E+00 5.918481E-01 6.899430E-02
60 3.180000E+00 5.887601E-01 2.417794E-01
61 3.200000E+00 5.820977E-01 4.264463E-01
62 3.220000E+00 5.733491E-01 4.528343E-01
63 3.240000E+00 5.638075E-01 5.057356E-01
64 3.260000E+00 5.529429E-01 5.851503E-01
65 3.280000E+00 5.402248E-01 6.910784E-01
66 3.300000E+00 5.251230E-01 8.235199E-01
67 3.320000E+00 5.086524E-01 8.236482E-01
68 3.340000E+00 4.921725E-01 8.244583E-01
69 3.360000E+00 4.756696E-01 8.259503E-01
70 3.380000E+00 4.591299E-01 8.281240E-01
71 3.400000E+00 4.425400E-01 8.309796E-01
72 3.420000E+00 4.259181E-01 8.311861E-01
73 3.440000E+00 4.092937E-01 8.312292E-01
74 3.460000E+00 3.926700E-01 8.311089E-01
75 3.480000E+00 3.760504E-01 8.308252E-01
76 3.500000E+00 3.594381E-01 8.303781E-01
77 3.520000E+00 3.428394E-01 8.295412E-01
78 3.540000E+00 3.262547E-01 8.289646E-01
79 3.560000E+00 3.096790E-01 8.286483E-01
80 3.580000E+00 2.931071E-01 8.285923E-01
81 3.600000E+00 2.765336E-01 8.287966E-01
82 3.620000E+00 2.599901E-01 8.254306E-01
83 3.640000E+00 2.435212E-01 8.213359E-01
84 3.660000E+00 2.271415E-01 8.165124E-01
85 3.680000E+00 2.108656E-01 8.109603E-01
86 3.700000E+00 1.947080E-01 8.046794E-01
87 3.720000E+00 1.790243E-01 7.653050E-01
88 3.740000E+00 1.640312E-01 7.356166E-01
89 3.760000E+00 1.495351E-01 7.156143E-01
90 3.780000E+00 1.353421E-01 7.052980E-01
91 3.800000E+00 1.212586E-01 7.046676E-01
92 3.820000E+00 1.072429E-01 6.965706E-01
93 3.840000E+00 9.340878E-02 6.865180E-01
94 3.860000E+00 7.979524E-02 6.745098E-01
95 3.880000E+00 6.644142E-02 6.605462E-01
96 3.900000E+00 5.338643E-02 6.446270E-01
97 3.920000E+00 4.067486E-02 6.268536E-01
98 3.940000E+00 2.829935E-02 6.110218E-01
99 3.960000E+00 1.622105E-02 5.971317E-01
100 3.980000E+00 4.401131E-03 5.851833E-01
101 4.000000E+00 -7.199230E-03 5.751764E-01
102 4.020000E+00 -1.856170E-02 5.611971E-01
103 4.040000E+00 -2.965216E-02 5.479743E-01
104 4.060000E+00 -4.048572E-02 5.355079E-01
105 4.080000E+00 -5.107752E-02 5.237981E-01
106 4.100000E+00 -6.144268E-02 5.128447E-01
107 4.120000E+00 -7.151117E-02 4.939504E-01
108 4.140000E+00 -8.119856E-02 4.747353E-01
109 4.160000E+00 -9.049845E-02 4.551994E-01
110 4.180000E+00 -9.940440E-02 4.353427E-01
111 4.200000E+00 -1.079100E-01 4.151651E-01
112 4.220000E+00 -1.159565E-01 3.900062E-01
113 4.240000E+00 -1.235312E-01 3.679865E-01
114 4.260000E+00 -1.306969E-01 3.491061E-01
115 4.280000E+00 -1.375164E-01 3.333651E-01
116 4.300000E+00 -1.440524E-01 3.207633E-01
117 4.320000E+00 -1.503014E-01 3.040292E-01
118 4.340000E+00 -1.562092E-01 2.866389E-01
119 4.360000E+00 -1.617626E-01 2.685925E-01
120 4.380000E+00 -1.669485E-01 2.498899E-01
121 4.400000E+00 -1.717538E-01 2.305311E-01
122 4.420000E+00 -1.760941E-01 2.036400E-01
123 4.440000E+00 -1.799054E-01 1.776469E-01
124 4.460000E+00 -1.832059E-01 1.525518E-01
125 4.480000E+00 -1.860135E-01 1.283546E-01
126 4.500000E+00 -1.883461E-01 1.050554E-01
127 4.520000E+00 -1.902569E-01 8.558005E-02
128 4.540000E+00 -1.917515E-01 6.344105E-02
129 4.560000E+00 -1.927768E-01 3.863842E-02
130 4.580000E+00 -1.932793E-01 1.117216E-02
131 4.600000E+00 -1.932059E-01 -1.895774E-02
132 4.620000E+00 -1.926829E-01 -3.331832E-02
133 4.640000E+00 -1.918741E-01 -4.753697E-02
134 4.660000E+00 -1.907824E-01 -6.161370E-02
135 4.680000E+00 -1.894105E-01 -7.554851E-02
136 4.700000E+00 -1.877614E-01 -8.934140E-02
137 4.720000E+00 -1.859159E-01 -9.580751E-02
138 4.740000E+00 -1.839049E-01 -1.058976E-01
139 4.760000E+00 -1.816559E-01 -1.196116E-01
140 4.780000E+00 -1.790963E-01 -1.369495E-01
141 4.800000E+00 -1.761537E-01 -1.579114E-01
142 4.820000E+00 -1.728280E-01 -1.744216E-01
143 4.840000E+00 -1.691864E-01 -1.895036E-01
144 4.860000E+00 -1.652574E-01 -2.031575E-01
145 4.880000E+00 -1.610696E-01 -2.153832E-01
146 4.900000E+00 -1.566516E-01 -2.261808E-01
147 4.920000E+00 -1.521084E-01 -2.290714E-01
148 4.940000E+00 -1.474515E-01 -2.375453E-01
149 4.960000E+00 -1.425693E-01 -2.516026E-01
150 4.980000E+00 -1.373502E-01 -2.712432E-01
151 5.000000E+00 -1.316824E-01 -2.964672E-01
152 5.020000E+00 -1.257009E-01 -3.016666E-01
153 5.040000E+00 -1.196162E-01 -3.067953E-01
154 5.060000E+00 -1.134296E-01 -3.118535E-01
155 5.080000E+00 -1.071425E-01 -3.168409E-01
156 5.100000E+00 -1.007564E-01 -3.217577E-01
157 5.120000E+00 -9.430843E-02 -3.230025E-01
158 5.140000E+00 -8.783782E-02 -3.240216E-01
159 5.160000E+00 -8.134907E-02 -3.248150E-01
160 5.180000E+00 -7.484672E-02 -3.253827E-01
161 5.200000E+00 -6.833527E-02 -3.257248E-01
162 5.220000E+00 -6.171989E-02 -3.350608E-01
163 5.240000E+00 -5.496291E-02 -3.398853E-01
164 5.260000E+00 -4.815456E-02 -3.401983E-01
165 5.280000E+00 -4.138506E-02 -3.359997E-01
166 5.300000E+00 -3.474465E-02 -3.272895E-01
167 5.320000E+00 -2.866480E-02 -2.819209E-01
168 5.340000E+00 -2.341879E-02 -2.439062E-01
169 5.360000E+00 -1.885953E-02 -2.132454E-01
170 5.380000E+00 -1.483994E-02 -1.899386E-01
171 5.400000E+00 -1.121296E-02 -1.739857E-01
172 5.420000E+00 -7.974056E-03 -1.497398E-01
173 5.440000E+00 -5.229953E-03 -1.245058E-01
174 5.460000E+00 -3.000413E-03 -9.828350E-02
175 5.480000E+00 -1.305201E-03 -7.107305E-02
176 5.500000E+00 -1.640790E-04 -4.287441E-02
177 5.520000E+00 6.371635E-04 -3.612657E-02
178 5.540000E+00 1.236053E-03 -2.263906E-02
179 5.560000E+00 1.497795E-03 -2.411882E-03
180 5.580000E+00 1.287597E-03 2.455496E-02
181 5.600000E+00 4.706651E-04 5.826147E-02
182 5.620000E+00 -7.026386E-04 5.910929E-02
183 5.640000E+00 -1.895322E-03 6.019943E-02
184 5.660000E+00 -3.112231E-03 6.153190E-02
185 5.680000E+00 -4.358213E-03 6.310668E-02
186 5.700000E+00 -5.638114E-03 6.492378E-02
187 5.720000E+00 -6.949688E-03 6.610584E-02
188 5.740000E+00 -8.277238E-03 6.652145E-02
189 5.760000E+00 -9.605436E-03 6.617062E-02
190 5.780000E+00 -1.091895E-02 6.505335E-02
191 5.800000E+00 -1.220246E-02 6.316963E-02
192 5.820000E+00 -1.341489E-02 5.820182E-02
193 5.840000E+00 -1.453566E-02 5.400257E-02
194 5.860000E+00 -1.558012E-02 5.057189E-02
195 5.880000E+00 -1.656366E-02 4.790978E-02
196 5.900000E+00 -1.750164E-02 4.601622E-02
197 5.920000E+00 -1.840088E-02 4.358369E-02
198 5.940000E+00 -1.923199E-02 3.920163E-02
199 5.960000E+00 -1.995595E-02 3.287003E-02
200 5.980000E+00 -2.053379E-02 2.458889E-02
201 6.000000E+00 -2.092651E-02 1.435822E-02
202 6.020000E+00 -2.120502E-02 1.352840E-02
203 6.040000E+00 -2.146907E-02 1.291186E-02
204 6.060000E+00 -2.172292E-02 1.250861E-02
205 6.080000E+00 -2.197084E-02 1.231865E-02
206 6.100000E+00 -2.221709E-02 1.234198E-02
207 6.120000E+00 -2.246474E-02 1.237271E-02
208 6.140000E+00 -2.270998E-02 1.210114E-02
209 6.160000E+00 -2.294677E-02 1.152726E-02
210 6.180000E+00 -2.316905E-02 1.065107E-02
211 6.200000E+00 -2.337079E-02 9.472569E-03
212 6.220000E+00 -2.332237E-02 -1.276224E-02
213 6.240000E+00 -2.292243E-02 -2.567822E-02
214 6.260000E+00 -2.235736E-02 -2.927535E-02
215 6.280000E+00 -2.181354E-02 -2.355364E-02
216 6.300000E+00 -2.147734E-02 -8.513096E-03
217 6.320000E+00 -2.141633E-02 1.466366E-03
218 6.340000E+00 -2.149820E-02 5.775798E-03
219 6.360000E+00 -2.160956E-02 4.415202E-03
220 6.380000E+00 -2.163701E-02 -2.615423E-03
221 6.400000E+00 -2.146714E-02 -1.531608E-02
222 6.420000E+00 -2.107402E-02 -2.337955E-02
223 6.440000E+00 -2.055660E-02 -2.774728E-02
224 6.460000E+00 -1.998877E-02 -2.841924E-02
225 6.480000E+00 -1.944446E-02 -2.539546E-02
226 6.500000E+00 -1.899759E-02 -1.867591E-02
227 6.520000E+00 -1.869042E-02 -1.259095E-02
228 6.540000E+00 -1.847196E-02 -9.804901E-03
229 6.560000E+00 -1.827623E-02 -1.031775E-02
230 6.580000E+00 -1.803726E-02 -1.412951E-02
231 6.600000E+00 -1.768906E-02 -2.124018E-02
232 6.620000E+00 -1.710949E-02 -3.551655E-02
233 6.640000E+00 -1.631641E-02 -4.259122E-02
234 6.660000E+00 -1.545385E-02 -4.246419E-02
235 6.680000E+00 -1.466585E-02 -3.513545E-02
236 6.700000E+00 -1.409644E-02 -2.060502E-02
237 6.720000E+00 -1.374966E-02 -1.461056E-02
238 6.740000E+00 -1.349054E-02 -1.183851E-02
239 6.760000E+00 -1.325464E-02 -1.228886E-02
240 6.780000E+00 -1.297750E-02 -1.596163E-02
241 6.800000E+00 -1.259469E-02 -2.285680E-02
242 6.820000E+00 -1.213049E-02 -2.349903E-02
243 6.840000E+00 -1.165728E-02 -2.375897E-02
244 6.860000E+00 -1.118268E-02 -2.363664E-02
245 6.880000E+00 -1.071436E-02 -2.313203E-02
246 6.900000E+00 -1.025995E-02 -2.224514E-02
247 6.920000E+00 -9.817276E-03 -2.203990E-02
248 6.940000E+00 -9.377653E-03 -2.193988E-02
249 6.960000E+00 -8.938979E-03 -2.194508E-02
250 6.980000E+00 -8.499148E-03 -2.205550E-02
251 7.000000E+00 -8.056057E-03 -2.227113E-02
252 7.020000E+00 -7.597830E-03 -2.345789E-02
253 7.040000E+00 -7.121492E-03 -2.408210E-02
254 7.060000E+00 -6.638296E-03 -2.414376E-02
255 7.080000E+00 -6.159492E-03 -2.364288E-02
256 7.100000E+00 -5.696331E-03 -2.257946E-02
257 7.120000E+00 -5.301441E-03 -1.729553E-02
258 7.140000E+00 -4.989070E-03 -1.432759E-02
259 7.160000E+00 -4.712898E-03 -1.367562E-02
260 7.180000E+00 -4.426605E-03 -1.533964E-02
261 7.200000E+00 -4.083872E-03 -1.931964E-02
262 7.220000E+00 -3.631995E-03 -2.538390E-02
263 7.240000E+00 -3.087883E-03 -2.854317E-02
264 7.260000E+00 -2.509635E-03 -2.879748E-02
265 7.280000E+00 -1.955351E-03 -2.614680E-02
266 7.300000E+00 -1.483130E-03 -2.059115E-02
267 7.320000E+00 -1.113389E-03 -1.639767E-02
268 7.340000E+00 -8.266321E-04 -1.229279E-02
269 7.360000E+00 -6.210869E-04 -8.276492E-03
270 7.380000E+00 -4.949818E-04 -4.348786E-03
271 7.400000E+00 -4.465449E-04 -5.096684E-04
272 7.420000E+00 -5.304321E-04 8.162452E-03
273 7.440000E+00 -7.436056E-04 1.241897E-02
274 7.460000E+00 -9.977534E-04 1.225988E-02
275 7.480000E+00 -1.204563E-03 7.685191E-03
276 7.500000E+00 -1.275724E-03 -1.305104E-03
277 7.520000E+00 -1.199415E-03 -5.916706E-03
278 7.540000E+00 -1.055417E-03 -8.074089E-03
279 7.560000E+00 -8.928131E-04 -7.777253E-03
280 7.580000E+00 -7.606883E-04 -5.026198E-03
281 7.600000E+00 -7.081267E-04 1.790768E-04
282 7.620000E+00 -7.213835E-04 1.157786E-03
283 7.640000E+00 -7.548855E-04 2.203601E-03
284 7.660000E+00 -8.099749E-04 3.316523E-03
285 7.680000E+00 -8.879938E-04 4.496550E-03
286 7.700000E+00 -9.902843E-04 5.743685E-03
287 7.720000E+00 -1.122403E-03 7.421734E-03
288 7.740000E+00 -1.285295E-03 8.820936E-03
289 7.760000E+00 -1.473382E-03 9.941291E-03
290 7.780000E+00 -1.681087E-03 1.078280E-02
291 7.800000E+00 -1.902835E-03 1.134546E-02
292 7.820000E+00 -2.225281E-03 2.008573E-02
293 7.840000E+00 -2.673724E-03 2.394500E-02
294 7.860000E+00 -3.150542E-03 2.292328E-02
295 7.880000E+00 -3.558115E-03 1.702056E-02
296 7.900000E+00 -3.798824E-03 6.236836E-03
297 7.920000E+00 -3.844315E-03 -1.142168E-03
298 7.940000E+00 -3.774961E-03 -5.247538E-03
299 7.960000E+00 -3.656237E-03 -6.079274E-03
300 7.980000E+00 -3.553615E-03 -3.637376E-03
301 8.000000E+00 -3.532566E-03 2.078155E-03
302 8.020000E+00 -3.611956E-03 5.494873E-03
303 8.040000E+00 -3.737724E-03 6.716053E-03
304 8.060000E+00 -3.865961E-03 5.741694E-03
305 8.080000E+00 -3.952755E-03 2.571796E-03
306 8.100000E+00 -3.954196E-03 -2.793640E-03
307 8.120000E+00 -3.873685E-03 -5.086591E-03
308 8.140000E+00 -3.757567E-03 -6.354313E-03
309 8.160000E+00 -3.626347E-03 -6.596805E-03
310 8.180000E+00 -3.500530E-03 -5.814068E-03
311 8.200000E+00 -3.400620E-03 -4.006101E-03
312 8.220000E+00 -3.334411E-03 -2.730570E-03
313 8.240000E+00 -3.286762E-03 -2.150229E-03
314 8.260000E+00 -3.243768E-03 -2.265076E-03
315 8.280000E+00 -3.191524E-03 -3.075114E-03
316 8.300000E+00 -3.116129E-03 -4.580340E-03
317 8.320000E+00 -2.964210E-03 -1.014102E-02
318 8.340000E+00 -2.729309E-03 -1.287854E-02
319 8.360000E+00 -2.467889E-03 -1.279292E-02
320 8.380000E+00 -2.236413E-03 -9.884157E-03
321 8.400000E+00 -2.091344E-03 -4.152240E-03
322 8.420000E+00 -2.034875E-03 -1.692189E-03
323 8.440000E+00 -2.015752E-03 -4.177491E-04
324 8.460000E+00 -2.010261E-03 -3.289192E-04
325 8.480000E+00 -1.994691E-03 -1.425700E-03
326 8.500000E+00 -1.945329E-03 -3.708091E-03
327 8.520000E+00 -1.867098E-03 -4.115259E-03
328 8.540000E+00 -1.780711E-03 -4.523663E-03
329 8.560000E+00 -1.686143E-03 -4.933304E-03
330 8.580000E+00 -1.583370E-03 -5.344181E-03
331 8.600000E+00 -1.472368E-03 -5.756296E-03
332 8.620000E+00 -1.328792E-03 -8.394009E-03
333 8.640000E+00 -1.144899E-03 -9.787974E-03
334 8.660000E+00 -9.455644E-04 -9.938189E-03
335 8.680000E+00 -7.556630E-04 -8.844656E-03
336 8.700000E+00 -6.000698E-04 -6.507373E-03
337 8.720000E+00 -5.364035E-04 -3.286769E-04
338 8.740000E+00 -5.681458E-04 3.033482E-03
339 8.760000E+00 -6.389659E-04 3.579102E-03
340 8.780000E+00 -6.925330E-04 1.308185E-03
341 8.800000E+00 -6.725164E-04 -3.779270E-03
342 8.820000E+00 -5.113768E-04 -1.169180E-02
343 8.840000E+00 -2.305599E-04 -1.574700E-02
344 8.860000E+00 9.278768E-05 -1.594487E-02
345 8.880000E+00 3.815195E-04 -1.228542E-02
346 8.900000E+00 5.584889E-04 -4.768636E-03
347 8.920000E+00 6.079481E-04 -2.335309E-04
348 8.940000E+00 5.700798E-04 3.964121E-03
349 8.960000E+00 4.516330E-04 7.824320E-03
350 8.980000E+00 2.593567E-04 1.134707E-02
351 9.000000E+00 0.000000E+00 1.453236E-02

View File

@ -0,0 +1 @@
../dpd_tstat/cg_spce_table.pot

View File

@ -4,7 +4,7 @@ variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
units real
boundary p p p
atom_style atomic
dimension 3
@ -13,7 +13,7 @@ comm_modify vel yes
read_data cg_spce.data
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
@ -24,8 +24,8 @@ run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 10
thermo 100
fix 1 all nve
run 2000
run 1000

View File

@ -1,293 +0,0 @@
LAMMPS (8 Apr 2021)
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0.0000000 0.0000000 0.0000000) to (40.310000 40.310000 40.310000)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.020 seconds
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
Should only be flagged at inflection points (../pair_table.cpp:461)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 10
fix 1 all nve
run 2000
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.380 | 5.380 | 5.380 Mbytes
Step Time Temp Press
0 0 300 7368.7186
10 10 298.34842 6443.6033
20 20 303.36187 9303.0158
30 30 301.59356 7533.7912
40 40 300.97217 5623.9089
50 50 300.31652 9105.8093
60 60 296.92173 9213.304
70 70 294.36593 12701.327
80 80 295.30077 6098.4732
90 90 296.35396 8051.719
100 100 293.72532 5555.983
110 110 290.95711 9001.8346
120 120 290.91972 10264.241
130 130 294.14911 11450.959
140 140 299.11994 7244.1639
150 150 301.20082 7675.7516
160 160 300.71883 9718.1901
170 170 295.47176 8931.1414
180 180 290.45284 7381.7674
190 190 291.66922 11028.436
200 200 294.0543 11897.269
210 210 299.17955 8939.2171
220 220 298.45193 8047.038
230 230 300.48548 10033.64
240 240 299.24752 6310.7247
250 250 304.51487 8710.5626
260 260 303.6513 5230.8162
270 270 300.76074 12164.773
280 280 302.60275 11145.98
290 290 297.22957 9521.4384
300 300 297.1365 7446.9006
310 310 292.18323 8021.8344
320 320 295.03958 9130.8594
330 330 293.9622 4647.512
340 340 290.77751 8001.486
350 350 292.34687 11887.668
360 360 295.95968 9262.148
370 370 293.50476 4181.549
380 380 288.69498 7632.071
390 390 289.63957 5130.0205
400 400 295.02212 5643.5024
410 410 296.3944 7267.235
420 420 299.22019 7149.9305
430 430 298.36689 8384.595
440 440 295.33149 10515.75
450 450 294.76959 11569.389
460 460 300.141 7272.4453
470 470 299.14431 7792.5419
480 480 302.3697 5837.8675
490 490 301.94692 6999.1059
500 500 300.25929 4885.3948
510 510 302.50013 8231.0438
520 520 300.76412 8445.0349
530 530 298.5016 9110.432
540 540 301.14513 9348.6421
550 550 297.36425 10753.314
560 560 296.50046 10476.823
570 570 300.57267 9889.7968
580 580 300.4868 8377.423
590 590 296.65103 6859.32
600 600 298.50013 7080.5995
610 610 300.28274 9502.5438
620 620 298.45508 8819.7846
630 630 300.24859 6291.4944
640 640 299.38719 7430.2366
650 650 297.91915 9435.3218
660 660 300.61208 6287.9931
670 670 303.59291 8357.7639
680 680 301.85511 1697.3038
690 690 298.96873 5210.2286
700 700 298.09035 7510.4359
710 710 303.11692 10129.526
720 720 302.65473 10488.388
730 730 300.15444 7118.5953
740 740 300.19245 10582.032
750 750 296.73618 6538.0363
760 760 299.72857 7588.9487
770 770 299.00347 6633.9983
780 780 301.38129 8053.5347
790 790 298.54819 8711.4965
800 800 305.54197 9717.9727
810 810 302.96497 7582.0444
820 820 306.81537 9433.6446
830 830 309.16373 10088.582
840 840 313.53881 9509.8624
850 850 310.82992 5366.015
860 860 306.49798 8499.9157
870 870 308.93421 5690.3242
880 880 302.56668 5526.3636
890 890 306.72501 7380.8469
900 900 308.87199 10388.13
910 910 312.7367 6613.0734
920 920 308.34508 5903.4291
930 930 306.39924 8615.6622
940 940 310.37544 6849.4694
950 950 310.13051 6188.7605
960 960 308.68049 7637.532
970 970 302.85465 6448.7926
980 980 307.40719 8763.0959
990 990 304.02815 8373.6518
1000 1000 300.69539 5682.6678
1010 1010 299.16385 6012.246
1020 1020 305.118 7913.4144
1030 1030 304.20382 10580.788
1040 1040 302.91134 7698.4548
1050 1050 298.08593 8952.6724
1060 1060 302.56196 10602.997
1070 1070 305.98211 12174.358
1080 1080 305.70253 12288.219
1090 1090 303.22805 7922.7166
1100 1100 301.54879 5031.3836
1110 1110 302.57611 8547.4189
1120 1120 302.00845 12966.595
1130 1130 296.10912 4514.1707
1140 1140 295.11601 6543.7239
1150 1150 287.29188 6453.3386
1160 1160 284.83881 7168.9427
1170 1170 289.77871 7895.7434
1180 1180 293.48011 7680.6885
1190 1190 295.69035 8609.6593
1200 1200 296.0653 7343.68
1210 1210 302.72922 6973.6048
1220 1220 304.11805 7322.7664
1230 1230 300.24647 6418.2612
1240 1240 293.24074 9039.1214
1250 1250 300.56214 7877.4055
1260 1260 308.03086 5644.2135
1270 1270 311.12289 6875.5126
1280 1280 307.83182 7204.9894
1290 1290 309.58491 9993.2255
1300 1300 305.36536 8626.859
1310 1310 304.35084 3471.1205
1320 1320 304.40125 2149.2701
1330 1330 295.74547 6252.9592
1340 1340 293.16034 3407.4408
1350 1350 298.6302 10139.977
1360 1360 300.46627 7312.9011
1370 1370 298.00367 2780.8886
1380 1380 300.97807 9403.3451
1390 1390 294.32612 12005.453
1400 1400 296.13403 5569.4907
1410 1410 297.86152 9558.6064
1420 1420 303.01992 8678.345
1430 1430 298.53849 5544.6316
1440 1440 293.60633 12879.765
1450 1450 296.28813 9312.4229
1460 1460 292.64466 8344.5877
1470 1470 295.28975 7689.9396
1480 1480 300.10761 7436.7346
1490 1490 291.6152 8909.6757
1500 1500 286.644 9756.5014
1510 1510 294.52064 10383.164
1520 1520 297.49618 4972.89
1530 1530 295.63379 6192.5729
1540 1540 295.04528 4987.7191
1550 1550 290.41403 7013.6076
1560 1560 295.62326 7222.5009
1570 1570 299.90584 4282.5688
1580 1580 299.04532 7885.433
1590 1590 300.03907 5508.0652
1600 1600 298.05683 9262.3744
1610 1610 297.50015 9544.6913
1620 1620 303.21217 6393.6756
1630 1630 304.44383 9674.6583
1640 1640 302.68977 9065.4408
1650 1650 303.62415 6851.1575
1660 1660 306.11103 8592.0481
1670 1670 300.84566 8483.551
1680 1680 303.92882 10113.096
1690 1690 305.02534 7389.9402
1700 1700 303.52902 5541.9256
1710 1710 299.27905 9547.7344
1720 1720 294.14366 7269.2402
1730 1730 299.49977 8086.0601
1740 1740 298.66942 7026.6067
1750 1750 296.94428 9595.2435
1760 1760 297.36921 6268.7436
1770 1770 299.88423 10598.189
1780 1780 293.76868 7405.7641
1790 1790 297.19444 10837.102
1800 1800 296.46054 8345.699
1810 1810 299.06801 5256.5992
1820 1820 294.17725 5510.7529
1830 1830 286.78527 6310.8881
1840 1840 284.89686 8249.1144
1850 1850 293.79389 4578.9263
1860 1860 298.31279 8752.305
1870 1870 295.31087 8401.2736
1880 1880 298.13297 4354.8694
1890 1890 298.90786 11454.088
1900 1900 299.1416 9121.4138
1910 1910 296.43134 12157.884
1920 1920 292.05445 8613.1522
1930 1930 300.3421 7898.3626
1940 1940 304.55746 6311.259
1950 1950 304.03899 8789.3537
1960 1960 305.08259 7243.5622
1970 1970 304.0858 8712.4796
1980 1980 299.14574 5166.3501
1990 1990 300.07254 10019.769
2000 2000 301.78176 8789.7968
Loop time of 91.2059 on 1 procs for 2000 steps with 2180 atoms
Performance: 1.895 ns/day, 12.667 hours/ns, 21.928 timesteps/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 90.668 | 90.668 | 90.668 | 0.0 | 99.41
Neigh | 0.23231 | 0.23231 | 0.23231 | 0.0 | 0.25
Comm | 0.20819 | 0.20819 | 0.20819 | 0.0 | 0.23
Output | 0.0049558 | 0.0049558 | 0.0049558 | 0.0 | 0.01
Modify | 0.052906 | 0.052906 | 0.052906 | 0.0 | 0.06
Other | | 0.03904 | | | 0.04
Nlocal: 2180.00 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6693.00 ave 6693 max 6693 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261496.0 ave 261496 max 261496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261496
Ave neighs/atom = 119.95229
Neighbor list builds = 25
Dangerous builds = 0
Total wall time: 0:01:31

View File

@ -1,293 +0,0 @@
LAMMPS (8 Apr 2021)
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0.0000000 0.0000000 0.0000000) to (40.310000 40.310000 40.310000)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.005 seconds
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
Should only be flagged at inflection points (../pair_table.cpp:461)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 10
fix 1 all nve
run 2000
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 5965.5396
10 10 303.16391 8779.1574
20 20 306.9014 8268.573
30 30 305.84291 9976.0547
40 40 301.20527 8832.3902
50 50 305.72012 8041.0146
60 60 305.1676 7118.8042
70 70 305.01132 9423.9307
80 80 308.10236 10781.423
90 90 309.18703 3637.9961
100 100 305.11814 7726.7672
110 110 298.37346 8575.1602
120 120 304.79786 8910.8048
130 130 309.05401 6351.4839
140 140 304.28367 4805.137
150 150 300.28903 7412.6411
160 160 299.39358 10183.593
170 170 296.80729 5437.1054
180 180 295.2755 8317.0414
190 190 303.25949 8338.3453
200 200 303.24607 9636.5224
210 210 298.56684 10288.264
220 220 293.42999 9001.0482
230 230 293.12497 9083.5194
240 240 291.92847 9659.3388
250 250 299.2202 6328.759
260 260 297.45209 10405.677
270 270 292.12257 7273.9369
280 280 289.81113 8957.8747
290 290 299.06683 6695.3776
300 300 300.75468 6298.5705
310 310 296.26524 7432.4815
320 320 294.21403 9941.7038
330 330 293.01776 4750.2993
340 340 295.22553 4968.3595
350 350 293.95589 9224.5496
360 360 297.94278 8792.0395
370 370 298.99075 5453.7814
380 380 302.1188 6229.2283
390 390 298.48943 8517.5273
400 400 295.3701 11328.394
410 410 287.74238 4058.0382
420 420 288.83732 5706.6773
430 430 298.8242 6178.7142
440 440 304.42682 10138.321
450 450 300.28695 9731.3417
460 460 300.34539 9249.4691
470 470 303.32231 11638.718
480 480 301.46777 4186.402
490 490 292.56069 9184.8386
500 500 297.26162 11766.733
510 510 295.34018 6436.33
520 520 300.16314 9325.3669
530 530 305.00513 5947.6408
540 540 300.88805 5222.7384
550 550 301.56707 6669.1808
560 560 304.89854 10730.053
570 570 299.50424 7956.1042
580 580 301.23382 10192.246
590 590 298.81222 6017.2125
600 600 300.57891 4575.433
610 610 301.95936 6309.7515
620 620 301.09393 5993.6489
630 630 300.47565 4388.7137
640 640 299.31886 9535.6093
650 650 295.06025 7954.5811
660 660 298.72666 8630.7466
670 670 302.53833 5636.1305
680 680 306.32833 12539.149
690 690 296.1951 11345.293
700 700 297.00325 6352.1448
710 710 298.51181 6922.4379
720 720 293.80125 4849.4922
730 730 296.52677 11141.583
740 740 294.15306 3527.8677
750 750 294.74737 8454.0815
760 760 292.53913 8187.9032
770 770 294.37078 7487.5703
780 780 297.50085 9198.7697
790 790 298.37773 8969.0024
800 800 293.29879 6506.6479
810 810 296.58266 8805.7872
820 820 290.85616 5248.8123
830 830 292.29488 5123.8203
840 840 292.77623 8263.5675
850 850 297.88225 6777.7444
860 860 300.01913 10439.087
870 870 295.79578 7318.1322
880 880 301.5994 8242.4774
890 890 306.63208 8090.6106
900 900 303.53759 6831.2666
910 910 300.70481 3811.0498
920 920 299.96274 8351.1573
930 930 299.67435 7046.0534
940 940 310.81742 6887.6925
950 950 305.09984 4811.088
960 960 301.33039 4184.851
970 970 301.19205 6417.6542
980 980 299.6491 7738.2233
990 990 297.33655 9264.0874
1000 1000 302.33418 7166.2751
1010 1010 300.08402 9121.0882
1020 1020 302.82225 6405.7109
1030 1030 304.01683 6944.0839
1040 1040 305.82618 6160.3838
1050 1050 308.12518 4356.0931
1060 1060 307.64811 6954.7245
1070 1070 313.70509 5558.9804
1080 1080 316.09239 7250.6147
1090 1090 310.2845 5441.3722
1100 1100 300.18899 4417.8774
1110 1110 304.02471 5609.1668
1120 1120 303.46016 10355.031
1130 1130 305.68165 6400.913
1140 1140 308.78348 7235.1894
1150 1150 299.30025 9246.4856
1160 1160 302.70799 9866.9536
1170 1170 302.0977 8643.5532
1180 1180 307.15407 8866.4664
1190 1190 305.78146 7562.4911
1200 1200 302.54605 7974.9973
1210 1210 306.14264 9554.2381
1220 1220 308.89843 6219.5361
1230 1230 305.71844 7633.9105
1240 1240 306.51911 7705.4795
1250 1250 304.78473 8590.5595
1260 1260 300.82969 9281.5964
1270 1270 305.9271 4951.1323
1280 1280 310.32728 9446.3989
1290 1290 318.27879 9102.5544
1300 1300 310.45777 5931.5457
1310 1310 304.81268 1214.4291
1320 1320 307.08811 10315.961
1330 1330 306.86917 8584.9658
1340 1340 307.26912 7254.864
1350 1350 310.02754 8508.6256
1360 1360 306.12763 4912.6641
1370 1370 301.67924 6715.8196
1380 1380 298.37239 6149.8821
1390 1390 299.62894 8181.4761
1400 1400 301.60395 6714.4244
1410 1410 297.65752 7035.6575
1420 1420 297.02817 7510.2637
1430 1430 303.59177 10361.937
1440 1440 300.10771 8473.2311
1450 1450 291.21837 6097.9954
1460 1460 291.58663 7729.0841
1470 1470 292.52447 6555.8661
1480 1480 294.48264 6960.0201
1490 1490 298.34869 8044.2321
1500 1500 296.8193 11731.289
1510 1510 296.52073 5452.8935
1520 1520 294.54819 9591.7969
1530 1530 297.36394 5148.5383
1540 1540 289.08137 6057.0981
1550 1550 288.27007 8965.1965
1560 1560 294.84398 8316.9487
1570 1570 299.79573 8760.7322
1580 1580 295.66745 5045.5322
1590 1590 298.14356 7161.1834
1600 1600 297.10402 6529.9938
1610 1610 299.69137 7741.6027
1620 1620 304.93043 11222.109
1630 1630 302.01322 10893.107
1640 1640 295.47422 8400.3124
1650 1650 301.93122 7190.2609
1660 1660 305.02639 6140.5552
1670 1670 302.86047 8651.5366
1680 1680 304.82151 9909.407
1690 1690 300.48426 8428.8845
1700 1700 293.06643 5333.8144
1710 1710 295.43687 9103.4353
1720 1720 298.77208 8162.1053
1730 1730 300.08189 9603.4371
1740 1740 303.16004 10693.291
1750 1750 303.54199 9151.023
1760 1760 300.99281 4641.2985
1770 1770 297.36657 3888.5753
1780 1780 298.32969 7286.2299
1790 1790 297.34183 8975.8956
1800 1800 295.83042 6366.7607
1810 1810 295.92044 9308.4953
1820 1820 298.10087 7117.2369
1830 1830 296.13936 4849.3739
1840 1840 296.5869 8321.4011
1850 1850 296.74513 9530.6806
1860 1860 298.57398 8788.0603
1870 1870 299.12825 6015.4777
1880 1880 301.91639 11706.441
1890 1890 309.85968 10909.493
1900 1900 302.64998 8779.8967
1910 1910 301.62919 9176.3902
1920 1920 300.66238 5369.8681
1930 1930 297.64499 8185.09
1940 1940 296.47852 10188.803
1950 1950 297.802 6679.4466
1960 1960 299.78754 7316.8198
1970 1970 300.09083 6008.9414
1980 1980 297.94119 5615.6403
1990 1990 298.37687 9727.308
2000 2000 296.08394 6400.2746
Loop time of 41.5171 on 4 procs for 2000 steps with 2180 atoms
Performance: 4.162 ns/day, 5.766 hours/ns, 48.173 timesteps/s
99.5% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 38.667 | 38.954 | 39.453 | 4.8 | 93.83
Neigh | 0.10947 | 0.11039 | 0.11153 | 0.3 | 0.27
Comm | 1.8661 | 2.3644 | 2.652 | 19.6 | 5.70
Output | 0.0082644 | 0.0094232 | 0.01281 | 2.0 | 0.02
Modify | 0.024678 | 0.025206 | 0.025888 | 0.3 | 0.06
Other | | 0.05335 | | | 0.13
Nlocal: 545.000 ave 559 max 531 min
Histogram: 1 0 0 0 1 1 0 0 0 1
Nghost: 3619.00 ave 3655 max 3594 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Neighs: 65415.5 ave 66835 max 64310 min
Histogram: 1 0 0 2 0 0 0 0 0 1
Total # of neighbors = 261662
Ave neighs/atom = 120.02844
Neighbor list builds = 26
Dangerous builds = 0
Total wall time: 0:00:41

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.38 | 5.38 | 5.38 Mbytes
Step Time Temp Press
0 0 300 7353.4129
100 100 303.74025 4964.013
200 200 298.35396 8007.7802
300 300 298.28547 6291.5807
400 400 298.01797 6252.1041
500 500 299.88984 3489.931
600 600 302.5718 9092.203
700 700 305.38722 5909.02
800 800 294.81401 10282.286
900 900 292.40724 8338.6878
1000 1000 293.64788 6951.569
Loop time of 28.1058 on 1 procs for 1000 steps with 2180 atoms
Performance: 3.074 ns/day, 7.807 hours/ns, 35.580 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 27.948 | 27.948 | 27.948 | 0.0 | 99.44
Neigh | 0.071647 | 0.071647 | 0.071647 | 0.0 | 0.25
Comm | 0.058215 | 0.058215 | 0.058215 | 0.0 | 0.21
Output | 0.00026724 | 0.00026724 | 0.00026724 | 0.0 | 0.00
Modify | 0.014429 | 0.014429 | 0.014429 | 0.0 | 0.05
Other | | 0.01283 | | | 0.05
Nlocal: 2180 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6643 ave 6643 max 6643 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261826 ave 261826 max 261826 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261826
Ave neighs/atom = 120.10367
Neighbor list builds = 12
Dangerous builds = 0
Total wall time: 0:00:28

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 5950.2338
100 100 301.15012 9090.2244
200 200 301.28795 10589.557
300 300 293.61974 5971.7781
400 400 310.4217 8198.7972
500 500 299.89888 9140.3132
600 600 305.56607 7783.4481
700 700 295.99415 6276.9444
800 800 296.50051 5058.1115
900 900 288.68499 8637.0269
1000 1000 291.17292 6516.4192
Loop time of 7.57429 on 4 procs for 1000 steps with 2180 atoms
Performance: 11.407 ns/day, 2.104 hours/ns, 132.026 timesteps/s
99.8% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 7.2745 | 7.3674 | 7.4316 | 2.1 | 97.27
Neigh | 0.01863 | 0.018866 | 0.019429 | 0.2 | 0.25
Comm | 0.1123 | 0.17708 | 0.27025 | 13.8 | 2.34
Output | 0.00019274 | 0.00021224 | 0.00026504 | 0.0 | 0.00
Modify | 0.0041691 | 0.0042729 | 0.0043136 | 0.1 | 0.06
Other | | 0.006464 | | | 0.09
Nlocal: 545 ave 552 max 531 min
Histogram: 1 0 0 0 0 0 0 0 2 1
Nghost: 3620.5 ave 3656 max 3584 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Neighs: 65419 ave 66338 max 64104 min
Histogram: 1 0 0 0 1 0 0 0 1 1
Total # of neighbors = 261676
Ave neighs/atom = 120.03486
Neighbor list builds = 12
Dangerous builds = 0
Total wall time: 0:00:07

View File

@ -46,6 +46,8 @@ PairDPD::PairDPD(LAMMPS *lmp) : Pair(lmp)
PairDPD::~PairDPD()
{
if (copymode) return;
if (allocated) {
memory->destroy(setflag);
memory->destroy(cutsq);

View File

@ -49,7 +49,7 @@ class PairDPD : public Pair {
double **sigma;
class RanMars *random;
void allocate();
virtual void allocate();
};
} // namespace LAMMPS_NS

View File

@ -47,6 +47,8 @@ PairDPDExt::PairDPDExt(LAMMPS *lmp) : Pair(lmp)
PairDPDExt::~PairDPDExt()
{
if (copymode) return;
if (allocated) {
memory->destroy(setflag);
memory->destroy(cutsq);

View File

@ -45,12 +45,12 @@ class PairDPDExt : public Pair {
double cut_global, temperature;
int seed;
double **cut;
double **a0, **gamma, **gammaII, **gammaT;
double **a0, **gamma, **gammaT;
double **sigma, **sigmaT;
double **ws, **wsT;
class RanMars *random;
void allocate();
virtual void allocate();
};
} // namespace LAMMPS_NS

View File

@ -73,6 +73,7 @@ fi
if (test $1 = "DPD-BASIC") then
depend GPU
depend KOKKOS
depend OPENMP
depend INTEL
fi

View File

@ -230,6 +230,14 @@ action pair_coul_long_kokkos.cpp pair_coul_long.cpp
action pair_coul_long_kokkos.h pair_coul_long.h
action pair_coul_wolf_kokkos.cpp
action pair_coul_wolf_kokkos.h
action pair_dpd_kokkos.h pair_dpd.h
action pair_dpd_kokkos.cpp pair_dpd.cpp
action pair_dpd_ext_kokkos.cpp pair_dpd_ext.cpp
action pair_dpd_ext_kokkos.h pair_dpd_ext.h
action pair_dpd_ext_tstat_kokkos.h pair_dpd_ext_tstat.h
action pair_dpd_ext_tstat_kokkos.cpp pair_dpd_ext_tstat.cpp
action pair_dpd_tstat_kokkos.h pair_dpd_tstat.h
action pair_dpd_tstat_kokkos.cpp pair_dpd_tstat.cpp
action pair_dpd_fdt_energy_kokkos.cpp pair_dpd_fdt_energy.cpp
action pair_dpd_fdt_energy_kokkos.h pair_dpd_fdt_energy.h
action pair_eam_kokkos.cpp pair_eam.cpp

View File

@ -0,0 +1,463 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_ext_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDExtKokkos<DeviceType>::PairDPDExtKokkos(class LAMMPS *lmp) :
PairDPDExt(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDExtKokkos<DeviceType>::~PairDPDExtKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::init_style()
{
PairDPDExt::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL)
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/ext/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
if (eflag_atom) {
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
d_eatom = k_eatom.template view<DeviceType>();
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_eatom);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_eatom);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (eflag_global) eng_vdwl += ev.evdwl;
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (eflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_eatom, dup_eatom);
k_eatom.template modify<DeviceType>();
k_eatom.template sync<LMPHostType>();
}
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_eatom = decltype(dup_eatom)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::operator() (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,EVFLAG>(TagDPDExtKokkos<NEIGHFLAG,EVFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::operator() (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpairx,fpairy,fpairz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,wdPar,wdPerp,randnum,randnumx,randnumy,randnumz,factor_dpd;
double fx = 0,fy = 0,fz = 0;
double evdwl = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
double P[3][3];
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
P[0][0] = 1.0 - delx*delx*rinv*rinv;
P[0][1] = - delx*dely*rinv*rinv;
P[0][2] = - delx*delz*rinv*rinv;
P[1][0] = P[0][1];
P[1][1] = 1.0 - dely*dely*rinv*rinv;
P[1][2] = - dely*delz*rinv*rinv;
P[2][0] = P[0][2];
P[2][1] = P[1][2];
P[2][2] = 1.0 - delz*delz*rinv*rinv;
wd = 1.0 - r/params(itype,jtype).cut;
wdPar = pow(wd,params(itype,jtype).ws);
wdPerp = pow(wd,params(itype,jtype).wsT);
randnum = rand_gen.normal();
randnumx = rand_gen.normal();
randnumy = rand_gen.normal();
randnumz = rand_gen.normal();
// conservative force
fpair = params(itype,jtype).a0*wd;
// drag force - parallel
fpair -= params(itype,jtype).gamma*wdPar*wdPar*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wdPar*randnum*dtinvsqrt;
fpairx = fpair*rinv*delx;
fpairy = fpair*rinv*dely;
fpairz = fpair*rinv*delz;
// drag force - perpendicular
fpairx -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[0][0]*delvx + P[0][1]*delvy + P[0][2]*delvz);
fpairy -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[1][0]*delvx + P[1][1]*delvy + P[1][2]*delvz);
fpairz -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[2][0]*delvx + P[2][1]*delvy + P[2][2]*delvz);
// random force - perpendicular
fpairx += params(itype,jtype).sigmaT*wdPerp*
(P[0][0]*randnumx + P[0][1]*randnumy + P[0][2]*randnumz)*dtinvsqrt;
fpairy += params(itype,jtype).sigmaT*wdPerp*
(P[1][0]*randnumx + P[1][1]*randnumy + P[1][2]*randnumz)*dtinvsqrt;
fpairz += params(itype,jtype).sigmaT*wdPerp*
(P[2][0]*randnumx + P[2][1]*randnumy + P[2][2]*randnumz)*dtinvsqrt;
fpairx *= factor_dpd;
fpairy *= factor_dpd;
fpairz *= factor_dpd;
fx += fpairx;
fy += fpairy;
fz += fpairz;
a_f(j,0) -= fpairx;
a_f(j,1) -= fpairy;
a_f(j,2) -= fpairz;
if (EVFLAG && eflag) {
// unshifted eng of conservative term:
// evdwl = -a0[itype][jtype]*r * (1.0-0.5*r/cut[itype][jtype]);
// eng shifted to 0.0 at cutoff
evdwl = 0.5*params(itype,jtype).a0*params(itype,jtype).cut* wd*wd;
evdwl *= factor_dpd;
if (EVFLAG && eflag_global)
ev.evdwl += evdwl;
}
if (EVFLAG && (eflag_atom || vflag_either))
this->template ev_tally_xyz<NEIGHFLAG>(ev,i,j,evdwl,fpairx,fpairy,fpairz,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::ev_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_eatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom);
auto a_eatom = v_eatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
if (eflag_atom) {
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
a_eatom[j] += epairhalf;
}
if (vflag_either) {
const E_FLOAT v0 = delx*fx;
const E_FLOAT v1 = dely*fy;
const E_FLOAT v2 = delz*fz;
const E_FLOAT v3 = delx*fy;
const E_FLOAT v4 = delx*fz;
const E_FLOAT v5 = dely*fz;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::allocate()
{
PairDPDExt::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPDExt::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDExtKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDExtKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPDExt::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).ws = ws[i][j];
k_params.h_view(i,j).wsT = wsT[i][j];
k_params.h_view(i,j).a0 = a0[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(i,j).gammaT = gammaT[i][j];
k_params.h_view(i,j).sigmaT = sigmaT[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDExtKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDExtKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,143 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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 PAIR_CLASS
// clang-format off
PairStyle(dpd/ext/kk,PairDPDExtKokkos<LMPDeviceType>);
PairStyle(dpd/ext/kk/device,PairDPDExtKokkos<LMPDeviceType>);
PairStyle(dpd/ext/kk/host,PairDPDExtKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_EXT_KOKKOS_H
#define LMP_PAIR_DPD_EXT_KOKKOS_H
#include "pair_dpd_ext.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDExtKokkos : public PairDPDExt {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDExtKokkos(class LAMMPS*);
~PairDPDExtKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=ws=wsT=a0=gamma=sigma=gammaT=sigmaT=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=ws=wsT=a0=gamma=sigma=gammaT=sigmaT=0;}
F_FLOAT cut,ws,wsT,a0,gamma,sigma,gammaT,sigmaT;
};
template<int NEIGHFLAG, int EVFLAG>
struct TagDPDExtKokkos{};
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &i) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void ev_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> dup_eatom;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> ndup_eatom;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_efloat_1d k_eatom;
DAT::tdual_virial_array k_vatom;
typename AT::t_efloat_1d d_eatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDExtKokkos>(PairDPDExtKokkos*);
};
}
#endif
#endif

View File

@ -0,0 +1,444 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_ext_tstat_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDExtTstatKokkos<DeviceType>::PairDPDExtTstatKokkos(class LAMMPS *lmp) :
PairDPDExtTstat(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDExtTstatKokkos<DeviceType>::~PairDPDExtTstatKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::init_style()
{
PairDPDExt::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL )
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/ext/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
// adjust sigma if target T is changing
if (t_start != t_stop) {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
temperature = t_start + delta * (t_stop-t_start);
double boltz = force->boltz;
for (int i = 1; i <= atom->ntypes; i++)
for (int j = i; j <= atom->ntypes; j++) {
k_params.h_view(i,j).sigma = k_params.h_view(j,i).sigma =
sqrt(2.0*boltz*temperature*gamma[i][j]);
}
}
k_params.template modify<LMPHostType>();
if (eflag_atom) {
maxeatom = atom->nmax;
memory->destroy(eatom);
memory->create(eatom,maxeatom,"pair:eatom");
memset(&eatom[0], 0, maxeatom * sizeof(double));
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::operator() (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,VFLAG>(TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::operator() (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpairx,fpairy,fpairz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,wdPar,wdPerp,randnum,randnumx,randnumy,randnumz,factor_dpd;
double fx = 0,fy = 0,fz = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
double P[3][3];
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
P[0][0] = 1.0 - delx*delx*rinv*rinv;
P[0][1] = - delx*dely*rinv*rinv;
P[0][2] = - delx*delz*rinv*rinv;
P[1][0] = P[0][1];
P[1][1] = 1.0 - dely*dely*rinv*rinv;
P[1][2] = - dely*delz*rinv*rinv;
P[2][0] = P[0][2];
P[2][1] = P[1][2];
P[2][2] = 1.0 - delz*delz*rinv*rinv;
wd = 1.0 - r/params(itype,jtype).cut;
wdPar = pow(wd,params(itype,jtype).ws);
wdPerp = pow(wd,params(itype,jtype).wsT);
randnum = rand_gen.normal();
randnumx = rand_gen.normal();
randnumy = rand_gen.normal();
randnumz = rand_gen.normal();
// drag force - parallel
fpair = -params(itype,jtype).gamma*wdPar*wdPar*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wdPar*randnum*dtinvsqrt;
fpairx = fpair*rinv*delx;
fpairy = fpair*rinv*dely;
fpairz = fpair*rinv*delz;
// drag force - perpendicular
fpairx -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[0][0]*delvx + P[0][1]*delvy + P[0][2]*delvz);
fpairy -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[1][0]*delvx + P[1][1]*delvy + P[1][2]*delvz);
fpairz -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[2][0]*delvx + P[2][1]*delvy + P[2][2]*delvz);
// random force - perpendicular
fpairx += params(itype,jtype).sigmaT*wdPerp*
(P[0][0]*randnumx + P[0][1]*randnumy + P[0][2]*randnumz)*dtinvsqrt;
fpairy += params(itype,jtype).sigmaT*wdPerp*
(P[1][0]*randnumx + P[1][1]*randnumy + P[1][2]*randnumz)*dtinvsqrt;
fpairz += params(itype,jtype).sigmaT*wdPerp*
(P[2][0]*randnumx + P[2][1]*randnumy + P[2][2]*randnumz)*dtinvsqrt;
fpairx *= factor_dpd;
fpairy *= factor_dpd;
fpairz *= factor_dpd;
fx += fpairx;
fy += fpairy;
fz += fpairz;
a_f(j,0) -= fpairx;
a_f(j,1) -= fpairy;
a_f(j,2) -= fpairz;
if (VFLAG)
this->template v_tally_xyz<NEIGHFLAG>(ev,i,j,fpairx,fpairy,fpairz,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::v_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
const E_FLOAT v0 = delx*fx;
const E_FLOAT v1 = dely*fy;
const E_FLOAT v2 = delz*fz;
const E_FLOAT v3 = delx*fy;
const E_FLOAT v4 = delx*fz;
const E_FLOAT v5 = dely*fz;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::allocate()
{
PairDPDExt::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPDExt::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDExtTstatKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDExtTstatKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPDExt::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).ws = ws[i][j];
k_params.h_view(i,j).wsT = wsT[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(i,j).gammaT = gammaT[i][j];
k_params.h_view(i,j).sigmaT = sigmaT[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDExtTstatKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDExtTstatKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,138 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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 PAIR_CLASS
// clang-format off
PairStyle(dpd/ext/tstat/kk,PairDPDExtTstatKokkos<LMPDeviceType>);
PairStyle(dpd/ext/tstat/kk/device,PairDPDExtTstatKokkos<LMPDeviceType>);
PairStyle(dpd/ext/tstat/kk/host,PairDPDExtTstatKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_EXT_TSTAT_KOKKOS_H
#define LMP_PAIR_DPD_EXT_TSTAT_KOKKOS_H
#include "pair_dpd_ext_tstat.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDExtTstatKokkos : public PairDPDExtTstat {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDExtTstatKokkos(class LAMMPS*);
~PairDPDExtTstatKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=ws=wsT=gamma=sigma=gammaT=sigmaT=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=ws=wsT=gamma=sigma=gammaT=sigmaT=0;}
F_FLOAT cut,ws,wsT,gamma,sigma,gammaT,sigmaT;
};
template<int NEIGHFLAG, int VFLAG>
struct TagDPDExtTstatKokkos{};
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &i) const;
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fx,const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx,const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDExtTstatKokkos>(PairDPDExtTstatKokkos*);
};
}
#endif
#endif

View File

@ -729,21 +729,19 @@ void PairDPDfdtEnergyKokkos<DeviceType>::ev_tally(EV_FLOAT &ev, const int &i, co
if (vflag_atom) {
if (NEIGHFLAG!=FULL) {
if (NEWTON_PAIR || i < nlocal) {
v_vatom(i,0) += 0.5*v0;
v_vatom(i,1) += 0.5*v1;
v_vatom(i,2) += 0.5*v2;
v_vatom(i,3) += 0.5*v3;
v_vatom(i,4) += 0.5*v4;
v_vatom(i,5) += 0.5*v5;
}
v_vatom(i,0) += 0.5*v0;
v_vatom(i,1) += 0.5*v1;
v_vatom(i,2) += 0.5*v2;
v_vatom(i,3) += 0.5*v3;
v_vatom(i,4) += 0.5*v4;
v_vatom(i,5) += 0.5*v5;
if (NEWTON_PAIR || j < nlocal) {
v_vatom(j,0) += 0.5*v0;
v_vatom(j,1) += 0.5*v1;
v_vatom(j,2) += 0.5*v2;
v_vatom(j,3) += 0.5*v3;
v_vatom(j,4) += 0.5*v4;
v_vatom(j,5) += 0.5*v5;
v_vatom(j,0) += 0.5*v0;
v_vatom(j,1) += 0.5*v1;
v_vatom(j,2) += 0.5*v2;
v_vatom(j,3) += 0.5*v3;
v_vatom(j,4) += 0.5*v4;
v_vatom(j,5) += 0.5*v5;
}
} else {
v_vatom(i,0) += 0.5*v0;

View File

@ -0,0 +1,417 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDKokkos<DeviceType>::PairDPDKokkos(class LAMMPS *lmp) :
PairDPD(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDKokkos<DeviceType>::~PairDPDKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::init_style()
{
PairDPD::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL)
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
if (eflag_atom) {
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
d_eatom = k_eatom.template view<DeviceType>();
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_eatom);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_eatom);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (eflag_global) eng_vdwl += ev.evdwl;
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (eflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_eatom, dup_eatom);
k_eatom.template modify<DeviceType>();
k_eatom.template sync<LMPHostType>();
}
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_eatom = decltype(dup_eatom)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::operator() (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,EVFLAG>(TagDPDKokkos<NEIGHFLAG,EVFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::operator() (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,randnum,factor_dpd;
double fx = 0,fy = 0,fz = 0;
double evdwl = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
wd = 1.0 - r/params(itype,jtype).cut;
randnum = rand_gen.normal();
// conservative force
fpair = params(itype,jtype).a0*wd;
// drag force - parallel
fpair -= params(itype,jtype).gamma*wd*wd*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wd*randnum*dtinvsqrt;
fpair *= factor_dpd*rinv;
fx += fpair*delx;
fy += fpair*dely;
fz += fpair*delz;
a_f(j,0) -= fpair*delx;
a_f(j,1) -= fpair*dely;
a_f(j,2) -= fpair*delz;
if (EVFLAG && eflag_global) {
// unshifted eng of conservative term:
// evdwl = -a0[itype][jtype]*r * (1.0-0.5*r/cut[itype][jtype]);
// eng shifted to 0.0 at cutoff
evdwl = 0.5*params(itype,jtype).a0*params(itype,jtype).cut* wd*wd;
evdwl *= factor_dpd;
ev.evdwl += evdwl;
}
if (EVFLAG && (eflag_atom || vflag_either))
this->template ev_tally<NEIGHFLAG>(ev,i,j,evdwl,fpair,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::ev_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_eatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom);
auto a_eatom = v_eatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
if (eflag_atom) {
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
a_eatom[j] += epairhalf;
}
if (vflag_either) {
const E_FLOAT v0 = delx*delx*fpair;
const E_FLOAT v1 = dely*dely*fpair;
const E_FLOAT v2 = delz*delz*fpair;
const E_FLOAT v3 = delx*dely*fpair;
const E_FLOAT v4 = delx*delz*fpair;
const E_FLOAT v5 = dely*delz*fpair;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::allocate()
{
PairDPD::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPD::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPD::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).a0 = a0[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,142 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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 PAIR_CLASS
// clang-format off
PairStyle(dpd/kk,PairDPDKokkos<LMPDeviceType>);
PairStyle(dpd/kk/device,PairDPDKokkos<LMPDeviceType>);
PairStyle(dpd/kk/host,PairDPDKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_KOKKOS_H
#define LMP_PAIR_DPD_KOKKOS_H
#include "pair_dpd.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDKokkos : public PairDPD {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDKokkos(class LAMMPS*);
~PairDPDKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=a0=gamma=sigma=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=a0=gamma=sigma=0;}
F_FLOAT cut,a0,gamma,sigma;
};
template<int NEIGHFLAG, int EVFLAG>
struct TagDPDKokkos{};
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &i) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void ev_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> dup_eatom;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> ndup_eatom;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_efloat_1d k_eatom;
DAT::tdual_virial_array k_vatom;
typename AT::t_efloat_1d d_eatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDKokkos>(PairDPDKokkos*);
};
}
#endif
#endif

View File

@ -0,0 +1,399 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_tstat_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDTstatKokkos<DeviceType>::PairDPDTstatKokkos(class LAMMPS *lmp) :
PairDPDTstat(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDTstatKokkos<DeviceType>::~PairDPDTstatKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::init_style()
{
PairDPD::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL )
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
// adjust sigma if target T is changing
if (t_start != t_stop) {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
temperature = t_start + delta * (t_stop-t_start);
double boltz = force->boltz;
for (int i = 1; i <= atom->ntypes; i++)
for (int j = i; j <= atom->ntypes; j++) {
k_params.h_view(i,j).sigma = k_params.h_view(j,i).sigma =
sqrt(2.0*boltz*temperature*gamma[i][j]);
}
}
k_params.template modify<LMPHostType>();
if (eflag_atom) {
maxeatom = atom->nmax;
memory->destroy(eatom);
memory->create(eatom,maxeatom,"pair:eatom");
memset(&eatom[0], 0, maxeatom * sizeof(double));
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::operator() (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,VFLAG>(TagDPDTstatKokkos<NEIGHFLAG,VFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::operator() (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,randnum,factor_dpd;
double fx = 0,fy = 0,fz = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
wd = 1.0 - r/params(itype,jtype).cut;
randnum = rand_gen.normal();
// drag force - parallel
fpair = -params(itype,jtype).gamma*wd*wd*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wd*randnum*dtinvsqrt;
fpair *= factor_dpd*rinv;
fx += fpair*delx;
fy += fpair*dely;
fz += fpair*delz;
a_f(j,0) -= fpair*delx;
a_f(j,1) -= fpair*dely;
a_f(j,2) -= fpair*delz;
if (VFLAG)
this->template v_tally<NEIGHFLAG>(ev,i,j,fpair,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::v_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
const E_FLOAT v0 = delx*delx*fpair;
const E_FLOAT v1 = dely*dely*fpair;
const E_FLOAT v2 = delz*delz*fpair;
const E_FLOAT v3 = delx*dely*fpair;
const E_FLOAT v4 = delx*delz*fpair;
const E_FLOAT v5 = dely*delz*fpair;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::allocate()
{
PairDPD::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPD::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDTstatKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDTstatKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPD::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDTstatKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDTstatKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,138 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, 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 PAIR_CLASS
// clang-format off
PairStyle(dpd/tstat/kk,PairDPDTstatKokkos<LMPDeviceType>);
PairStyle(dpd/tstat/kk/device,PairDPDTstatKokkos<LMPDeviceType>);
PairStyle(dpd/tstat/kk/host,PairDPDTstatKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_TSTAT_KOKKOS_H
#define LMP_PAIR_DPD_TSTAT_KOKKOS_H
#include "pair_dpd_tstat.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDTstatKokkos : public PairDPDTstat {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDTstatKokkos(class LAMMPS*);
~PairDPDTstatKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=gamma=sigma=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=gamma=sigma=0;}
F_FLOAT cut,gamma,sigma;
};
template<int NEIGHFLAG, int VFLAG>
struct TagDPDTstatKokkos{};
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &i) const;
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDTstatKokkos>(PairDPDTstatKokkos*);
};
}
#endif
#endif

View File

@ -694,7 +694,7 @@ void PairReaxFFKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
eflag = eflag_in;
vflag = vflag_in;
ev_init(eflag,vflag);
ev_init(eflag,vflag,0);
atomKK->sync(execution_space,datamask_read);
k_params_sing.template sync<DeviceType>();