From 794bf5084c0ea04872c14a64c210cf026064b141 Mon Sep 17 00:00:00 2001 From: Steven Vandenbrande Date: Wed, 16 Jan 2019 16:58:36 +0100 Subject: [PATCH] Implementation and documentation for USER-YAFF package --- doc/src/Commands_bond.txt | 7 +- doc/src/Commands_pair.txt | 1 + doc/src/Eqs/angle_cross.jpg | Bin 0 -> 34385 bytes doc/src/Eqs/angle_cross.tex | 9 + doc/src/Eqs/angle_mm3.jpg | Bin 0 -> 37979 bytes doc/src/Eqs/angle_mm3.tex | 9 + doc/src/Eqs/bond_mm3.jpg | Bin 0 -> 22904 bytes doc/src/Eqs/bond_mm3.tex | 9 + doc/src/Eqs/improper_distharm.jpg | Bin 0 -> 8315 bytes doc/src/Eqs/improper_distharm.tex | 9 + doc/src/Eqs/improper_sqdistharm.jpg | Bin 0 -> 8883 bytes doc/src/Eqs/improper_sqdistharm.tex | 9 + doc/src/Eqs/pair_coulgauss.jpg | Bin 0 -> 17006 bytes doc/src/Eqs/pair_coulgauss.tex | 9 + doc/src/Eqs/pair_lj_switch3.jpg | Bin 0 -> 20362 bytes doc/src/Eqs/pair_lj_switch3.tex | 11 + doc/src/Eqs/pair_mm3_switch3.jpg | Bin 0 -> 41428 bytes doc/src/Eqs/pair_mm3_switch3.tex | 11 + doc/src/Eqs/pair_switch3.jpg | Bin 0 -> 26047 bytes doc/src/Eqs/pair_switch3.tex | 14 + doc/src/Packages_details.txt | 39 +- doc/src/Packages_user.txt | 3 +- doc/src/angle_cross.txt | 62 ++ doc/src/angle_mm3.txt | 55 ++ doc/src/angle_style.txt | 2 + doc/src/angles.txt | 2 + doc/src/bond_mm3.txt | 58 ++ doc/src/bond_style.txt | 1 + doc/src/bonds.txt | 1 + doc/src/improper_distharm.txt | 53 ++ doc/src/improper_sqdistharm.txt | 54 ++ doc/src/improper_style.txt | 2 + doc/src/impropers.txt | 2 + doc/src/lammps.book | 4 + doc/src/pair_lj_switch3_coulgauss.txt | 86 +++ doc/src/pair_mm3_switch3_coulgauss.txt | 88 +++ doc/src/pair_style.txt | 2 + doc/src/pairs.txt | 2 + src/USER-YAFF/README | 8 + src/USER-YAFF/angle_cross.cpp | 344 +++++++++ src/USER-YAFF/angle_cross.h | 57 ++ src/USER-YAFF/angle_mm3.cpp | 288 +++++++ src/USER-YAFF/angle_mm3.h | 57 ++ src/USER-YAFF/bond_mm3.cpp | 220 ++++++ src/USER-YAFF/bond_mm3.h | 57 ++ src/USER-YAFF/improper_distharm.cpp | 269 +++++++ src/USER-YAFF/improper_distharm.h | 47 ++ src/USER-YAFF/improper_sqdistharm.cpp | 269 +++++++ src/USER-YAFF/improper_sqdistharm.h | 47 ++ .../pair_lj_switch3_coulgauss_long.cpp | 714 +++++++++++++++++ .../pair_lj_switch3_coulgauss_long.h | 91 +++ .../pair_mm3_switch3_coulgauss_long.cpp | 715 ++++++++++++++++++ .../pair_mm3_switch3_coulgauss_long.h | 91 +++ 53 files changed, 3885 insertions(+), 3 deletions(-) create mode 100644 doc/src/Eqs/angle_cross.jpg create mode 100644 doc/src/Eqs/angle_cross.tex create mode 100644 doc/src/Eqs/angle_mm3.jpg create mode 100644 doc/src/Eqs/angle_mm3.tex create mode 100644 doc/src/Eqs/bond_mm3.jpg create mode 100644 doc/src/Eqs/bond_mm3.tex create mode 100644 doc/src/Eqs/improper_distharm.jpg create mode 100644 doc/src/Eqs/improper_distharm.tex create mode 100644 doc/src/Eqs/improper_sqdistharm.jpg create mode 100644 doc/src/Eqs/improper_sqdistharm.tex create mode 100644 doc/src/Eqs/pair_coulgauss.jpg create mode 100644 doc/src/Eqs/pair_coulgauss.tex create mode 100644 doc/src/Eqs/pair_lj_switch3.jpg create mode 100644 doc/src/Eqs/pair_lj_switch3.tex create mode 100644 doc/src/Eqs/pair_mm3_switch3.jpg create mode 100644 doc/src/Eqs/pair_mm3_switch3.tex create mode 100644 doc/src/Eqs/pair_switch3.jpg create mode 100644 doc/src/Eqs/pair_switch3.tex create mode 100644 doc/src/angle_cross.txt create mode 100644 doc/src/angle_mm3.txt create mode 100644 doc/src/bond_mm3.txt create mode 100644 doc/src/improper_distharm.txt create mode 100644 doc/src/improper_sqdistharm.txt create mode 100644 doc/src/pair_lj_switch3_coulgauss.txt create mode 100644 doc/src/pair_mm3_switch3_coulgauss.txt create mode 100644 src/USER-YAFF/README create mode 100644 src/USER-YAFF/angle_cross.cpp create mode 100644 src/USER-YAFF/angle_cross.h create mode 100644 src/USER-YAFF/angle_mm3.cpp create mode 100644 src/USER-YAFF/angle_mm3.h create mode 100644 src/USER-YAFF/bond_mm3.cpp create mode 100644 src/USER-YAFF/bond_mm3.h create mode 100644 src/USER-YAFF/improper_distharm.cpp create mode 100644 src/USER-YAFF/improper_distharm.h create mode 100644 src/USER-YAFF/improper_sqdistharm.cpp create mode 100644 src/USER-YAFF/improper_sqdistharm.h create mode 100644 src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp create mode 100644 src/USER-YAFF/pair_lj_switch3_coulgauss_long.h create mode 100644 src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp create mode 100644 src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h diff --git a/doc/src/Commands_bond.txt b/doc/src/Commands_bond.txt index fbf292aab2..3b6d708863 100644 --- a/doc/src/Commands_bond.txt +++ b/doc/src/Commands_bond.txt @@ -37,6 +37,7 @@ OPT. "harmonic (iko)"_bond_harmonic.html, "harmonic/shift (o)"_bond_harmonic_shift.html, "harmonic/shift/cut (o)"_bond_harmonic_shift_cut.html, +"mm3"_bond_mm3.html, "morse (o)"_bond_morse.html, "nonlinear (o)"_bond_nonlinear.html, "oxdna/fene"_bond_oxdna.html, @@ -67,10 +68,12 @@ OPT. "cosine/shift (o)"_angle_cosine_shift.html, "cosine/shift/exp (o)"_angle_cosine_shift_exp.html, "cosine/squared (o)"_angle_cosine_squared.html, +"cross"_angle_cross.html, "dipole (o)"_angle_dipole.html, "fourier (o)"_angle_fourier.html, "fourier/simple (o)"_angle_fourier_simple.html, "harmonic (iko)"_angle_harmonic.html, +"mm3"_angle_mm3.html, "quartic (o)"_angle_quartic.html, "sdk (o)"_angle_sdk.html, "table (o)"_angle_table.html :tb(c=4,ea=c) @@ -120,8 +123,10 @@ OPT. "cossq (o)"_improper_cossq.html, "cvff (io)"_improper_cvff.html, "distance"_improper_distance.html, +"distharm"_improper_distharm.html, "fourier (o)"_improper_fourier.html, "harmonic (iko)"_improper_harmonic.html, "inversion/harmonic"_improper_inversion_harmonic.html, "ring (o)"_improper_ring.html, -"umbrella (o)"_improper_umbrella.html :tb(c=4,ea=c) +"umbrella (o)"_improper_umbrella.html, +"sqdistharm"_improper_sqdistharm.html :tb(c=4,ea=c) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index 46f4950ad7..b498e6bfda 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -154,6 +154,7 @@ OPT. "lj/sf/dipole/sf (go)"_pair_dipole.html, "lj/smooth (o)"_pair_lj_smooth.html, "lj/smooth/linear (o)"_pair_lj_smooth_linear.html, +"lj/switch3/coulgauss/long"_pair_lj_switch3_coulgauss.html, "lj96/cut (go)"_pair_lj96.html, "lubricate (o)"_pair_lubricate.html, "lubricate/poly (o)"_pair_lubricate.html, diff --git a/doc/src/Eqs/angle_cross.jpg b/doc/src/Eqs/angle_cross.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a5522382b82e6ff1c5869f4404a1be6e93940c7 GIT binary patch literal 34385 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/angle_cross.tex b/doc/src/Eqs/angle_cross.tex new file mode 100644 index 0000000000..9d1fdcb7f8 --- /dev/null +++ b/doc/src/Eqs/angle_cross.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K_{SS} \left(r_{12}-r_{12,0}\right)\left(r_{32}-r_{32,0}\right) + K_{BS0}\left(r_{12}-r_{12,0}\right)\left(\theta-\theta_0\right) + K_{BS1}\left(r_{32}-r_{32,0}\right)\left(\theta-\theta_0\right) +$$ + +\end{document} diff --git a/doc/src/Eqs/angle_mm3.jpg b/doc/src/Eqs/angle_mm3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef234c3ed0df54f5b357b9b29250b055b5a9a631 GIT binary patch literal 37979 zcmeFYWmFu|wk}$YYj6ne9w4{{g1c+*1h>XDSV9892_D>nTd>9osKxo|E<#zTt zXY4)BdH0QT|K0oEonv(M?A5DkRj;c0<~P4J`)U4Z6~I-JQBu0bt+)a6^D^!A>4-TJlmfZww4+{4_5E@N zfFB6}rr~4!FB^uXmAeIeuY35*-@?Vs0{}oiaG%B7!{x7^1NRBd9sc3h{q^18CkSsJ z`0LyJo4@prKL6$)|D%tNmNfiVAprmymd(HT=KtdV`?&D#0G*_phn=;R4~@37wTJgR zH!B+VzcT@!D;fD|N12madtK-$^G*Uiqx)`RB1oB_{E zZf@Y8*Wyg`A9D;M9{Fe6KM(rPHs?G55V`;W#IOHsGfxG8h7bUFzWC2Jh8zIE`3wM% zaSKm3uYWrde7XPt8NdK=078HipaSRt7Jvib0R#b2Kmw2jlmK-=2QUCk0Smwu00VA- zH{cI^1VVvG;46>>qygE$cc28Q1Zsc=pcUu@`ha0z0+<1yz$&l->;cEXC2$7GVbB48m9B2XeQA#foGAxI)9Bj_NQAlM+dBD_cVj1YtH4IvMq907vR zi7<>XgRqLQhj4)iAYvjCBhn&rAPON$BdQ}BB3dK5AqFBwASNT`Ayy(bBlaUsBd#Lu zBiVL_t9zMqx$~L{UI7K(R;hLy1DkM5#jgi86@-L%Bdj zMI}XLM-@X=M}3Ftff|aMidv4^fjWh{fqIRGiAIgagC>V&h~|VAjFya6iq?)cg|>xu zhmMQRh%SPzj&6zWiyn*q9laTS9DM`*4g(K^8AA+12g4rYBgQw3N{n8NC5$snOiVgV zVN6X-JIoK5-!Ok*4q*Plyurf9V#AWgGRE@6ioq(v`iZrGb%u?N&4ew1ZHVoG9fMth z-HrVl`}!HdGtOs<&n%w>JxhNEc{cUz5CF7y%*yJ%KcV1;HnR z?*zRB8-yr?%!G=B_Jomy6@+7i$3*x+3N{KY3O|Z`iV=znN-9cuN*Bsh%5KViDq<=LDtoF#s&=X! zY65C;YCGyg>JI8%8X_7=8b_LMG(9xOv=p=ow4SuNv}3e)bj)v4 z&Em?E$MTC6g;j{vfi;tLf(?OQfn9*zjy;oo@&)n>;TKLX@?OkwU~x!t zcyW|*{NW_#RN)NfY~VcPV&F35isS0%dVI&9yT5eo^+mH zyx6>Qyg|H;yeE9@d{%r}eDnMS{Hpw4_`CQY1Ox@#1S$n~1Q`V13T6n-2@wiu2t^4E z2qOzi2?q(c3g3tbhh&qUtif+GRer5IQ`zx3jo!C3ET(MPg8u7Q{IpV9Y zXqEKQ>l2y`PvRv{|>ZO#MRK3)dw1{+o^iLT?8F`rqnK4;>SzXyQ z+23+>ayD{ha>w%g@_zC^6_6E_72*`;6e$%g6iXD3l?0UnlzNo0l(m)9l-E?)RNPdW zRS{H`R1;K})EL#A)Ed+Qbw%|A^<@oa4Ofj8O%zQH&2-I8Ep9D;t$u9+Z8Pms?Modg zomd^HE{m?GZkHa8p0Qqu-j%+Le!Twb8?HA2Z-x!X4D1XV4N(pC3=0h}jAV_Hj5dt< zjYExRO_)u5Oa@KKOdU=yiF3c6pGt7@Iq%Be`_ADhV z6D@bF#H`}2wyedh@J}$tF9uhNv_9k%5H`3Aa@h@Mh`-GP#p1O@eJ|&<0bBu z?se_0=UwZA=i}rv;>+e6?z{C~?tOtDlAncNmp`rlNB=(ok^#Aapg{A$t|0oL&p{g> z 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

7!XUTK(r(muN}wge}`b75(}9v zb9=g|;?%(!s>r|V(;)q76r zn>yu=%d(ClFxqC)Rm;AR0|!!%d|D0ALo$c%LBAKsu@x-PL~RjaA5quY60dhvJLOd? zS$vDt5kcQxKk}CGrZyo;LBlg~ppp$}_qL!sVF~j!Dx5?nvH{ACZHs5jGJMKPwN4OS zEf<(+a)ehh=AKL<_u8?T3nTs4_a8mB^tIx8$Ku41JWlGrrB*!1*SXKL>M7(OJ?<_) zx@TK_VHXlLx2i{z#}#cz75ae&{_JrVY(L0&$+p*_(-N=dBW#bm;W0RF7(DSbD$HfiojBpBJ3zKohSN?nqRJn@xDfQo@ z)Bk2!$-2mIxKp2hJR}x4RJGyx`iR5i-kvSkbLz$zuv{?87dV

8Ss~g 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/angle_mm3.tex b/doc/src/Eqs/angle_mm3.tex new file mode 100644 index 0000000000..e2d96f2d69 --- /dev/null +++ b/doc/src/Eqs/angle_mm3.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (\theta - \theta_0)^2 \left[ 1 - 0.014(\theta - \theta_0) + 5.6(10)^{-5} (\theta - \theta_0)^2 - 7.0(10)^{-7} (\theta - \theta_0)^3 + 9(10)^{-10} (\theta - \theta_0)^4 \right] +$$ + +\end{document} diff --git a/doc/src/Eqs/bond_mm3.jpg b/doc/src/Eqs/bond_mm3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8bbbbf7b0a7f31e33ecec2809a62feab7455492 GIT binary patch literal 22904 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

>Mxr(vR%IQ?-E^7~_%k>CgUWGOH!K**` zJ#e-YIMaChdT{y$><-MvH5Zx6XAf-pIGNAF#VwnR?D|)36e_7sQpYwspHRgyLui7eDG$ZhQ_$ihJa4t>x)RS zQ>>q#RCyg;=7P{K!)5h8>KSXV*PMRWq29fyo`XCBc?Q2~%5-r1zwaIZZx+tTU4v)1vUgDh}2AFhz^(&kOQvqkgBt`#%+l)#(#^PX|qq&`Xwiv1wJCnZ{vq4FP`nRx(Y!oc8r|JtK=3#7?et_9R*!cJ|1{3HfCK~3UE*kayR#;SooMOwkb9Y7hiaB#Tvuhsfj6e zf{$N1@-nTzU1jk4rIGQBv8g^wFC*qs%infSv*P)dLb_sDrf+`E2h1h*nRy(n>`%cZ z*SAxiA{OwrtcT$IkN*FYPYql-I~qkHjv-IALmo@9mA)eE_zj}e>UG<@NSE_0t-mso z1nGHC+2`?VJlbiK4#Ko{DGTRaryWtJQSBzqghe3R0Y4V4H!mpyJlcARoB0MQ3X8-B zc!ySQhwHFEME6XK(-C04|MtmW)}b+%iqc`m+{w(o48c5VudIQuMgRh$bXKxe5K{t)px;6#uhF zWt@jc8o^gP$Vd&H+(t+#1v-YJX-P(4O!h&XqHF8_)5&>9HMuT(7%2)O(m|vM2nr~m zphy!02|M)O6F})D385oK6a*~;6PXPvvw zz3*Si%F36#lg#_g%^LA@Wv(nZJ0BRtJm!on_h#eDD7G;=6HSyzxKZES?M zyI=zN)bb3%J!O<0{yfC=cDr}ZPO-O^QA#n@e0)b+F=xh(ykca!xNl?jfxbU=#&6Wv^S3{4b3;rEWrb?9zJl96054?ZYY&|$7 zQQ5En;)o|0yG^aLI09E-zTfyej&T0<92Ew{5%8~J5#ICOcnsz@D=Hd9VtN!+%;^rClsr=CW)Fh7lY5S_L_hM3mq<-&#&dO8U0%&mKcnOnJUQF|cndZgq>pi7h3NqRl40 z>Ocv7?9eNbNp4rQB1X%s!C(atjY7G|1X+mx??^S@&}6CkGsl8ZExuYaoQNA%a5+OU zeuXYirRotFBdWji1=CuInN!f|rP9;Oy>B^|^t1}FF$8*#`s;0;wGrqEaZB=dp^y#L zCymG)X^t4uWlI3;3*Br=&l$)$`pj|$0WMtZv?QKEfYDA>-?oy@AV3Ywl#31k0jjj4 z8QeOBM2GV&{<=*)!%+Jh@78e4v4Qq@!L8#sSOX#Q+x~#f{(D%(sMO@+h^wxbDw273 zi9WNj1}3DR1Ki@&iiRI5yZ`W{>5Y@r%xSk`?X-9?r^BO&vU<(GuXzw1_4anA$xB?e zDqJB7Qt^^cT3$Qnh-VRdq;*Qt+E#`++6B}o8|+kk>9((*6X6Krx$SGwjht%55;lLy zOX)#>2cLj+o+%0c>hMA#^V!Rm%G)MPNL$4glnE;10>yBu^GR+HuCQW;hlezmmo5q& z`o#k5GC?tL^k?rjElNl zshOK(EBS06gc-z8iIIN9P4n3aN~6KKTmmAY0-r=($!7y~+4AiU$YFQJ@Nv^`X9rew zd1p4P$A!20`%z(U<6@KsU7+Sao%k1G6}%VG>A?cQf)vjRRyevv5v5=37;INW#fPZ_ zJgN27OytCpLve*1ndJ7=J#&N>kX6aMfcxG6)oI3D@s%h1BZelxf&I1;Tv^7>Cdt1A zg-!6Bd0ulL-!n<0&>O?qjRSxOm}{DZ z8GlYT+zzz4gIbH{u52$KxAM`bmo>uOm_SqsByE7!?0IHCgW@ZV676 zKEnT5eP^I`!x`R#-_!p3V?fs2D11R)ax*EgDI*5P;|u*xe0 zrNql-yxR=MF8UCMZyikPlm;M>j*gB2OFntA=9*;X6vFGF=FH=;Ln`x>F(jgHlJLx;@Yzt7XZ{-C!&crRrg1egVsA+x$b`iXAQNVuEep;e zrR3%&`)+@^*_|Dc_Ng5yOv%1i$j|XpJdM6DAYwpnAIMX~L{`zQ`H1 z3>V;v92CrEf81Zli{)5xF?PR|Ya<18$4tEqnOijmHu(#PjOg`x56E)nt}iS4V}qF$ zZ2xilnJLczeEHeHQ2==NTnOB_Okk!vF!->HsC=2aPNjW58@* z7d4Hc&N?`WULrE!O07ye5>|wFefHJIZ$f>V4|$U!s%As|{VB6^d3l2c$A&HKSZF(@ z3X6E&&p)Wq2eTE{im=Q|$;s8JaU_|kOJ@5EY{#TWy}THYxCIUy!DOy1kA4^{g~rXX z+o)%t||H~S4hbUJjp=)*jl>dQG$_crURPj$z;?qA;I zT1P6UyuTz4Cq-tXzTfM=URs;G6VJ?4D+u4B6XjMx-IX*_?qSgc zdneqRw`8Q^2dW3$l}nPthgNG7Lf4z_=BXAR_GDF08r5)O9Buqt38l4+`1OPv#O%kT zM4Xdz>(S^3$ptTpKenGjz2~a53IXgQHu(xHX61{#KC!TDTH4ey>20KhGn*S+spSy{ zGt*(%7xyZD?sciB%30p9L)3}qgc`6MWqCxz-J$!MVK^?{+`4cRw-vl`C|cF=u($cE6;&pHWgXd z4Kl~qJMi9`o23b)!X?;K62&Ah^bZH19H?Djc+2{CIj|~fy2bi;IglDAF_I3H1Gzr} z)j(ceBdm6I`D!05DWo$Uk7>(3B{>^K(KOtW_EsxoKtOWVe+s-_LETt8vz3P<%mO!Q zN!q`#Em=_NG5qVb;#t3Fb@utbgyTveVo1iTZxj7Q-yC)o0lB=_uJ=MEHkC2>l;rl# z^k{@zthpN`NBMYdg}Vxjfmk24dLa4)_o><-iwuAoneEZ9dGoTj=}PaPftkcVk_ zr?x{(th*>sK(D9|KLOoA#LHRjO);LhC5rd09o1c15vj%&r%VmarcRlAYswt`=kRB) zMb^oKsO2J5f$vn$YRpXgpjz|rxPxtPEYHE-oDVdrfi3vnk)=)mTO|c6y20ZMOO(Fq zypy@VgWL?#xXQ3}Chd;N6A0;I3j%fHrphB+cv#A8)o3xvc1TmPMNO)dl767yU$^ms zm7VdVS-u+^x$9x~AD?x~7}oM0DxAf)Qxe{U2VH4*i3q?lQr(FQdnXpOyYY|}Z14K= zW*?$h_9mxcwu51^(+!~$X0$Oh|3+E+s`=P7C&xyWM$!vgt=&sk?ge;@Vh(Mr7aDG4+_iUUb8JP5hmnGUWuEwl*gy|q=`UcYHkZ4q~JZ6ht< zXlJT)Pfnh-V#C+s+MBjL@59}dz0J0P?5|&8VagTtp7T z7zqS50CYb^mprnk!ZMM_#ETUQnhY)bysSdW6!t&TDYyyJ-MrjJ30 zr7Dk!Qj7k|YVm2K0-;)5l)I|a7Y(x49P7tESvVU>#**ZT8%pr`<*gv;-JLVHzj)JF}wNsw}rE0Kh@U3fyCYJOi z(75Tcc&>PdY8%~~Qv?-$PR93e6^V@YN5~i7C7qSD7lX+;HKYicPyhqi#Y;>{RL5I) z_rzZ%`bBv6$|Ct>*fy%V92!}Zd`kH3N9@gGLea7X?&NoQnTy~3s8qz;Umo04hacM> z*s8qPnv2J)Sp0EbKMQ2f37ccE!Oy%lguuv^Ai$r=#6Z2EP*9(2xOmUFwceY~?+pYP zmvI(>{jRA2=DxO)9k_Hh>t#0U@RRM?tQYC79-*^YFCgW4Wuy);>*eXRw~h`k86(*p z0i&nem7K3evS7uo#-d;1U*cvzhtBQcHCAAR?$Kn=Mhkmc;o8o7SZ$Z2s9BK;L!lmYEf8qD11v6vSVMO2vTabZ%6L016C|xkqzInynZ;{{m`VVa%99K>&cq{V?f-#&;QkWXHxAyZKK(S_UX*X1HRp{NW zKgtW8bWQVzBIM6kwpTru{=q)3nK*S@*Ce6G`zUuj+n9sd#M(Oq6|bRA*k zS(U8jsd;zQj;ig1> z5TPDSxPrpt=v;l>eHf53H4(RN!mDyo!J5HrzIK#mtO0qR7MH?^tS#a5q(8yD(CE?3HA51^{o}vJL8gr;+z+hl@8Kks}hW-dSj(S>(uq zUb)s#!&x+u>!SkYZuU;L?`X6)LsTM2s3aUUu51NSH0-8$WM~sGdRf2De>DEG&)o|* zOqkK$T)E`>%z3}35mrJ^&-+O6-c1_vL3YM_j4MNyg@rI>;?v%B_LA`o!~CKue6sY4 z_9(4Y7|0M5708H=VQgw3(*&=A1`SHZK^{vi|B!1w7S6zoXeM4nkKZBoRB+GjEpGA6 zczJOcYEB@viF7G+Vtc)G6`~h(S1DhI%$@IMR~mfi(|w1^dlV42hhy?)D zv=`rI=bjZ$Kz%X}vgrsYY;*6gWarnh;W!`UktOtDsrQ|&Y2>na-qroQgKrAXUmQ|W zry?9S#tYlK7!=jLP%Tvh32v?26snFp@;sps1rBA1wHfr+{-5zlb|toqE_kR zpLz!yYlcE68d%YZ4AF@(d5O{Vg7iYg3jcJ(_eFm40N;FE_3@pk^D&!5V+6^sWeXx!$dUb&nn^LlXh2||tI@hGekcVX+-|xPDp~f&_o6kSM zMRJY1%vy}&o-4Q{bQ@98FU!|S(fOy>&y@RucIwSbu=fBY_bz23b4Uk`8hD*OoL#FT zzkfKzK5#fPkVlu4SzDZ9PCeQw(?T73HU4r(gxz6Hp~)UkEyrNzE1vZ+M86f>Abo`9{r1^ z%}^mm@E>C9|B}2e{b|HMclgf}2YC87x!LICzfZpZ-y;K(-TdRYyNF5hYtz`P0Hyio tLHaM3``hfVg8VVBHLVQ4+DpC%Va$hm|Nd?N_IiJP;qTv~)$w%nzW_O>_kjQa literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/bond_mm3.tex b/doc/src/Eqs/bond_mm3.tex new file mode 100644 index 0000000000..549500ebac --- /dev/null +++ b/doc/src/Eqs/bond_mm3.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (r - r_0)^2 \left[ 1 - 2.55(r-r_0) + (7/12) 2.55^2(r-r_0)^2 \right] +$$ + +\end{document} diff --git a/doc/src/Eqs/improper_distharm.jpg b/doc/src/Eqs/improper_distharm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cef334351def212812752f494d0790d176857f53 GIT binary patch literal 8315 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 Zm~sQFR#8O@n?{v`yM(t@uIugM{{falmGA%n literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/improper_distharm.tex b/doc/src/Eqs/improper_distharm.tex new file mode 100644 index 0000000000..218de6a0dd --- /dev/null +++ b/doc/src/Eqs/improper_distharm.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (d - d_0)^2 +$$ + +\end{document} diff --git a/doc/src/Eqs/improper_sqdistharm.jpg b/doc/src/Eqs/improper_sqdistharm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f5cc97f4331492b921c1c67bbcb9ce127586148 GIT binary patch literal 8883 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/improper_sqdistharm.tex b/doc/src/Eqs/improper_sqdistharm.tex new file mode 100644 index 0000000000..1b50a309a0 --- /dev/null +++ b/doc/src/Eqs/improper_sqdistharm.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (d^2 - d_0^2)^2 +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_coulgauss.jpg b/doc/src/Eqs/pair_coulgauss.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4eb34604365e3268e87d4a22e4067af12952752 GIT binary patch literal 17006 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 BK|cTh literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_coulgauss.tex b/doc/src/Eqs/pair_coulgauss.tex new file mode 100644 index 0000000000..216d3b3360 --- /dev/null +++ b/doc/src/Eqs/pair_coulgauss.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + \thispagestyle{empty} +\begin{eqnarray*} + E &=& \frac{q_i q_j \mathrm{erf}\left( r/\sqrt{\gamma_1^2+\gamma_2^2} \right) }{\epsilon r_{ij}} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_lj_switch3.jpg b/doc/src/Eqs/pair_lj_switch3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc04de6a813c084dbec30453b9f89fc114625b6 GIT binary patch literal 20362 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_lj_switch3.tex b/doc/src/Eqs/pair_lj_switch3.tex new file mode 100644 index 0000000000..29161fb2ef --- /dev/null +++ b/doc/src/Eqs/pair_lj_switch3.tex @@ -0,0 +1,11 @@ +\documentclass[12pt]{article} + +\begin{document} + \thispagestyle{empty} + +\begin{eqnarray*} + E = 4\epsilon \left[ \left(\frac{\sigma}{r}\right)^{12}-\left(\frac{\sigma}{r}\right)^{6} \right] +% \qquad r < r_c \\ +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_mm3_switch3.jpg b/doc/src/Eqs/pair_mm3_switch3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..caad9bbe99ee9e3a1d7f85280fd5d26fbd4511fb GIT binary patch literal 41428 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 M8vplyL=K1l15?$Yi~s-t literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_switch3.tex b/doc/src/Eqs/pair_switch3.tex new file mode 100644 index 0000000000..7ae67a5e65 --- /dev/null +++ b/doc/src/Eqs/pair_switch3.tex @@ -0,0 +1,14 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} + +\begin{eqnarray*} + S_3(r) = \left\lbrace \begin{array}{ll} + 1 & \quad\mathrm{if}\quad r < r_\mathrm{c} - w \\ + 3x^2 - 2x^3 & \quad\mathrm{if}\quad r < r_\mathrm{c} \quad\mathrm{with\quad} x=\frac{r_\mathrm{c} - r}{w} \\ + 0 & \quad\mathrm{if}\quad r >= r_\mathrm{c} + \end{array} \right. +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 4768c50ca4..ebfe01d8a7 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -100,7 +100,8 @@ as contained in the file name. "USER-SPH"_#PKG-USER-SPH, "USER-TALLY"_#PKG-USER-TALLY, "USER-UEF"_#PKG-USER-UEF, -"USER-VTK"_#PKG-USER-VTK :tb(c=6,ea=c) +"USER-VTK"_#PKG-USER-VTK, +"USER-YAFF"_#PKG-USER-YAFF, :tb(c=6,ea=c) :line @@ -2067,3 +2068,39 @@ lib/vtk/README "dump vtk"_dump_vtk.html :ul +:line + +USER-YAFF package :link(PKG-USER-YAFF),h4 + +[Contents:] + +Some potentials that are also implemented in the Yet Another Force Field ("YAFF"_yaff) code. +The expressions and their use are discussed in the following papers + +Vanduyfhuys et al., J. Comput. Chem., 36 (13), 1015-1027 (2015) "link"_vanduyfhuys2015 +Vanduyfhuys et al., J. Comput. Chem., 39 (16), 999-1011 (2018) "link"_vanduyfhuys2018 :ul + +which discuss the "QuickFF"_quickff methodology. + + +:link(vanduyfhuys2015,http://dx.doi.org/10.1002/jcc.23877) +:link(vanduyfhuys2018,http://dx.doi.org/10.1002/jcc.25173) +:link(quickff,http://molmod.github.io/QuickFF) +:link(yaff,https://github.com/molmod/yaff) + + +[Author:] Steven Vandenbrande. + +[Supporting info:] + +src/USER-YAFF/README +"angle_style cross"_angle_cross.html +"angle_style mm3"_angle_mm3.html +"bond_style mm3"_bond_mm3.html +"improper_style distharm"_improper_distharm.html +"improper_style sqdistharm"_improper_sqdistharm.html +"pair_style mm3/switch3/coulgauss/long"_pair_mm3_switch3_coulgauss.html +"pair_style lj/switch3/coulgauss/long"_pair_lj_switch3_coulgauss.html +examples/USER/yaff :ul + + diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index cea3db4377..4a702e971f 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -75,7 +75,8 @@ Package, Description, Doc page, Example, Library "USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no "USER-TALLY"_Packages_details.html#PKG-USER-TALLY, pairwise tally computes,"compute XXX/tally"_compute_tally.html, USER/tally, no "USER-UEF"_Packages_details.html#PKG-USER-UEF, extensional flow,"fix nvt/uef"_fix_nh_uef.html, USER/uef, no -"USER-VTK"_Packages_details.html#PKG-USER-VTK, dump output via VTK, "compute vtk"_dump_vtk.html, n/a, ext :tb(ea=c,ca1=l) +"USER-VTK"_Packages_details.html#PKG-USER-VTK, dump output via VTK, "compute vtk"_dump_vtk.html, n/a, ext +"USER-YAFF"_Packages_details.html#PKG-USER-YAFF, additional styles implemented in YAFF, "angle_style cross"_angle_cross.html, USER/yaff, no :tb(ea=c,ca1=l) :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) :link(PLUMED,http://www.plumed.org) diff --git a/doc/src/angle_cross.txt b/doc/src/angle_cross.txt new file mode 100644 index 0000000000..d9d83ed4b6 --- /dev/null +++ b/doc/src/angle_cross.txt @@ -0,0 +1,62 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +angle_style cross command :h3 + +[Syntax:] + +angle_style cross :pre + +[Examples:] + +angle_style cross +angle_coeff 1 200.0 100.0 100.0 1.25 1.25 107.0 :pre + +[Description:] + +The {cross} angle style uses a potential that couples the bond stretches of +a bend with the angle stretch of that bend: + +:c,image(Eqs/angle_cross.jpg) + +where r12,0 is the rest value of the bond length between atom 1 and 2, +r32,0 is the rest value of the bond length between atom 2 and 2, +and theta0 is the rest value of the angle. KSS is the force constant of +the bond stretch-bond stretch term and KBS0 and KBS1 are the force constants +of the bond stretch-angle stretch terms. + +The following coefficients must be defined for each angle type via the +"angle_coeff"_angle_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +KSS (energy/distance^2) +KBS0 (energy/distance/rad) +KBS1 (energy/distance/rad) +r12,0 (distance) +r32,0 (distance) +theta0 (degrees) :ul + +Theta0 is specified in degrees, but LAMMPS converts it to radians +internally; hence the units of KBS0 and KBS1 are in energy/distance/radian. + +[Restrictions:] + +This angle style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"angle_coeff"_angle_coeff.html + +[Default:] none + +:line + + diff --git a/doc/src/angle_mm3.txt b/doc/src/angle_mm3.txt new file mode 100644 index 0000000000..9ae032c4ff --- /dev/null +++ b/doc/src/angle_mm3.txt @@ -0,0 +1,55 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +angle_style mm3 command :h3 + +[Syntax:] + +angle_style mm3 :pre + +[Examples:] + +angle_style mm3 +angle_coeff 1 100.0 107.0 :pre + +[Description:] + +The {mm3} angle style uses the potential that is anharmonic in the angle +as defined in "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/angle_mm3.jpg) + +where theta0 is the equilibrium value of the angle, and K is a +prefactor. The anharmonic prefactors have units deg^(-n), for example +-0.014 deg^(-1), 5.6(10)^(-5) deg^(-2), ... + +The following coefficients must be defined for each angle type via the +"angle_coeff"_angle_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +K (energy/radian^2) +theta0 (degrees) :ul + +Theta0 is specified in degrees, but LAMMPS converts it to radians +internally; hence the units of K are in energy/radian^2. + +[Restrictions:] + +This angle style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"angle_coeff"_angle_coeff.html + +[Default:] none + +:line + diff --git a/doc/src/angle_style.txt b/doc/src/angle_style.txt index 2c3c1f2bd1..2f2da678d8 100644 --- a/doc/src/angle_style.txt +++ b/doc/src/angle_style.txt @@ -81,10 +81,12 @@ of (g,i,k,o,t) to indicate which accelerated styles exist. "cosine/shift"_angle_cosine_shift.html - angle cosine with a shift "cosine/shift/exp"_angle_cosine_shift_exp.html - cosine with shift and exponential term in spring constant "cosine/squared"_angle_cosine_squared.html - angle with cosine squared term +"cross"_angle_cross.html - cross term coupling angle and bond lengths "dipole"_angle_dipole.html - angle that controls orientation of a point dipole "fourier"_angle_fourier.html - angle with multiple cosine terms "fourier/simple"_angle_fourier_simple.html - angle with a single cosine term "harmonic"_angle_harmonic.html - harmonic angle +"mm3"_angle_mm3.html - anharmonic angle "quartic"_angle_quartic.html - angle with cubic and quartic terms "sdk"_angle_sdk.html - harmonic angle with repulsive SDK pair style between 1-3 atoms "table"_angle_table.html - tabulated by angle :ul diff --git a/doc/src/angles.txt b/doc/src/angles.txt index 3e91ba9917..3d8a47b2eb 100644 --- a/doc/src/angles.txt +++ b/doc/src/angles.txt @@ -14,11 +14,13 @@ Angle Styles :h1 angle_cosine_shift angle_cosine_shift_exp angle_cosine_squared + angle_cross angle_dipole angle_fourier angle_fourier_simple angle_harmonic angle_hybrid + angle_mm3 angle_none angle_quartic angle_sdk diff --git a/doc/src/bond_mm3.txt b/doc/src/bond_mm3.txt new file mode 100644 index 0000000000..bfc802036e --- /dev/null +++ b/doc/src/bond_mm3.txt @@ -0,0 +1,58 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +bond_style mm3 command :h3 + +[Syntax:] + +bond_style mm3 :pre + +[Examples:] + +bond_style mm3 +bond_coeff 1 100.0 107.0 :pre + +[Description:] + +The {mm3} bond style uses the potential that is anharmonic in the bond +as defined in "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/bond_mm3.jpg) + +where r0 is the equilibrium value of the bond, and K is a +prefactor. The anharmonic prefactors have units angstrom^(-n): +-2.55 angstrom^(-1) and (7/12)2.55$2 angstrom^(-2). The code takes +care of the necessary unit conversion for these factors internally. +Note that the MM3 papers contains an error in Eq (1): +(7/12)2.55 should be replaced with (7/12)2.55^2 + +The following coefficients must be defined for each bond type via the +"bond_coeff"_bond_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +K (energy/distance^2) +r0 (distance) :ul + +[Restrictions:] + +This bond style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"bond_coeff"_bond_coeff.html + +[Default:] none + +:line + +:link(mm3-allinger1989) +[(Allinger)] Allinger, Yuh, Lii, JACS, 111,94, 8551-8566 +(1990), diff --git a/doc/src/bond_style.txt b/doc/src/bond_style.txt index ae19f2369d..aba6d3a778 100644 --- a/doc/src/bond_style.txt +++ b/doc/src/bond_style.txt @@ -86,6 +86,7 @@ accelerated styles exist. "harmonic"_bond_harmonic.html - harmonic bond "harmonic/shift"_bond_harmonic_shift.html - shifted harmonic bond "harmonic/shift/cut"_bond_harmonic_shift_cut.html - shifted harmonic bond with a cutoff +"mm3"_bond_mm3.html - MM3 anharmonic bond "morse"_bond_morse.html - Morse bond "nonlinear"_bond_nonlinear.html - nonlinear bond "oxdna/fene"_bond_oxdna.html - modified FENE bond suitable for DNA modeling diff --git a/doc/src/bonds.txt b/doc/src/bonds.txt index d33515eb88..48896e711c 100644 --- a/doc/src/bonds.txt +++ b/doc/src/bonds.txt @@ -13,6 +13,7 @@ Bond Styles :h1 bond_harmonic_shift bond_harmonic_shift_cut bond_hybrid + bond_mm3 bond_morse bond_none bond_nonlinear diff --git a/doc/src/improper_distharm.txt b/doc/src/improper_distharm.txt new file mode 100644 index 0000000000..52815e76aa --- /dev/null +++ b/doc/src/improper_distharm.txt @@ -0,0 +1,53 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +improper_style distharm command :h3 + +[Syntax:] + +improper_style distharm + +[Examples:] + +improper_style distharm +improper_coeff 1 25.0 0.5 :pre + +[Description:] + +The {distharm} improper style uses the potential + +:c,image(Eqs/improper_distharm.jpg) + +where d is the oriented distance between the central atom and the plane formed +by the other three atoms. If the 4 atoms in an improper quadruplet +(listed in the data file read by the "read_data"_read_data.html +command) are ordered I,J,K,L then the L-atom is assumed to be the +central atom. Note that this is different from the convention used +in the improper_style distance. The distance d is oriented and can take +on negative values. This may lead to unwanted behavior if d0 is not equal to zero. + +The following coefficients must be defined for each improper type via +the improper_coeff command as in the example above, or in the data +file or restart files read by the read_data or read_restart commands: + +K (energy/distance^2) +d0 (distance) :ul + +:line + +[Restrictions:] + +This improper style can only be used if LAMMPS was built with the +USER-YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"improper_coeff"_improper_coeff.html + +[Default:] none diff --git a/doc/src/improper_sqdistharm.txt b/doc/src/improper_sqdistharm.txt new file mode 100644 index 0000000000..7473fd8c5d --- /dev/null +++ b/doc/src/improper_sqdistharm.txt @@ -0,0 +1,54 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +improper_style sqdistharm command :h3 + +[Syntax:] + +improper_style sqdistharm + +[Examples:] + +improper_style sqdistharm +improper_coeff 1 50.0 0.1 :pre + +[Description:] + +The {sqdistharm} improper style uses the potential + +:c,image(Eqs/improper_sqdistharm.jpg) + +where d is the distance between the central atom and the plane formed +by the other three atoms. If the 4 atoms in an improper quadruplet +(listed in the data file read by the "read_data"_read_data.html +command) are ordered I,J,K,L then the L-atom is assumed to be the +central atom. Note that this is different from the convention used +in the improper_style distance. + +The following coefficients must be defined for each improper type via +the improper_coeff command as in the example above, or in the data +file or restart files read by the read_data or read_restart commands: + +K (energy/distance^4) +d0^2 (distance^2) :ul + +Note that d0^2 (in units distance^2) has be provided and not d0. + +:line + +[Restrictions:] + +This improper style can only be used if LAMMPS was built with the +USER-MISC package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"improper_coeff"_improper_coeff.html + +[Default:] none diff --git a/doc/src/improper_style.txt b/doc/src/improper_style.txt index c5e0be8a81..cd72da4d07 100644 --- a/doc/src/improper_style.txt +++ b/doc/src/improper_style.txt @@ -78,11 +78,13 @@ more of (g,i,k,o,t) to indicate which accelerated styles exist. "cossq"_improper_cossq.html - improper with a cosine squared term "cvff"_improper_cvff.html - CVFF improper "distance"_improper_distance.html - improper based on distance between atom planes +"distharm"_improper_distharm.html - improper that is harmonic in the out-of-plane distance "fourier"_improper_fourier.html - improper with multiple cosine terms "harmonic"_improper_harmonic.html - harmonic improper "inversion/harmonic"_improper_inversion_harmonic.html - harmonic improper with Wilson-Decius out-of-plane definition "ring"_improper_ring.html - improper which prevents planar conformations "umbrella"_improper_umbrella.html - DREIDING improper :ul +"sqdistharm"_improper_sqdistharm.html - improper that is harmonic in the square of the out-of-plane distance :line diff --git a/doc/src/impropers.txt b/doc/src/impropers.txt index ca6c839c95..ce829197fe 100644 --- a/doc/src/impropers.txt +++ b/doc/src/impropers.txt @@ -9,6 +9,7 @@ Improper Styles :h1 improper_cossq improper_cvff improper_distance + improper_distharm improper_fourier improper_harmonic improper_hybrid @@ -16,6 +17,7 @@ Improper Styles :h1 improper_none improper_ring improper_umbrella + improper_sqdistharm improper_zero END_RST --> diff --git a/doc/src/lammps.book b/doc/src/lammps.book index a1bbaf896e..73b2723dc3 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -687,11 +687,13 @@ angle_cosine_periodic.html angle_cosine_shift.html angle_cosine_shift_exp.html angle_cosine_squared.html +angle_cross.html angle_dipole.html angle_fourier.html angle_fourier_simple.html angle_harmonic.html angle_hybrid.html +angle_mm3.html angle_none.html angle_quartic.html angle_sdk.html @@ -725,6 +727,7 @@ improper_class2.html improper_cossq.html improper_cvff.html improper_distance.html +improper_distharm.html improper_fourier.html improper_harmonic.html improper_hybrid.html @@ -732,6 +735,7 @@ improper_inversion_harmonic.html improper_none.html improper_ring.html improper_umbrella.html +improper_sqdistharm.html improper_zero.html lammps_commands_kspace.html diff --git a/doc/src/pair_lj_switch3_coulgauss.txt b/doc/src/pair_lj_switch3_coulgauss.txt new file mode 100644 index 0000000000..b13b78a744 --- /dev/null +++ b/doc/src/pair_lj_switch3_coulgauss.txt @@ -0,0 +1,86 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style lj/switch3/coulgauss/long command :h3 + +[Syntax:] + +pair_style style args :pre + +style = {lj/switch3/coulgauss/long} +args = list of arguments for a particular style :ul + {lj/switch3/coulgauss/long} args = cutoff (cutoff2) width + cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units) + cutoff2 = global cutoff for Coulombic (optional) (distance units) + width = width parameter of the smoothing function (distance units) :pre + +[Examples:] + +pair_style lj/switch3/coulgauss/long 12.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +pair_style lj/switch3/coulgauss/long 12.0 10.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +[Description:] + +The {lj/switch3/coulgauss} style evaluates the LJ +vdW potentia + +:c,image(Eqs/pair_lj_switch3.jpg) + +, which goes smoothly to zero at the cutoff r_c as defined +by the switching function + +:c,image(Eqs/pair_switch3.jpg) + +where w is the width defined in the arguments. This potential +is combined with Coulomb interaction between Gaussian charge densities: + +:c,image(Eqs/pair_coulgauss.jpg) + +where qi and qj are the +charges on the 2 atoms, epsilon is the dielectric constant which +can be set by the "dielectric"_dielectric.html command, gamma_i and gamma_j +are the widths of the Gaussian charge distribution and erf() is the error-function. +This style has to be used in conjunction with the "kspace_style"_kspace_style.html command + +If one cutoff is specified it is used for both the vdW and Coulomb +terms. If two cutoffs are specified, the first is used as the cutoff +for the vdW terms, and the second is the cutoff for the Coulombic term. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html +commands: + +epsilon (energy) +sigma (distance) +gamma (distance) :ul + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +Shifting the potential energy is not necessary because the switching +function ensures that the potential is zero at the cut-off. + + +[Restrictions:] + +These styles are part of the USER-YAFF package. They are only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + diff --git a/doc/src/pair_mm3_switch3_coulgauss.txt b/doc/src/pair_mm3_switch3_coulgauss.txt new file mode 100644 index 0000000000..3e0e24150e --- /dev/null +++ b/doc/src/pair_mm3_switch3_coulgauss.txt @@ -0,0 +1,88 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style mm3/switch3/coulgauss/long command :h3 + +[Syntax:] + +pair_style style args :pre + +style = {mm3/switch3/coulgauss/long} +args = list of arguments for a particular style :ul + {mm3/switch3/coulgauss/long} args = cutoff (cutoff2) width + cutoff = global cutoff for MM3 (and Coulombic if only 1 arg) (distance units) + cutoff2 = global cutoff for Coulombic (optional) (distance units) + width = width parameter of the smoothing function (distance units) :pre + +[Examples:] + +pair_style mm3/switch3/coulgauss/long 12.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +pair_style mm3/switch3/coulgauss/long 12.0 10.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +[Description:] + +The {mm3/switch3/coulgauss} style evaluates the MM3 +vdW potential "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/pair_mm3_switch3.jpg) + +, which goes smoothly to zero at the cutoff r_c as defined +by the switching function + +:c,image(Eqs/pair_switch3.jpg) + +where w is the width defined in the arguments. This potential +is combined with Coulomb interaction between Gaussian charge densities: + +:c,image(Eqs/pair_coulgauss.jpg) + +where qi and qj are the +charges on the 2 atoms, epsilon is the dielectric constant which +can be set by the "dielectric"_dielectric.html command, gamma_i and gamma_j +are the widths of the Gaussian charge distribution and erf() is the error-function. +This style has to be used in conjunction with the "kspace_style"_kspace_style.html command + +If one cutoff is specified it is used for both the vdW and Coulomb +terms. If two cutoffs are specified, the first is used as the cutoff +for the vdW terms, and the second is the cutoff for the Coulombic term. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html +commands: + +epsilon (energy) +r_v (distance) +gamma (distance) :ul + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +Mixing rules are fixed for this style as defined above. + +Shifting the potential energy is not necessary because the switching +function ensures that the potential is zero at the cut-off. + + +[Restrictions:] + +These styles are part of the USER-YAFF package. They are only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 714ec55d2e..9782772456 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -220,6 +220,7 @@ accelerated styles exist. "lj/sf/dipole/sf"_pair_dipole.html - LJ with dipole interaction with shifted forces "lj/smooth"_pair_lj_smooth.html - smoothed Lennard-Jones potential "lj/smooth/linear"_pair_lj_smooth_linear.html - linear smoothed LJ potential +"lj/switch3/coulgauss"_pair_lj_switch3_coulgauss - smoothed LJ vdW potential with Gaussian electrostatics "lj96/cut"_pair_lj96.html - Lennard-Jones 9/6 potential "lubricate"_pair_lubricate.html - hydrodynamic lubrication forces "lubricate/poly"_pair_lubricate.html - hydrodynamic lubrication forces with polydispersity @@ -232,6 +233,7 @@ accelerated styles exist. "meam/sw/spline"_pair_meam_sw_spline.html - splined version of MEAM with a Stillinger-Weber term "mgpt"_pair_mgpt.html - simplified model generalized pseudopotential theory (MGPT) potential "mie/cut"_pair_mie.html - Mie potential +"mm3/switch3/coulgauss"_pair_mm3_switch3_coulgauss - smoothed MM3 vdW potential with Gaussian electrostatics "momb"_pair_momb.html - Many-Body Metal-Organic (MOMB) force field "morse"_pair_morse.html - Morse potential "morse/smooth/linear"_pair_morse.html - linear smoothed Morse potential diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index 2810252402..62cbb7f56d 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -61,6 +61,7 @@ Pair Styles :h1 pair_lj_smooth pair_lj_smooth_linear pair_lj_soft + pair_lj_switch3_coulgauss pair_lubricate pair_lubricateU pair_mdf @@ -70,6 +71,7 @@ Pair Styles :h1 pair_meso pair_mgpt pair_mie + pair_mm3_switch3_coulgauss pair_momb pair_morse pair_multi_lucy diff --git a/src/USER-YAFF/README b/src/USER-YAFF/README new file mode 100644 index 0000000000..4fabe67390 --- /dev/null +++ b/src/USER-YAFF/README @@ -0,0 +1,8 @@ +This package implements the styles that are needed to use typical force fields +generated by QuickFF for the simulation of metal-organic frameworks. The +QuickFF methodology is detailed in following papers: + Vanduyfhuys et al., J. Comput. Chem., 36 (13), 1015-1027 (2015) http://dx.doi.org/10.1002/jcc.23877 + Vanduyfhuys et al., J. Comput. Chem., 39 (16), 999-1011 (2018) http://dx.doi.org/10.1002/jcc.25173 +The corresponding software package can be found on http://molmod.github.io/QuickFF + + diff --git a/src/USER-YAFF/angle_cross.cpp b/src/USER-YAFF/angle_cross.cpp new file mode 100644 index 0000000000..a31931a23b --- /dev/null +++ b/src/USER-YAFF/angle_cross.cpp @@ -0,0 +1,344 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "angle_cross.h" +#include "atom.h" +#include "neighbor.h" +#include "domain.h" +#include "comm.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +AngleCross::AngleCross(LAMMPS *lmp) : Angle(lmp) {} + +/* ---------------------------------------------------------------------- */ + +AngleCross::~AngleCross() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(kss); + memory->destroy(kbs0); + memory->destroy(kbs1); + memory->destroy(r00); + memory->destroy(r01); + memory->destroy(theta0); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleCross::compute(int eflag, int vflag) +{ + int i1,i2,i3,n,type; + double delx1,dely1,delz1,delx2,dely2,delz2; + double eangle,f1[3],f3[3]; + double dtheta,dtheta2,dtheta3,dtheta4,de_angle; + double dr1,dr2,tk1,tk2,aa1,aa2,aa11,aa12,aa21,aa22; + double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2; + double vx11,vx12,vy11,vy12,vz11,vz12,vx21,vx22,vy21,vy22,vz21,vz22; + + eangle = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **anglelist = neighbor->anglelist; + int nanglelist = neighbor->nanglelist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nanglelist; n++) { + i1 = anglelist[n][0]; + i2 = anglelist[n][1]; + i3 = anglelist[n][2]; + type = anglelist[n][3]; + + // 1st bond + + delx1 = x[i1][0] - x[i2][0]; + dely1 = x[i1][1] - x[i2][1]; + delz1 = x[i1][2] - x[i2][2]; + + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + // 2nd bond + + delx2 = x[i3][0] - x[i2][0]; + dely2 = x[i3][1] - x[i2][1]; + delz2 = x[i3][2] - x[i2][2]; + + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // angle (cos and sin) + + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + // force & energy for bond-bond term + dr1 = r1 - r00[type]; + dr2 = r2 - r01[type]; + tk1 = kss[type] * dr1; + tk2 = kss[type] * dr2; + + f1[0] = -delx1*tk2/r1; + f1[1] = -dely1*tk2/r1; + f1[2] = -delz1*tk2/r1; + + f3[0] = -delx2*tk1/r2; + f3[1] = -dely2*tk1/r2; + f3[2] = -delz2*tk1/r2; + + if (eflag) eangle = kss[type]*dr1*dr2; + + // force & energy for bond-angle term + dtheta = acos(c) - theta0[type]; + + aa1 = s * dr1 * kbs0[type]; + aa2 = s * dr2 * kbs1[type]; + + aa11 = aa1 * c / rsq1; + aa12 = -aa1 / (r1 * r2); + aa21 = aa2 * c / rsq1; + aa22 = -aa2 / (r1 * r2); + + vx11 = (aa11 * delx1) + (aa12 * delx2); + vx12 = (aa21 * delx1) + (aa22 * delx2); + vy11 = (aa11 * dely1) + (aa12 * dely2); + vy12 = (aa21 * dely1) + (aa22 * dely2); + vz11 = (aa11 * delz1) + (aa12 * delz2); + vz12 = (aa21 * delz1) + (aa22 * delz2); + + aa11 = aa1 * c / rsq2; + aa21 = aa2 * c / rsq2; + + vx21 = (aa11 * delx2) + (aa12 * delx1); + vx22 = (aa21 * delx2) + (aa22 * delx1); + vy21 = (aa11 * dely2) + (aa12 * dely1); + vy22 = (aa21 * dely2) + (aa22 * dely1); + vz21 = (aa11 * delz2) + (aa12 * delz1); + vz22 = (aa21 * delz2) + (aa22 * delz1); + + b1 = kbs0[type] * dtheta / r1; + b2 = kbs1[type] * dtheta / r2; + + f1[0] -= vx11 + b1*delx1 + vx12; + f1[1] -= vy11 + b1*dely1 + vy12; + f1[2] -= vz11 + b1*delz1 + vz12; + + f3[0] -= vx21 + b2*delx2 + vx22; + f3[1] -= vy21 + b2*dely2 + vy22; + f3[2] -= vz21 + b2*delz2 + vz22; + + if (eflag) eangle += kbs0[type]*dr1*dtheta + kbs1[type]*dr2*dtheta; + + // apply force to each of 3 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= f1[0] + f3[0]; + f[i2][1] -= f1[1] + f3[1]; + f[i2][2] -= f1[2] + f3[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (evflag) ev_tally(i1,i2,i3,nlocal,newton_bond,eangle,f1,f3, + delx1,dely1,delz1,delx2,dely2,delz2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleCross::allocate() +{ + allocated = 1; + int n = atom->nangletypes; + + memory->create(kss,n+1,"angle:kss"); + memory->create(kbs0,n+1,"angle:kbs0"); + memory->create(kbs1,n+1,"angle:kbs1"); + memory->create(r00,n+1,"angle:r00"); + memory->create(r01,n+1,"angle:r01"); + memory->create(theta0,n+1,"angle:theta0"); + memory->create(setflag,n+1,"angle:setflag"); + + for (int i = 1; i <= n; i++) + setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs +------------------------------------------------------------------------- */ + +void AngleCross::coeff(int narg, char **arg) +{ + if (narg != 7) error->all(FLERR,"Incorrect args for angle coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nangletypes,ilo,ihi); + + int count = 0; + + double kss_one = force->numeric(FLERR,arg[1]); + double kbs0_one = force->numeric(FLERR,arg[2]); + double kbs1_one = force->numeric(FLERR,arg[3]); + double r0_one = force->numeric(FLERR,arg[4]); + double r1_one = force->numeric(FLERR,arg[5]); + double theta0_one = force->numeric(FLERR,arg[6]); + + for (int i = ilo; i <= ihi; i++) { + kss[i] = kss_one; + kbs0[i] = kbs0_one; + kbs1[i] = kbs1_one; + r00[i] = r0_one; + r01[i] = r1_one; + // Convert theta0 from degrees to radians + theta0[i] = theta0_one*MY_PI/180.0; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for angle coefficients"); +} + +/* ---------------------------------------------------------------------- */ + +double AngleCross::equilibrium_angle(int i) +{ + return theta0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void AngleCross::write_restart(FILE *fp) +{ + fwrite(&kss[1],sizeof(double),atom->nangletypes,fp); + fwrite(&kbs0[1],sizeof(double),atom->nangletypes,fp); + fwrite(&kbs1[1],sizeof(double),atom->nangletypes,fp); + fwrite(&r00[1],sizeof(double),atom->nangletypes,fp); + fwrite(&r01[1],sizeof(double),atom->nangletypes,fp); + fwrite(&theta0[1],sizeof(double),atom->nangletypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void AngleCross::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&kss[1],sizeof(double),atom->nangletypes,fp); + fread(&kbs0[1],sizeof(double),atom->nangletypes,fp); + fread(&kbs1[1],sizeof(double),atom->nangletypes,fp); + fread(&r00[1],sizeof(double),atom->nangletypes,fp); + fread(&r01[1],sizeof(double),atom->nangletypes,fp); + fread(&theta0[1],sizeof(double),atom->nangletypes,fp); + } + + MPI_Bcast(&kss[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&kbs0[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&kbs1[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r00[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r01[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&theta0[1],atom->nangletypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nangletypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void AngleCross::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nangletypes; i++) + fprintf(fp,"%d %g %g %g %g\n", + i,kss[i],kbs0[i],kbs1[i],r00[i],r01[i],theta0[i]/MY_PI*180.0); +} + +/* ---------------------------------------------------------------------- */ + +double AngleCross::single(int type, int i1, int i2, int i3) +{ + double **x = atom->x; + + double delx1 = x[i1][0] - x[i2][0]; + double dely1 = x[i1][1] - x[i2][1]; + double delz1 = x[i1][2] - x[i2][2]; + domain->minimum_image(delx1,dely1,delz1); + double r1 = sqrt(delx1*delx1 + dely1*dely1 + delz1*delz1); + + double delx2 = x[i3][0] - x[i2][0]; + double dely2 = x[i3][1] - x[i2][1]; + double delz2 = x[i3][2] - x[i2][2]; + domain->minimum_image(delx2,dely2,delz2); + double r2 = sqrt(delx2*delx2 + dely2*dely2 + delz2*delz2); + + double c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + double s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + double dtheta = acos(c) - theta0[type]; + double dr1 = r1 - r00[type]; + double dr2 = r2 - r01[type]; + double energy = kss[type]*dr1*dr2+kbs0[type]*dr1*dtheta + kbs1[type]*dr2*dtheta; + return energy; +} diff --git a/src/USER-YAFF/angle_cross.h b/src/USER-YAFF/angle_cross.h new file mode 100644 index 0000000000..7709c10414 --- /dev/null +++ b/src/USER-YAFF/angle_cross.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef ANGLE_CLASS + +AngleStyle(cross,AngleCross) + +#else + +#ifndef LMP_ANGLE_CROSS_H +#define LMP_ANGLE_CROSS_H + +#include +#include "angle.h" + +namespace LAMMPS_NS { + +class AngleCross : public Angle { + public: + AngleCross(class LAMMPS *); + virtual ~AngleCross(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_angle(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, int, int, int); + + protected: + double *kss,*kbs0,*kbs1,*r00,*r01,*theta0; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for angle coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/angle_mm3.cpp b/src/USER-YAFF/angle_mm3.cpp new file mode 100644 index 0000000000..ccd9b2e20e --- /dev/null +++ b/src/USER-YAFF/angle_mm3.cpp @@ -0,0 +1,288 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "angle_mm3.h" +#include "atom.h" +#include "neighbor.h" +#include "domain.h" +#include "comm.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +AngleMM3::AngleMM3(LAMMPS *lmp) : Angle(lmp) {} + +/* ---------------------------------------------------------------------- */ + +AngleMM3::~AngleMM3() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(theta0); + memory->destroy(k2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleMM3::compute(int eflag, int vflag) +{ + int i1,i2,i3,n,type; + double delx1,dely1,delz1,delx2,dely2,delz2; + double eangle,f1[3],f3[3]; + double dtheta,dtheta2,dtheta3,dtheta4,de_angle; + double dr1,dr2,tk1,tk2,aa1,aa2,aa11,aa12,aa21,aa22; + double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2; + double vx11,vx12,vy11,vy12,vz11,vz12,vx21,vx22,vy21,vy22,vz21,vz22; + + eangle = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **anglelist = neighbor->anglelist; + int nanglelist = neighbor->nanglelist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nanglelist; n++) { + i1 = anglelist[n][0]; + i2 = anglelist[n][1]; + i3 = anglelist[n][2]; + type = anglelist[n][3]; + + // 1st bond + + delx1 = x[i1][0] - x[i2][0]; + dely1 = x[i1][1] - x[i2][1]; + delz1 = x[i1][2] - x[i2][2]; + + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + // 2nd bond + + delx2 = x[i3][0] - x[i2][0]; + dely2 = x[i3][1] - x[i2][1]; + delz2 = x[i3][2] - x[i2][2]; + + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // angle (cos and sin) + + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + // force & energy for angle term + + dtheta = acos(c) - theta0[type]; + dtheta2 = dtheta*dtheta; + dtheta3 = dtheta2*dtheta; + dtheta4 = dtheta3*dtheta; + // MM3 angle term, taking into account that dtheta is expressed in rad + de_angle = 2.0*k2[type]*dtheta*(1.0-1.203211*dtheta+0.367674*dtheta2-0.3239159*dtheta3+0.711270*dtheta4); + + a = -de_angle*s; + a11 = a*c / rsq1; + a12 = -a / (r1*r2); + a22 = a*c / rsq2; + + f1[0] = a11*delx1 + a12*delx2; + f1[1] = a11*dely1 + a12*dely2; + f1[2] = a11*delz1 + a12*delz2; + + f3[0] = a22*delx2 + a12*delx1; + f3[1] = a22*dely2 + a12*dely1; + f3[2] = a22*delz2 + a12*delz1; + // MM3 angle term, taking into account that dtheta is expressed in rad + if (eflag) eangle = k2[type]*dtheta2*(1.0-0.802141*dtheta+0.183837*dtheta2-0.131664*dtheta3+0.237090*dtheta4); + + // apply force to each of 3 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= f1[0] + f3[0]; + f[i2][1] -= f1[1] + f3[1]; + f[i2][2] -= f1[2] + f3[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (evflag) ev_tally(i1,i2,i3,nlocal,newton_bond,eangle,f1,f3, + delx1,dely1,delz1,delx2,dely2,delz2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleMM3::allocate() +{ + allocated = 1; + int n = atom->nangletypes; + + memory->create(setflag,n+1,"angle:setflag"); + memory->create(k2,n+1,"angle:k2"); + memory->create(theta0,n+1,"angle:theta0"); + for (int i = 1; i <= n; i++) + setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs + else -> Angle coeffs +------------------------------------------------------------------------- */ + +void AngleMM3::coeff(int narg, char **arg) +{ + if (narg != 3) error->all(FLERR,"Incorrect args for angle coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nangletypes,ilo,ihi); + + int count = 0; + + double k2_one = force->numeric(FLERR,arg[1]); + double theta0_one = force->numeric(FLERR,arg[2]); + + // convert theta0 from degrees to radians + + for (int i = ilo; i <= ihi; i++) { + k2[i] = k2_one; + theta0[i] = theta0_one/180.0 * MY_PI; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for angle coefficients"); + +} + +/* ---------------------------------------------------------------------- */ + +double AngleMM3::equilibrium_angle(int i) +{ + return theta0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void AngleMM3::write_restart(FILE *fp) +{ + fwrite(&k2[1],sizeof(double),atom->nangletypes,fp); + fwrite(&theta0[1],sizeof(double),atom->nangletypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void AngleMM3::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k2[1],sizeof(double),atom->nangletypes,fp); + fread(&theta0[1],sizeof(double),atom->nangletypes,fp); + } + + MPI_Bcast(&k2[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&theta0[1],atom->nangletypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nangletypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void AngleMM3::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nangletypes; i++) + fprintf(fp,"%d %g %g\n", + i,k2[i],theta0[i]/MY_PI*180.0); +} + +/* ---------------------------------------------------------------------- */ + +double AngleMM3::single(int type, int i1, int i2, int i3) +{ + double **x = atom->x; + + double delx1 = x[i1][0] - x[i2][0]; + double dely1 = x[i1][1] - x[i2][1]; + double delz1 = x[i1][2] - x[i2][2]; + domain->minimum_image(delx1,dely1,delz1); + double r1 = sqrt(delx1*delx1 + dely1*dely1 + delz1*delz1); + + double delx2 = x[i3][0] - x[i2][0]; + double dely2 = x[i3][1] - x[i2][1]; + double delz2 = x[i3][2] - x[i2][2]; + domain->minimum_image(delx2,dely2,delz2); + double r2 = sqrt(delx2*delx2 + dely2*dely2 + delz2*delz2); + + double c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + double s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + double dtheta = acos(c) - theta0[type]; + double dtheta2 = dtheta*dtheta; + double dtheta3 = dtheta2*dtheta; + double dtheta4 = dtheta3*dtheta; + + double energy = k2[type]*dtheta2*(1.0-0.802141*dtheta+0.183837*dtheta2-0.131664*dtheta3+0.237090*dtheta4); + + return energy; +} diff --git a/src/USER-YAFF/angle_mm3.h b/src/USER-YAFF/angle_mm3.h new file mode 100644 index 0000000000..2d19b4d1b4 --- /dev/null +++ b/src/USER-YAFF/angle_mm3.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef ANGLE_CLASS + +AngleStyle(mm3,AngleMM3) + +#else + +#ifndef LMP_ANGLE_MM3_H +#define LMP_ANGLE_MM3_H + +#include +#include "angle.h" + +namespace LAMMPS_NS { + +class AngleMM3 : public Angle { + public: + AngleMM3(class LAMMPS *); + virtual ~AngleMM3(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_angle(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, int, int, int); + + protected: + double *theta0,*k2; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for angle coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/bond_mm3.cpp b/src/USER-YAFF/bond_mm3.cpp new file mode 100644 index 0000000000..f0e4197c6b --- /dev/null +++ b/src/USER-YAFF/bond_mm3.cpp @@ -0,0 +1,220 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include +#include +#include "bond_mm3.h" +#include "atom.h" +#include "neighbor.h" +#include "domain.h" +#include "comm.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +BondMM3::BondMM3(LAMMPS *lmp) : Bond(lmp) {} + +/* ---------------------------------------------------------------------- */ + +BondMM3::~BondMM3() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(r0); + memory->destroy(k2); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondMM3::compute(int eflag, int vflag) +{ + int i1,i2,n,type; + double delx,dely,delz,ebond,fbond; + double rsq,r,dr,dr2,de_bond,K3,K4; + + ebond = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **bondlist = neighbor->bondlist; + int nbondlist = neighbor->nbondlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + /* + E = K(r-r0)^2 [1-2.55*(r-r0)+(7/12)*2.55^(2)*(r-r0)^2] + with -2.55 in angstrom^(-1) and (7/12)*2.55^(2) in angstrom^(-2) + These prefactors are converted here to the correct units + */ + K3 = -2.55/force->angstrom; + K4 = 7.0/12.0*2.55*2.55/force->angstrom/force->angstrom; + + for (n = 0; n < nbondlist; n++) { + i1 = bondlist[n][0]; + i2 = bondlist[n][1]; + type = bondlist[n][2]; + + delx = x[i1][0] - x[i2][0]; + dely = x[i1][1] - x[i2][1]; + delz = x[i1][2] - x[i2][2]; + + rsq = delx*delx + dely*dely + delz*delz; + r = sqrt(rsq); + dr = r - r0[type]; + dr2 = dr*dr; + + // force & energy + + de_bond = 2.0*k2[type]*dr*(1.0 + 1.5*K3*dr + 2.0*K4*dr2); + if (r > 0.0) fbond = -de_bond/r; + else fbond = 0.0; + + if (eflag) ebond = k2[type]*dr2*(1.0+K3*dr+K4*dr2); + + // apply force to each of 2 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += delx*fbond; + f[i1][1] += dely*fbond; + f[i1][2] += delz*fbond; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= delx*fbond; + f[i2][1] -= dely*fbond; + f[i2][2] -= delz*fbond; + } + + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,fbond,delx,dely,delz); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondMM3::allocate() +{ + allocated = 1; + int n = atom->nbondtypes; + + memory->create(r0,n+1,"bond:r0"); + memory->create(k2,n+1,"bond:k2"); + + memory->create(setflag,n+1,"bond:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs from one line in input script or data file +------------------------------------------------------------------------- */ + +void BondMM3::coeff(int narg, char **arg) +{ + if (narg != 3) error->all(FLERR,"Incorrect args for bond coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nbondtypes,ilo,ihi); + + double k2_one = force->numeric(FLERR,arg[1]); + double r0_one = force->numeric(FLERR,arg[2]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k2[i] = k2_one; + r0[i] = r0_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); +} + +/* ---------------------------------------------------------------------- + return an equilbrium bond length +------------------------------------------------------------------------- */ + +double BondMM3::equilibrium_distance(int i) +{ + return r0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void BondMM3::write_restart(FILE *fp) +{ + fwrite(&k2[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&r0[1],sizeof(double),atom->nbondtypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void BondMM3::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k2[1],sizeof(double),atom->nbondtypes,fp); + fread(&r0[1],sizeof(double),atom->nbondtypes,fp); + } + MPI_Bcast(&k2[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r0[1],atom->nbondtypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondMM3::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g\n",i,k2[i],r0[i]); +} + +/* ---------------------------------------------------------------------- */ + +double BondMM3::single(int type, double rsq, int i, int j, double &fforce) +{ + /* + E = K(r-r0)^2 [1-2.55*(r-r0)+(7/12)*2.55^(2)*(r-r0)^2] + with -2.55 in angstrom^(-1) and (7/12)*2.55^(2) in angstrom^(-2) + These prefactors are converted here to the correct units + */ + double K3 = -2.55/force->angstrom; + double K4 = 7.0/12.0*2.55*2.55/force->angstrom/force->angstrom; + double r = sqrt(rsq); + double dr = r - r0[type]; + double dr2 = dr*dr; + double de_bond = 2.0*k2[type]*dr*(1.0 + 1.5*K3*dr + 2.0*K4*dr2); + if (r > 0.0) fforce = -de_bond/r; + else fforce = 0.0; + return k2[type]*dr2*(1.0+K3*dr+K4*dr2); +} diff --git a/src/USER-YAFF/bond_mm3.h b/src/USER-YAFF/bond_mm3.h new file mode 100644 index 0000000000..9711d89529 --- /dev/null +++ b/src/USER-YAFF/bond_mm3.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef BOND_CLASS + +BondStyle(mm3,BondMM3) + +#else + +#ifndef LMP_BOND_MM3_H +#define LMP_BOND_MM3_H + +#include +#include "bond.h" + +namespace LAMMPS_NS { + +class BondMM3 : public Bond { + public: + BondMM3(class LAMMPS *); + virtual ~BondMM3(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_distance(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, double, int, int, double &); + + protected: + double *r0,*k2; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for bond coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/improper_distharm.cpp b/src/USER-YAFF/improper_distharm.cpp new file mode 100644 index 0000000000..9a54afed9a --- /dev/null +++ b/src/USER-YAFF/improper_distharm.cpp @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande, heavily based on the + improper_distance code by Paolo Raiteri (Curtin University) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "improper_distharm.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "domain.h" +#include "force.h" +#include "update.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define TOLERANCE 0.05 +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +ImproperDistHarm::ImproperDistHarm(LAMMPS *lmp) : Improper(lmp) {} + +/* ---------------------------------------------------------------------- */ + +ImproperDistHarm::~ImproperDistHarm() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(k); + memory->destroy(chi); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperDistHarm::compute(int eflag, int vflag) +{ + int i1,i2,i3,i4,n,type; + double xab, yab, zab; // bond 1-2 + double xac, yac, zac; // bond 1-3 + double xad, yad, zad; // bond 1-4 + double xbc, ybc, zbc; // bond 2-3 + double xbd, ybd, zbd; // bond 2-4 + double xcd, ycd, zcd; // bond 3-4 + double xna, yna, zna, rna; // normal + double da; + + double eimproper,f1[3],f2[3],f3[3],f4[3]; + double domega,a; + + eimproper = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **improperlist = neighbor->improperlist; + int nimproperlist = neighbor->nimproperlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nimproperlist; n++) { + i1 = improperlist[n][0]; + i2 = improperlist[n][1]; + i3 = improperlist[n][2]; + i4 = improperlist[n][3]; + type = improperlist[n][4]; + + // geometry of 4-body + // 4 is the central atom + // 1-2-3 are ment to be equivalent + // I need the bonds between 2-3 and 3-4 to get the plane normal + // Then I need the bond 1-4 to project it onto the normal to the plane + + // bond 1->2 + xab = x[i2][0] - x[i1][0]; + yab = x[i2][1] - x[i1][1]; + zab = x[i2][2] - x[i1][2]; + domain->minimum_image(xab,yab,zab); + + // bond 1->3 + xac = x[i3][0] - x[i1][0]; + yac = x[i3][1] - x[i1][1]; + zac = x[i3][2] - x[i1][2]; + domain->minimum_image(xac,yac,zac); + + // bond 1->4 + xad = x[i4][0] - x[i1][0]; + yad = x[i4][1] - x[i1][1]; + zad = x[i4][2] - x[i1][2]; + domain->minimum_image(xad,yad,zad); + + // bond 2-3 + xbc = x[i3][0] - x[i2][0]; + ybc = x[i3][1] - x[i2][1]; + zbc = x[i3][2] - x[i2][2]; + domain->minimum_image(xbc,ybc,zbc); + + // bond 2-4 + xbd = x[i4][0] - x[i2][0]; + ybd = x[i4][1] - x[i2][1]; + zbd = x[i4][2] - x[i2][2]; + domain->minimum_image(xbd,ybd,zbd); + + // bond 3-4 + xcd = x[i4][0] - x[i3][0]; + ycd = x[i4][1] - x[i3][1]; + zcd = x[i4][2] - x[i3][2]; + domain->minimum_image(xcd,ycd,zcd); + + xna = ybc*zcd - zbc*ycd; + yna = -(xbc*zcd - zbc*xcd); + zna = xbc*ycd - ybc*xcd; + rna = 1.0 / sqrt(xna*xna+yna*yna+zna*zna); + xna *= rna; + yna *= rna; + zna *= rna; + + da = -(xna*xad + yna*yad + zna*zad); + + + domega = k[type]*(da - chi[type])*(da - chi[type]); + a = 2.0* k[type]*(da - chi[type]); + + if (eflag) eimproper = domega; + + f1[0] = a*( -xna); + f1[1] = a*( -yna); + f1[2] = a*( -zna); + f4[0] = a*( xna); + f4[1] = a*( yna); + f4[2] = a*( zna); + + f2[0] = a*( yad*zcd - zad*ycd )*rna + a*da*rna*( yna*zcd - zna*ycd); + f2[1] = a*( zad*xcd - xad*zcd )*rna + a*da*rna*( zna*xcd - xna*zcd); + f2[2] = a*( xad*ycd - yad*xcd )*rna + a*da*rna*( xna*ycd - yna*xcd); + + f3[0] = - a*( yad*zcd - zad*ycd )*rna - a*da*rna*( yna*zcd - zna*ycd); + f3[1] = - a*( zad*xcd - xad*zcd )*rna - a*da*rna*( zna*xcd - xna*zcd); + f3[2] = - a*( xad*ycd - yad*xcd )*rna - a*da*rna*( xna*ycd - yna*xcd); + + f3[0] += -a*( yad*zbc - zad*ybc )*rna - a*da*rna*( yna*zbc - zna*ybc); + f3[1] += -a*( zad*xbc - xad*zbc )*rna - a*da*rna*( zna*xbc - xna*zbc); + f3[2] += -a*( xad*ybc - yad*xbc )*rna - a*da*rna*( xna*ybc - yna*xbc); + f4[0] += a*( yad*zbc - zad*ybc )*rna + a*da*rna*( yna*zbc - zna*ybc); + f4[1] += a*( zad*xbc - xad*zbc )*rna + a*da*rna*( zna*xbc - xna*zbc); + f4[2] += a*( xad*ybc - yad*xbc )*rna + a*da*rna*( xna*ybc - yna*xbc); + + // apply force to each of 4 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += f2[0]; + f[i2][1] += f2[1]; + f[i2][2] += f2[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (newton_bond || i4 < nlocal) { + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; + } + + if (evflag) + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f2,f3,f4, + xab,yab,zab,xac,yac,zac,xad-xac,yad-yac,zad-zac); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperDistHarm::allocate() +{ + allocated = 1; + int n = atom->nimpropertypes; + + memory->create(k,n+1,"improper:k"); + memory->create(chi,n+1,"improper:chi"); + + memory->create(setflag,n+1,"improper:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one type +------------------------------------------------------------------------- */ + +void ImproperDistHarm::coeff(int narg, char **arg) +{ +// if (which > 0) return; + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nimpropertypes,ilo,ihi); + + double k_one = force->numeric(FLERR,arg[1]); + double chi_one = force->numeric(FLERR,arg[2]); + + // convert chi from degrees to radians + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + //chi[i] = chi_one/180.0 * PI; + chi[i] = chi_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void ImproperDistHarm::write_restart(FILE *fp) +{ + fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void ImproperDistHarm::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k[1],sizeof(double),atom->nimpropertypes,fp); + fread(&chi[1],sizeof(double),atom->nimpropertypes,fp); + } + MPI_Bcast(&k[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + MPI_Bcast(&chi[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; +} diff --git a/src/USER-YAFF/improper_distharm.h b/src/USER-YAFF/improper_distharm.h new file mode 100644 index 0000000000..b8b9ae780e --- /dev/null +++ b/src/USER-YAFF/improper_distharm.h @@ -0,0 +1,47 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef IMPROPER_CLASS + +ImproperStyle(distharm,ImproperDistHarm) + +#else + +#ifndef LMP_IMPROPER_DISTHARM_H +#define LMP_IMPROPER_DISTHARM_H + +#include +#include "improper.h" + +namespace LAMMPS_NS { + +class ImproperDistHarm : public Improper { + public: + ImproperDistHarm(class LAMMPS *); + ~ImproperDistHarm(); + void compute(int, int); + void coeff(int, char **); + void write_restart(FILE *); + void read_restart(FILE *); + + private: + double *k,*chi; + + void allocate(); +}; + +} + +#endif +#endif + diff --git a/src/USER-YAFF/improper_sqdistharm.cpp b/src/USER-YAFF/improper_sqdistharm.cpp new file mode 100644 index 0000000000..763d82f1c5 --- /dev/null +++ b/src/USER-YAFF/improper_sqdistharm.cpp @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande, heavily based on the + improper_distance code by Paolo Raiteri (Curtin University) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "improper_sqdistharm.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "domain.h" +#include "force.h" +#include "update.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define TOLERANCE 0.05 +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +ImproperSQDistHarm::ImproperSQDistHarm(LAMMPS *lmp) : Improper(lmp) {} + +/* ---------------------------------------------------------------------- */ + +ImproperSQDistHarm::~ImproperSQDistHarm() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(k); + memory->destroy(chi); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperSQDistHarm::compute(int eflag, int vflag) +{ + int i1,i2,i3,i4,n,type; + double xab, yab, zab; // bond 1-2 + double xac, yac, zac; // bond 1-3 + double xad, yad, zad; // bond 1-4 + double xbc, ybc, zbc; // bond 2-3 + double xbd, ybd, zbd; // bond 2-4 + double xcd, ycd, zcd; // bond 3-4 + double xna, yna, zna, rna; // normal + double da; + + double eimproper,f1[3],f2[3],f3[3],f4[3]; + double domega,a; + + eimproper = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **improperlist = neighbor->improperlist; + int nimproperlist = neighbor->nimproperlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nimproperlist; n++) { + i1 = improperlist[n][0]; + i2 = improperlist[n][1]; + i3 = improperlist[n][2]; + i4 = improperlist[n][3]; + type = improperlist[n][4]; + + // geometry of 4-body + // 4 is the central atom + // 1-2-3 are ment to be equivalent + // I need the bonds between 2-3 and 3-4 to get the plane normal + // Then I need the bond 1-4 to project it onto the normal to the plane + + // bond 1->2 + xab = x[i2][0] - x[i1][0]; + yab = x[i2][1] - x[i1][1]; + zab = x[i2][2] - x[i1][2]; + domain->minimum_image(xab,yab,zab); + + // bond 1->3 + xac = x[i3][0] - x[i1][0]; + yac = x[i3][1] - x[i1][1]; + zac = x[i3][2] - x[i1][2]; + domain->minimum_image(xac,yac,zac); + + // bond 1->4 + xad = x[i4][0] - x[i1][0]; + yad = x[i4][1] - x[i1][1]; + zad = x[i4][2] - x[i1][2]; + domain->minimum_image(xad,yad,zad); + + // bond 2-3 + xbc = x[i3][0] - x[i2][0]; + ybc = x[i3][1] - x[i2][1]; + zbc = x[i3][2] - x[i2][2]; + domain->minimum_image(xbc,ybc,zbc); + + // bond 2-4 + xbd = x[i4][0] - x[i2][0]; + ybd = x[i4][1] - x[i2][1]; + zbd = x[i4][2] - x[i2][2]; + domain->minimum_image(xbd,ybd,zbd); + + // bond 3-4 + xcd = x[i4][0] - x[i3][0]; + ycd = x[i4][1] - x[i3][1]; + zcd = x[i4][2] - x[i3][2]; + domain->minimum_image(xcd,ycd,zcd); + + xna = ybc*zcd - zbc*ycd; + yna = -(xbc*zcd - zbc*xcd); + zna = xbc*ycd - ybc*xcd; + rna = 1.0 / sqrt(xna*xna+yna*yna+zna*zna); + xna *= rna; + yna *= rna; + zna *= rna; + + da = -(xna*xad + yna*yad + zna*zad); + + domega = k[type]*(da*da - chi[type])*(da*da - chi[type]); + a = 4.0 * da* k[type]*(da*da - chi[type]); + + if (eflag) eimproper = domega; + + f1[0] = a*( -xna); + f1[1] = a*( -yna); + f1[2] = a*( -zna); + f4[0] = a*( xna); + f4[1] = a*( yna); + f4[2] = a*( zna); + + f2[0] = a*( yad*zcd - zad*ycd )*rna + a*da*rna*( yna*zcd - zna*ycd); + f2[1] = a*( zad*xcd - xad*zcd )*rna + a*da*rna*( zna*xcd - xna*zcd); + f2[2] = a*( xad*ycd - yad*xcd )*rna + a*da*rna*( xna*ycd - yna*xcd); + + f3[0] = - a*( yad*zcd - zad*ycd )*rna - a*da*rna*( yna*zcd - zna*ycd); + f3[1] = - a*( zad*xcd - xad*zcd )*rna - a*da*rna*( zna*xcd - xna*zcd); + f3[2] = - a*( xad*ycd - yad*xcd )*rna - a*da*rna*( xna*ycd - yna*xcd); + + f3[0] += -a*( yad*zbc - zad*ybc )*rna - a*da*rna*( yna*zbc - zna*ybc); + f3[1] += -a*( zad*xbc - xad*zbc )*rna - a*da*rna*( zna*xbc - xna*zbc); + f3[2] += -a*( xad*ybc - yad*xbc )*rna - a*da*rna*( xna*ybc - yna*xbc); + f4[0] += a*( yad*zbc - zad*ybc )*rna + a*da*rna*( yna*zbc - zna*ybc); + f4[1] += a*( zad*xbc - xad*zbc )*rna + a*da*rna*( zna*xbc - xna*zbc); + f4[2] += a*( xad*ybc - yad*xbc )*rna + a*da*rna*( xna*ybc - yna*xbc); + + + // apply force to each of 4 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += f2[0]; + f[i2][1] += f2[1]; + f[i2][2] += f2[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (newton_bond || i4 < nlocal) { + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; + } + + if (evflag) + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f2,f3,f4, + xab,yab,zab,xac,yac,zac,xad-xac,yad-yac,zad-zac); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperSQDistHarm::allocate() +{ + allocated = 1; + int n = atom->nimpropertypes; + + memory->create(k,n+1,"improper:k"); + memory->create(chi,n+1,"improper:chi"); + + memory->create(setflag,n+1,"improper:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one type +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::coeff(int narg, char **arg) +{ +// if (which > 0) return; + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nimpropertypes,ilo,ihi); + + double k_one = force->numeric(FLERR,arg[1]); + double chi_one = force->numeric(FLERR,arg[2]); + + // convert chi from degrees to radians + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + //chi[i] = chi_one/180.0 * PI; + chi[i] = chi_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::write_restart(FILE *fp) +{ + fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k[1],sizeof(double),atom->nimpropertypes,fp); + fread(&chi[1],sizeof(double),atom->nimpropertypes,fp); + } + MPI_Bcast(&k[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + MPI_Bcast(&chi[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; +} diff --git a/src/USER-YAFF/improper_sqdistharm.h b/src/USER-YAFF/improper_sqdistharm.h new file mode 100644 index 0000000000..301b5066cb --- /dev/null +++ b/src/USER-YAFF/improper_sqdistharm.h @@ -0,0 +1,47 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef IMPROPER_CLASS + +ImproperStyle(sqdistharm,ImproperSQDistHarm) + +#else + +#ifndef LMP_IMPROPER_SQDISTHARM_H +#define LMP_IMPROPER_SQDISTHARM_H + +#include +#include "improper.h" + +namespace LAMMPS_NS { + +class ImproperSQDistHarm : public Improper { + public: + ImproperSQDistHarm(class LAMMPS *); + ~ImproperSQDistHarm(); + void compute(int, int); + void coeff(int, char **); + void write_restart(FILE *); + void read_restart(FILE *); + + private: + double *k,*chi; + + void allocate(); +}; + +} + +#endif +#endif + diff --git a/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp new file mode 100644 index 0000000000..b3a267807d --- /dev/null +++ b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp @@ -0,0 +1,714 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_lj_switch3_coulgauss_long.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairLJSwitch3CoulGaussLong::PairLJSwitch3CoulGaussLong(LAMMPS *lmp) : Pair(lmp) +{ + ewaldflag = pppmflag = 1; + respa_enable = 1; + writedata = 1; + ftable = NULL; + qdist = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +PairLJSwitch3CoulGaussLong::~PairLJSwitch3CoulGaussLong() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut_lj); + memory->destroy(cut_ljsq); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(gamma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } + if (ftable) free_tables(); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::compute(int eflag, int vflag) +{ + int i,ii,j,jj,inum,jnum,itype,jtype,itable,jtable,ktable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,ecoul2,fpair; + double fraction,fraction2,table; + double r,r2inv,r6inv,forcecoul,forcecoul2,forcelj,factor_coul,factor_lj,tr,ftr,trx; + double grij,expm2,prefactor,prefactor2,t,erfc1,erfc2,rrij,expn2,expb,g_ewald2i,g_ewaldi; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq, lookup_corr; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + union_int_float_t rsq_lookup; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + g_ewaldi = 1.0/g_ewald; + g_ewald2i = g_ewaldi*g_ewaldi; + lookup_corr = 0.0; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[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 < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + // Lennard-Jones potential + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + forcelj = r6inv*(12.0*lj3[itype][jtype]*r6inv - 6.0*lj4[itype][jtype]); + // Correction for Gaussian radii + if (lj2[itype][jtype]==0.0) { + // This means a point charge is considerd, so the correction is zero + expn2 = 0.0; + erfc2 = 0.0; + forcecoul2 = 0.0; + } + else { + rrij = lj2[itype][jtype]*r; + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + prefactor2 = -qqrd2e*qtmp*q[j]/r; + forcecoul2 = prefactor2*(erfc2+EWALD_F*rrij*expn2); + } + } else forcelj = 0.0; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) - + offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch33 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + + fpair = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + evdwl *= factor_lj; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut_lj,n+1,n+1,"pair:cut_lj"); + memory->create(cut_ljsq,n+1,n+1,"pair:cut_ljsq"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(gamma,n+1,n+1,"pair:gamma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::settings(int narg, char **arg) +{ + if (narg < 2 || narg > 3) error->all(FLERR,"Illegal pair_style command"); + + cut_lj_global = force->numeric(FLERR,arg[0]); + if (narg == 2) { + cut_coul = cut_lj_global; + truncw = force->numeric(FLERR,arg[1]); + } + else { + cut_coul = force->numeric(FLERR,arg[1]); + truncw = force->numeric(FLERR,arg[2]); + } + if (truncw>0.0) truncwi = 1.0/truncw; + else truncwi = 0.0; + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut_lj[i][j] = cut_lj_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::coeff(int narg, char **arg) +{ + if (narg < 5 || narg > 6) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + double gamma_one = force->numeric(FLERR,arg[4]); + + double cut_lj_one = cut_lj_global; + if (narg == 6) cut_lj_one = force->numeric(FLERR,arg[5]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + gamma[i][j] = gamma_one; + cut_lj[i][j] = cut_lj_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::init_style() +{ + if (!atom->q_flag) + error->all(FLERR,"Pair style lj/switch3/coulgauss/long requires atom attribute q"); + + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + cut_coulsq = cut_coul * cut_coul; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul,cut_respa); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairLJSwitch3CoulGaussLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + epsilon[i][j] = mix_energy(epsilon[i][i],epsilon[j][j], + sigma[i][i],sigma[j][j]); + sigma[i][j] = mix_distance(sigma[i][i],sigma[j][j]); + gamma[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + cut_lj[i][j] = mix_distance(cut_lj[i][i],cut_lj[j][j]); + } + + double cut = MAX(cut_lj[i][j],cut_coul+2.0*qdist); + cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; + lj1[i][j] = 48.0 * epsilon[i][j] * pow(sigma[i][j],12.0); + if (gamma[i][i]==0.0 && gamma[j][j]==0.0) lj2[i][j] = 0.0; + else lj2[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + lj3[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],12.0); + lj4[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + + if (offset_flag && (cut_lj[i][j] > 0.0)) { + // Truncation is active, so offset is zero, except if truncw==0.0 + if (truncw==0.0) { + double r = cut_lj[i][j]; + double r2inv = 1.0/(r*r); + double r6inv = r2inv*r2inv*r2inv; + double r12inv = r6inv*r6inv; + offset[i][j] = lj3[i][j]*r12inv-lj4[i][j]*r6inv; + } + else {offset[i][j] = 0.0;} + } else offset[i][j] = 0.0; + + cut_ljsq[j][i] = cut_ljsq[i][j]; + cut_lj[j][i] = cut_lj[i][j]; + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && MIN(cut_lj[i][j],cut_coul) < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double cg = epsilon[i][j]; + double cg1 = cut_lj[i][j]; + double cg3 = sigma[i][j]; + if (truncw > 0.0) { + double cg5 = truncw; + double t1 = pow(cg1, 0.2e1); + double t2 = t1 * cg1; + double t3 = t1 * t1; + double t4 = t3 * t2; + double t5 = -cg1 + cg5; + double t6 = t5 * t5; + double t8 = t6 * t6; + double t9 = t8 * t6 * t5; + double t10 = t4 * t9; + double t11 = log(-t5); + double t14 = log(cg1); + double t19 = pow(cg5, 0.2e1); + double t20 = t19 * t19; + double t21 = t20 * t19; + double t24 = pow(cg3, 0.2e1); + double t25 = t24 * t24; + double t26 = t25 * t24; + double t29 = t20 * cg5; + double t35 = t3 * t3; + double t41 = t19 * cg5; + double t58 = t21 * t3 * t1 - t21 * t26 / 0.84e2 - 0.6e1 * t29 * t4 + t29 * cg1 * t26 / 0.18e2 + 0.15e2 * t20 * t35 - t20 * t1 * t26 / 0.9e1 - 0.20e2 * t41 * t35 * cg1 + t41 * t2 * t26 / 0.9e1 + 0.15e2 * t19 * t35 * t1 - t19 * t3 * t26 / 0.18e2 - 0.6e1 * t35 * t2 * cg5 + t35 * t3; + double t71 = -0.4e1 * cg * (0.2e1 * t10 * t11 - 0.2e1 * t10 * t14 + (cg5 - 0.2e1 * cg1) * t58 * cg5) * t26 / t4 / t41 / t9; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t71; + ptail_ij = 2.0*MY_PI*all[0]*all[1]*t71; + } + else { + double t1 = pow(cg3, 0.2e1); + double t2 = t1 * t1; + double t3 = t2 * t1; + double t5 = pow(cg1, 0.2e1); + double t6 = t5 * t5; + double t10 = t6 * t6; + double t16 = -0.4e1 / 0.9e1 * t3 * cg * (0.3e1 * t6 * t5 - t3) / t10 / cg1; + t1 = pow(cg3, 0.2e1); + t2 = t1 * t1; + t3 = t2 * t1; + t5 = pow(cg1, 0.2e1); + t6 = t5 * t5; + double t11 = t6 * t6; + double t17 = 0.8e1 / 0.3e1 * t3 * cg * (0.3e1 * t6 * t5 - 0.2e1 * t3) / t11 / cg1; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t16; + ptail_ij = -2.0/3.0*MY_PI*all[0]*all[1]*t17; + } + } + + return cut; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&gamma[i][j],sizeof(double),1,fp); + fwrite(&cut_lj[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&gamma[i][j],sizeof(double),1,fp); + fread(&cut_lj[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_lj[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_restart_settings(FILE *fp) +{ + fwrite(&cut_lj_global,sizeof(double),1,fp); + fwrite(&cut_coul,sizeof(double),1,fp); + fwrite(&truncw,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&ncoultablebits,sizeof(int),1,fp); + fwrite(&tabinner,sizeof(double),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_lj_global,sizeof(double),1,fp); + fread(&cut_coul,sizeof(double),1,fp); + fread(&truncw,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + fread(&ncoultablebits,sizeof(int),1,fp); + fread(&tabinner,sizeof(double),1,fp); + } + MPI_Bcast(&cut_lj_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_coul,1,MPI_DOUBLE,0,world); + MPI_Bcast(&truncw,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&ncoultablebits,1,MPI_INT,0,world); + MPI_Bcast(&tabinner,1,MPI_DOUBLE,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g %g\n",i,epsilon[i][i],sigma[i][i],gamma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d %g %g %g %g\n",i,j,epsilon[i][j],sigma[i][j],gamma[i][j],cut_lj[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJSwitch3CoulGaussLong::single(int i, int j, int itype, int jtype, + double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r2inv,r6inv,r,grij,expm2,t,erfc1,prefactor,prefactor2,rrij,expn2,erfc2; + double fraction,table,forcecoul,forcecoul2,forcelj,phicoul,phicoul2,philj; + double expb, ecoul, evdwl, trx, tr, ftr; + + int itable; + + r2inv = 1.0/rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = atom->q[i]*atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = atom->q[i]*atom->q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + rrij = lj2[itype][jtype] * r; + if (rrij==0.0) { + expn2 = 0.0; + erfc2 = 0.0; + } + else { + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + } + prefactor2 = -force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul2 = prefactor2 * (erfc2 + EWALD_F*rrij*expn2); + forcelj = expb*lj1[itype][jtype]*r-6.0*lj4[itype][jtype]*r6inv; + } else forcelj = 0.0; + + double eng = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = atom->q[i]*atom->q[j] * table; + } + if (factor_coul < 1.0) phicoul -= (1.0-factor_coul)*prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) - + offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + eng += evdwl*factor_lj; + fforce = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + + return eng; +} + +/* ---------------------------------------------------------------------- */ + +void *PairLJSwitch3CoulGaussLong::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + if (strcmp(str,"gamma") == 0) return (void *) gamma; + return NULL; +} diff --git a/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h new file mode 100644 index 0000000000..de6bc107f7 --- /dev/null +++ b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h @@ -0,0 +1,91 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(lj/switch3/coulgauss/long,PairLJSwitch3CoulGaussLong) + +#else + +#ifndef LMP_PAIR_LJ_SWITCH3_COULGAUSS_LONG_H +#define LMP_PAIR_LJ_SWITCH3_COULGAUSS_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJSwitch3CoulGaussLong : public Pair { + + public: + PairLJSwitch3CoulGaussLong(class LAMMPS *); + virtual ~PairLJSwitch3CoulGaussLong(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + virtual void write_restart_settings(FILE *); + virtual void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + virtual double single(int, int, int, int, double, double, double, double &); + + virtual void *extract(const char *, int &); + + protected: + double cut_lj_global; + double truncw, truncwi; + double **cut_lj,**cut_ljsq; + double cut_coul,cut_coulsq; + double **epsilon,**sigma,**gamma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + double qdist; // TIP4P distance from O site to negative charge + double g_ewald; + + virtual void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/long requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp new file mode 100644 index 0000000000..0d0e43a0ea --- /dev/null +++ b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp @@ -0,0 +1,715 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_mm3_switch3_coulgauss_long.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairMM3Switch3CoulGaussLong::PairMM3Switch3CoulGaussLong(LAMMPS *lmp) : Pair(lmp) +{ + ewaldflag = pppmflag = 1; + respa_enable = 1; + writedata = 1; + ftable = NULL; + qdist = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +PairMM3Switch3CoulGaussLong::~PairMM3Switch3CoulGaussLong() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut_lj); + memory->destroy(cut_ljsq); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(gamma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } + if (ftable) free_tables(); +} + +/* ---------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::compute(int eflag, int vflag) +{ + int i,ii,j,jj,inum,jnum,itype,jtype,itable,jtable,ktable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,ecoul2,fpair; + double fraction,fraction2,table; + double r,r2inv,r6inv,forcecoul,forcecoul2,forcelj,factor_coul,factor_lj,tr,ftr,trx; + double grij,expm2,prefactor,prefactor2,t,erfc1,erfc2,rrij,expn2,expb,g_ewald2i,g_ewaldi; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq, lookup_corr; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + union_int_float_t rsq_lookup; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + g_ewaldi = 1.0/g_ewald; + g_ewald2i = g_ewaldi*g_ewaldi; + lookup_corr = 0.0; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[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 < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + // Repulsive exponential part + r = sqrt(rsq); + expb = lj3[itype][jtype]*exp(-lj1[itype][jtype]*r); + forcelj = expb*lj1[itype][jtype]*r; + // Attractive r^-6 part + r6inv = r2inv*r2inv*r2inv; + forcelj -= 6.0*lj4[itype][jtype]*r6inv; + // Correction for Gaussian radii + if (lj2[itype][jtype]==0.0) { + // This means a point charge is considered, so the correction is zero + expn2 = 0.0; + erfc2 = 0.0; + forcecoul2 = 0.0; + } + else { + rrij = lj2[itype][jtype]*r; + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + prefactor2 = -qqrd2e*qtmp*q[j]/r; + forcecoul2 = prefactor2*(erfc2+EWALD_F*rrij*expn2); + } + } else forcelj = 0.0; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = expb-lj4[itype][jtype]*r6inv-offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + + fpair = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + evdwl *= factor_lj; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut_lj,n+1,n+1,"pair:cut_lj"); + memory->create(cut_ljsq,n+1,n+1,"pair:cut_ljsq"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(gamma,n+1,n+1,"pair:gamma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::settings(int narg, char **arg) +{ + if (narg < 2 || narg > 3) error->all(FLERR,"Illegal pair_style command"); + + cut_lj_global = force->numeric(FLERR,arg[0]); + if (narg == 2) { + cut_coul = cut_lj_global; + truncw = force->numeric(FLERR,arg[1]); + } + else { + cut_coul = force->numeric(FLERR,arg[1]); + truncw = force->numeric(FLERR,arg[2]); + } + if (truncw>0.0) truncwi = 1.0/truncw; + else truncwi = 0.0; + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut_lj[i][j] = cut_lj_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::coeff(int narg, char **arg) +{ + if (narg < 5 || narg > 6) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + double gamma_one = force->numeric(FLERR,arg[4]); + + double cut_lj_one = cut_lj_global; + if (narg == 6) cut_lj_one = force->numeric(FLERR,arg[5]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + gamma[i][j] = gamma_one; + cut_lj[i][j] = cut_lj_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::init_style() +{ + if (!atom->q_flag) + error->all(FLERR,"Pair style mm3/switch3/coulgauss/long requires atom attribute q"); + + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + cut_coulsq = cut_coul * cut_coul; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul,cut_respa); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairMM3Switch3CoulGaussLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + epsilon[i][j] = sqrt(epsilon[i][i]*epsilon[j][j]); + sigma[i][j] = sigma[i][i] + sigma[j][j]; + gamma[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + cut_lj[i][j] = mix_distance(cut_lj[i][i],cut_lj[j][j]); + } + + double cut = MAX(cut_lj[i][j],cut_coul+2.0*qdist); + cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; + lj1[i][j] = 12.0 / (sigma[i][j]); + if (gamma[i][i]==0.0 && gamma[j][j]==0.0) lj2[i][j] = 0.0; + else lj2[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + lj3[i][j] = 1.84e5 * epsilon[i][j]; + lj4[i][j] = 2.25 * epsilon[i][j] * pow(sigma[i][j],6.0); + + if (offset_flag && (cut_lj[i][j] > 0.0)) { + // Truncation is active, so offset is zero, except if truncw==0.0 + if (truncw==0.0) { + double r = cut_lj[i][j]; + double r2inv = 1.0/(r*r); + double r6inv = r2inv*r2inv*r2inv; + double expb = lj3[i][j]*exp(-lj1[i][j]*r); + offset[i][j] = expb-lj4[i][j]*r6inv; + } + else {offset[i][j] = 0.0;} + } else offset[i][j] = 0.0; + + cut_ljsq[j][i] = cut_ljsq[i][j]; + cut_lj[j][i] = cut_lj[i][j]; + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && MIN(cut_lj[i][j],cut_coul) < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double cg = epsilon[i][j]; + double cg1 = cut_lj[i][j]; + double cg3 = 2.0*sigma[i][j];//Mind the factor 2 here!!! + if (truncw > 0.0) { + double cg5 = truncw; + double t1 = pow(cg3, 0.2e1); + double t2 = t1 * cg3; + double t3 = 0.5e1 / 0.216e3 * t2; + double t5 = cg1 / 0.9e1; + double t8 = -cg1 + cg5; + double t14 = t8 * t8; + double t17 = 0.1e1 / cg3; + double t20 = exp(0.12e2 * t17 * cg5); + double t30 = pow(cg1, 0.2e1); + double t36 = exp(-0.12e2 * t17 * cg1); + double t37 = pow(cg5, 0.2e1); + double t39 = 0.1e1 / t37 / cg5; + double t43 = cg1 * t8; + double t44 = log(-t8); + double t47 = log(cg1); + double t54 = t1 * t1; + double t64 = cg * (0.6388888889e3 * ((-t3 + (0.7e1 / 0.36e2 * cg5 - t5) * t1 - 0.2e1 / 0.3e1 * t8 * (cg5 - cg1 / 0.4e1) * cg3 + cg5 * t14) * t20 + t3 + (cg5 / 0.12e2 + t5) * t1 + (cg5 + cg1 / 0.3e1) * cg1 * cg3 / 0.2e1 + t30 * cg5) * t2 * t36 * t39 - 0.225e1 * (0.2e1 * t43 * t44 - 0.2e1 * t43 * t47 + cg5 * (cg5 - 0.2e1 * cg1)) * t54 * t1 / cg1 / t8 * t39); + etail_ij = 2.0*MY_PI*all[0]*all[1]*t64; + ptail_ij = 2.0*MY_PI*all[0]*all[1]*t64; + } + else { + double t2 = pow(cg3, 0.2e1); + double t3 = t2 * t2; + double t7 = 0.12e2 / cg3 * cg1; + double t8 = exp(t7); + double t11 = pow(cg1, 0.2e1); + double t12 = t11 * t11; + double t17 = t11 * cg1; + double t21 = exp(-t7); + double t27 = -0.9259259259e-2 * cg3 * cg * (0.81e2 * t3 * cg3 * t8 - 0.1656000e7 * t12 * cg1 - 0.276000e6 * cg3 * t12 - 0.23000e5 * t2 * t17) * t21 / t17; + double t1 = pow(cg3, 0.2e1); + t2 = t1 * t1; + double t6 = 0.12e2 / cg3 * cg1; + t7 = exp(t6); + double t10 = pow(cg1, 0.2e1); + t11 = t10 * t10; + double t19 = t10 * cg1; + double t25 = exp(-t6); + double t29 = 0.5555555556e-1 * cg * (0.81e2 * t2 * t1 * t7 - 0.3312000e7 * t11 * t10 - 0.828000e6 * cg3 * t11 * cg1 - 0.138000e6 * t1 * t11 - 0.11500e5 * t19 * t1 * cg3) * t25 / t19; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t27; + ptail_ij = -2.0/3.0*MY_PI*all[0]*all[1]*t29; + } + } + + return cut; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&gamma[i][j],sizeof(double),1,fp); + fwrite(&cut_lj[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&gamma[i][j],sizeof(double),1,fp); + fread(&cut_lj[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_lj[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_restart_settings(FILE *fp) +{ + fwrite(&cut_lj_global,sizeof(double),1,fp); + fwrite(&cut_coul,sizeof(double),1,fp); + fwrite(&truncw,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&ncoultablebits,sizeof(int),1,fp); + fwrite(&tabinner,sizeof(double),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_lj_global,sizeof(double),1,fp); + fread(&cut_coul,sizeof(double),1,fp); + fread(&truncw,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + fread(&ncoultablebits,sizeof(int),1,fp); + fread(&tabinner,sizeof(double),1,fp); + } + printf("Reading from restart, trunc = %f\n",truncw); + MPI_Bcast(&cut_lj_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_coul,1,MPI_DOUBLE,0,world); + MPI_Bcast(&truncw,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&ncoultablebits,1,MPI_INT,0,world); + MPI_Bcast(&tabinner,1,MPI_DOUBLE,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g %g\n",i,epsilon[i][i],sigma[i][i],gamma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d %g %g %g %g\n",i,j,epsilon[i][j],sigma[i][j],gamma[i][j],cut_lj[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairMM3Switch3CoulGaussLong::single(int i, int j, int itype, int jtype, + double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r2inv,r6inv,r,grij,expm2,t,erfc1,prefactor,prefactor2,rrij,expn2,erfc2; + double fraction,table,forcecoul,forcecoul2,forcelj,phicoul,phicoul2,philj; + double expb, ecoul, evdwl, trx, tr, ftr; + + int itable; + + r2inv = 1.0/rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = atom->q[i]*atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = atom->q[i]*atom->q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + expb = lj3[itype][jtype]*exp(-lj1[itype][jtype]*r); + rrij = lj2[itype][jtype] * r; + if (rrij==0.0) { + expn2 = 0.0; + erfc2 = 0.0; + } + else { + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + } + prefactor2 = -force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul2 = prefactor2 * (erfc2 + EWALD_F*rrij*expn2); + forcelj = expb*lj1[itype][jtype]*r-6.0*lj4[itype][jtype]*r6inv; + } else forcelj = 0.0; + + double eng = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = atom->q[i]*atom->q[j] * table; + } + if (factor_coul < 1.0) phicoul -= (1.0-factor_coul)*prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = expb-lj4[itype][jtype]*r6inv-offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + eng += evdwl*factor_lj; + fforce = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + + return eng; +} + +/* ---------------------------------------------------------------------- */ + +void *PairMM3Switch3CoulGaussLong::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + if (strcmp(str,"gamma") == 0) return (void *) gamma; + return NULL; +} diff --git a/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h new file mode 100644 index 0000000000..76016c40de --- /dev/null +++ b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h @@ -0,0 +1,91 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(mm3/switch3/coulgauss/long,PairMM3Switch3CoulGaussLong) + +#else + +#ifndef LMP_PAIR_MM3_SWITCH3_COULGAUSS_LONG_H +#define LMP_PAIR_MM3_SWITCH3_COULGAUSS_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairMM3Switch3CoulGaussLong : public Pair { + + public: + PairMM3Switch3CoulGaussLong(class LAMMPS *); + virtual ~PairMM3Switch3CoulGaussLong(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + virtual void write_restart_settings(FILE *); + virtual void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + virtual double single(int, int, int, int, double, double, double, double &); + + virtual void *extract(const char *, int &); + + protected: + double cut_lj_global; + double truncw, truncwi; + double **cut_lj,**cut_ljsq; + double cut_coul,cut_coulsq; + double **epsilon,**sigma,**gamma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + double qdist; // TIP4P distance from O site to negative charge + double g_ewald; + + virtual void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/long requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/