From bf5fbc92dfb2178ef620bb03876817da43a2be4d Mon Sep 17 00:00:00 2001 From: Sergey Lishchuk <svl@debian> Date: Fri, 13 Jul 2018 20:18:53 +0100 Subject: [PATCH] Updated documentation and source --- doc/src/JPG/pair_atm_dia.jpg | Bin 0 -> 31541 bytes doc/src/angle_dipole.txt | 17 ++-- doc/src/fix_langevin_spin.txt | 4 +- doc/src/fix_nve_spin.txt | 2 +- doc/src/pair_atm.txt | 131 +++++++++++++++++++++++------- doc/src/pair_spin_dmi.txt | 2 +- doc/src/pair_spin_exchange.txt | 2 +- doc/src/pair_spin_magelec.txt | 2 +- doc/src/pair_spin_neel.txt | 2 +- doc/src/run_style.txt | 77 +++++++++++++----- doc/src/set.txt | 17 ++++ examples/SPIN/README | 20 +++++ lib/gpu/Nvidia.makefile_multi | 46 ++++++++++- src/MAKE/MACHINES/Makefile.theta | 133 +++++++++++++++++++++++++++++++ src/MANYBODY/pair_atm.cpp | 21 +++-- src/MANYBODY/pair_atm.h | 10 +-- src/SPIN/atom_vec_spin.cpp | 10 +-- src/SPIN/compute_spin.cpp | 4 +- src/SPIN/fix_langevin_spin.cpp | 8 +- src/SPIN/fix_nve_spin.cpp | 13 +-- src/SPIN/fix_precession_spin.cpp | 10 +-- src/SPIN/pair_spin.cpp | 8 +- src/SPIN/pair_spin_dmi.cpp | 8 +- src/SPIN/pair_spin_exchange.cpp | 8 +- src/SPIN/pair_spin_magelec.cpp | 14 ++-- src/SPIN/pair_spin_neel.cpp | 8 +- src/balance.cpp | 6 +- src/fix_balance.cpp | 13 ++- src/fix_store.cpp | 2 - src/reset_ids.cpp | 16 +++- 30 files changed, 480 insertions(+), 134 deletions(-) create mode 100644 doc/src/JPG/pair_atm_dia.jpg create mode 100644 examples/SPIN/README create mode 100644 src/MAKE/MACHINES/Makefile.theta diff --git a/doc/src/JPG/pair_atm_dia.jpg b/doc/src/JPG/pair_atm_dia.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd8edc5e676ee9973dd4ca1aced98b641c4157c7 GIT binary patch literal 31541 zcmbq(WmFwav+l;--QC^Y-F@Tk9^4^7aCZsr?(VX23+@DW2o8Y&H}8ASJ>U6t|J<5c zGpoC#dunD?_0v<IYoEISRC#GRX#f})7-0180r=bmNc_|K|Du14{C^qvNBMIIfCdZ3 z1EviDMh*Z+1A{;V`vd`q0bl@dh<}X({+nQ6p`hU)Ai=@l|MCg`J_r~T*#G7IbB6+l zfP{tt``iE^Li|-mg+K)Wz<%xiD*}dS+{`}kK%o4S^DQl=vU1JuJJ&tQ6b?;Go%#cZ z%%;U21na+o|8+ss?vv<Qp4@+<VTS9-gl}-SOFh3|;g?^0M#_VG@^>bZPwOOEsgqg^ z2=C?mj~;xm^Y7Be!NJhFdsfu=(9GcUMP}iI9)(?~H<H;1x5+tsw_b3<gwn77qXLnZ zt8sL_S0hPL;kJt()D{zy#LjgUK|Y|h?;U)pD48KOhJ8NpKjMHQ?KbYTxFd<N&DOgl z68(BKMl;u?H%$5058`dVfysvMrRJJf&-r#_(;xp)0>Be#yorc*5vKr)J^^snZp$JP z^h301AAZ`x-z?{OFE2|+`A8HH2^;>S16J+GRkLt_98*@*i4%Tl=Sz^RAtIKU#d*DK zRc%$@u+C<;`yXilq~WvFiYi2+F2Pa6{U*V=pEy%$bnzK<o9_R(75w|siPDup0wY~Y zJoYuIPaPC>&o0<>U)J6|6>E&wIK`MYOs$4^HiJ*Q8@g9xi&n*!>tjPv!GDcHcJ___ z8;dn<Qm6aISA#j!_vDCU5>Wtj{^Ml<Ohm_Dzo4YRD%WgPbS%2zd4D;>{qM;|aoNMt zVH3|dNZ<Y21Dv8Ez&D_=E@^6(Pp18EAuwY_$JEioum3jT*DW4TJ97T30RZ4;8e>@g z%K!kd7Dhf)NQ&BZQUB>co5qvkAu^gB()%8;*sp6K!Gmu9{ftqre#SFd`<O?L@A#J@ zt0CBND&$N=%UVsHC#p{0-!IbGd@4qf_F3{&%eAq+0)H;@4!_PLG;q<e#x~xmtGw)> zlv&O08i%sCHS1%B!7%lBbIt6KK`8FvdcNLNIJCy?E6mM2Hxjz`XkWIe^H|<Pw^8`7 ze)J1e?Qgddjjk*M4}S;wUC=Hp$i0!_dK#4Xpr85_82=E5@>c6m`%`1li?&F+*`1v+ z`1e@?Cyy*%UYkg~z~V)az}36hg~1xP4J<pb9NUOkSt-Wroks*E=!u;XrgE_~C*<N6 z+bJqkQ2!N=%|8x+Z-#jAQR&J1AskfP=hDz?zxU&?VhsOJ?%vBHLs74;F>}E1r2FRm ztBS<K6?R94?gG8zMoBM+7*aTTg0B3k#p79S1Q<1S(E(@X{n`vQ5>B;dX!V~9pZW{H zB6s#j19*Q8p#Geo(dX)iN?zW)@d}{opPmbV$lMdq9OPvrhF3D;E^W(d_a?E|DcuZn zNL_KcT_HcV-L|m*4pcirvGe)fI4Dk0bozMWm9pkTmK6(lvwd1L+NSW@?=>Jl1VBU) zHAj}Ap2Q6mRkBUjg>JXD!`nmTEFV<%)LjVv{NeEW0-L9!(=9`(FE~6I_zA$aJHoMT z<Bia>`>wxA)*9dK_N(H4jqBj5&EAA$yJ>kwyMS-~6Y$;HwCsu$0KgPJ*F@RwdU(4M zXa10itI+QN&)cGQqQUO<MUZ@5<sOF1Y(Tk67@CUn4SJb#&5K1<-vuKS1H~ifW^pu9 z$^D2-euWmg`N!RV$=`e&o}HS4?QPICYR-?W6g+z1Z!Ba-1%QJ=f`LPU{SANrhD0dn zzfA}j04gag7B;IWH5vvc6}Kun4mleK7Y`Zb-w+A=Z~O#*(W<2r|IQ?8xWGg67{nWO z$9ypS6uCxk<@}!1x}{#mQ6rP}t8LSvz4l2rdHLxHD!Zl)&Nl81VKFVb!Kuz+y^F(W zOV9MNHuF20=qI3Zm0vQA)qMoIVn#yP|EzILoLpV^F2G(-UnU^CJP-d5S#ijtkwBWo zs9?Hf^NHhK8i=8Fo{~eSmWUi^(Kn-~-VFTkoXL18R~`+2{)&jFqq|PV3>Mx*(5#{G zR)&&u{|TrUYRe_^$=kL!ZtOmBpnaC{zGPPpF)?b-M-`L&k{-NX-C&qhed2h#JSNh_ zauUJ!5&H?SDkajV_;b9=X<^*d4$Q@+9v=yZq&+abDY&F60HeruSI%TTPRT^gF#-9% zXP3Jxegb}G7&@kZZQFO{&-#;@pyW{L$+BiIZz%olOzL=i_hUL+J$<pxK<9qna3Y=Q z?DhQZ`aN<zl3^eE0ymr#eR;Z}nkpciL<C$W3Ak2vV^u3aUxs>6BTXod=JE+>RDK;C z>p@vyB57#PAMe4_f#xd6<qoVA!Pkz~TDY9ADRpcv{)$*bwmi3Q1@{IJsm|`YV%e>0 zH9(-9cbdqT>GY4gl(r#q&8M+%Iycm$YaoX)AH-`n!{tYH+4j<nx@6vRlnd~%U0GNI zI5I~-h?$}$Te-imv}=RsC7P}~jQa{=g8+rMf_gKVs_IpTSgb_JlqOL`#KNxYeu5nV z*0)!i`iUH6ZY*%?y#|h*Hu=%vdf`jHQ3S;O5-+8wsWZ*DPw!=-0~+023>FUDwF7Vw zars*Kzu0@gVgLn$gHjhM#DZ)46bu<uGci1->mjCwoi#cL5<5(>dWEe$Q3>IbOYPzp zyEhj?Kl}R!hFtO2EE?P(k)91fvvZhyHZ)Q_-Gj2Y4be8i!|Lg6{hY*#;`0974^lX5 zbiU<A7h7R}_-s>3F;q3fS>N_Q5}kdPPdBL(1-Wd+QgS$tn*(#|O4`yn_B)A_5!Kgl zr^EuDMm_=RQ0gX+q{fNOkLD<YOb?;XW8PWx9;U<5!Zd@7%y5HIP&5_^x7Ny$?C64c zuC_PZjg~MB*ao_{{?aVfy24bp3KjW!HEGW}_=AjQ3~kEOHD%mctA_sHFTQ0}Y!NkX z$!r_W!T?Hk@dhG~mr^>dF>@OT%TJN$L7?@TfZp^SIWA}QzBX>N`EHjCYvuE6VuRaG zFTFpF_fH6g_(yq0GHgc~(T(^7FiXl?R3U{r5{)uf-fPQv=`H=#ft!vkzn6KE>7T`N zQB#%S<I)Pv5OG7v{8AJ~wbuA&s1FBn5i*Ej{Uls~e===FY5dHOQ{dGVKB(az*RJsZ z5@YdOz^8n&JW93V8~9KVa4H@4vOH4nj72pzUBtLsNGIQ^!KZFa{;66|J$s<zD)Dq- z367DF1@)ZI>Syvakek!$3*FFxOFA)Zy11%eP*nyw*K3Y3$H@o|7<lJg>NVW&o}CPR zg$gcj>`j%n4SmJ_gPW;O0NzsqV$TmD*JvL73LI$MYn-Tu?bJ=^YDDd)bCo;w?I~+! zeZHA0=~H<j9Z&YEIcU@&9WPvVV-aQn#t~~n2k8a^?}x6tz-{wN60Vt@<2_vuXC+Jq zP=VOhAxE111vNKZ(rU@cn6kx00y5wCL2|~1aw#^^BU|}-KpJT2nOMK?6HxcwmZqlg zPR4HFa*I<WTP8fvc^&PxyH0+V;mNu;h27z1mJ}8#q#~Z)gKg8x5w99ylpVpeqt(&B z?(s9fc;OQui;ot$B|@4%_rK0@g~eZFr^SK~YI(l2b3&NbdC?qmQg|mtvG?=RKL0Pq zH}If6!H}T;eL}#4P`z-KKn5t)X@?O6i)tF5fP5FpH<P~;C_(R+^`Zm)vF8bj62B5F z7f#r!52-D+b@t)SGqUbd%)B`m3d>zfU6ha+KdUke7`pgspHOQyp}6+SVc!wAWvKhG zgM6h<-zodt5&L29UGz^>U)vC`2K(OGDoqi~atQB*^~k=E<)p80T|t(LNb()da~GyJ z^Y&hTwhIUSCGaLv-ag`Y2Y33QT*%~zR;d~C2iXuLz={D?c#LXOcTnTyz1FT<o${3c z3G!vw6t*_$S1E&sss=NPbL+nO2b~<-UVIwq_1!Qsq3NxFC%Le0`+7hp(=UDfoC(1% zFCiw6teCbhiu^aH^y>i`PeFmO(5ly#lC-1@SA8~n-;q6q$c3w3{Dn>9zLEA*qHS%~ zkrRw7nzH)53C}XyCzmqgv%^N_j$&q@0D(n#9;>$dBn|-*$|x(7KRRQu8F4>^y<e!z z$f}pAU8M`UdYV<{O3m!lc(2i$AZeWcrcpVxziAX492y!51`Z1DpLF{-heD#ElL4SG z$l1i8Q7PEfOfgBtU4mITMAgmAldvdV-9l0d8y7jbG?JSnR71mxnp=kV{>`p`p^FIE zZ@822Z0c+uY}&=1nc;C{%LG6Hws|7tneIYcryedQ3sS4pgs?q&Qp9+3`-a%C!~)S5 zr4b_%GAOQy--YHcDJ4WSD{4utYfJTlE|HtN^CqhP(~j4Rz>6v+^Nx~XHTz6T^5ZQ< zr6EyaWN1sk+$m)kR1^RpM?(sjPC4XU#h-sn6C+Jhz$4ESVI}~Q?8}V_@2|tO=qqV+ zNhV9dtBo+hn>>tQ+H>u<J2OlLm$RoK-;#Ik3}do!pJNZ{MuVd^V*+_B#mB&#{S>QB zX0A|Ggs`&k3~{UJ5Npb&Yd9d$GD&av?Uby4OJ}sSmke5bPiJ_hf=Cx22u}2{2eiGy z$W|fZ*O`>f@X5PeyZOLeNj9;J)n&t1(N)@g`!N(@$-Sj1Io_DVJV8#8g&Ve=oDb&3 z6G_3XrzM-Br8$G28gG|%EXfV3WUM>KUpH$;1WsXHWoXOLBjV3e^<9bgFx}!V9>i(- zMZLnv5At^r_;DqrT(2#m9LpG}jcQ|-RJb+A#;btF*NJBZDqNCyuiJ;DV@q|a5!jPq zZz#z5TX|{p)bvwN10fQAaJ7=vE<d8u_Jp~NypE42$)vM)2u=GYA;zOx23m&%f9LR~ zuV5Ve`vw^z9Jh+aLRh``2<J9j71|jU9n)F@SJ-IUi7_)~yrpRN*852%Es_^J+>H_^ zfXfz68inxwmWf#HgKQ~Ic*c>h$bC!BaTgUSsD8bY@I0Y@>Z8Ry1hLUPp@t)ayux-Y zJ(>PM)S#Ri!AQyDrbo#a{6j<J%b3T+TjEcEElSg#e&j-m*3ycmgQ<Q&BS)g78TX7q zo=)l(i(gtD>_T)rJ-&N+L|13Co0rguGshnQM8=P5F7Em|v%BGNjZvNWnK`Cw+R+sp z4|7xdP3hA#p=Y~eh=C%uKVCuUiSEYQAhEQv3W^j~N#UDNoOfR-%r8Y_=!`D)9-2BR zA9<9wG#vT!)Mf}OqXDK$wWm=Hq!3t~nor8-!{XVah4Wv+=m<HzM`<0Z(6nTrz@#Rq z2XqW_=6a3;jcgG$&OuT@@5<x4eAG6iUg@DUBB>ah@brq&F(31)bWNKwc{w00NUg>+ zt0BhB&C?m(6@p_zyy`|v3xJ~bT+WWPgt@eIJGR%fp}-mI)3dCFkxvVReUGF6uoGXG zPd;xDyL>0+qgvjlkgZNVuA@UKrLzFXJ3o)glbu#rRvi(cB8S>EtF34H#{SB0QXFB| zHcZCeY8prRw7{otOGu5Qg%CXwPiK|k6QeW3FsX^%ZK{5xewY|6W+pW^L3F~-?WE2- zm9sU5I*g9Zw;LyiR(tt%T@+vQ&xqLd1h{(Ji~xmv{DY-k=5tj5nWZf^dKP!#lja_T zcnr@|DFqpIZFy$FB$wxk-Z|6qkxfCkp!6L-s7%|dn?&^_{P*7VPeGpEn-`;#h^Py` z#4&bMX}Em~pqD1hIl~k~*e<?|3G<cD{kL*YT{=oV%>)ln&0>x3khQ+>BwbAhr8$;L z5tkrpr``lb)h?mMg;AnBPBUi2eaQoN42x{v4ECLQMeNg^>?U94pA_eBD18*y&^vHe zAXW%}ZpX{o-h3jGmVlDn;sbW`fRhbYlewrmmj*AWdRM$)zWk)X<u7s@)DXllKMk{b z7ZD6hc(X4C_W7*b9iM;!Phu8UI~HJH042u-%-2S<1|mDYt0gWA92yJsbE=&J?bD#G zRrehk;)Rf^a`KT->NNaC9nEB`>deqfhRlQaEpH4Kbhul7xKa&|bSYu7H4+fPnOHqn z93Rz*?QX1D61{-94}DE}EAq5>-97zQXIz?ccDvr9J@1rMCp}neaQv%JLS4r0!PcNY z6U1nW`igvSn2;joooE%j9D;_D8a0(eS!K2_c>^AbZ^NR2R1=(XG9?;gZM<rz%_<{X z&Kd*vt*R4h+Y>4q`l@hqtV?xmG3F*t@+GEHd$qhA;vF9XA=;P*VrXZhoe!0dyy6tm z?SuyTmIRZbV(R#$W+{W>$KT)rqi#BI8P6s?ZQcM2u+jv2nM8hV<{+T2m`+v}1p}QK zE@&rCVb?b8LZuf;b<1MEJgGG_t$PiovRMKNxEy%W+nU^bs>)LyN?rS*`ml&a!HP6B zC7m(vrDb@Jl0+7U<^S&GXe728=MGPQXFM04ih*e-kcD$1kiu7A7Sn~FQ{Fpp9#P@) z*stLWJ@iKP?UJa;4o{UrFs-NpRSn0w)V3v~Ku?nsOT|FAKT=&TiSmX<JM%eie*!|v zVN%2O(MxO<G?)l)m&8}RXZ~ablsIFVCXt|-fi2K~tBuf}gPF#qsz~L*&}FzR*8lQn zHjhtJ1bulK78$K%T}JVu+qV(oegnFsHZ#2+fs@Sy7BxngI|X(4d@4sxIxEZ0Ma#I0 zt};;$(dT)?cP0Fb=w&}mjw1JD-P2mL!6-T%3mt*9U2+pHX*5AWVjtAyZ4}iA-Ixj{ z5_c}uit=SwFEVO$0uXZxPZqh+Z1N13Y*qpTs{@J?NIRIio*IG@j2B0xmKw=K*ctqY z>vixRx_#1Yvv$1go1)8IUu~fDyXBDbV%(T2V|>&*&o)x;sV$c(bE4KlSyc*AG%y)1 z>g6iv>v?rq2tSg(25O>^ahan;M^I)Og(A0PL+ixkv!Lq&(}1<`V2i|s5{QHi^@<>J zq#1~vQeV`JQ<zSXH|iEKVWGP631BsU)05jMh<mHv9$rse@fgJyWNICzC|h|Gjn%*= z?DgV((uQc1k!;v&@pt7p>rFCzn@t>ul^-U?JLFJeEX`_57T7oUByA)=**0Cqe%}+` zamlZyy?*<a&%Fh0cXe+ryNvi%afAYg9hLb-6WdaX8(O*zcR9M!wJ=L++}D>r&QL>F zwpn9Jii&><u_-ED=bXeMz6o}JnAAQUSNx5XP+N)1pe(>phQVqS6475C5i*}0`05@7 zf8kr?ElcY0>?`;euvQXOwZG-72Tk|iX-H*DsTL!n%7GQfT`JW(*g5*43@i2Id%Q)8 zl$Y(ObiIQ}78i>;HnPj4hpn<SO(hlQIj-q{_6P>ZK~FR!!#&W{V)s!u=E%TPHMS(b zGD)?6xds)qENeC@mhGa$Cxg*Ddh}D6NsU36$pk+V%b9t_ee*8%l)fa}kAV9GSnqRg zPCOfTguePZ9=_FYiM<Q)9Ho4pptu3Qygo@JRA3ti8w*cni_fhfyMi;-FgoigS*+&# zQi%gi&uWow>leqiEx_-dZpg)sx$G_<G>CNL$&3PG<#(_8*5jgG&<Ap`e%I$ZaCYrx z&tG97^)0EcNT&>u8Nu{g9}8h^+}alqpdE}nUSo<re(t=`Vjk2)pB4pJ$q8~Uy9b6! zAj0(F5cb#jZ~lzv3^a8<SJ(h*F8NVvEG`=NwWPNE7{*ORT24FErAmP_aUlhX(;6VP zg@fg!fwg&3fYF*DmWfN6W-O48_1fHGB~}+#9q5latXL-PB|?N~MS`ekWued7zcw`h zhdCX<px*;13OQS^Sc&2ck2J;=($`h8%v<i!Ew_cf%rFVYa59@Gv4oA(wL{6_zzAUE zqfN<qlr`k>MC)}L@nE}C>P7@N?Cta2@Y#yVKDMf9l(!9|y;g8|3O4EA?z^58(HGIv zHWh`b?N%|u>~gy6VkIrH^QT#wewiEsp-rPDE$Tf4`byhYVwIQj@B*(Gg%t&6LsMcB zg<V%b+iDVwvlP+XNt+=>=`=Ts>UJcO3|iXeYNNazk%5cE&?*QPJx+RSLO|F>)vXjv z0r#v_-3F~*1OZaPJ<K}`zZ0aEo;Y&OuNLu`WG$L|+3e;~$hRA7oXw5wQ;o5*YZT@2 z#8n%-_GdeJE*=iU$PZ2ebrC5j10h<$>eAU`np)>4ygw$Op6OB1zqyXga=$Unb?I2I z%1LPGlg8&!2Vu7+$;7a2L+k{_XP0Y^RFm^X(NhxD^uI0+g1vN3Z%kIN3fC4?@s^i{ zt=;<b8oX_@HooNI6u%ZKjo`jlR^bLB(UA<x+E$*0<C4Xb&4EMFJVeg)QT{0>j5oQ( zSEy_?ILs)HK8Z@e6nWC+xL**Gsxs%%<Luw`DfvK`9hQtES4}FC4h{M1;A?om#a|2} z{VxWAfP?{uLjd~^27&quLjGb9XjDuJb}=>6VA8(`MBL2W<u3%`lu&mKNlq<X9ORNz z)o=?fYHIx#fPnu4KwhHlY%i$geQok=b8d=|0!s4atGKMqu%v55H$n^5!cd|#8w21% z(kH7gZMSv$iy`AgU)i}MEKmEuq2i#OYnHh(M5a`WZy@aQBK9yKIx!Y_lH!4BFuy3@ zMoll#3tu<Qwu$S8x<^~3m@etfpr--=SzI<z+<@(3$}n97+j}f^5Pirrh`s`cG8X_b zol-zxq9f=nMXL^0lO|S`A@1h3MfM3uLt9iy{bC^^rr}_fmyKJR+Xz=QVlneuXvR(K zXET}txTuAmMHxymUx|fU_Z;Va_#E>_3^Zv2fDM9{$%!22G{i~#Hxjp{Hc&>(-Glyg zfW0ZntfpKX_D5*pW{Hl-Vbx$4Oq1rZuir&tj58_axtC9{x(8d+Ryty!>Aaq)M(lu& zp{>?=<m>#pnaHpJ=o2u!s;?#!r4F2b@;S*~T&xvXm`>=&D~^{;)>+}r5X$2(CZ{x8 z;3(M0<_<|uhY2_slv9FCMp)m$rHI-xj-DRZvD$CkUwJpAFU7(YymI2ViZ2wJNmdHr zQ9k*R*f%6BQb>siEFgA_n8exeQ=$kuFL~=aPFGzgRXyg~nMN)ty(CwX@ngy<6r`Za z8(g}qsjE77s)3**wv!rsj<0bK8@xsMy(lYms1p>FX_8iqGD2r(ut9pv*PEnR#$zV< zY})?Sx8OWk44vcqcOPU2(7IZH?pm1IF$k$Jw#a2|ifl(-hVc;0^ifTGG-H*V>9KEO zYjQrY&R}8qlptq5kj6hW3yBm!X=un^hx&sGJ@2k|(DV#Zkucvsgca<VLw_jHe7-Je ztUCb-L<u|pHMJGlAvRPh1jtW8x)(KvK$VzgX?QZF@}zmP^#~c{0?*TeM>4T@o-MSm zLs(ZL==jFYTovG&j}YuI-%NG62|U0|#q2FAZ0elG&Ox=b)d)LKE4>qe3&2P*rh{>i z?sJf@lCS)uR783+hI=#GH#nWk!DiLg&p!Mr7PU7?5$;0CFbTKnhkM_2PATS>(>Px3 zs#IS$wHW=~<;TFxdDD344cXj>j9p%qnQKS`CFa08l?G+#wKbmzZvUcfS$dIlwhyr` z3Fz7l<Lnv039u;^1^h07pev4Y4@Img0KwGRWC~O|IWm(zpq0eRS^C&j5A{Tmx;n`{ zt{&{hDk($@G*_wU5+SikR6of(KI%u1)if>xMX3^GkJ97w=+N~%YD08OI20&L)ez%n zwV*W(Mt^G>Bo-%j(k!La4<>}<NP6ciYb`6#TyY-r7D|yw^V(F}Qncp``N#>(R0IN9 zyGAH^i|L3?D{XdbY?a*Fu^7~sDBv9`o+`?Vi;$EsS1!uLNJkB)U{%b9HLb{|kMR2n z3!Gen@rFT7WYp`sZ1r|nu-6v!vTEtPW?-1KEo_wZ4xH1I!8!3xI%`Hhv3XUcyQGQb zz>!b|XY#b+IZ+r~WLLV|YUDOj9wKo@Fb~jwk@R7?N-0HQD1Y6y?Z#LvKp$#cTRh6? zsb}aRDeMrGCInXH$Zm|!*I|5}89mYPsiMiCZLwMCh@wy+eSuJ1Srm!huxhRSzM6P) z%0C*DYSX!4P%O2>UnH1*l)FHimJgc32X~0EbEHPukLGW&YtM)y=8`2=WQX0j=uJn! zpp<V?i*D2s5@nKtT*|MJs3K%&8JgQ^)%m&S3BooHm>H1_^&pn_fdon6(~lPKr*t!$ z@3I?vYkZq<Nj)K7uj`@VdRR=Kf0pZx=}sUY=}rjdvC~QythO94MXl1Or7b~5yJdT3 zBqlx!{UsqYFl4aa{<SvJe@pj|Zfoz8@|7;dt_+X6GM4#wp>?TH!Y#dbCZA6L=*B2o zK`%<nXii0b#b#e0K5FUCiByuUVOcjVYqTmD&w_JJ7)QE5OhUONfG1XorM>sNVD>9C z!YN>F7y*G(jrGB1K4Mplz$}1xs45k*Ox`X_pHW>s7?#*!4*r=jvY`751J^fudXCUG zmXPH=^swv&(Zg#yRl?)|ApZ3cM2<y1d+a%f!x@FfoD9N;i$<PK6=9o=1qOR)E^kpu zH2ya(22>gkX=*7h6teWvgXAI~GNmmQ#yE5xW}PYYQ2Lun1pBZ(7^#Jyu!P@l)=TUX zCy=$KZ?NKdzG+AoWZ4nRo~ut&ay(U-=?rTWCWUJSBO4yNr@Aa*I-D-MEJ~(1BzPi+ zmnbBQD&IQNaId2sdc<>CC#}(wgHKP74r)o4q!d8pt$9fnf0Gbq+OamNRlrD-)x9MD zDIdYH-QA`m|IJgP*L}{$hSv704((YH#0+UH+uKiOPvI3a&*bcEQ`^eQW0=fz+(VMk z%1yM>coNN;hoH>4Y0K%Q*}xu)^!PvZaPY;3Q@PwV#T5m)XH~^)lX;Jpg1H1K#XhW0 zp;nMcT}<EVD0CKQJ1cGOx+@9Ur&qT?{?T7rl99yV(ZWhzP@ik;RH*StpCtTFJ^_6L zB5hpZyQ~60bunWlCMNOYc&+vo=~s5LJ9k0(fYEbVj)jScB{R)s{w4T|f^TtHHU%-h z2FCiUOUgv6q7((iW~HsD_M2%h*_6e}+&AAa6m-I{WQ1YOXBRj#zUZ-`=j6jPQB@=> zfvcCefA!8TD>I{~?zn;XrOnF*Jr`rxGdN|I@Nl6Odj+49BH`b_+Hee{dALr2)QZsM zC9t;XbjT6Zgv3YMC2mq>;~D6WlhtqMkBMPZQ<F`&n#Tu=A?+&a%_O_otE(vxszYjo z#IPxDHlXb})d?ox;Kycu{K@Gb?PCI<*F<-*7|VW18=*C(|L{_-rQ$%rKxO{n2Q*=X zNzKB4LPXw1`zjSOOnRclB{}W?V!=5OFrcx8qOOt;B+=CnrifioHnSYwMAlJMYw^O; zTu>o1S&(=3ui~w>><yb;d=9f6yMQ_tX$H(kG)()I9=iS_QaZRes{vz!r2*f3H6hrz z=`{E`K3{)xh2v_Nl9MO+er-A`N^WpKk4FgV!&SgQmALug^xQ_%mqe9FB*r#M5$k&> zmQ#eTMQpnbusxhnfh{i&0aO*?nkUeo78F5ozm3!UT;?4I7W$0BrlORC-JTuK`&ZfM zhaDKF2`DbWMwM$N11B4;xDz;IG36+jHr<FF4@)70uk^{AbrrR|!?>9gBD4ju)XY$| zCY015nUv=hWUyat4kM>n*-}ZR-O{P*Kv1MtaiVmMdN0~iSjdwwRJsDoYL}|N12)~Y zhIchh+#;7ocSf%?6r7KeRQjtCKLJke#UEt|pMbf5>^vIRLvAzh<fh3C1lRWQbEG=Q z=d1OiH{)}9k*Rj8n5&?QicbLZHph0UA)(xN_JQm55+6>lrkC~FJIAt|`m-CdUug!2 zRW6VP*21v;(&%#x@nD3~byQ>uYz&%L$?)`@g&!Y3jmLH=Rpq1Tvs@=*=s(=l_B@cw zj{;yfo28!mmo$SioThL#J^^ZKABNo><j0K?i2my}Nn`l;R^~-jak}we4RQ<BsPy)= zgq9Z@O_LM`$*DAxqNptG*_ZZ_8^#E+cVv_!<FS3Cb|ah;c~kH}cs|Z|eg{%<5j%LY z0`4qmn#um`5{|c5n5*|`nvC-w_oEdTmthg?Fq)j44N6p!YKPhS&K5iJdJfe|UL!fb zT<c<bW-=7p8ZQ2Bop_RIiCIyu0k|kr%GPFrju@qjO8m0~I(+`5`qMjj;5{af4H+b` z1fzIJ$S6E4wrFZ?9`1BCmDxq@kbAe28Sxe&Vur=$6y{D@8_hoIT_;TvW3wAbrXYxe zWyDcx;7;VJY83-z;_@l<#2xT);`t6b<`5LA*sK9bwmcZ$+!@0P)7-4Y`Cl0#Ypw7T zIlLZ7MK6v`KLK7YkK#zH4I^$2Q>$t!NSaDel4d$a>&5m*4mG$&AOmQ?+SwQGP?%x5 zQn}rta60o&8C9o}kdl~`+Ne)}QX~E8%`4w|$-5q5%<&x&8caThj)Cj3JAv#KMNhob z9fv?Z&`dX>C$~6h-#wk1j?$qnzHGX#?0n!is?_Kji#%O*5^1e_Sq-+qj73Pn-E^$C zc~Z|lH&lX$-=T74S#&PGZi#HMnx~gZmC#{am&Ah6My-^%Y#F}-chzFTny80Pzs+}! z7Y7XP``yAMTl$bNj42V@D4k=`_w4LU=_AJiHqMfG`yt-=l{gCb$OdRhtGSw1N`_$0 z**2roFC*|!;bffQm`IerSb!wPYT?UNS{%Bo(!d)9yf&LdV!IXMFdb-hJTY7&K8fgp zZQl5zE%zo=Dvgtr#4O=1AASBpKHm!$ctv3fCd~=lS9+!Gxgyei^JfSrYf;ZJwoVtH z@Nj;esIB1u=P4hm7Iw4(@O>^SG0J8ULvEI+`L8XH&7+~IKKG;j-Go^`T<_GH-HVA# zQ&)qSgvd#bb-+H}G_{ts+U&BU$|=%s*F!$eQ_^G_MM-esAW<Ep3*ulYrX68q*|NVt zdfcP(IlF55bw8wt9rB?tm7X#4ur{xDkXU008t>31zWoX)N!QJp;7nl1bEatSd|QvA zx%~&N>HICc`1{KU0ullN<}V=u{wZ05gn~vx#~=e>lCxoviou{#P_m1PtC=RRV6*b5 zo4Ev2ad1nhCKYmOn7ev}v~an(r!+RT!QxO$N@-eng{2nHFaLLW2DAwH@6_qpc_J(8 zNs5cS(aZ^7^>Lq-p^`gGjMs8g5;VE77RJ9QWqETSU+(~7O_wlN9_o*H(cNai)mxC{ znd4)idVkC(0O{(F$XNSbeAYN+kUo)bx`gwyqc3fla35~+Yq%dcTAHE0!(MP{sy<t~ z;#3I}+ZWAl>n9Dz$hV+IDW#C!^oCA;@8}WKC*(hZZ;ZJ^X~H6Ky6)a(u=aJs(AsOg z9G+%b{yALeW^AHD+z}BtJmdj9DP7Wi%vE)fH&4M}!MJDOY~XBfMf@_Aqyrdm_ZYZj z`9CpwR7~K3Rv(<6A;T6qquO8NdN`R>*he{w_yI8dsm?2@vm=lj(DE(uxV>@B4TdE$ z{V1&D7CPyUg5Tw+wLM3`{Rd27p5T`?#b@0p5D_gkJ{-RgxVhqRUtpf!qJ(n`FjK7> zZAmW+Z+9bg`mWzQ8TwyeAZ<FHtRcYOP$2}X<Dj;}#`@idE?gqgV>Squ6}Ke|<GDL^ z>7=1vnf~ej*6^}!yAKtU{{F_JX8ySR=e0t{yI1{kZB123&s=%C`!Odm?x=@79R8VV z^mY*^C(RZ4oZ6t`=QrZ?T(7(5i>dUABfnpQ=mOJoeX;4>gPP-7Ka+1S&^g+P{1DDi zDz1tMLr?X^Vnf9okng~@>w#p_$_Y4_%gw_hkWKfF3TQWJBrPrxsDuzpk1QuocQ|<P z)$-l7>kjXb+PYj}?Kzha0+JqCXGDGmvpXR;KWPsO%40grSNmNHh{unZy?;_bAhm5G zZH}GGVS*4Pr>7qxBk!~FEo7{1yZBNYvm$dmwz4%ZG}+v1{t#6|+QI!&I-Cf>($5qe z3UR}PSjAI77M(VuE3s|0V#KMEiRp2J8Jh4<ZHebcBb@e4Yq~g~zrFRZg7EppJIu7n ziq=nXHaB|yu%7}^4@qX(9ja+I(f}31nn%XUyN`h$pG?VtfkEtY|Hlf-ja9e$+l9WL zOGlno1mv6fcb|@<xrSwCyt5vaY8N1#Hesr^t=f3VHzx9dZ<Fm`Km@2VEnGB|kQ^K> zgm7^5pd={9-i>ANuFH7%>qL@uoX*Vv{b}FE1c&Kv7?azBkz-8@=}}?xcYM{IeUb<A zv-_uVpS_X2#z!-u#0$q(pZh15l8V0|e`aj`e8|>j%-a33mYthzveWDhHk@xW&8DG6 zKC2_zP-PF&r1KVLmtRMSDRZD}<A`O-&T_RN=L<Wp&iT@+>8i61TGk;79YXk*6nSWB z>U8}0yX;^=C85rALQCp5#LctLZ&K}vqXWWd3EDI=J})2SOp1OyBL?ab&J|_sCnN3Z z!9*W2D*1N#O|!H?5r<Et{a1XCS;5#DC0NEim|t*c%4y>}`VX;MOCK+rT2xr=brjlm z=`tVft{y5Za750>>GHQhg&zX`p8yW3zcmiaAY+sk>ipvNPe9EmyGTUUrfT1<nVd(( z65iVNA!818u3Ek|7f5i_hl+J9f3T(u6Ke}`iHk}33p>>w0pGy^gTY)0rZWUl4AtYI z*#@2QJ^V)R!yur?Iy2qf(H@>%sVX6%=rtXzbw_x#rg&=k_!9t(<(51SEKAGLOC$Nk z)JF3@cm4YbhMQv7w`Pxt<W=k^SzKKIGGV*%N@4>0#W@FsFryV%I_-go`mC{;v<4Z8 z&JQ?2DYGZurX3f07QdjB=%w0?AoaXLDEIsdtgNa$ygL%vC6d%XslU#x*g*nb=__MJ z)-|Z=&^m6~k7E3v08i)k@6u-GgBT*h<7WGkjM;k+_(pQ$%d`R1idP&6CxF^NLh{{& z{pA~`F_fKFwhiIZ)Agn_^uBn+qf|xqyzi#@0k~T(H<ryz^zI2x%%>g10_)-l%!nRF z)Dbwr?eMv}7Z!fNLRDS{O<6LDzM~<ucC^$-Zjvc;1kk7)o??>X+lq~_toVSpUgvu2 zR#W&&OUNrW{TkGo*gJL&!ur~>FC_cgDz*rHLp<6qTQu6H!YAOkHs{akNAdwM6;@=5 z9WCGUlQlo=?9-^toM+rx`oF6e(lv4FnGSVAWveOORJD<cj<+gLdv6oJk+LM=qe|RU zD!WA@lW=}9b~FAU6CSMtEh??eKvgoAe$oL+2zD@%<vWm8%HD5q_-=|8L+2i8OK=Kw zNhtx?Sm`?{js<dxn(5y%_WZdAY&fe}U#fXCQ%%zS?Yt2Gq#qLzCs`+X8Ox9*jR6DX zUlaK?*?>H%ARjMui)X^ZfR1V=GM@lK$0<j?ywi&KpC7N10nL9c3N;In3%)^@jMILL zMEG%Paw*>SEtEYRV+naEGD*^kcU3OI#gPwL%J~uwJu)ftFYQp%%u)+A3a?#W=4I9a zU7EWYO)=1cHgj2dw1StK`Dv%8FTVGCrO0Z`RSaj@V_jE>8*`b{pkm~*$;qhS^4pnB zP!j0|G?=TYw0mYUEwCU_kffxfBO2Nf8u567g>S6HSG^3zrDZ}F2<*W`R<^uv)Ewk$ z!Y%@yjb*iXO|uLsxKH_L?PTH2l(@qrsZ%^?41$JVVR`yyOuQgxmZBJFD&_~0_ADI) zxKmuDK}eG_YEZF{Mm(<jr#^5yRv{t{O?Wj)$!F$vZHtG{I*VarVO-0^G#d@Gm|ArN zO(Wq<3{f1oSJr%$>F4}&>bi`hz-5@1#-`<3??13n5_Fr@-^R-71fwE_Zymjw;3?bQ ztQ(b})o03h_I5?2cd}k7wy*FO^Kz;3l8~nADa|~IYR>+w&9$e*wtK_8Tbr*s_5Ex` zN_vfH+lifY39K(>xqYAgHTFT&$MkhN^$qIfg7^Is;N}`E-S$&WVOPZ7>4z@P;s{O2 z`1Gv!;n)J4l$(}h#yPJmcX3dfK@m4Sf4w5GJ#i^px2EUIiiDH(O|3SKP>6asmJ)KO zyuc2Z2g8c4HLbbjPiP?TnI+o_jx$M8wb3I3eeSARZ7D+HkEcs}Hs)?c=N6F46TS=E z!D1Kwh+>(Y|8mmuVMBWeD5GJuyqZlf`qW2SdL@S}_d*wC+F*fZcgPOBx1z--NE^7+ z++!EONg_#xZG84e-hVRfGS>pIJmmf{D1iBc$BpNb0<GKyq|TN!dq}M<-VN(7rlkSn zMS1(P%k12+lWi#KN*f1-p{>Z!nJ(F8pr0wT@1Q+xQkY^Q!>M&PY%HYf$Rn*uy)nU0 z!>?t1Mb~th-=37ukt24r-+_pTCAJ~1F&%qj&*D<Q03}cyby<S}*)Glt5H)tK6HD|) zJHEM6F}hr6IF0P)id6)%crq9>VEsX@a4gJRjU-HV(Gfd`85t|5lBFoUIrr=S`H0g9 z^WOV{cG`A23Y7R`_QyWIk^@TQ*;<H`2zAnhJ(laEG0mJ^mYUdNgTZ+xqkS3mC<BYs zm<B_1bGxz!!bE@%?+vf0Q5|KgrN|ogqv^|yufwmiD+-e3&3>5eR_PLyA~R*pvn`FD z(N@8!1u1=2j&u7R>xn;!OT<C7xZUh%Bo6tAh&~gJXsfM;E){l7%@?Zl_zDPC6yHNe zH?W?k;|4Ck@@9rsccA$XTy}HZRRo*Rf2!&7-q>z?S=9+JT`KeFgoM=L&<GD0l~k0P zFcUsJ<O&Hw5KgTi2f9>nQ4y(qUj%+x!u1eBI<1KLjo>I{;L40Gf#W+z&BRJ!hfUj@ zKAO~UsLfCtwx}0BZ}+rEk~?R2xfuVRW;|7Mr=vs_Zdo2ub!Zsth~Di!$*{|?t^h{k zx;Ep;7r%;!fG4D$UB}q^-7A2?3jfWMxN5e4+S$)i{!&ZbpQ}i{9zutZMz~BwZjX`3 z;iK04tZY9hZ^)D(dP>!f_6hEwiqFFZWQ0C@=z_qTM!;PhJ-Q0t@yAjA!4_ydE@fAR zS!&*|yQd@R%t2{n$-%*K?)UvIe*bq)tyD^FC6{gZCtyB@sqc1M*}R;3k#?Q?SKEnR zQ`c~bb@S4dTl%~nbQ=8jAV2vhp!ktnpL%BU;7*r%k*`><UrM_!stK7W^GlnH=ThE@ zaeAk*I}@9XqULP82A?UP;Arkt*C)U|mRf>2nD}PXqu?6e7+}%>r>E6i+V>;@mkiFY zOFvz6t?Rng$6Vd0+qf^)Rr|GBeZZf}k6t5#)r4bXg@)IhKVMPrf!kNo$J~8TbSu!a zt1nLRgLgjJ0C~@7irKuQw1ue6p6s_+#-cpv;QGkH;!9u5ubgbooqgrs4o+&QFfBNP zR6xoBNMZ<T>ZM}!t#NxKZKn@~y9iYb*A{oH>{_arQVTZF2w5j#nRK1Ry!Y-Q*-eIV zd#{~pHMad**-`D02UgCt^v3bAtZQv`Jgs<j854v-hXxXJTh){`l;t|s7uteU63!oa z$7@+XY3jJNT*Ag$F-vWXxhY=j-jiz1vd(VR^NWQVGZ6#taspg*JDyJTn}r#)9Tfe` zH~qh_Uq%T7g2B)d)Sj;RJT8C=j5>bN*d=6SjP}`<4IwLy6zp_s($v=F4&i+hRMG8~ z!SI92-s3zN#Z@VI;WhFi=**U-Gjm7c-g+p##)Ka%lEu#I?9I|SN6<C%gc+VHLHO#k z?u#)wMEmqpec1NHeCl%~C^*J`Y}abnd4<FK&IfGk^w0O5<U_lU@MhyWR2oyO?TQy7 zB%V!s1)Ex>CFpFUy`V>6(lg7%tohbt+xN<}7W>9CMJEd2-xUg_tvQD!^rmfV{Ju-g zwE?c#`jqn^p-jKbHhhbUXF)K?UJ5cuq-5>R#xk1Xh(~tYjlD--F&=xRP)CewBC=n; z@K%4h{dOa;gx))<s$urcK4bW9q?MkHh$re7+Uxu#L<sHv#4~;y2av{z$0EL~u=?kp z88XyT9rF_Mj_K=RQ=FME*;91UzkCyv8Pmf0yqd%@C6Ag6II+I4)$(QJ+&gI4n|V{C zcrb*vQ7FIV&x$A?)GRf6@zmXUFjyWCG4LAtTk#;SCV2P!I*Ch9+2+$gWrl`(T6iVU zw~ICEAF<ctYd3Gky20W+HpX&>0W$M5sg2<+@+0ethow+Y*g8)e(*v()Je^E9cTy(( z%6Hwv{FUg>rjMJwW5ZTs*zpX)4v7p*^sBX_FmIz{Dq;lqPq~Er)PB(2nitB>*@q^i zoU;0ivZ%0|k3UL_H<K^?Nq~r*Dohl5ZB(hl@_<G`$*pNRF!Y~gPgerCEyiMbu;`@! zl!pnNmw}5O-K!Ln8xhpP?|5y{I94+%O0A>Y;K?I;^^H~dieDDYRAn+)8^fE#%E|=# zI%**+PYq9P=IdEm=uyUdcliSwLd`F)YgC3d*y+395@u(x`jz{kqiu{VB2wuNg3A_8 zM7tSpGh*mf#E4(6`I)Z_hkx}U7cmg~(kWxC(qPock=Ta+Dnn&(QI%=p0R1E$MAV{k z1ndC471_R<R-T?IaP?DFoYl0k?<neXU7NpS4;ywp9!UbNX74BCiFH!QCTAItDjIi= zx{NXG==N%wRm@tQ%+&`VF<c!DyEW9~pb2kQV2||Ce&*!S{%q@-$KQV0s&f`M8lkz1 zLDTPCp4OONw47{ub-B@UF2K1>qX;&i#u{+ywC}U3ck4;F`+(u9y79pn*{&EG6Ub;> zv^C>^hBD;qS_s%LD#G0*g%OV#hAL;}YQ@?PFxNA6GY`D3X{cFgSvUo)#<Z^EHH5XW z@kzsx+i^EZW_PktWS(6seFA24|88^!k!_NF@13SpQz0aS7_&M`$1O@1&i(|{b|-c$ zsh4D)U#O@b9C><7&oO0xSKVaXDY2W%Y#i6sTd8rh`kf~NBc=6a?f2Pqt*k@l{UvYA zeTxS&oZyv0$t4F}jOa9+r5*lnpITliAzqHm7s}OR6*@fkeOH)%7vi-)vus<hc>Gb_ zTHUhKrF+n<1NrFL1UGy%sGt@lMKo60=qE$qtTt0xM-MP}@qyQxB6q4kP>Fxb2#e8- zs_mL**LD@%_7(?xUBk$)WV1GL=@EFk_!>kq!tW+U{o|&C_V(q@r>uVW`uI}%ewj19 z1botMgMp;h!zy*!mhneD%Wsa<T&|o0Lu=S5jOvc--5R8LXZ(zDKh@+28AunuQXBbn zT5H-f!DHU#>T_-N>y!M<vat;#&jqFG@nbee8IMM{gvdX!5D^i_F{9^yuo$;BbJ}`z zjw>HC)f&_E({y6eEcVIqws-n0B*kteWvu&U&Z2c<xV0xdW*s-5;{;XJ<KI)7J=aJh zC8J39bQ8f)r@vk$%~-m7`A!_wt&blveyE<8xLxbp3J-U3-AC2cnJdPmr!h(N4S);C zSevwX(#-oZNLju!dG-fRSYTy5OSX!4rQNJ6WMq3hv{57;)9P=(^Cec8G4y`(nr5`U zyRm(@xLB{{6P7QmBu73j9f)Xvpe5W^i$~!II^y&OM(=In^Dn}jWrCC{$Hq$Taj$>z z_@G&T$d9WX-wQMa<sX0f;!lEtcB?U=Ht+wv<4x;&$?J%?#+rTx81rLR->pXNh7+;_ z7rJTF9G&Q(;qcKYr8H$c68`N*XZ*mi)&8`h*&M?)#u5HtsG~_~7X@%BB!EnyV0yOa zQZ(f3Rfa*hiYbY4$@k5ZvFDql<qH1FI4lYYY^=<TD4V@uoK$vO4Rv<K_L0-H0W_*k z1Ka*JZdFxl)}-u9F+oD>;7wB_J+Ixg`F;hSZpVAsiVT@;xjj{ChuV)ii(g$M7g9u2 zzl3pvHz@9Zjn$30jMGJqo4T3_%0$l`Y+^V1fRU8ZwSZx(^&oZ0SfzL=g-e!QR6i5u zdiE3Kj=H!gv+yNYtWM1D=am&Sux|jV$(hYJ)z3fRCyxVNybO58qKdd5o}%#15zA1} z=FU|Um>IWU3uOpT&v+H}99M;bmh&QPwUsb~UzcZ!LzZq2tN4B)39(hEtU-8rocX5+ zPG^-(mte@9+{Xq+fO;b*&N~`$uC<wQOx;VBHLdT8%=e|rLl?h+xCQMekI)=QSEa|0 z^e_{<S}L`b<kOM`;p_F9Mrg&u`QeueP{E!MCH*HqNT?&56DF1d7;JM7;;?ZTgwYdF z3B_EPf?4e>5Wpozsab4$E{<Lk<T`aO!%{X-SQ2a$SoM<0xrv%JA^iN&CY9~#jFMk9 ze;%*0>mndjN{4B0ciJuvRXy6%<~%p_ek}#VQ&}cz!e8VtOuNT#vTwz_l%5;1&F=X* zaY=^ws1>XfVcArDPq+en^`g?QAHEk1>O#WG%FEZFJGYy_<F;_OOh<5qWFW3<FE=8~ zFDAgSgq<?K7$er{W;!+DW7gqfQWLBFHwmz1VL;%8pyOqdWoG8~*(*rZkA;K0n51eE zUfTz{^vfRRRg!$=uWYA|Fht%M@T=0n?N4wx?&Z)UGcz~Ld_kb!ps_ZZ)?aQH7;MT_ zx>@s#EYxS7g4)*b7{U$<Jb6{%A`&oODv#XHQ3<nAM|IKJYk604<Up3q&7eD9+YlGz z+hJx}_=~J~`;5N#NY>1aj&I60+)Y6w<EZZ#(H?769xBe}jE58##JL?;=doLJ=Zmel zX@RGRvg#kdlSOLE+cDVrJaH~KIMPf54mznmgo?ZEki_G93f!`|Sw6}}GAQ0w-`-^S zj|4Z&9hZ|Uy5{y0%&rf>JA#8s0vJ-RGP5o=mTSToT3jc!kr?G1cBc;w1*>?stmMqM zkDeW~?W+5sFhZRPt5cy}*plq7tnXHGvzOX4`k{KZPmyn7_iv@};SBwinJkxiyD(Gr z6BXwiobsQk2|X#&5}d3#Dx1>=PT76#jq;$Q*2WI2b64+j-YBq27K&<Q%re=L+8>X} zuxu{mGZ~!PIz@$h6<!oWX-{&p=Z-5n8A=0ZEV^?VX>|zs$xT|y3YRSyXAaMG0y5$} zG=I^@Jf$fwt=7SdACIs~SfQ6zd3St;l&84QeTE7XlB#6aJ~wqg#`G?5I;wY>{C&)h zj%BZ{6yvFoS#d;KkQ15p#g0+9chTcvv}K{~tehsHWXBR`d18gZ`@%z^_mCp2sGYHc zMc?Qm6#L~!VYTHE8$2AfrA)6Ee^{aS)}MnN!BJq*_B!0Kn$tY<FwQcc=TDZO$Mbyp zu<Mw*t)FntK#DG$Rs@xz;iXWyiqwzUgDh(ti>X0_yx0iDu4qcztwr~1YdqJk{AO~O zG&;0|A+2uP3)APx@-By>Tzmg=2+UE&AwQhEA~rbM&7_F3Oj?q*V{zvGgbOqB`pd|t zmsvm6wKsy?$(tZ3<~3@Okb`z~SD)03d~`QmOYBd8G5R&)ucxP-va%_aOJlR93znt; z>T2bLopRbwfOA8=NR-mD57rjrBqO5ZvG-IQSNjFKvXtA&WR*sP=XV{y$u=-nX4rkL z>@i`5R<)sSu6WNZG}q8re=!gT#)SY(IhD#(M9AYkv7?{}rhhz2iZfNqAd+pKQec>K z(4Ct{H?l`}n|1WerecO(gYg-@p||-srXaoQ3lPB8UgN+UZpL|lXGpFFs_r~6sM{>D z9vU%Y;H<2l_Is=@QbQ`jfUmSOOkRA4wo9FI+8>_Eiet~CUV;6sv!XZ<>o2*?w!Lli zj)2grys%f{TONsv@xjI>5EU$mKMRW}Icg?g@jlIlNL6)RyBf2CNBP^7bC_$T;CLS5 zw{YeXJVvn;vBw!vPl_2B*U*fj2PAVXJyw!(sih43{68^IR;B^ifR@lCB2dpBp03yE zC3}ii7*~tN!-3~%;ZaJ@dmj97sYm(MMP;y%bc%&)MM4LM`cG+Bg8I>~^EeHw{(Ht5 z%kL~6zKa5wf9qy2FBGq)v9O}hXj1)tO&l>I*`@7M&U%rP)9vZ0H*Re`<qXg%L~#>> zB>$HGjwSq`=H4nSj&^AmZhY_=+?~PQ-8HyFa0wnHcnB_oOK=G85<CzjxNC4t@Zc68 zcsB1^-}?WxuYIx)cOOhwwaoO)^iy3`ch&v$Nco$gq0}1?<sme(qOOeD7RXWO?wa-C z5|D_V&g$D?s1;gKYQK#s%S9Svn@=$3U^B7tr6pDPP?MN>`znUg&==!Fy2dc=T~%r+ zQax$^XeKUBJN~GpP--;-c&hm82~kIRWv-93BK7+?mC8lZ?DC5wu#nYOz3li({d%Q9 zA;$b!6@H8@mNzTPsFSmJY(7u-V-mJm_zzz^#G<g{3vQou!<TBcj_YI^rjPu@<4N@q zrcka(ZYS<cTBhX8A0KRVhtBWKn9mfpHi}~Pw&4X#?cO_DIU>CMCYm`)av?hO8Tv)M zg%Db~K^5<lHFK!?K4BuEZbqQ<<9xhD&NYW0^QzN50^L3-jrPW%iBorkTtN5dnPp$d zK3D6H^U=JiNr$m|j4Mx*3cbwLZ#&g0w3J$6?ffH={0f!dF<qulf&x_Fd3<+TbZnQH z5VL=i#Ep-w3cx^*%nwV8M{@+>m7?fGu^${(0wpTnea*cliiIMlG_9{~l5hSwYYB;f zhCnBLJjdeWiQXJ(x2n<NSB>HCD~&YLd>#CArsVBAv{SQPww<IEE0DSF+sT50LW%sV zZ_q3&GZO}j+p{f}Rmd5CGHIS_W45ozc$8~vBUJjq$doqM7dK|8l2vG%J`gZz9*hl+ z2*(cEqHs>KnUJgCh!DYlIqwqJ;v<m;sx(f4fI;1j3Vd=tElu8hNXF3OxP6xg8?6GH zjm|||sGhxmWz*Bp(x<BEON2L5pl@EARw*T*DN<DnL=9()=(##5SA+%?z|}7=Cx$3% zX&r5A7vH$r*+aC+M2v+~e9HNgi?uT-PlTW-;0T2hzl;_F|H~lx_+H-nqd2l&L+96~ zQ>uZhQ-;7Jhh?KR(kmt`_%%?WPjyfct!kMJi$Q>@e|P|e2lCUK_Wty@nNxb&^(J}h z3$F<V=?~1sJHyfusyem%%jmYt>unYoZdDY=`%{cIFeU}kVzWZ?8{-+;cW@-+JHI2a zQyx084+P@T8GQKkrVmN+bE((_M{+YGeXK>mFfgLNOkVq|`a)_ad%#5Dmp)175V^Js zb?V}BJPfwgbcB&xCf*sRGTFR@k}$h1E)z{4B|#(6oYhe0sy;KMH>57j-~TW}PZ}i~ zC3~l$t`zlju@aFvKj8l2w4VxJRPbA9C+Ttq7QTN>6kJ!m&N|fFj`Cs^&o;p_PEogm zz#v4y5ZDS0?aN=<KqFezC^5(J(737+ICIVM3>|xR;fXXEw3=dx>54-?px~cnX?|_Q z#wwUTXqWa*)~7F8;Vswilc*WNFP~Dag2Nta3@Tbqmn_8B2U!(2{TFgB=LaX1<&^d) zIielQ1ma3Q%CR(GdZvFsuWS2LF`nueLm=BNgiB8~#q}fL>+#QbH5A|ON(obogjbEv z{{pmgrtF6<6u4><V;ni}5}UtX`y5!M@=UtbcTm4lnX?XUH2!cS+u_)&y%9srgWE6m zG#G8B%`&m{n_^YrTkQU=owdj}4lznOIfk+R-Lhr!^^;RV!@oeAkxZ6GwTIu8`<gqS zd3&jzz<Dlr4~AGc#d5K0drwQu)?UH>cGQVw<#2dryQk}SS`l@c{!cO651DaQZraaX z<(i3Yd%{Em(oA#pmP!?$vdRO2*@#L%E?a9wh5}iyf|Sp!h}O*dZAl)WR$UwEjR+Vi zJTbi60DK=&9!<v4ncgg4Y}jRx^C;gt8c$AUM)Z#;<a&=uiQ5iSGBD>V<s-#*_%!(D zYFPp}FckplrJ^N&xyNZ}gk?RhS!k3k470wt?McX+nb;;(_U6@CnXc$}DP_NdY-RkZ z?<*3U{tHmGcfG%geO9vMQ!k;OhSgAxepYus&A~p5yL;LmYGD+y<m$Rxy_$?4$d!sL z38Xq-I=vRyTOGT5H>2MG+ZbLs>%`14CSMT*zsCMWUe+Z33KH9y_|?Q$Z_jC`qHquk zsl+Sfc*|j>t)b1$wEe3_rm%v&n}w`fr>Gh<{aKyp*cmb0FQt-W9aT|UrWn54??bWn zS7MdS@g$W=lN%*#51P*yzM{rKtbSAt;CKm2j+q;7Fn55E0Y^f$GsVN9kwIH?aYOse z2dN5I<)wxP5SnFRpratmF?5Hsp}BAQaZd*CltbRS>^fthCY7DAg<5Ud8F=-x{_7x` zR#3(uXFfr5m>Y3sS}zSPE}ixZz??gvgU;fC*b3bhewFo!!9FRQpsHg~!hj_O&l8Jr zwc*m>eau(Q>;$5>bYB!kwNqSKUn%&kJ3-h=(FAaab7yfEp!|93V)bnHO5&B7asD}{ zy`qk48GIk_Z@?vnnK!=+{ajj{ne_J|d#B?8>pIhwxQ{4wKhLhY23j<y^kI2b(eW~Y zXDcH1fj7tu&q(CeKfVm>Iz-t-HUxyEaNCIZj-QYti@v~G{o_N9LjKXazADS%>BZl4 z(agC8*YxKvNOpOwB71#Nez;ya`L!}cPET6ockN{+SEv64Zi%Kc4ch|QpN_+S=dE`7 z4ZINK5ZpI6<MVxFv)KG}f*v<{16kuqu0kL;*pcp|RTS4Ws=yzzXj-4Qz#u3%LZL4Z zl^ozTU+88$pt0hV5nsw39VDe<6yHK;C3}O>n4pduU${dX7~8>8@l5}ylUMKN8k>uM zJNhn`UfD8#(SS+j%d{exXs1qeVc<LiPYR>|W`4zo#ObAQCph~tGeCll&#}dYkw=>x zw<YhPzNItkvvwB;7XiYJz7@HWF=czUX4%8CSX0iE$MuT~N8y#jaRJLay=Dw-Is6NB z@4Wxd&lZvG{JNahp{CVFsCGO}+jU8WXtm~TyDk=BT~p4L4CL9m9C(#Hw7Hz0{oe>q z4%-F}ZqQw>C>+SFvGm(66G@qGIT_oyf=NH1f`tOa@t?Ys?*9U(b{yTE|F26)e}R&$ zM1Cw{2)Rhz@OW&$oBbAt;LZ5d>gv5oMZjtHqsae_uuL>3J`t{;uE;%C`noZ9=-l6g zZyHVKi(WWAx{(Hp1_nr>^F5cx7hT>YkjvKlU%k;s_e(d!)qw%OXQ1zmCw4<4MJkTf zl=oAdJd^tbXqx)3an}cbVJqR7mlt`yzni`Bj;4M-XWEt6c(GMjD}nToXQeb7{(w<; zoljeN4bD2{T|b8ZkH2308*&#mo}XS#W}dkpPYeg5nNA>sYyb0C;4US=N_M-cv~6z5 z|8vtE+5iWk+8}o+|7S4^)6Q)3`=vRXo}@SPZ$3KN7`KMj_p%rOwMe#WQ({&KWtwS2 z+O=Hn_O^|;;g6)(5i;x#%pO*B=@=z2jkX__A8lzJv)NTSi88k`h@v<aGU6K_Uy2mC zJ`J4@dyD?iAmBN!K5}Y#^>ASLS@TBixxHr9{b=EH!@D0dK}Kniuf!=Y<tityHEcBc z4?5lntvKSETVqq*-U&TMzZ&-X3w&g55Wt`E5sVj$PkqIoPRPwKT_YSUI>v5smsspA zs2qVB@6pdDMVh3bnCCZNQ|1(JIU5=%P7+lWZGL?TYffn7I$nbn?Rt%E%|B}$t{sY5 zN~AE=u}`m+4MTT5`Xs)OD74gZ(<sDR`n)PYe4=9f9SXmu%utP|qTYp&H7A_ftZ#m- zUl_6JI9Dw<071v!6sit~Q(o}OwwNZp;Dy0TbiRL@v}V*-@UBsS`jj!Z_9r0L%-8F( zKN9uVn0v+1AaRZE<4`m|jwJMauf>Cid9ir=>alv{=6F^zR|gM1)Ixh+1`t>DthKxk z_PaH}Z~~+rcGvUccs}{Y`^LI{>4A&~WxeN-8%o+8gaH8EuvkeLY_OLW@`CLb%X+{b zN8N)Y2&ZO=EIc!=a#`gVaK&XfhE&xw?$X`r%;deUQxk@*-LEP_g=*y4t~L0_`o_*o zwmwyums&-cbHfc9+agPU#lCx`^%wY)(e)RITlUQ&;9jVyP}3@+x_4Io+Slz2SDR4j z|HBL{J4R=&@+fk`wSwfB&IyxJB3{bf!(-#?4V*M^gU7#a4yO3Av}R1mZ9k`#^^^TW zJOv9sRM@lLJnP_qT+L6R!&{5gvKb-Uo*p8K-!RbbGM9Nt@ki8<WOdvv$rO$VZM$nv z+o+-BhLsm$f*^vMJF@H$vefE*sA7wX24-tmPfi2R4YC%570@=^QczsD?XowWQgl$g z<=(0F-6_Ni&P7Vt<3ld*+iL&(UZ;Wd)9|O`)GsE~7X17st7$BAAfC)!O<fyjK$MKx z7~APa=GA_d9BkG!HYcKNo<PNIF@f%oi6nzeUVOqoLNdjBfq+AJUbx)Bi5Y3IHDvfu zXz=Ga4`srcMRfn7bM|7c27G06O1`7`OOqVbm5kc>t=NFg%4GAHUG2Ntkx||;jzCrY zvArSvxq*rgTSMGORCOf|&33eQHL|aRL51oY4;H_#EJD@!VvABM+2RSJITlP((P;!= z=Aks$_8D7ID{sVJ3tl9d3?!}(iaslI^R<@X1iV9Y{m5*%Lf76L>3aL+*nF3Sl|EK3 z>v(@<K})Npp#GSTQxSbx#Dz4r|JiYt0Ab4@^p<VQ$7vTNjzPO*k)Zh};)?n#uBhAc zP>+z}x>`???r51Po+_7+x`5NZ(fB6UB>Dv6kYEqvil?SZCT2C&@Xp+3ChQh;v|+*e ziIFF065bzcTt?4e__5<1OFg!2ZIjD_yf7-+2(cspLxj}Fa^qLL!gb7&EP<=*hw>21 zx$crxkj%ddD<d|^cKc0d9pO%3Nt;Kdg|FSr3sG5X^!{!1LLgHRxTT_C*Wx@{qgTUN z|E6zTCxx1Ek8i?a9DbpWn1?$9LX?@g+Q@ZV-&iI#V(Q-!;aR9Sb+nQnh^mfcyoHTl z#^!o%FlHG4CsFqDklKMk-Jywzjzzn~gpXNY$F&B(s#+)Ivsh3wENEz+qLB}ZiL(|4 z4C<4WU+g3oY@+K%9#~hgQwarlI|9W4<a|AeQvWoGt&&5b4AtN%Y2p=mOG`_r1Q))e zYz2BE%VIHAs+=5|=5$fo>SxT-5~ZyK@Ja*u43(4Kkfs@Pjqc@w$OztbGC${-yJOA> zv~!4iNN}P$lRNVon=-YU-!Z2r{vlNB`wzJ599+!L=RbT%3UOe`<U61U)j7GZ$Hp!+ zD@R+Si&&j(-*x<5>{dhuMHS<{X-kZ017^E5jCp8Y`$l0LOKa}ERNW!+H1+rQ4?dTE zUwH5CrnBr~xnWhbaiGum1C7m;F$F4ZwFxGB_>SA(rgnKu_!eyK-Z%etBdJOOW({R5 zF17tcC5zE<a-2ho#HH2vrZ~Wb-ioL8!|cI!Ly{J&eXLq}t=TK=cP4ITEa;B7o)Egj z9=9C#iPI4S3Y=AE_2Ns@eTqZFN3RNb@#b^~Oug8eH3vI`Y_bj!R!d*J-kbAS*e6GX zH+AqgSQPA|wPx!d*AMWg>y*KH9$Z>lsj={LB@qO0js~(IKo%4$87r&c<i#)}WZYGB zSXo>AJMH1w^ba%t88K-`vv;=2Z%1E?0WqJKx)^ovz}9cpwY+|w{o|x3Z=Eh2r>XS7 z&)myVx4q8ipAp*M*tJvivLkUN4XBM@=S7=f9vQ4zC8VPe5b%)gly``iKQFuYid9=b zrm~AJ&D^75LCLNlna2d&iR1DTKA*Bkt&bDtvf_wOX-sH8C1PEQbH>_@S5AM97jD(7 zuGs^8q7_GdG8XD~vi>x+2#5{7wI9#Mi1xnT%@o!3TFQW(MQ>LG+FepSX?%B(mY5i` z2{f3pWEP73^p=C(5UoX{>snA(YkcT&w^V&~wXf3t<iW`8H`mijv|yKa<e!_By@E7_ z#aH-v%a71W8M>}Bo#)eO_3Fn)8XBm3{4e?>%3p5Ry`R}SKU5cLQ%tnoAeNY?vYP9a z05#@ZJ5&f@8m?m)EFp*dJ(F%2zo0>SHCZY4Vb(Gt3Z;eYkQMVtOQgkvo1U)&c}Iaq z4N`}n!m*t08M*l9pSW{5FKr3ioEJ`ifhheEtD%Q<@^830+SK=vYTuxN3A==<&owbF zpWnNgj9S-tEG1`DseOI^3k27@ijU~dPpyjaZw+p<6s(DU{o?QCk`YkEvBF?%{z1|u zDejlu(Tm^uQd><AeqpG4p|ykmhXwQ>G9Ca90#I{-siZU|EjZmYf|CmB|HES^L47M3 zga*Ku?;|+u^F+tg3ud*KLbG~{MkjOs0%eB2D25Gf)}+}rj-I@^3!nt%r;dW0{k3%) zjz+N4%Z1I;N`&E)?G3{lXql%o*Wq3j0ZCno$!_ATA3)go#}uR(KV?vkCopy~vqVjP zwXzzIU|AB(7CholPCL;Hnvu7C_Fekn-`ty+L2WeIE>Pu8lSatODqwZYDU}iIWXo>a z#-`h@P9)ulFHNgoh2QcDFNN3efDtF*7Npp1?vIz~92W({Bi2^6liDz9$2IcwL-P?X z0MM!s-Xf??atHhb(PAXbqh;LNdem_qQN%7<qm(A{yba#yjjv?Jl7%EpG19t;*@q)a zv3ykm$JSiH@ewaSd@nXyoF7c&Rh#s<NEmRS!eaEP(No}<Ort+i$lTotlRrN$@an|Z zjFTk8iI?v?FLp5-^_{~;r&q%FoBD!_bkyNpTQ3dwdo*(3x#YQP^?kN-mKq+GO_7<a z;m->lfvZ4K7V0Mxmzwk@pA$<f($>$58{@4#BBozdU92eGpt8?aC`gOw(xXVn?<IV? zl)sQI$C>5IzFv`fY@^aE>J~8-)gOH{J0<VLJKP8$av_WhZ4M4aT1@+fv8C;jmqm;A zhpEy=&~kLLKijN}P?3qE@q7}0{+68)7s<(lDZnPAa0~(d3-&F^u<3T`+XDey)A450 zPNMuwsWso)<lmOBv9?~Cy25yauyeg_s^hF%kb<0g02qvhS0T(lAre3tx70#m1enLC zaS%oGXSrzFQKp59Fv+?&QG~%}3aOHq<$x}L542jS@jB&DW=14z$mEwr$}%E>qsjy} z*2qptWfKKMB+2#_vRZbG-o5OTq<Xngsh9kA)?K>|l3uB?aG8-UfeC+Mm~;y#Vuc_n zaomddE@n2grw;!Gigi)a{VF0~F%FfYg=>ZmUTw#v+?oFcwqo?O(!G9`yz~fNf4H6m zH0w}&Cll!3iP*d)M*ZLkF>+H8FYiY?T<&3E7qq0Z2W^nZQa=(#T=B2Qg<gXgx<>3t z$|j^)pFs}n5ut?Lp8b_mo?PdJn)l!-lih2n)qyK%<-*wGQkShzXiRd|mIl%vnr}ZU zsiRggIf>+Cu~4-FtlTCFUPdhT_)Cg*BI?Wh-CRgWF6j-GB!5u;qz^VCelEMh<os<Q zq{!4&F>hpi(UX<mQkmJ0)8)uZ4XlLT7H3g?HNtk#fi-hcjr&G0?7K}QEiT+E8E|8_ zL40YZgko6&lSW&Q&-b24c}f43H0rkLqv`r(+z8N+wl_pwqQ`9<aie2edyubqqSn24 zL+oM2R;YF@TQO*Ozq31&`;g*=k?psa_l5pKKdP-CBshPgn*^QFcbX;N>q0k?WW_ir zf;*@cnLvyt_^QA{#DNEJKP{GmPbh70z9Xe9DZe2nZZ&D>Jnl0ec9!Cf;gnY)_v&;o zUE#B$Q>Wu1)Df1^=~lf6?KFriUGUrKy%*{xims}@wdq#tf3<&~MrPF}0JUA}Fw=`q zsr*Iz%K#ZaU^55+^P<4*pQ)%a=6{4Cs=$xqdC_y?bR%~YDp&;bb1xubXlPmIl}d#c zlzTwOkMu)9>u56`G9?c;pFCfq@Kt0KL&+NDBb<&k72h<cK+M1_1hp5%bYNUA7+=o` zG>7l#W4>hlrd>4t7UO2eJ4Sv1E18|d$APzqp!(@%*Wbt}m^NfbO(TjpxroL-%NwaG z^>dW+k+Vx^uKNt0<`Z(Lf-4@0#Ct(oUfs7A0~f3U-p&Gwp^;3e1Tmcy+xJG@=*3u7 zp`%9W8^vPdv3XOwCN8Bq93-zg@#=$!w}xO-$FuCutL@Az(ciqNjHJ0~iOl?*vqKVk z0=UTLJ2o`b63bh$37x9dBc9HoJ`{rT{1r9y^5Q}BZZ(Nw@D+EQ51Acf_*yQ#%71}) zua0=Lq*F^P<}I`@OM*m1=gtzm2lPC0g12h!*a@B)vz)f1Q^oI5dC6a!T==#crME2z zC7{HnC9p`q%op;Y*v(7Ol*Hg>Pk#Nxy1xK;IDn%P`Pgs1qGjMX9oX(pLW7f4%yKiu zWbgUt?(KXRs<~G+q>6+J4n-5s_#z?8%zPI9{wt*D;P**RyRXFCKEfrX2NogQ{m!S^ z(?W+h8!yZ2z4vb_g#1EB8EhCS*0`QE*6L?CJJQl(sZlb&pfx*z#{J06bEK2Lm;{nt zGcDBaoa-``xE?31`8DRhWD=?rZ&{)>;}d0v*+5b(%N;3UH+LlEli+nl^P2twl0@mT z^u?qbp#TYy%D&Z4FC%_r(7DH#_nWGVqxZW(XEg-R-OIU!OgTN=bH0`Y5h#*vNWC;h zNW{*~p`(lQn~+xgE}koR_0}i&QWS+If*VPHX6~pI3{O9|NrkMBqAbUolncV-)1bOx zS)VP-g7;)KALm?)+emVkbOV{y(#8vO7%pN%Xzv`}gv3c=UWwI$T;UW?Ul0D={vt$y z)`s7aMj<sM_c2qaWCd%+QC{tKQeJk;utN8~|L%q>SSEPVq&I`+!pJu3t?p$K=ZHu) zqJ)L8y)}X$e2e8;<&V*CUI#m^J#^UtHER^$)A?&zpIuH_Uxg>!ha?nMn~=R&2&*AR z4O4oh!|O3gzJl+RgGoGTfDZ4=b6fz{D=)%Be-g|(nB>gn7~)UI`F`4qEK@TMdQu^Y zeYh#Dpn;x+=Ix-MyfakfUYLs4dYdQ!a%C=kU2Y++NxhVR^1~*Gr83b4>$gdhE7-4Z zqj=v%#mH)mQoon5*Mcpu!w(dsNNwvLR0-&Mz>R)GK>M(%Xe26UB2f)@o}@V~3VWg7 zN^o%5T4-{lex$}mkbH4Sutyu}c{@0E6W7H~mCu<Xhv3L?Aen)iC9XG#?ye*l{v|W% zD}zb7)5+Y3XI!8vm6rzsfCx;(b^8e4JrS4E92O+^;C@B#8Q2>k_LUrlh0xIBT8h%{ zymM2y<-QzCe!C9?;1DETDdOAc2wcR7PK6Obsb}HViW<ecaTSx%F@Ri$8YXQeuMU+f z0C-6<sUHa>&vka?u>Qia-_@mDRXV$!i3@wLbf>END!mzVt1=R9<@gK-B_~*|k5C62 zTEAd?ctiIGKS+OkJoY=8ZNn4JOSaWk#%u&5B!f&*87`*BGb^0@%_S&}=pIe}yum;% z3dbXO6O?c~;<FvJI~8}_hD~xGJ7U^Ti6DAIC&T6>MTxxF>UYp~{+>7Fl@7ilXsFh2 zSxFlF>GjZ?OngzLs#7!7`1DOW?=@?VYY8pKFN-BDZ9mu1(y9DfC^9A2_LU~Fwrs38 z2w9LHnZ|70T|I4DHAg$FSyV|k`j2ciN=ozQu}dg#ImZkMd*DCJ+@SWYySPR)+{*M5 zkm0VsnaJk%pLt=;d4WIb)i=g7xvfV&LRJ1}l~LEBZ3R!+q3)T@@3dUJW%^T$1j|~| z$zHSOt&)c2j-|^lYmx$$9l2|>ch`Y4f5a1<KF6K=RQf!K%>UfJYG%`duXNk-=dn7E zV#{@NA8xmJ<)ZhCs6B&m;q5gL#As)RAoqy2?0fyB?y(6eKJ!F~ZO;(WeZrR!_+}!H z5OdOsBABA{%D6}~H<hA(GkO5nSn}A-*P|qKMIGddD5*wgcgOM3?Uvloq4D(5uq4_l z8#O2N9!k=+Zo+5iqFkRE)ROeeL1pPo?;{_!jlJiKoobR0l*K{@0F+JR($XlcrRyN3 zAB6THEh7OrxCLIb*4Y<~NCF%4({mHWZ)%XQ(IMRzq*Jm%c->GC(NIS@$`U=~HV=L! zFx&{qn#)U!E7DSBhFUWR@>9?POWCuigxvl7t|^7C;E0c_j^H-g&@}-Z4Us!>s!|s1 z=@7Kb4r0UvOh;2osHhN~76UHrqRpN|Sc0YlNDbRNu#QvCd8(^%*DzQQP%KBqT7@wm z3qi2J?x-L|s7}DeAc4NpTYp|i%H*Rx%Hvn5awJaHPlg8Uf>Y{e-zX@~0`I&#YIt0E zTI;bgwr19U&G$P+wLl<bh{cuW<U1q^9DZp?GDxVwC8s^3IRyeoj-v49T5l?iNo#83 z=L{ZRpel$C16yNEQ&Kl>9UeRk&@~14YeNOB9CaiO!GhcHk6Fk~TDXsC$BtUlv4+$w z`IEYA7}(`oueg@D9-@go@&bTIqS*SO*Q96CTyC$Bmrz}YyYi#cZg(Fu;(HjgB|vA> z8RjC$RqrrY#_72m@Y$PZm2SVY!g<?MN6tDWgX(!J^5m}#0oUEOQ^y=^e@b(+b0X0F zYngH1tH_mYLOPD}_Qm0qFW?|yDp8u!2rTTxANP+rHIx#v16C#1IQLtoL*S+>iG0S| zR{fxDi~^jGSg#dgUTD{;^Omk({fJ#x?kye!e}cR0KtwxviGuz$;Q@f~Vrl-xO#gCU z9M}Da0skNS1K3F-(kcE+`u7XoORFk8=YMT@krPq=OGlt%d<AIy*9OoLfJF6QI)F>} zyZgU&G~oHa-jIlsC<u`TK>yDXAWoK`7a7bo@jqMO;r}JTf&NDa5QF|B{d*1nzv;x1 zY#U+Vmpxqh4w@mBfEoalFqQsuWULG#6_AJ_DG3Y8|3?Qf67is5?l9DuK4i{5jNg42 z+<hP<gk8yD;GYjOZ|H_M2VQZ7NX`I=|6DLWFMuElfT#fA>8$%j|7St@iAD8K5DJC- zI|v1kUuKl}*YfWm^o4_oic``p={&fgN8?{n=s$d~;5&H6%8hD(c|el!<v|@p3G+E! z#;NbiPc3>5mK96z_4r<i`|ZvRk^MMnT!$8q$WsIKW^r1GK@iB_htr+LAN5_K%F1Ij z!N0-ET%C3UR@Z`i1?RylbOy32=806Ulw7b504ys-npPPS1Twb+Q%j=kGj0rI|Jcj? z;{@3kn0hbUG3?0vZqukTq<_RdRPw8INP9^YIn|I7DPF+)AWa{G_;09ZDI(XB4Xpr@ zkrYs4_|b}ObnZQbBBDUo)>`)l?i=P4A^|E+8Q((h&88&{3|2@(V-H!1Pg?pN%b4wi zSBwtA4zmFAyAi78fYuIS<e0h_Lnhvn52HvpJ>kV+&niskYTT!|NGUtEQDsuZ?(3el zv!g~lQEzDD<in>S<8H!A<}4Ia$Z)+qH<<a-wjn-~kAR8Z3un-baHU36P$o$P59k26 z1i4dWVksOc^c$E~$neAZVe5OiQkc`HobR*hcJcAim;w?bVnTQen^*jVoG2-xG%Mf> zvvu`<C5|&86*v$NMg}RAlU3F+vsQ?cwfy8iAp0);lrLlQ7pT1XK<RlN!sEJxj<{bN z1w&&+W-1-Q=19(C|AUMnETid=2sQqOhcAzF(J<$6{i(rBr-fRe_uE*R-E@@*qDfBY zhr}$a63IC92uqD~aEV5Dzt*=Lx$w;x#o`34JFB0(BD*9wIwhzg?2h(wpW%C!MI;$^ z0=<=MbM)d;U$?(q?}xi0>Yj1^3zSY4_^Os8+<*T_;}(N+j!!FXQeL^D{KCVyNAm1e z-i&xiQyHR2(+{VCt7;IkukFTrIK_-d&UKuO!J22&S_priwu;ibZ|I;iMBuSmEh7b@ zEKZC43&0YZRA_1ed@!6o96i{1^~-DX#!zJE@1t|M6N92eZeL|1FXR4P+Ak>I1AH{e z^lDms69{@)jK;ge5!42QoF#RK5wo$v7@hAy&`T<RO>kO<!F62pdO_5eU$Ro@vYLn^ z3SlQX2y2Foo|+apl7JcE*MdRfUEop*8zZThH^N^w#)IFRVoHB`3H~jgQdm<J&I^AT zjVO(U7LZjK@{kIyN|M}{4{`e?Z%{(5w{uU*vI#*Htkh3I3g%I>CW8`xhtokr23J(% zP!}IHfSsvzb#)!ub$3mVzDLMZ4i7bvest7#SyS}+QcYfpz_0~-n+7@?(F7p!<iAI$ z;zlJlPQC|kaDm`emryn3+z?3KK(a!Ro#fS+Hz9%JA+y~ES7}J1tA8dHR;m{WwU@)y zHv`Ef+CSm=fe>fz1Vc#{{JIowC5R87C^sH0K{(CfjEJP`thlz_l68`ag32_&m~uh^ znmG%14Uv49X^9pRuU&tkya+?}bwI*-0MGorM9=NOJ90i(#$!2pV9ADZbErdre?hw_ zis)N3`z7doJhT~L=83GiHkvk*qTL1Uw^g!#N0^3EkAeVv-5~UrZbi_-C%!s_;E@2# zKmGxwNOB!x_mLR%^*Rc|8QJAbX;agYn2ZGb9|!O*(dV6}OU2j~!&Ny$s4!DO416xC zav2qvi5gn856!|7)|`sG!Q~W(JHvz`FZfjOdkRMOLXfZ=*Fe9;LP^nikA>xSF06_c z=`+w)a`BV85u!j{AXit`B>~pBfx}V7Sw+%fihiXZhEVxM_ru~V0>)rWsb$sZ>9@qe zJi<69p^*He{ftWGsI^T${9p|#FeVtDUJAYv3Bw=gtGAl`C1+?*DK~29ACU0yoH5{o z$+QXnv3#~i1qNWCC<r-?Jvo%fj}50rKiT0@SNAiT28~?VlDfM>Smu*PPdyeELhb)= zk6$JM`rng+QkpO3*rMmcEx17A{9pF?ANo7+4J}9?k9ow0Wu}rbmUfHu>kkcW!59Qk z<Uo_yqD_moVR7jSHWO}EshyF7J)j)!(GLkx?^fSL^%2wo(8`f|8f%xNg>leeZu@wX zb>D$TyzuhwWQ*-!b2&u<g7JXv@$=}fs7Meps1g(3zB0WmW%rdgdG7&sujWtdbzzde zXrndiB=!^`V}5K=bqy*7WfKk_>u7#$(o&{#_<e*|y+N1z9SkknR0XPdny3&%PUNYC zB<Xq>J^Q_A9ZFjx<!IDyWcRn=_aR(e^~rC|VKg+F5XdGDEE^)b9BzQ4%4->}PYS(g zNL<j4lrk|_Y!~^QM84Yg$55HjG#HuGD{U|fM681y+}|h8{Ur>h5JP_I(UsKM)c5JO zHI^RZ%QS@EkQ+5bQ4Tp*IkXs$nL|?^U*Fx{fC<jFSGB*rw8CMAMotv()3WA0qYvKY zS2bcb-w{sMqGny{$GS2Ik_jiLMmHsPw47dQOvW25F>op~pj!>V-vENZpZ*JhAoFr^ zL!1ck;cHJK1?0;sZ{IGZHc2YwZUO4&QJJ;itvbJ+a@?Ncgh^h57KD6(@q9@{4~oTW zB(lL~B9UX;)ww;=zDcC0mWxrfHt3P=PsJI&0%3}7`YaMvGIFn$(=}lX6)uI~aE75J z6?86tOR;<T>4ZowGnc)eHm%bkdN3eFLGsOylWfBIxBwD-v4leuAGi8MMUr%pR8p)G zydU9S9bE^>a_I05@sPX_X-u5nj!e&{?E>J0{Te&&-J$uS4BW^3w#9BiFdi!Nbj=W6 zLDe~@M?L<Xv5e{?-aE@GxUnF}Vd_IX#Z&y3oz0}?sYVuNd|zEv<$6Jy&wx%4J9EVw zNGQkP5Hb#Z4m;IF9iGV|CAjdBU*jsoQ4!iF*rRD&ib{o1CKq+_67h<JI4gT7kc-`= zOL<faQCO~bz8~)KiNbX&0P|vU9`b_tr;j$26_AC3zkD}j|I}(d_GE17R2j@EboDgd zqd2Y83t|_gfZECcQ8y~-(gmP4L{=){41TqV7-|T!GL1WJv}As_+)Jc4s)m06nh{Ba z8es$v%ux62QET|407R9$C@BkC@a8EXY2A9zC6nqO={WtMf4m<sf+TW~pfL6>En5`a zmb1lL@QtDvK?|s>P)bZ68c#8_AD<7(QRe2A%%5huEK4uM(L~jWkIn})KvksmWKz?0 zvVTyiQmu_sJ4s5z88|k@gTmMFeFt)%l1cC0t%i;)`XaA#2eGmzDgXF=_T<t%)pgy4 zfQCzAClYgl=nQhW;;Zn8(U}p8oeT)d57NK`4gji44gb(unT|rOd3cC<wCJCIog@Bp z;SuBPOHvD!^s_V-Arf_@m|&5quuWp8raEo@G2?MmSZq5Zyr~Z-UTVGO<z1y_aRG!b zQU=NuTn+%b8X{jUD&%0A?$p)OJ^SZU@)yM<sgOx`OXz+B-K-Vj#&=losBWB(WzfDl zp-drFt^1e;x`(O8k_C6SFcYYcGSzOO8`j6<0G2&YL352wIqET_(Qhh8-vBe4!+A!j zv*F{wcKE3_;VVhNk}_GAQzj(t6uz<?$bUlSN4v2tt>>{T=du<?MMrdYhTxD8!4Y@i zY9(}U9ho{B;^YhCX}^3toB~XwobZ`M_kEW3Nhc+~a`zy*dGsjijv`@8qgirr6*&eQ zV{ITv+ZbX?+;Lo<x%LKouPXMNZFKgl1S27VUlQRo^gO{Gu|e?J0DdrFDGx_de~PIj zg<>g0C-GU0_jR*L;EU0v{TC7g|1Tis-(K)PPB55@N|IAbL({@7Dfs`xVZc|30^_p9 zSQ<bj{I+3yTd-J)F{X+P-Cuy)tHH_Ku9%<z@r79t5y8T+9`}lycWRf{ZKf$-NBxjE zbd6!tJS>rSO1D6|!n)H`7PilSmqKuC?#Cw~jlCH9S$pfxqn}Wa6%h)xVqHl9_lj>o zbq%57GpfvYLDDzkB$TCTL(0fipDC#~UCi)#pNI<jKR)1jxhnqjI^~$4dtZSQwu_Y3 zxsv3}@6=tN#O}Kv%)0a!0CvV$dfk<&l3C@|4!4om`k7+7qxBpZzT@_4APwl%$HpK` zI99Lc<oJy-`fmC&94_&}&z8`AWYp5r+7gsmqV!)Jo=6oKoq}tHkZEo8h5lA7BE#IO z|59KFU}=ERAYfTV*a5EM0oVQ<@{-`(_3-<XQ1~a4RwEiPZU3@@u-hg!_|i=!Ux^e6 zJp*x&$DT0oOKuaQk81Kwl5#T^lIer$3gi1q(tDm7zIA`aux&T<x4}ijJx-O|&80&Q z0*zT^9WiSM=u_)P5_1=P>l#QF_ysd#p;AoOubtnr@9m#~h*-s|wyyCA6yU2cCAp|z zA8u!wdVTA$g~XZlPx;MiV~OI-gZ3I9{AsUyc<7Ki<oA5O$V%q?ISR{q<%gf@jT2NU z^-WSD?2iad8S+yL;!@hE&Uw)tCA-c>6^k<2;p1IKw_^MG>l4`!2j4AN-O1YqO_h!x zdth&Zz-|mJ(!!XlODi2!l@(~yw$Mf|e2^@jth~i}!28VLj0iOETOMdH^)FirY3<g< zZykTOUTNaQkw?u0Tt+E^ztW5;*ufsL@$;Ok`t;&taf%?6<;hy0Qr-z&Msd{Pn2OXs z|3<Jjm8Uu0algV=F$_Qn4zwXY4x+Nr*qT2S9q?3}V3rR<V^RDIY*HT8_OLGo6=(nt zVKSV#zg8(W*UDCpP3KALikmU)3>k8qtc$CHUL&ZVph?VuPCS?KCX!5fmV%d{@gaka z6qBSZ_?u)PCV91HULXDsT-!ng&0PsSAwM^N#j{eoY(%s?#a9i@V!*EQLa>}pdV;95 zq_*}#HN|}x(mtrA3ZICQ)RTO+mfQ41dNLfzjw|{i!r~r1>%#O-E`B!jUDht@4AN^& zehGxav)dBrl#`Lapzm3M0et4e@8w^_Tf?7P;@lt7yMk;>Q=4l9Z#>TI1^vw3#5oIv zy&8DLyqhpP^Fvv;2B%Vc6~Sr_dq&!aUk5QR8qT$hNuqv>rM85%;QnLBL4YK7J}(iK zg&(6>cbU?;M#M0I%qP9FZwOG;t<hla=hqZQ&jboJvE=w!{cn~RH<AqmsuvR+SdOHB zI-8d!EZ)PQcB<f06GXVmjx35>9pI0JKX=Q%(Ys31VbQjS*<^*F+y39!Ke!_sWH$u8 z^-u))aldV-fUm*QueF5EMbP=h_}sctY<O;T!dLCS+rkxaX+|Br<T0;GU4D2UGH>v_ zfIAj*Zp&Kr)>OwHyh!ssG4T<Co!MO{U%S~*MRHamok-~Z`6`kxAw3+z3;xC%r=-kB z9n|+3oO^CIzYp3K++i(y-q4=5>T{x2nOGLoQi)Fhp+Iy$lCW=-VJXOM0G;aQ?3s<d zU)_Iezgf(aj;z=i*V|9BlluPK%>E!uFr+sf3;NQxg2+~29)>X#h=HrVM=yk!-$5dv zDd-RAda1(othpdkGN*p+FW6=QiP9a<^pwrNyW<mYdB<dLZV1b;tX$-LFfD!|RHW{_ zIr-dYC*jY4k*rQ5<6M0<>8kclZrJxc83kpU40{XyKvav;d{`Q<GPcZ;Pqy42s{}l< zM`2IrsV~F@WeiiE-wyFzXi@fC;p#;eWWG$VV<~gM=w(E@6vH5ij4B>^x}0QUfFs@G zu<d6$@4Dcag^k8k98libk5tFU|LMtX<D-2dklKmQ1sQBtWPt3eLT89^J1qN3A>y=; zT}S)TT{U!g!$fI?AVC_tC{r$-qFw2G%O4d7b*_z<PCq|Bdv#d~ktCK?T$>zlo5pD$ zuEQI8u*K-8Ga+g-rCKFZqw^~!Wby@fENr1X6o4>uBYxhd)R-emNy$r#WlgD*gxz!S z2^A-n#AsN(z%re00Xte?9DQ*k%<3nRw2wRY&u1#hkz$4VlYk^NH_3Miq?$D0z16R} z6wsk-!UR)l%%#P^8N#u@y$V^R9ISg#yLKeyuJHSX^9Lumu5S)==R{2t)e$}$?Yd0N zzrL+5Fi%-iq#*}ess&@R=*oL<;0)O1=Tm_I3LYAF<kBGf_=#=FSX=|GB;kB5>WSc8 z60=GwPKd_q1x~(D+EEn>t=CNNG+15<OWFZcuS2n^Y5F}Z&K_jZhc;oZ8-n1$k}#_b zK(i@-JJ^{OnLKbbQJb|sT>~#OU$DlOx(WSK%v0C%W@If}Wku9#f@d%a-2_p`u>UuG zaB830Z#(P}tz?nR8Om~hfZ>jPw=>IGxM)Z`DL3yg@SKYX#yKq#xG$y=l-f%sZ5KWy zbB5?*M;-KE7b`HKwlsHDq9h|BHhp)k$i@_0dwi$ce?b2_sNd@?OHjggyDQEFLfW(i z^*;Tx0?$l5nYUIfx|}=qpoIAww=jZgI7Rf~9w8U?8rau#a|rlRsFDxkoc!~XZ7yP^ zZemZ%Gc~y+h#e@JB9wa*BK@vb+r(X;OS6FFcjkU=PhO(F>AYGJ<`S(Cf^}nUQl%pb z*|ZUGyaZ8VEJuJU5!e;^Lkp=QW1#LENKyb=<qNzHMevKbWspbkoyOcp#N{n$Dt_M| zq>V7Cxf3aXO@M08W%)7{?PZGIW}ZeZINt!88F~AhFsJqv2Jil=M|slH5|{rAM}&3R zH$;b0kO!I}e-82VyS|`*hCcxQb<+)ERIC_=7x(3_&)))LMOdmMP8z^TYJgycyl*@a z#qFRGhe#>I{~Y~4)`DKI5R%>2;{F-!)0~mj?15Y_UCyH@f&P{roG1CTo{H!dLZ+-v z?@(y%DQD{{(_f%>iNa>`_(qy&X)7!*!vSv6jdPPCWnPN>{Y}xN)KmVvhFinxAX{Ib zMq!pLJtRInUox#yr#b`@68a6REU>Z<oVH7A39E_31mnFquCnHy6H-N?h~V(b)$l%m zJPQ(R5p;pnp~$5D#Z3?2VJX}gz6QF}EyX%Q;FbCzDY`#l)e8NqaB6TU)lo`yHQOn$ z&z1h^%4i`u7W?%m_Ek+!M-)N46kM8220?|o->QpLp12FYrH+T<P$>}MVbb>(*j*v0 z&TtirR@wcO>>>=|`t7jCMh=%J#g=b}uPq(*(|iKArHE8i-b3!i%`6DGFT8Aan6G+m z!4NwG|1w{!a)nljaw@aVe^zTuLDNaNeKg>2dNoGPzK5dR?Bd132mQU9{T!zx4J9Vs z@0l}aMnNo5mj@ydNArnZ)YF5mYghQ+GZl`!u;Ce$^FI{mNThTfz>H<XB`mrwAkTLR z>M70w)f9H~X28xCsQQh9$+&S+7ivpf5!PaLG@VYW6WHz+A=?C(3DXM*W60v#c};;5 zQiq6m<Wbkby!98@`3uwyi2jD6KcfqxC|9DIABQ96Mm-ox7gbt>8B5Q|>55(b4!uBm zhm+6W;cT8?sM4Lxc_uPgnTmupy~=Lr51;Ii?xa%21Hjvv!=2p)2l*pftv`}3R0~k@ zh5R5zy67!}$C<Icbc-sch}t}FQ;YRNwbrx&;RXkh(Niqt;>E5gF-*j+EnZL?p{!lj zkTt2aoY4u5%vzrXXU`pC1zPvc?zzGTu%tA`buanTr7WYNl%}e-ayL1s9fG$Q*-Ec} zVv|Y#1s0K<e=*`b!hCSXn~s2TarQvxhmdYYtFO{K8VXos{TX#(2-+BtygwsGa@qtR zA02dYqw*Ac4YkA-Peu1SIbR=tK<HMYDlt9b_;pMzt`IVb1KCy1a!O^{x}r-CsEn@T zn{_0kL@;8YTpPnEAo=h~PRL8NyJ+wm@-N|jXW?d|PYqcFFr-<dsVAGCzsGVsqF4f{ z#g84_Z)7hwK>0y0*^#kss(x*WIax^lton$7eR#6!{h(yqx3-zraCq%KUr(eYXTg%a zh0Q*NN@ka<7F`AutL?ZGbv|iQaC1H36BYy&EIRX<5&`$;s5Pc~K=sOE-`6XnK+Bm= zFn=Q8aG%|Wjpl_y;st6Aum6>Nu+A;E6%-w%MG~X-`2@xCIn0!Gi6-#XU%&^Cx>f<1 z7?nu45JSgyTtx{XG8rxf!L*n3ARSFQSVPK=bELWcK8$=STz<k3f)h9`7^sYmgo0?0 hza+vZ9!e6wE#(ELiZCBUwK|MM^6Mr~Wb^Ox{{msCH>v;t literal 0 HcmV?d00001 diff --git a/doc/src/angle_dipole.txt b/doc/src/angle_dipole.txt index d91f260d51..34cc8c153c 100644 --- a/doc/src/angle_dipole.txt +++ b/doc/src/angle_dipole.txt @@ -96,16 +96,17 @@ USER-MISC package. See the "Making LAMMPS"_Section_start.html#start_2_3 section for more info on packages. NOTE: In the "Angles" section of the data file, the atom ID 'j' -corresponding to the dipole to restrain must come before the atom ID -of the reference atom 'i'. A third atom ID 'k' must also be provided, -although 'k' is just a 'dummy' atom which can be any atom; it may be -useful to choose a convention (e.g., 'k'='i') and adhere to it. For -example, if ID=1 for the dipolar atom to restrain, and ID=2 for the -reference atom, the corresponding line in the "Angles" section of the -data file would read: X X 1 2 2 +defining the direction of the dipole vector to restrain must come +before the atom ID of the reference atom 'i'. A third atom ID 'k' must +also be provided to comply with the requirement of a valid angle +definition. This atom ID k should be chosen to be that of an atom +bonded to atom 'i' to avoid errors with "lost angle atoms" when running +in parallel. Since the LAMMPS code checks for valid angle definitions, +cannot use the same atom ID of either 'i' or 'j' (this was allowed +and recommended with older LAMMPS versions). The "newton" command for intramolecular interactions must be "on" -(which is the default). +(which is the default except when using some accelerator packages). This angle style should not be used with SHAKE. diff --git a/doc/src/fix_langevin_spin.txt b/doc/src/fix_langevin_spin.txt index 51f085ebdc..b089cd7f58 100644 --- a/doc/src/fix_langevin_spin.txt +++ b/doc/src/fix_langevin_spin.txt @@ -98,5 +98,5 @@ integration fix (e.g. {fix nve/spin}). [(Mayergoyz)] I.D. Mayergoyz, G. Bertotti, C. Serpico (2009). Elsevier (2009) :link(Tranchida2) -[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, +Journal of Computational Physics, (2018). diff --git a/doc/src/fix_nve_spin.txt b/doc/src/fix_nve_spin.txt index 6ccebcebf6..f4b38c270b 100644 --- a/doc/src/fix_nve_spin.txt +++ b/doc/src/fix_nve_spin.txt @@ -73,4 +73,4 @@ instead of "array" is also valid. :link(Tranchida1) [(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +Journal of Computational Physics, (2018). diff --git a/doc/src/pair_atm.txt b/doc/src/pair_atm.txt index 48260c161a..01bbfa7a78 100644 --- a/doc/src/pair_atm.txt +++ b/doc/src/pair_atm.txt @@ -10,16 +10,21 @@ pair_style atm command :h3 [Syntax:] -pair_style atm args = cutoff :pre +pair_style atm cutoff :pre + +cutoff = global cutoff for 3-body interactions (distance units) :ul [Examples:] pair_style 2.5 pair_coeff * * * 0.072 :pre -pair_style hybrid/overlay lj/cut 6.5 atm 2.5 -pair_coeff * * lj/cut 1.0 1.0 -pair_coeff * * atm * 0.072 :pre +pair_style hybrid/overlay lj/cut 6.5 atm 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff 1 1 atm 1 0.064 +pair_coeff 1 1 atm 2 0.080 +pair_coeff 1 2 atm 2 0.100 +pair_coeff 2 2 atm 2 0.125 :pre [Description:] @@ -28,36 +33,104 @@ potential for the energy E of a system of atoms as :c,image(Eqs/pair_atm.jpg) -where r12, r23 and r31 are the distances between the atoms, -gamma1 is included by the sides r12 and r31 -with similar definitions for gamma2 and gamma3, -nu is the three-body interaction strength (energy times distance^9 units). +where nu is the three-body interaction strength, +and the distances between pairs of atoms r12, r23 and r31 +and the angles gamma1, gamma2 and gamma3 +are shown at the diagram: + +:c,image(JPG/pair_atm_dia.jpg) + +There is no \"central\" atom, the interaction is symmetric with respect +to permutation of atom types. + +The {atm} potential is typically used in combination with a two-body +potential using the "pair_style hybrid/overlay"_pair_hybrid.html +command as in the example above. + +The potential is calculated if all three atoms are in the +"neighbor list"_neighbor.html +and the distances between atoms satisfy r12 r23 r31 > cutoff^3. + +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 restart files read by the +"read_restart"_read_restart.html commands: + +K - the type of the third atom +nu (energy/distance^9 units) :ul + +For a single-atom type simulation, only a single entry is required, eg + +pair_coeff 1 1 1 nu :pre + +where all three atoms are of type 1. +For a two-atom type simulation, more pair_coeff commands can be used. +ATM interaction is symmetric with respect to permutation of atoms, +it is necessary to provide pair_coeff command for one permutation. +For example, the command + +pair_coeff 1 1 2 nu :pre -The {atm} is typically used in compination with some two-body potential -using "hybrid/overlay"_pair_hybrid.html style as in an example above. +also implies -The calculations are not undertaken if the distances between atoms satisfy -r12 r23 r31 > curoff^3. Virtual cutoff distance based on a user defined -tolerance tol is not used. +pair_coeff 1 2 1 nu +pair_coeff 2 1 1 nu :pre -The Axilrod-Teller-Muto potential file must contain entries for all the -elements listed in the pair_coeff command. It can also contain -entries for additional elements not being used in a particular -simulation; LAMMPS ignores those entries. +Thus, to specify all ATM interactions between two atom types (eg 1 and 2) +it is sufficient to provide four pair_coeff commands, eg: -For a single-element simulation, only a single entry is required -(e.g. 1 1 1). For a two-element simulation, the file must contain 4 -entries (eg. 1 1 1, 1 1 2, 1 2 2, 2 2 2), that -specify ATM parameters for all combinations of the two elements -interacting in three-body configurations. Thus for 3 elements, 10 -entries would be required, etc. +pair_coeff 1 1 1 nu1 +pair_coeff 1 1 2 nu2 +pair_coeff 1 2 2 nu3 +pair_coeff 2 2 2 nu4 :pre + +For 3 atom types, 10 pair_coeff commands +(eg 111, 112, 113, 122, 123, 133, 222, 223, 233, 333) +will describe all possible ATM interactions, etc. +It is not necessary to provide the pair_coeff commands for interactions +of all combinations of atom types: if some combination is not defined then +there is no ATM interaction for this combination and all its permutations. + +-------------------- + +[Steve:] + +I think a better syntax for the pair coeff command might be this: + +pair_coeff I J v1 v2 ... vN + +when 1,2,...N are the number of atom types defined. +Then there be one pair_coeff command for each type pair, +the same syntax as all other potentials in LAMMPS use. + +[Sergey:] + +The reason for my original pair_coeff command syntax is that +I would like to reserve further arguments for possible extension of +ATM potential in LAMMPS to further terms in the multipole expansion of +many-body dispersion interaction. +For example, the next term would be dipole-dipole-quadrupole, it may be +activated if the next argument of pair_coeff is present +without breaking backward compatibility. + +Also, the command you propose +(i) will not account that the value of nu for different permutations +of atom types is the same, and +(ii) will make the numbering of atom types messy since there is +no requirement to supply the values of nu for all triplets. + +-------------------- :line -[Shift, table, tail correction, rRESPA info]: +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair styles do not support the "pair_modify"_pair_modify.html +mix, shift, table, and tail options. -This pair style does not support the "pair_modify"_pair_modify.html -shift, table, and tail options. +This pair style writes its information to "binary restart +files"_restart.html, so pair_style and pair_coeff commands do not need +to be specified in an input script that reads a restart file. This pair style can only be used via the {pair} keyword of the "run_style respa"_run_style.html command. It does not support the @@ -68,8 +141,8 @@ This pair style can only be used via the {pair} keyword of the [Restrictions:] This pair style is part of the MANYBODY package. It is only enabled -if LAMMPS was built with that package. See -the "Making LAMMPS"_Section_start.html#start_3 section for more info. +if LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. [Related commands:] @@ -82,4 +155,4 @@ the "Making LAMMPS"_Section_start.html#start_3 section for more info. :link(Axilrod) [(Axilrod)] Axilrod and Teller, J Chem Phys, 11, 299 (1943); -Muto, Nippon Sugaku Butsuri Gakkwaishi 17, 629 (1943). +Muto, Nippon Sugaku-Buturigakkwaishi 17, 629 (1943). diff --git a/doc/src/pair_spin_dmi.txt b/doc/src/pair_spin_dmi.txt index 9fe53df18a..24877906f3 100644 --- a/doc/src/pair_spin_dmi.txt +++ b/doc/src/pair_spin_dmi.txt @@ -63,4 +63,4 @@ See the "Making LAMMPS"_Section_start.html#start_3 section for more info. :link(Tranchida5) [(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +Journal of Computational Physics, (2018). diff --git a/doc/src/pair_spin_exchange.txt b/doc/src/pair_spin_exchange.txt index 97b6d0b34f..ad3357cb5e 100644 --- a/doc/src/pair_spin_exchange.txt +++ b/doc/src/pair_spin_exchange.txt @@ -79,4 +79,4 @@ See the "Making LAMMPS"_Section_start.html#start_3 section for more info. :link(Tranchida3) [(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +Journal of Computational Physics, (2018). diff --git a/doc/src/pair_spin_magelec.txt b/doc/src/pair_spin_magelec.txt index 0185a5abb2..8ba24c46af 100644 --- a/doc/src/pair_spin_magelec.txt +++ b/doc/src/pair_spin_magelec.txt @@ -70,4 +70,4 @@ See the "Making LAMMPS"_Section_start.html#start_3 section for more info. :link(Tranchida4) [(Tranchida)] Tranchida, Plimpton, Thibaudeau, and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +Journal of Computational Physics, (2018). diff --git a/doc/src/pair_spin_neel.txt b/doc/src/pair_spin_neel.txt index f7c9608a93..8551f8d636 100644 --- a/doc/src/pair_spin_neel.txt +++ b/doc/src/pair_spin_neel.txt @@ -78,4 +78,4 @@ See the "Making LAMMPS"_Section_start.html#start_3 section for more info. :link(Tranchida6) [(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -arXiv preprint arXiv:1801.10233, (2018). +Journal of Computational Physics, (2018). diff --git a/doc/src/run_style.txt b/doc/src/run_style.txt index ba836a07dd..7717ede86f 100644 --- a/doc/src/run_style.txt +++ b/doc/src/run_style.txt @@ -138,13 +138,19 @@ iterations of level 1 for a single iteration of level 2, N2 is the iterations of level 2 per iteration of level 3, etc. N-1 looping parameters must be specified. -The "timestep"_timestep.html command sets the timestep for the -outermost rRESPA level. Thus if the example command above for a -4-level rRESPA had an outer timestep of 4.0 fmsec, the inner timestep -would be 8x smaller or 0.5 fmsec. All other LAMMPS commands that -specify number of timesteps (e.g. "neigh_modify"_neigh_modify.html -parameters, "dump"_dump.html every N timesteps, etc) refer to the -outermost timesteps. +Thus with a 4-level respa setting of "2 2 2" for the 3 loop factors, +you could choose to have bond interactions computed 8x per large +timestep, angle interactions computed 4x, pair interactions computed +2x, and long-range interactions once per large timestep. + +The "timestep"_timestep.html command sets the large timestep for the +outermost rRESPA level. Thus if the 3 loop factors are "2 2 2" for +4-level rRESPA, and the outer timestep is set to 4.0 fmsec, then the +inner timestep would be 8x smaller or 0.5 fmsec. All other LAMMPS +commands that specify number of timesteps (e.g. "thermo"_thermo.html +for thermo output every N steps, "neigh_modify +delay/every"_neigh_modify.html parameters, "dump"_dump.html every N +steps, etc) refer to the outermost timesteps. The rRESPA keywords enable you to specify at what level of the hierarchy various forces will be computed. If not specified, the @@ -167,11 +173,17 @@ have their force go ramped to 0.0 so the overlap with the next regime compute forces for all pairs from 5.0 outward, with those from 5.0 to 6.0 having their value ramped in an inverse manner. -Only some pair potentials support the use of the {inner} and {middle} -and {outer} keywords. If not, only the {pair} keyword can be used -with that pair style, meaning all pairwise forces are computed at the -same rRESPA level. See the doc pages for individual pair styles for -details.i +Note that you can use {inner} and {outer} without using {middle} to +split the pairwise computations into two portions instead of three. +Unless you are using a very long pairwise cutoff, a 2-way split is +often faster than a 3-way split, since it avoids too much duplicate +computation of pairwise interactions near the intermediate cutoffs. + +Also note that only a few pair potentials support the use of the +{inner} and {middle} and {outer} keywords. If not, only the {pair} +keyword can be used with that pair style, meaning all pairwise forces +are computed at the same rRESPA level. See the doc pages for +individual pair styles for details. Another option for using pair potentials with rRESPA is with the {hybrid} keyword, which requires the use of the "pair_style hybrid or @@ -238,12 +250,24 @@ roughly a 1.5 fold speedup over the {verlet} style with SHAKE and a For non-biomolecular simulations, the {respa} style can be advantageous if there is a clear separation of time scales - fast and -slow modes in the simulation. Even a LJ system can benefit from -rRESPA if the interactions are divided by the inner, middle and outer -keywords. A 2-fold or more speedup can be obtained while maintaining -good energy conservation. In real units, for a pure LJ fluid at -liquid density, with a sigma of 3.0 angstroms, and epsilon of 0.1 -Kcal/mol, the following settings seem to work well: +slow modes in the simulation. For example, a system of slowly-moving +charged polymer chains could be setup as follows: + +timestep 4.0 +run_style respa 2 8 :pre + +This is two-level rRESPA with an 8x difference between the short and +long timesteps. The bonds, angles, dihedrals will be computed every +0.5 fs (assuming real units), while the pair and kspace interactions +will be computed once every 4 fs. These are the default settings for +each kind of interaction, so no additional keywords are necessary. + +Even a LJ system can benefit from rRESPA if the interactions are +divided by the inner, middle and outer keywords. A 2-fold or more +speedup can be obtained while maintaining good energy conservation. +In real units, for a pure LJ fluid at liquid density, with a sigma of +3.0 angstroms, and epsilon of 0.1 Kcal/mol, the following settings +seem to work well: timestep 36.0 run_style respa 3 3 4 inner 1 3.0 4.0 middle 2 6.0 7.0 outer 3 :pre @@ -271,9 +295,9 @@ more instructions on how to use the accelerated styles effectively. [Restrictions:] The {verlet/split} style can only be used if LAMMPS was built with the -REPLICA package. Correspondingly the {respa/omp} style is available only -if the USER-OMP package was included. See the "Making LAMMPS"_Section_start.html#start_3 -section for more info on packages. +REPLICA package. Correspondingly the {respa/omp} style is available +only if the USER-OMP package was included. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info on packages. Whenever using rRESPA, the user should experiment with trade-offs in speed and accuracy for their system, and verify that they are @@ -287,6 +311,17 @@ conserving energy to adequate precision. run_style verlet :pre +For run_style respa, the default assignment of interactions +to rRESPA levels is as follows: + +bond forces = level 1 (innermost loop) +angle forces = same level as bond forces +dihedral forces = same level as angle forces +improper forces = same level as dihedral forces +pair forces = leven N (outermost level) +kspace forces = same level as pair forces +inner, middle, outer forces = no default :ul + :line :link(Tuckerman3) diff --git a/doc/src/set.txt b/doc/src/set.txt index 4757d1c575..d05660dc42 100644 --- a/doc/src/set.txt +++ b/doc/src/set.txt @@ -17,6 +17,7 @@ ID = atom ID range or type range or mol ID range or group ID or region ID :l one or more keyword/value pairs may be appended :l keyword = {type} or {type/fraction} or {mol} or {x} or {y} or {z} or \ {charge} or {dipole} or {dipole/random} or {quat} or \ + {spin} or {spin/random} or {quat} or \ {quat/random} or {diameter} or {shape} or \ {length} or {tri} or {theta} or {theta/random} or \ {angmom} or {omega} or \ @@ -43,6 +44,13 @@ keyword = {type} or {type/fraction} or {mol} or {x} or {y} or {z} or \ {dipole/random} value = seed Dlen seed = random # seed (positive integer) for dipole moment orientations Dlen = magnitude of dipole moment (dipole units) + {spin} values = g x y z + g = magnitude of magnetic spin vector (in Bohr magneton's unit) + x,y,z = orientation of magnetic spin vector + any of x,y,z can be an atom-style variable (see below) + {spin/random} value = seed Dlen + seed = random # seed (positive integer) for magnetic spin orientations + Dlen = magnitude of magnetic spin vector (in Bohr magneton's unit) {quat} values = a b c theta a,b,c = unit vector to rotate particle around via right-hand rule theta = rotation angle (degrees) @@ -232,6 +240,15 @@ the orientation of a particular atom is the same, regardless of how many processors are being used. This keyword does not allow use of an atom-style variable. +Keyword {spin} uses the specified g value to set the magnitude of the +magnetic spin vectors, and the x,y,z values as components of a vector +to set as the orientation of the magnetic spin vectors of the selected +atoms. + +Keyword {spin/random} randomizes the orientation of the magnetic spin +vectors for the selected atoms and sets the magnitude of each to the +specified {Dlen} value. + Keyword {quat} uses the specified values to create a quaternion (4-vector) that represents the orientation of the selected atoms. The particles must define a quaternion for their orientation diff --git a/examples/SPIN/README b/examples/SPIN/README new file mode 100644 index 0000000000..5ad252e7f2 --- /dev/null +++ b/examples/SPIN/README @@ -0,0 +1,20 @@ +This directory contains examples and applications of the SPIN package +===================================================================== + +- the iron, cobalt_hcp, cobalt_fcc and nickel directories provide +examples of spin-lattice calculations. + +- the bfo repository provides an example of spin dynamics calculation +performed on a fixed lattice, and applied to the multiferroic +material bismuth-oxide. + +- the read_restart directory provides examples allowing to write or +read data files, and restart magneto-mechanical simulations. + +- vizualization of the dump files can be achieved using Ovito or +VMD. See the vmd repository for help vizualizing results with VMD. + +** Note, the aim of this repository is mainly to provide users with +examples. Better values and tuning of the magnetic and mechanical +interactions can be achieved for more accurate materials +simulations. ** diff --git a/lib/gpu/Nvidia.makefile_multi b/lib/gpu/Nvidia.makefile_multi index 5fb35cce3c..94cfd4af6b 100644 --- a/lib/gpu/Nvidia.makefile_multi +++ b/lib/gpu/Nvidia.makefile_multi @@ -79,7 +79,10 @@ OBJS = $(OBJ_DIR)/lal_atom.o $(OBJ_DIR)/lal_ans.o \ $(OBJ_DIR)/lal_lj_cubic.o $(OBJ_DIR)/lal_lj_cubic_ext.o \ $(OBJ_DIR)/lal_ufm.o $(OBJ_DIR)/lal_ufm_ext.o \ $(OBJ_DIR)/lal_dipole_long_lj.o $(OBJ_DIR)/lal_dipole_long_lj_ext.o \ - $(OBJ_DIR)/lal_lj_expand_coul_long.o $(OBJ_DIR)/lal_lj_expand_coul_long_ext.o + $(OBJ_DIR)/lal_lj_expand_coul_long.o $(OBJ_DIR)/lal_lj_expand_coul_long_ext.o \ + $(OBJ_DIR)/lal_coul_long_cs.o $(OBJ_DIR)/lal_coul_long_cs_ext.o \ + $(OBJ_DIR)/lal_born_coul_long_cs.o $(OBJ_DIR)/lal_born_coul_long_cs_ext.o \ + $(OBJ_DIR)/lal_born_coul_wolf_cs.o $(OBJ_DIR)/lal_born_coul_wolf_cs_ext.o CBNS = $(OBJ_DIR)/device.cubin $(OBJ_DIR)/device_cubin.h \ $(OBJ_DIR)/atom.cubin $(OBJ_DIR)/atom_cubin.h \ @@ -137,7 +140,10 @@ CBNS = $(OBJ_DIR)/device.cubin $(OBJ_DIR)/device_cubin.h \ $(OBJ_DIR)/lj_cubic.cubin $(OBJ_DIR)/lj_cubic_cubin.h \ $(OBJ_DIR)/ufm.cubin $(OBJ_DIR)/ufm_cubin.h \ $(OBJ_DIR)/dipole_long_lj.cubin $(OBJ_DIR)/dipole_long_lj_cubin.h \ - $(OBJ_DIR)/lj_expand_coul_long.cubin $(OBJ_DIR)/lj_expand_coul_long_cubin.h + $(OBJ_DIR)/lj_expand_coul_long.cubin $(OBJ_DIR)/lj_expand_coul_long_cubin.h \ + $(OBJ_DIR)/coul_long_cs.cubin $(OBJ_DIR)/coul_long_cs_cubin.h \ + $(OBJ_DIR)/born_coul_long_cs.cubin $(OBJ_DIR)/born_coul_long_cs_cubin.h \ + $(OBJ_DIR)/born_coul_wolf_cs.cubin $(OBJ_DIR)/born_coul_wolf_cs_cubin.h all: $(OBJ_DIR) $(GPU_LIB) $(EXECS) @@ -837,6 +843,42 @@ $(OBJ_DIR)/lal_lj_expand_coul_long.o: $(ALL_H) lal_lj_expand_coul_long.h lal_lj_ $(OBJ_DIR)/lal_lj_expand_coul_long_ext.o: $(ALL_H) lal_lj_expand_coul_long.h lal_lj_expand_coul_long_ext.cpp lal_base_charge.h $(CUDR) -o $@ -c lal_lj_expand_coul_long_ext.cpp -I$(OBJ_DIR) +$(OBJ_DIR)/coul_long_cs.cubin: lal_coul_long_cs.cu lal_precision.h lal_preprocessor.h + $(CUDA) --fatbin -DNV_KERNEL -o $@ lal_coul_long_cs.cu + +$(OBJ_DIR)/coul_long_cs_cubin.h: $(OBJ_DIR)/coul_long_cs.cubin $(OBJ_DIR)/coul_long_cs.cubin + $(BIN2C) -c -n coul_long_cs $(OBJ_DIR)/coul_long_cs.cubin > $(OBJ_DIR)/coul_long_cs_cubin.h + +$(OBJ_DIR)/lal_coul_long_cs.o: $(ALL_H) lal_coul_long_cs.h lal_coul_long_cs.cpp $(OBJ_DIR)/coul_long_cs_cubin.h $(OBJ_DIR)/lal_base_charge.o $(OBJ_DIR)/lal_coul_long.o + $(CUDR) -o $@ -c lal_coul_long_cs.cpp -I$(OBJ_DIR) + +$(OBJ_DIR)/lal_coul_long_cs_ext.o: $(ALL_H) lal_coul_long_cs.h lal_coul_long_cs_ext.cpp lal_coul_long.h + $(CUDR) -o $@ -c lal_coul_long_cs_ext.cpp -I$(OBJ_DIR) + +$(OBJ_DIR)/born_coul_long_cs.cubin: lal_born_coul_long_cs.cu lal_precision.h lal_preprocessor.h + $(CUDA) --fatbin -DNV_KERNEL -o $@ lal_born_coul_long_cs.cu + +$(OBJ_DIR)/born_coul_long_cs_cubin.h: $(OBJ_DIR)/born_coul_long_cs.cubin $(OBJ_DIR)/born_coul_long_cs.cubin + $(BIN2C) -c -n born_coul_long_cs $(OBJ_DIR)/born_coul_long_cs.cubin > $(OBJ_DIR)/born_coul_long_cs_cubin.h + +$(OBJ_DIR)/lal_born_coul_long_cs.o: $(ALL_H) lal_born_coul_long_cs.h lal_born_coul_long_cs.cpp $(OBJ_DIR)/born_coul_long_cs_cubin.h $(OBJ_DIR)/lal_base_charge.o $(OBJ_DIR)/lal_born_coul_long.o + $(CUDR) -o $@ -c lal_born_coul_long_cs.cpp -I$(OBJ_DIR) + +$(OBJ_DIR)/lal_born_coul_long_cs_ext.o: $(ALL_H) lal_born_coul_long_cs.h lal_born_coul_long_cs_ext.cpp lal_born_coul_long.h + $(CUDR) -o $@ -c lal_born_coul_long_cs_ext.cpp -I$(OBJ_DIR) + +$(OBJ_DIR)/born_coul_wolf_cs.cubin: lal_born_coul_wolf_cs.cu lal_precision.h lal_preprocessor.h + $(CUDA) --fatbin -DNV_KERNEL -o $@ lal_born_coul_wolf_cs.cu + +$(OBJ_DIR)/born_coul_wolf_cs_cubin.h: $(OBJ_DIR)/born_coul_wolf_cs.cubin $(OBJ_DIR)/born_coul_wolf_cs.cubin + $(BIN2C) -c -n born_coul_wolf_cs $(OBJ_DIR)/born_coul_wolf_cs.cubin > $(OBJ_DIR)/born_coul_wolf_cs_cubin.h + +$(OBJ_DIR)/lal_born_coul_wolf_cs.o: $(ALL_H) lal_born_coul_wolf_cs.h lal_born_coul_wolf_cs.cpp $(OBJ_DIR)/born_coul_wolf_cs_cubin.h $(OBJ_DIR)/lal_base_charge.o $(OBJ_DIR)/lal_born_coul_wolf.o + $(CUDR) -o $@ -c lal_born_coul_wolf_cs.cpp -I$(OBJ_DIR) + +$(OBJ_DIR)/lal_born_coul_wolf_cs_ext.o: $(ALL_H) lal_born_coul_wolf_cs.h lal_born_coul_wolf_cs_ext.cpp lal_born_coul_wolf.h + $(CUDR) -o $@ -c lal_born_coul_wolf_cs_ext.cpp -I$(OBJ_DIR) + $(BIN_DIR)/nvc_get_devices: ./geryon/ucl_get_devices.cpp $(NVD_H) $(CUDR) -o $@ ./geryon/ucl_get_devices.cpp -DUCL_CUDADR $(CUDA_LIB) -lcuda diff --git a/src/MAKE/MACHINES/Makefile.theta b/src/MAKE/MACHINES/Makefile.theta new file mode 100644 index 0000000000..cad5a03b42 --- /dev/null +++ b/src/MAKE/MACHINES/Makefile.theta @@ -0,0 +1,133 @@ +# knl = Flags for Knights Landing Xeon Phi Processor,Intel Compiler/MPI,MKL FFT +# module load perftools-base perftools +# make theta -j 8 +# pat_build -g mpi -u ./lmp_theta + +SHELL = /bin/sh + +# --------------------------------------------------------------------- +# compiler/linker settings +# specify flags and libraries needed for your compiler + +CC = CC -mkl +#OPTFLAGS = -O0 +OPTFLAGS = -xMIC-AVX512 -O3 -fp-model fast=2 -no-prec-div -qoverride-limits +CCFLAGS = -g -qopenmp -DLAMMPS_MEMALIGN=64 -qno-offload \ + -fno-alias -ansi-alias -restrict $(OPTFLAGS) +#CCFLAGS += -DLMP_INTEL_NO_TBB +#CCFLAGS += -DLAMMPS_BIGBIG +#CCFLAGS += -D_USE_PAPI +#CCFLAGS += -D_USE_CRAYPAT_API +SHFLAGS = -fPIC +DEPFLAGS = -M + +LINK = $(CC) +LINKFLAGS = -g -qopenmp $(OPTFLAGS) +LINKFLAGS += -dynamic +LIB = +#LIB += -L${TBBROOT}/lib/intel64/gcc4.7 -ltbbmalloc +LIB += -ltbbmalloc +#LIB += /soft/debuggers/forge-7.0-2017-02-16/lib/64/libdmallocthcxx.a -zmuldefs +SIZE = size + +ARCHIVE = ar +ARFLAGS = -rc +SHLIBFLAGS = -shared + +# --------------------------------------------------------------------- +# LAMMPS-specific settings, all OPTIONAL +# specify settings for LAMMPS features you will use +# if you change any -D setting, do full re-compile after "make clean" + +# LAMMPS ifdef settings +# see possible settings in Section 2.2 (step 4) of manual + +LMP_INC = -DLAMMPS_GZIP #-DLAMMPS_JPEG + +# MPI library +# see discussion in Section 2.2 (step 5) of manual +# MPI wrapper compiler/linker can provide this info +# can point to dummy MPI library in src/STUBS as in Makefile.serial +# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts +# INC = path for mpi.h, MPI compiler settings +# PATH = path for MPI library +# LIB = name of MPI library + +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = +MPI_LIB = + +# FFT library +# see discussion in Section 2.2 (step 6) of manaul +# can be left blank to use provided KISS FFT library +# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings +# PATH = path for FFT library +# LIB = name of FFT library + +FFT_INC = -DFFT_MKL -DFFT_SINGLE +FFT_PATH = +FFT_LIB = -L$(MKLROOT)/lib/intel64/ -Wl,--start-group -lmkl_intel_ilp64 \ + -lmkl_intel_thread -lmkl_core -Wl,--end-group + +# JPEG and/or PNG library +# see discussion in Section 2.2 (step 7) of manual +# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC +# INC = path(s) for jpeglib.h and/or png.h +# PATH = path(s) for JPEG library and/or PNG library +# LIB = name(s) of JPEG library and/or PNG library + +JPG_INC = +JPG_PATH = +JPG_LIB = + +# --------------------------------------------------------------------- +# build rules and dependencies +# do not edit this section + +include Makefile.package.settings +include Makefile.package + +EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) +EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) + +# Path to src files + +vpath %.cpp .. +vpath %.h .. + +# Link target + +$(EXE): $(OBJ) + $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) + $(SIZE) $(EXE) + +# Library targets + +lib: $(OBJ) + $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) + +shlib: $(OBJ) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + +# Compilation rules + +%.o:%.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< + +%.d:%.cpp + $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ + +%.o:%.cu + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< + +# Individual dependencies + +depend : fastdep.exe $(SRC) + @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 + +fastdep.exe: ../DEPEND/fastdep.c + icc -O -o $@ $< + +sinclude .depend diff --git a/src/MANYBODY/pair_atm.cpp b/src/MANYBODY/pair_atm.cpp index 0286c3ed1e..0db076acd0 100644 --- a/src/MANYBODY/pair_atm.cpp +++ b/src/MANYBODY/pair_atm.cpp @@ -49,8 +49,8 @@ PairATM::PairATM(LAMMPS *lmp) : Pair(lmp) if (lmp->citeme) lmp->citeme->add(cite_atm_package); single_enable = 0; - restartinfo = 0; - one_coeff = 1; + restartinfo = 1; + one_coeff = 0; manybody_flag = 1; } @@ -78,6 +78,7 @@ void PairATM::compute(int eflag, int vflag) double xi,yi,zi,evdwl; double rij2,rik2,rjk2,r6; double rij[3],rik[3],rjk[3],fj[3],fk[3]; + double nu_local; int *ilist,*jlist,*numneigh,**firstneigh; evdwl = 0.0; @@ -128,8 +129,10 @@ void PairATM::compute(int eflag, int vflag) r6 = rij2*rik2*rjk2; if (r6 > cut_sixth) continue; - interaction_ddd(nu[type[i]][type[j]][type[k]], - r6,rij2,rik2,rjk2,rij,rik,rjk,fj,fk,eflag,evdwl); + nu_local = nu[type[i]][type[j]][type[k]]; + if (nu_local == 0.0) continue; + interaction_ddd(nu_local, + r6,rij2,rik2,rjk2,rij,rik,rjk,fj,fk,eflag,evdwl); f[i][0] -= fj[0] + fk[0]; f[i][1] -= fj[1] + fk[1]; @@ -169,6 +172,12 @@ void PairATM::coeff(int narg, char **arg) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); + int n = atom->ntypes; + for (int i = 0; i <= n; i++) + for (int j = 0; j <= n; j++) + for (int k = 0; k <= n; k++) + nu[i][j][k] = 0.0; + int ilo,ihi,jlo,jhi,klo,khi; force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); @@ -229,7 +238,9 @@ void PairATM::write_restart(FILE *fp) 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]) for (k = i; k <= atom->ntypes; k++) fwrite(&nu[i][j][k],sizeof(double),1,fp); + if (setflag[i][j]) + for (k = i; k <= atom->ntypes; k++) + fwrite(&nu[i][j][k],sizeof(double),1,fp); } } } diff --git a/src/MANYBODY/pair_atm.h b/src/MANYBODY/pair_atm.h index b5bfc64010..45a6cda344 100644 --- a/src/MANYBODY/pair_atm.h +++ b/src/MANYBODY/pair_atm.h @@ -11,10 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- - Contributing author: Sergey Lishchuk -------------------------------------------------------------------------- */ - #ifdef PAIR_CLASS PairStyle(atm,PairATM) @@ -46,9 +42,9 @@ class PairATM : public Pair { double cut_global, cut_sixth; double ***nu; - protected: - virtual void allocate(); - void interaction_ddd(double, double, double, double, double, double *, double *, double *, double *, double *, int, double &); + void allocate(); + void interaction_ddd(double, double, double, double, double, double *, + double *, double *, double *, double *, int, double &); }; } diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 4871fe0c40..8b47eff624 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -20,12 +20,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "atom_vec_spin.h" #include "comm.h" @@ -54,7 +54,7 @@ AtomVecSpin::AtomVecSpin(LAMMPS *lmp) : AtomVec(lmp) size_data_atom = 9; size_data_vel = 4; xcol_data = 4; - + atom->sp_flag = 1; } diff --git a/src/SPIN/compute_spin.cpp b/src/SPIN/compute_spin.cpp index 54818a9b70..b67f62d53d 100644 --- a/src/SPIN/compute_spin.cpp +++ b/src/SPIN/compute_spin.cpp @@ -18,11 +18,11 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ #include <mpi.h> -#include <string.h> +#include <cstring> #include "atom.h" #include "compute_spin.h" #include "domain.h" diff --git a/src/SPIN/fix_langevin_spin.cpp b/src/SPIN/fix_langevin_spin.cpp index 97b33197ce..cb34465482 100644 --- a/src/SPIN/fix_langevin_spin.cpp +++ b/src/SPIN/fix_langevin_spin.cpp @@ -18,13 +18,13 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ #include <mpi.h> -#include <math.h> -#include <string.h> -#include <stdlib.h> +#include <cmath> +#include <cstring> +#include <cstdlib> #include "atom.h" #include "atom_vec_ellipsoid.h" diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index d91636af58..b75f03212a 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdio.h> -#include <string.h> +#include <cmath> +#include <cstdio> +#include <cstring> #include "atom.h" #include "atom_vec.h" @@ -59,8 +59,9 @@ static const char cite_fix_nve_spin[] = "title={Massively parallel symplectic algorithm for coupled magnetic spin " "dynamics and molecular dynamics},\n" "author={Tranchida, J and Plimpton, SJ and Thibaudeau, P and Thompson, AP},\n" - "journal={arXiv preprint arXiv:1801.10233},\n" - "year={2018}\n" + "journal={Journal of Computational Physics},\n" + "year={2018},\n" + "publisher={Elsevier}\n" "}\n\n"; enum{NONE}; diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index eedf0becb7..b908478952 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -18,13 +18,13 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdio> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "domain.h" diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index acb7ffe548..398206b26e 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "comm.h" diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 07ae684939..b792969c5d 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "comm.h" diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 7b05d7337e..1b7b36b6db 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "comm.h" diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index e9e7c1fb3f..315b691d17 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "comm.h" @@ -436,9 +436,9 @@ void PairSpinMagelec::compute_magelec_mech(int i, int j, double fi[3], double sp meiy *= ME_mech[itype][jtype]; meiz *= ME_mech[itype][jtype]; - fi[0] = meiy*vz - meiz*vy; - fi[1] = meiz*vx - meix*vz; - fi[2] = meix*vy - meiy*vx; + fi[0] += meiy*vz - meiz*vy; + fi[1] += meiz*vx - meix*vz; + fi[2] += meix*vy - meiy*vx; } diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index d74db638bd..0daafad756 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -18,12 +18,12 @@ Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. + and molecular dynamics. Journal of Computational Physics. ------------------------------------------------------------------------- */ -#include <math.h> -#include <stdlib.h> -#include <string.h> +#include <cmath> +#include <cstdlib> +#include <cstring> #include "atom.h" #include "comm.h" diff --git a/src/balance.cpp b/src/balance.cpp index 86deb55b47..7dd13e8766 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -350,13 +350,13 @@ void Balance::command(int narg, char **arg) domain->set_local_box(); // move particles to new processors via irregular() + // set disable = 0, so weights migrate with atoms for imbfinal calculation if (domain->triclinic) domain->x2lamda(atom->nlocal); Irregular *irregular = new Irregular(lmp); if (wtflag) fixstore->disable = 0; if (style == BISECTION) irregular->migrate_atoms(1,1,rcb->sendproc); else irregular->migrate_atoms(1); - if (wtflag) fixstore->disable = 1; delete irregular; if (domain->triclinic) domain->lamda2x(atom->nlocal); @@ -377,9 +377,11 @@ void Balance::command(int narg, char **arg) } // imbfinal = final imbalance + // set disable = 1, so weights no longer migrate with atoms double maxfinal; double imbfinal = imbalance_factor(maxfinal); + if (wtflag) fixstore->disable = 1; // stats output @@ -540,6 +542,8 @@ void Balance::weight_storage(char *prefix) fixstore = (FixStore *) modify->fix[modify->nfix-1]; } else fixstore = (FixStore *) modify->fix[ifix]; + // do not carry weights with atoms during normal atom migration + fixstore->disable = 1; if (prefix) delete [] fixargs[0]; diff --git a/src/fix_balance.cpp b/src/fix_balance.cpp index b2f545c73f..e748e0ae31 100644 --- a/src/fix_balance.cpp +++ b/src/fix_balance.cpp @@ -114,6 +114,7 @@ FixBalance::FixBalance(LAMMPS *lmp, int narg, char **arg) : if (nevery) force_reneighbor = 1; lastbalance = -1; + next_reneighbor = -1; // compute initial outputs @@ -248,6 +249,10 @@ void FixBalance::pre_neighbor() if (!pending) return; imbfinal = balance->imbalance_factor(maxloadperproc); pending = 0; + + // set disable = 1, so weights no longer migrate with atoms + + if (wtflag) balance->fixstore->disable = 1; } /* ---------------------------------------------------------------------- @@ -275,21 +280,23 @@ void FixBalance::rebalance() // reset proc sub-domains // check and warn if any proc's subbox is smaller than neigh skin - // since may lead to lost atoms in exchange() + // since may lead to lost atoms in comm->exchange() if (domain->triclinic) domain->set_lamda_box(); domain->set_local_box(); domain->subbox_too_small_check(neighbor->skin); // move atoms to new processors via irregular() - // only needed if migrate_check() says an atom moves to far + // for non-RCB only needed if migrate_check() says an atom moves too far // else allow caller's comm->exchange() to do it + // set disable = 0, so weights migrate with atoms + // important to delay disable = 1 until after pre_neighbor imbfinal calc + // b/c atoms may migrate again in comm->exchange() if (domain->triclinic) domain->x2lamda(atom->nlocal); if (wtflag) balance->fixstore->disable = 0; if (lbstyle == BISECTION) irregular->migrate_atoms(0,1,sendproc); else if (irregular->migrate_check()) irregular->migrate_atoms(); - if (wtflag) balance->fixstore->disable = 1; if (domain->triclinic) domain->lamda2x(atom->nlocal); // invoke KSpace setup_grid() to adjust to new proc sub-domains diff --git a/src/fix_store.cpp b/src/fix_store.cpp index 3b1f3dca77..350e120972 100644 --- a/src/fix_store.cpp +++ b/src/fix_store.cpp @@ -154,8 +154,6 @@ void FixStore::reset_global(int nrow_caller, int ncol_caller) if (vecflag) memory->create(vstore,nrow,"fix/store:vstore"); else memory->create(astore,nrow,ncol,"fix/store:astore"); memory->create(rbuf,nrow*ncol+2,"fix/store:rbuf"); - - // printf("AAA HOW GET HERE\n"); } /* ---------------------------------------------------------------------- diff --git a/src/reset_ids.cpp b/src/reset_ids.cpp index 8a33cd535b..fd898bd3ab 100644 --- a/src/reset_ids.cpp +++ b/src/reset_ids.cpp @@ -16,6 +16,7 @@ #include "atom_vec.h" #include "domain.h" #include "comm.h" +#include "special.h" #include "memory.h" #include "error.h" @@ -44,7 +45,7 @@ void ResetIDs::command(int narg, char **arg) } // create an atom map if one doesn't exist already - + int mapflag = 0; if (atom->map_style == 0) { mapflag = 1; @@ -93,7 +94,7 @@ void ResetIDs::command(int narg, char **arg) // forward_comm_array acquires new IDs for ghost atoms double **newIDs; - memory->create(newIDs,nall,1,"reset_ids:newIDs"); + memory->create(newIDs,nall,1,"reset_ids:newIDs"); for (int i = 0; i < nlocal; i++) { newIDs[i][0] = tag[i]; @@ -105,7 +106,7 @@ void ResetIDs::command(int narg, char **arg) // loop over bonds, angles, etc and reset IDs in stored topology arrays // only necessary for molecular = 1, not molecular = 2 // badcount = atom IDs that could not be found - + int badcount = 0; if (atom->molecular == 1) { @@ -232,8 +233,15 @@ void ResetIDs::command(int narg, char **arg) atom->map_init(); atom->map_set(); + // need to update exclusions with new atom IDs + + if (atom->molecular == 1) { + Special special(lmp); + special.build(); + } + // delete temporary atom map - + if (mapflag) { atom->map_delete(); atom->map_style = 0; -- GitLab