From 7e00acce53a5bd131d5a4f5cf1814889e8fb1cdb Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Tue, 30 Apr 2019 09:50:12 -0400 Subject: [PATCH] Update Colvars library to version 2019-04-26 The following is list of relevant issues fixed and improvements: Fix forces and missing output of runtime histogram for histogramRestraint https://github.com/Colvars/colvars/pull/246 Use fix_modify to add configuration to Colvars: https://github.com/Colvars/colvars/pull/216 Fix componentCoeff and name not working with orientationAngle components: https://github.com/Colvars/colvars/issues/213 Fix 1-timestep offset with extendedLagrangian: https://github.com/Colvars/colvars/pull/210 Changes to improve compiler support: https://github.com/Colvars/colvars/pull/203 Fix ignored anisotropic cutoff3 for groupCoordNum: https://github.com/Colvars/colvars/pull/202 New dipoleMagnitude variable: https://github.com/Colvars/colvars/pull/198 Parser improvements: https://github.com/Colvars/colvars/pull/196 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 621677 -> 628031 bytes doc/src/fix_colvars.txt | 10 + lib/colvars/colvar.cpp | 433 +++++++++++------ lib/colvars/colvar.h | 35 +- lib/colvars/colvar_UIestimator.h | 93 ++-- lib/colvars/colvaratoms.cpp | 143 ++++-- lib/colvars/colvaratoms.h | 52 +- lib/colvars/colvarbias.cpp | 89 +++- lib/colvars/colvarbias.h | 7 +- lib/colvars/colvarbias_abf.cpp | 14 +- lib/colvars/colvarbias_abf.h | 34 +- lib/colvars/colvarbias_histogram.h | 2 +- lib/colvars/colvarbias_meta.cpp | 32 +- lib/colvars/colvarbias_meta.h | 32 +- lib/colvars/colvarbias_restraint.cpp | 126 +++-- lib/colvars/colvarbias_restraint.h | 5 +- lib/colvars/colvarcomp.cpp | 171 ++++++- lib/colvars/colvarcomp.h | 78 ++- lib/colvars/colvarcomp_angles.cpp | 61 ++- lib/colvars/colvarcomp_coordnums.cpp | 18 +- lib/colvars/colvarcomp_distances.cpp | 94 +++- lib/colvars/colvarcomp_protein.cpp | 99 +++- lib/colvars/colvarcomp_rotations.cpp | 109 +++-- lib/colvars/colvardeps.cpp | 346 ++------------ lib/colvars/colvardeps.h | 64 ++- lib/colvars/colvargrid.cpp | 2 +- lib/colvars/colvargrid.h | 74 +-- lib/colvars/colvarmodule.cpp | 229 ++++++++- lib/colvars/colvarmodule.h | 285 ++++++++--- lib/colvars/colvarparse.cpp | 443 ++++++++++-------- lib/colvars/colvarparse.h | 171 +++++-- lib/colvars/colvarproxy.cpp | 15 +- lib/colvars/colvarproxy.h | 23 +- lib/colvars/colvars_version.h | 2 +- lib/colvars/colvarscript.cpp | 53 +++ lib/colvars/colvarscript.h | 5 +- lib/colvars/colvartypes.cpp | 84 ++-- lib/colvars/colvartypes.h | 73 +-- lib/colvars/colvarvalue.cpp | 8 +- lib/colvars/colvarvalue.h | 18 +- src/USER-COLVARS/colvarproxy_lammps.cpp | 41 +- src/USER-COLVARS/colvarproxy_lammps.h | 5 + src/USER-COLVARS/colvarproxy_lammps_version.h | 2 +- src/USER-COLVARS/fix_colvars.cpp | 25 + src/USER-COLVARS/fix_colvars.h | 1 + 45 files changed, 2378 insertions(+), 1328 deletions(-) diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 07d82544759e2c3fd3a98b45cff0afc3066f15b1..6194424212c1386e5f57a0a5e917fcbd74536a18 100644 GIT binary patch delta 244649 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 z%0A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

ehX04CqfOg*z8dawO!6j%Oj%AeDg&U`$Wu}%5a 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Ν>%KT&V;OMwGyUIDARVHac?qV1?k~Ssd=rTHB#;a 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∈loOio#+@0lmg8n!*c){k0O`If3z- zsAd+THHa>SGs!cdcyzD;;bHP>KkHW4JY37{*7R}yReL_s$@82gO`d;QWfD`Bx#EWA0{P* z87OEerrT_$F4`$Y?d*+g8|AEQ(iQM_?4X_a%t4j+O59`k%`nam`)yHph{8ZM{i(N@ z?47p;Y`tvDn*??2fO0^t6{aVrY!Ax3HO(H#y0+%LoMyMN6hL^LJiV!)xl``H+*_O1 zVV^b-zbZf*n>`mLTmoY-_Z&Zhdkm;R3eRpX?nWtb$eJ?`v5&@^>#3Hi=JZN5q5Dw)LwhYV&;CyY}}MYS6@M_(L7peiP6IAxi76TiAgb8nR6c23o&A zmY#N>m623=vMf|FhPG6K1E)Q(1ynAzde-tjW_%Sj&duvR%k+{km6~_UQ5?7GskbsH z)2eBTJTZXNt~_oz$PrDiUIXd%#6Wx3lv;f3qN0?@%+j3qlYibLI$ZD!i?j#J7<@Xo zzz{jB4KfZDJp4q&q8%X5*GplZ{U`6D{>CQm3`t?qZ>ApItu_LmjeQ;7R8VQ{s-VmF z;nL$nA12z_C-}6ScSka~W%N-G63dQezf(zGevPWLnPzB9uAgHZU%f#z5hG$yeUX%| zYmfB+mWdYda82g#f<(5FKqzQiWNYNUdqmL7U4(xmLc}d%hz&^>K`8t=zPMxn!N5U< zJ{>GB9dwNtmm2KTZo<*>XJ|3}PevK2Vz-+2mQ^8Ak6Ha__#J)kxH!)&9zB&laZw) zJJ9-0^)s+LFF}f<_DdYz?hp*uzJAp#xH{zh0o*vVz^;v(U0xc`%@bbiJs$cBPjYzb zedr{;kF8_V!-mj#zO3eh1v6&GU-P%lIX(TSK?C5g*UEePwH`<~Yl;JX$Kmluykn%; znZ!nck;pH*+(QQH(nS)P^48zH>LDB+aTCL>Vka6&Jei=HC9eNlm5 zA(z#+XsR4~$|zB=MUVsnFrH4R|6ATh|GWLrkYL+EnI|Zo&N{t|GYM01b=_fCY@($S z-^6^{(XuXq>5cN-v1-4AMW7`N{v@m(Z1meC7FR*K`DtQpE?YPGX`7d>>`^U-f2nxo zh{{m&hQgC#?(&YrUT#pO)(Y_^V&TRwS~mi<^ln)YEBS3rsyw3D%wBrFygLfyf|l8uLMWpB-Du zLm$6DIe-7qD}w>O%Hs&G&6GfTu!+FT9{0Vn)iXL&iE90SbsbnYgeH z;r~}gK7QVRjC}Oyyd3{-;^XAz&k);(V+2L$>p8DWV+SqQZCl)JmvlZG!$Fh!r*Uud zg*u+c2+h#wADT+Gpqw=AZscvZ= zK6RQOHg%B2ORI-XH0%;iDVb>;OG~O0p&;9C+|Tkcs{9ddW=t|?;@VNznF_J%Q$q<$J=2#|__T=M%upRgzR*X`q^ z!hN9{L?$R$c!g%WuEJuewv+|#5Rd@&``|s4vFcXSP(Xt#uBL#dwk=Z)J)Dqn;ScB# zf(k{kQZXw90r<4MFy>0Nl|70|HGZg5OzQq`i9gcPGjWIJ=gd{F(}oAG#dY-MG^MZf z%?xOF%bT0SB}x;dr(x1+X5iFH$#{YT?2d#&b?lNHhktu~DIPeD|D>Xuiv?mBSw$7s zG_!+uA!Fvk+{eSW#;vt5lBUttO$W?r>ZSqmQ*W@B8%XyUbQavHGFlVhBc?s zwMK5P!_n4Rzcbq6sEDSu6*&)OcVdj>0?8IsA~Dww4C%}>L&Iw|^Y9+)i#6n8 zj|AW9;Ye;84$6@9blNH#v9NGjs+A&>4j>`U6c#*zl@kOR88M&)-joM!Jrbukn*LDZ z5VJ(GAHzA-H}1&_d!AUda~!xp!yi7%tO7}ujeGJ(fKrAq=`Q4Z5t%G=H%r9i@uL0T z0|FAV?ub$;ktrqaCPZ>|5abyqIe{}WmnPKYbZDLs)h}9U1t?#3p@wkeV*)Lm8NmKA zfW@g~TFH*clv47*-z3JGA{4aBbet?9>O78nG&NqFy-| z9p_YF7!*n26VK_D^Um{~9SP=}mLy@eu_78GLl<<#VYY!-5gnFzr^U9Z;n)MmWqbs}SSIA*bM(7Nh=>AT++T7VXp;^V3-tTe49Gg#;) zk1koGv#CMFv6&SxU+G41)m<0AM~7k?EPbJ?=EJ2dhWe)om>dF0TqvGEt4ydUBuT}R zt>1KwVF+zuGQ&>elTPCf2vDuCmgn7uC$E;Q?M`uEN3&&mR+^$)xaqJKT7I-u)KgB| zT2w+R#!om?$;5cu0wY=kJz#RK2Bxo~k}u4JP{v6ZGD|8I6D#D-yo z(++AbT$)glt|qOM)@Rk__WqiGNLnf_y%?Y)qmZafljD?JIo6SV0gjie*?gA7@zuOh zN!3UXeF2j8@;G&KTc^4NQRIp8l*x?$j`a%qa(`gc{#g1EBeNUN?lMd|U~r>;!nj=M zA(3EdxYQTnKq0W0WX7Cbsd zXHD%Vvil(*BF@D%^x8c$PMw{H<4T>*qeYfl=om?~;c|~ZwuJpTCpmh*qiht$s@{uR*@|r5N8N+( zH=u9x*NyiR>}rUOaDNo@nVn?-y)QrwPj5$lZGsnGtcYS-{pwG&LS*Q)ME<)H)V?8^ zJYlH$$OPkE%Eex-XASmET;FEO2Hre`n*KmXgs(0vHi0J>h$sk}lbG1gcHFr#XhUVO zeO5dk7z&$?RHhrZ%ZMWVGO;r(cBz{?A=oMxs^RnHWV9(Jk@Hbe^Fb;Xh?XF}-p%RV zUT(4#wf4+dmNV9Q)`Z7r>!&sY$d*buBu@p)6>c_dwrIH54>Ay8@JVE~Uy&^BoSE@xL z#2dPS->)w<<|nTiGm2l5R31SDbPMTE1p_v}jOJgxB%=sjP7ecqDB2t$vBq6OgOX>~#_!pA#uQ%cUk*z?OZzSC zDf_K8*V*IHa4R;h`E4E4T#(&av^ft6RNiP#%6z`Haw@{y-J8`-y-82&a=>z9hG7m^ z4E(5I>=U;kJQJi_#eX=FQ@bo+_u9RpW}lz%HVsm6*VfEiRU@Qk1|14rjQ9_+V#lcJ=ImwK$NU*-*cEknEL%NbJ6S2a>* z3@y7A&8!71^f`lXk2yqHEet7c&vak-C8lmsqquM@ImUI>@FzIcTz0O-@aJR$R3mm4 zicxr*GD86hDlMi1gaI&URv(0135WSe;~GOV#Mk?9*!grSM$7_!$ufaZYJns4S}w5G z+j0c!_H$ej4E)V2;(d>g`^Z#q@=|(;CqR(~aoY$UIQDQWzI@CG7h)*Skf4(U5{adQ9ioh zmLiW33HN)*im7YxIbx>$h;R>wVoZ(CErd2;bp2ipuU6R%&1Ku{fvRRpIh8qF1dN~H zdux8oiP^zw$}Axo`DNB2i9;-H8L3)CW?i`$%zZdYEC2=bDU=%oy9C8E05DB(SL&F_ zKoNK9BhEn*Ce_N@B%cez!k@AnS&KSzPh z27w#o-c{c}pANGAWQiJmtGp&Y%cwog@$xn}R{xMPQn$8oif_FEKRH=@`CKL*n1}s0 z9verN=fZs>?^9PWh;SG0XYb~E;Iczb5WbUNw2AX(x5Dg3zse`nM6w)bvkIdtJpeP7d-quGIwbIVIbIFY2AyW+~^2*%y!CmozAo4a7U1r23ix8P?Fd_e&g>$*l;jv35NdEg;GNY&9`I7AQOm&h`!kJ`) z#&&Ob@c%9TTr(nnu=-7juI9jC` zcO3pyr$NJu*=hEzo9UBCM5vVz?+tibjDPyDZuLaSSc{u8XyweVZ)ez+?+}b4F}~Ut zKEQ;39PCf3vxo1JgyXhu-r!LZQnc8p4NurM0;+Ta7WQFtw@}veodDGPUET$}GPm1S zkUij9+JJ1{{~ts8N+tvWHRhs62(} zWs4-%Y?@Jpl+p$hqkx*UFf8fz7Qr80e{O(Ph+l!1Wyzg{_qYJQKz}ubu=!&KEX5>g znHZ>Cd`;_-#=6Si*{%zA-`o5B7DtWRKuuRO_j;_b7-V#grXR>kVPxz)Qqfb8?lca3 z@X-Y1J8xJB_nq1l!?;=rnt^;_iJW3h2J2?=^r&ALdy_>M#_J+4fcWZyj)t1!2#P95 z&|NaDOGf_d6bu+ywC3So&+xEh&set?t!`#!JDDsw0a2E&y4pF`tz`ioQjMFKpi4dL zxTD(DD-~E|oJzK}3vw^jhsm-NlNlAHv_0q%f4%6P{ zBJkv;!AnMs`sd6XA$4g2Ub}pY z5CaHND>FKr%pje%cJ5Z94DDks3x&(ay_`a^V`*-B;!m2dsoC-RCMcYDf{1DYH~Mj% zs>t$xhkVadBil{C<*b}vM9`g{ti_cj6Px8vTu!t(5g(o^+IlSpZy#fa<%SFwX(2II?;_qA7#u84LgH#riQUb;@M zWbPq+mg|__!}X7|s%b=ddeA4&#T_hQ(gw7v0eMw5??qs9|Jz6W0a8!ao|_8YLkYE* zn+lb2DQ;4^?796XnQQv)`H61Aq|mSv=>8w4&(AZOx~%P4qpOo;kpmBsHgy3^>rR!! zZoGI0vyMLT(Pg-=Jx(H094t`&0&3W#Ar~xU-_0}zQmWkGW zDT@VO%fjP?qK|=P?;K&PWDL^N-#j0})$_mk_vfDr4Em}*>vH?}9r(aMik{J}vd_Lk@6)~~b z%S!(nk0Xk-rxZqHTnUQV^SVg%>d6G;S@Opcq*mtZx%FG6FXFrpx9Tm$R*$*lS%q~o z*nTQ@TE$DZB5>$X_2?PpELMzGCQ$w;+6euodBk#C>o-i9Z&|)mHkMB9WUN_5k4l}Q z0@L;x0o6yTlwJ&b6OBli$j^g+e~d*%Jm>gpsW)Hf)&n7@hChhCJdmb#2jT}^n?p*X zBrUuWXWVk8+AFiUcCX7EnW1#V23u(GrpPPp>qUO9D>~%xW%dRq0|&(ehOW$uu6rs+ zuB!OK1+QuD$sHW}pp7(YgG)0+svkNuULE-&z4y9;7;3{5 zh6hk=w&=3p_XC0Hs{1}2WdofMq>ng#>@o(EgT9kZOIORveTj~1T!%ASuuDuLb(%87 zMw&`;XGBW*%^O(+XH(V0h%}Y;PEDCgn0icP3_Dh_jAxDyTdqhL-XIx^Z|qW1hK%uD zuQ)HUN`oviti@OSp63)eji9pS!NhirI#u!!Q)O3CQ4?f#?&^dClPETU0~34s#K_sI zR=_VFs~s7CB!koSQ+}z5Cp;Ai31+#H4RM_!9v)@_cvB9m5j-#A9uI^M-)591{=m4N z+2n)FtN2}ZB79g5&s>sWf-LpCI;%*EVP5#_erSY5vwTT{dxsYne^K8&I9GM|kd0pR zaZy&e;s%5-D#bgHcOH<&nTGKdTKQ?IA{SG1*M*u@hl1+96QER{9#??v6Ffx`qJ0nak&%D<5SIXcck3=o-qS8@uQCj!9V=cvx{JR zn^M(@$5~0oj9FUU7$N{ewOBg8JZs$b_%y}0zO#UQJQN^t6~$#r%JR#ca^)vG7L2t% z%CT}rC!c@*;a5@dH=#aJd5ZKWJrQJqI0BwlbH znD$uD>Zy0#7UwQNKV+|MU4cfjc7x85y1N;7ldD;%X+p!6!o_AHv5wXCXc1dt{Ns3>;^ENWZAhy~4KFMJ(pV?biVxDpSNP6!8J9bV_&@I-R2Oc|7lEY)&ZRR^} zYM#jBPlP>+YEZOSKJZNikJ#2n@B6sSm!o;Qzp9)q<3c!xS-EV-CtR=dVNpNbwhG~; zeeT1C8r7zweWfS-)BT0k_jdk{wMNV?OKzfq9u(Vb283}g^Tvf!A5*P<8-0-{ysn6l zVHL99*%R}@6h9QT^O+>8;AIj**x^T<7W45&#!yTLZC?UJmhX8=%jtw!PweEb3{G6- zUQZhjf2vKbl+e=&GoHvXUO66^F$TT5(A|DKykJz3^%Wn(QQw>$vrxa+VwYb*8(XOW zm6r(9T`<~Rot))tEeuoUjaA?8H_?|1^I!b3yK=cuuRKrs`TeFTzT8TPb??=2pIPFL z`)_Q(!lLSD^pHpsW95X?RrcR^ZDe*)2vdOn4{7 z!=Fpx9oCz0PaEglof&9`yDSk1aIKLz>7eHE! zlY?JOT!ixfA%X>wfpqn6p2k2fZodESX-v1O7fm;7G;$*{|FC(PAK2b_#U<>0A6RB{ zk_Dk(RvVpVWk2C60uy9o#BjLXs8py>Lx07|Vh&|S6&eAg<5SHU;ZRGF8(}x$GJooRBkRu3aV{1F5N=&T3KOL3h9x1(=WQTM(lMk99w?mhR zyU)H?ZA2qmC0T`?#3IaF%;s-;$+qCgSSsF_&qcVkGqCmMCg>Aigx!!|!n*GR~)PGJ# zblGZ0&#lrYw;G@iwAj;VN^9E7zLBu8{cP7z#W&j6B;15F$=83|6bNeKi*Ms2u-jR~ znry4ju#>TMMK&ALTGd*mn&h|>xS(TI79DW;iccg^NFyx|#!a^Dwgx~ve?ZRs zjsRO?JV9(XVX0Ju^PJ}Skm0I%_A>*nKcJu`wM9&$fdIu03$s~^;ocm;s_d6nX3m~I zw_CDkRRoS>yP$PUfH1UY$Y&NjAPlXhHpc3?c)Z5<*=&%$WSo+D`I)WRCh{a-AzBmS z=W`KdYn&RHGyCBPu=tu>oJ3q4pK@G1+v2|X>^GxtLw2t9U@?DLgX&+e<^-&@fri+> z81H9{XYuXjjQ}Jg+T=k$4^qLqP^_`;J!MS0I@jJ$ONV) zNSp2?iy+O7A-PpJR_a1J(m+69 zchl((k#Wsx$-!^XIv>(nbzJ=d8QuC)9EqLn9dpr!vP9l(!+yK!#FDSgp};!Sbj1K{ zg(_GInC8AirNgj0V9}u3F@(zi-X&s~2km}fnA*i-__d41@N<`}>mfCM#39tD4P8P= zeGL<14(s~yF9$q%HpO9x%t6$LZRjU6EFYF2T^RC6iu4ef?Wlu#m?cPN3T64;`$4|Y zH05WW^^nhufw#)lx+rI+!VbX+^+-H}_+aF{dNjX!GOs>m@P|$_jPr=VdJ6PDF%Tad zjKR-K-UISrSUxAz01Nr$lZpfqw!p$G8}t` z8PoQeQ5~BP^8wSQUm16(-&|4mJ!@SHjVSc~64|H;L>ou@+3xr8B zl5cYIQ<8AA^sbp(8wmZ&F1*Z65R{H!_vj4b)Ry#CFwQ=RnVn(}?l7EP7 zu;l+N{ELefC#{)XMM;?;3FO`WxDHcfcNvTbq@LkuH*>p%gH(?`v?YFMZHEz}*t&xWuvTB34; zqWYL?o_*~~Ndts@ttV_v^Vg!eu@{H^0lIK;W=Jd%R+t+;8I}S9S8Veh9xKb@9t%cQ zC&&5D;m4`Yk;k#lAIL!0Cys?{!rf#ZE#=;!Z1;CgGY$EhC>`_juKb?G<@9F0#BWD+ z!yy!K-G?U@F4)S0M8|`AdLrCGFjNyeBdUnjSg�lg1HqNR)OaZW zRNMXnO!VIW%9LnK%~Y#xSktEO+U$3L+^y|PLRm}knR!Y3Dy>@tBzlSE_xx&x_;ssf zDS3KWf8(|1Ef55Eclu&c$i7u@L~YyvJUgIo83wUH3xjUoIA*^@%gj3u z3T-w`&|E3>F>=gM93ou7@WNnpNNlQN-|&JT5KC|a^7myY4GwbwCmYw}e$#yD4T@Ky zr;;uyry4E_jGjH>j|M=}0>lH^`&rwdN7T>$OphduWOCI?-%+F8JP#+l3Ys>7dl81C zUlF$PK`S7*h8r9XQH8)6>K`1E>9)`yb&x$d`QufDHfqAS|;!IfGJ;d&<JRNIVE-n$7l_xx^ubo9G&hsCMM(Z^a~>5jw_wnjH6IX@0Zg)SmE6-_>Yr zvDOpzXMcO+wQxlJ&TqukuI=H;+x*5l_08ImY;T{C@V52Ps{3Q}+mVDrF^bx_^kjc_ z@1Mg3@=g5Dcn++n&7n0~wv($J8LPLT#G#Kub-u<|2>HuGbyq|F}@x&vgl?N4gaf$-Kbp=HWAOCN8SI-IJpaNzYlB^`xxT;4KoqqiqcjyIvO?t zbfHj+P!!Z(Hf78&)OF#RP3e9Ljs9K;ddmV^;{6PeQ;c*7&xBb)1>7{?nU9$V+Jp8X zDS-hm4QMTc=mfh&O+X7a3-(MyhyH@s74p`slg9zh#A{F>*3!jUlj@x2is6}wwVm02+4=7dSShH z0PFG>{a3@i8(}ZkP~?!bX%RNp@cAY8NAC=8d;DGD%U%>^U0gZX`MpY@3--6i4#~Fk zQf1C2hlBWO8=RZP7+dtPs+@5x5qk^&sUhl&Fhg`V{!xOEihYGXl|#2LD6&1IwA2KV z0Z#UyK!zZRPi`@zI$^r|pT&3}ayB&AItB3wQgj(9kb3SWPfmm?7gv8DGp%TNq0_J2 z+HUsDlSh80lkNlZ=s*a*isodInfANRQ(L*czKU`eau*bmf%||?Puvn(f-i<}ZdjvI zlmsFFB3AMm1#P^8(0uZ@pjJkmAy@Qw@+l|olStO;yRTr74$JSTzDGlz-}IC)?TGu- zU!u6!gKye%#NUW5X+S7gArIEA|5`*M@tcZZX*iHAKpX^z{gC@-ggAXwdXFJvUVdu^ z&0^k%qMHu^X&hRGs2AD;OuCReZL>KAwrqZnR$3Z_2P5W~ayf)~RyLlB{T+cQ7cXY) zcj`8`^cELhVCYU$jDO}QMD#%{K4cshRONx5g_RdtFUZWx*TeTb&ygiCl0UqvF%y;f z1tf$3K=Xw*|9yk~Gj$IyI%fE@3z<_N8Q)iduLTKto8g4H-Ax`CmxHiAh)LT3p%6wN zVG9Tdn^OmG4cD&bz#Ickd+vLrKG8f zY(~G-(Z?3+;c1IOh6vQEv7Z=WN+H+)s=vGTefiO`)$W5g=sL&q`flBLIeJnP+$f^u z84(~g-BicK{+;;s_!~}Ek{{`uEz2v5n&CdafSV59bOOV|gD$(nFfR*~@?=C~zvi>vBy~rZN)&=-1Yu;% zU=sUXU0{#%{!J-7mbzCgxr-o_E|I+AGz_V7K|_7?QJ{;w_ILx+@5_==3KB~L z?e@RvKpdfopVCkoJSYa)@DZVoChE*xCThl8!S;D%G%aSZuYBgR?Gf ztZA_}_cL&u>{79ycy;PhO;9n}?TjkFM$MP#N>9K*+O={BK*!m_?27Q26*4HI*(d_u z$80rLIl(xOcJ{m;KO>f%eQ;d1p)jhm0(E}dj!U|PtSlmB$Iou1XK41zXQ#E^ryF$J zN`Br%j~qpvqydRDe+0Tak-H`?{pMHyAa|b8gkSoBp-B2)wl1x&ms&gVx}q+eAo)Bx z*ZQN7jMyzYHz&NiLofU&wl+{i=8rECC@wuPLV350w$42QGiUx-DJ_%iT>`H2RoeVv zy85q_2N?O#Yzi?%Opo&+FFsU|*u-*c_Ve;Y)K^i&2gktw-LB*AVdm!H<7Q=z%)`kA O1aKnL(MhRDBmXz2ri8-) delta 238450 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 option allows to add settings +from an additional config file to the colvars module. This option can +only be used, after the system has been initialized with a "run"_run.html +command. + +The {fix_modify config } option allows to add settings +from inline strings. Those have to fit on a single line when enclosed +in a pair of double quotes ("), or can span multiple lines when bracketed +by a pair of triple double quotes (""", like python embedded documentation). + This fix computes a global scalar which can be accessed by various "output commands"_Howto_output.html. The scalar is the cumulative energy change due to this fix. The scalar value calculated by this diff --git a/lib/colvars/colvar.cpp b/lib/colvars/colvar.cpp index 8b28eaa0df..723a54ad39 100644 --- a/lib/colvars/colvar.cpp +++ b/lib/colvars/colvar.cpp @@ -24,12 +24,13 @@ colvar::colvar() { runave_os = NULL; - prev_timestep = -1; + prev_timestep = -1L; after_restart = false; kinetic_energy = 0.0; potential_energy = 0.0; - init_cv_requires(); + description = "uninitialized colvar"; + init_dependencies(); } @@ -193,7 +194,7 @@ int colvar::init(std::string const &conf) { bool homogeneous = is_enabled(f_cv_linear); for (i = 0; i < cvcs.size(); i++) { - if ((std::fabs(cvcs[i]->sup_coeff) - 1.0) > 1.0e-10) { + if ((cvm::fabs(cvcs[i]->sup_coeff) - 1.0) > 1.0e-10) { homogeneous = false; } } @@ -224,7 +225,7 @@ int colvar::init(std::string const &conf) // Allow scripted/custom functions to be defined as periodic if ( (is_enabled(f_cv_scripted) || is_enabled(f_cv_custom_function)) && is_enabled(f_cv_scalar) ) { if (get_keyval(conf, "period", period, 0.)) { - set_enabled(f_cv_periodic, true); + enable(f_cv_periodic); get_keyval(conf, "wrapAround", wrap_center, 0.); } } @@ -471,7 +472,7 @@ int colvar::init_grid_parameters(std::string const &conf) if (get_keyval(conf, "lowerWallConstant", lower_wall_k, 0.0, parse_silent)) { cvm::log("Reading legacy options lowerWall and lowerWallConstant: " - "consider using a harmonicWalls restraint.\n"); + "consider using a harmonicWalls restraint\n(caution: force constant would then be scaled by width^2).\n"); lower_wall.type(value()); if (!get_keyval(conf, "lowerWall", lower_wall, lower_boundary)) { cvm::log("Warning: lowerWall will need to be " @@ -485,7 +486,7 @@ int colvar::init_grid_parameters(std::string const &conf) if (get_keyval(conf, "upperWallConstant", upper_wall_k, 0.0, parse_silent)) { cvm::log("Reading legacy options upperWall and upperWallConstant: " - "consider using a harmonicWalls restraint.\n"); + "consider using a harmonicWalls restraint\n(caution: force constant would then be scaled by width^2).\n"); upper_wall.type(value()); if (!get_keyval(conf, "upperWall", upper_wall, upper_boundary)) { cvm::log("Warning: upperWall will need to be " @@ -562,13 +563,13 @@ int colvar::init_extended_Lagrangian(std::string const &conf) get_keyval_feature(this, conf, "extendedLagrangian", f_cv_extended_Lagrangian, false); if (is_enabled(f_cv_extended_Lagrangian)) { - cvm::real temp, tolerance, period; + cvm::real temp, tolerance, extended_period; cvm::log("Enabling the extended Lagrangian term for colvar \""+ this->name+"\".\n"); - xr.type(value()); - vr.type(value()); + x_ext.type(value()); + v_ext.type(value()); fr.type(value()); const bool found = get_keyval(conf, "extendedTemp", temp, cvm::temperature()); @@ -590,11 +591,11 @@ int colvar::init_extended_Lagrangian(std::string const &conf) ext_force_k = cvm::boltzmann() * temp / (tolerance * tolerance); cvm::log("Computed extended system force constant: " + cvm::to_str(ext_force_k) + " [E]/U^2"); - get_keyval(conf, "extendedTimeConstant", period, 200.0); - if (period <= 0.0) { + get_keyval(conf, "extendedTimeConstant", extended_period, 200.0); + if (extended_period <= 0.0) { cvm::error("Error: \"extendedTimeConstant\" must be positive.\n", INPUT_ERROR); } - ext_mass = (cvm::boltzmann() * temp * period * period) + ext_mass = (cvm::boltzmann() * temp * extended_period * extended_period) / (4.0 * PI * PI * tolerance * tolerance); cvm::log("Computed fictitious mass: " + cvm::to_str(ext_mass) + " [E]/(U/fs)^2 (U: colvar unit)"); @@ -615,7 +616,7 @@ int colvar::init_extended_Lagrangian(std::string const &conf) enable(f_cv_Langevin); ext_gamma *= 1.0e-3; // correct as long as input is required in ps-1 and cvm::dt() is in fs // Adjust Langevin sigma for slow time step if time_step_factor != 1 - ext_sigma = std::sqrt(2.0 * cvm::boltzmann() * temp * ext_gamma * ext_mass / (cvm::dt() * cvm::real(time_step_factor))); + ext_sigma = cvm::sqrt(2.0 * cvm::boltzmann() * temp * ext_gamma * ext_mass / (cvm::dt() * cvm::real(time_step_factor))); } } @@ -761,6 +762,8 @@ int colvar::init_components(std::string const &conf) "weighted by inverse power", "distanceInv"); error_code |= init_components_type(conf, "N1xN2-long vector " "of pairwise distances", "distancePairs"); + error_code |= init_components_type(conf, "dipole magnitude", + "dipoleMagnitude"); error_code |= init_components_type(conf, "coordination " "number", "coordNum"); error_code |= init_components_type(conf, "self-coordination " @@ -831,22 +834,25 @@ void colvar::build_atom_list(void) for (size_t i = 0; i < cvcs.size(); i++) { for (size_t j = 0; j < cvcs[i]->atom_groups.size(); j++) { - cvm::atom_group &ag = *(cvcs[i]->atom_groups[j]); + cvm::atom_group const &ag = *(cvcs[i]->atom_groups[j]); for (size_t k = 0; k < ag.size(); k++) { temp_id_list.push_back(ag[k].id); } + if (ag.is_enabled(f_ag_fitting_group) && ag.is_enabled(f_ag_fit_gradients)) { + cvm::atom_group const &fg = *(ag.fitting_group); + for (size_t k = 0; k < fg.size(); k++) { + temp_id_list.push_back(fg[k].id); + } + } } } temp_id_list.sort(); temp_id_list.unique(); - // atom_ids = std::vector (temp_id_list.begin(), temp_id_list.end()); - unsigned int id_i = 0; std::list::iterator li; for (li = temp_id_list.begin(); li != temp_id_list.end(); ++li) { - atom_ids[id_i] = *li; - id_i++; + atom_ids.push_back(*li); } temp_id_list.clear(); @@ -934,16 +940,153 @@ int colvar::parse_analysis(std::string const &conf) } -void colvar::setup() { - // loop over all components to reset masses of all groups - for (size_t i = 0; i < cvcs.size(); i++) { - for (size_t ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { - cvm::atom_group &atoms = *(cvcs[i]->atom_groups[ig]); - atoms.setup(); - atoms.reset_mass(name,i,ig); - atoms.read_positions(); +int colvar::init_dependencies() { + size_t i; + if (features().size() == 0) { + for (i = 0; i < f_cv_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cv_active, "active", f_type_dynamic); + // Do not require f_cvc_active in children, as some components may be disabled + // Colvars must be either a linear combination, or scalar (and polynomial) or scripted/custom + require_feature_alt(f_cv_active, f_cv_scalar, f_cv_linear, f_cv_scripted, f_cv_custom_function); + + init_feature(f_cv_awake, "awake", f_type_static); + require_feature_self(f_cv_awake, f_cv_active); + + init_feature(f_cv_gradient, "gradient", f_type_dynamic); + require_feature_children(f_cv_gradient, f_cvc_gradient); + + init_feature(f_cv_collect_gradient, "collect gradient", f_type_dynamic); + require_feature_self(f_cv_collect_gradient, f_cv_gradient); + require_feature_self(f_cv_collect_gradient, f_cv_scalar); + // The following exlusion could be lifted by implementing the feature + exclude_feature_self(f_cv_collect_gradient, f_cv_scripted); + require_feature_children(f_cv_collect_gradient, f_cvc_explicit_gradient); + + init_feature(f_cv_fdiff_velocity, "velocity from finite differences", f_type_dynamic); + + // System force: either trivial (spring force); through extended Lagrangian, or calculated explicitly + init_feature(f_cv_total_force, "total force", f_type_dynamic); + require_feature_alt(f_cv_total_force, f_cv_extended_Lagrangian, f_cv_total_force_calc); + + // Deps for explicit total force calculation + init_feature(f_cv_total_force_calc, "total force calculation", f_type_dynamic); + require_feature_self(f_cv_total_force_calc, f_cv_scalar); + require_feature_self(f_cv_total_force_calc, f_cv_linear); + require_feature_children(f_cv_total_force_calc, f_cvc_inv_gradient); + require_feature_self(f_cv_total_force_calc, f_cv_Jacobian); + + init_feature(f_cv_Jacobian, "Jacobian derivative", f_type_dynamic); + require_feature_self(f_cv_Jacobian, f_cv_scalar); + require_feature_self(f_cv_Jacobian, f_cv_linear); + require_feature_children(f_cv_Jacobian, f_cvc_Jacobian); + + init_feature(f_cv_hide_Jacobian, "hide Jacobian force", f_type_user); + require_feature_self(f_cv_hide_Jacobian, f_cv_Jacobian); // can only hide if calculated + + init_feature(f_cv_extended_Lagrangian, "extended Lagrangian", f_type_user); + require_feature_self(f_cv_extended_Lagrangian, f_cv_scalar); + require_feature_self(f_cv_extended_Lagrangian, f_cv_gradient); + + init_feature(f_cv_Langevin, "Langevin dynamics", f_type_user); + require_feature_self(f_cv_Langevin, f_cv_extended_Lagrangian); + + init_feature(f_cv_linear, "linear", f_type_static); + + init_feature(f_cv_scalar, "scalar", f_type_static); + + init_feature(f_cv_output_energy, "output energy", f_type_user); + + init_feature(f_cv_output_value, "output value", f_type_user); + + init_feature(f_cv_output_velocity, "output velocity", f_type_user); + require_feature_self(f_cv_output_velocity, f_cv_fdiff_velocity); + + init_feature(f_cv_output_applied_force, "output applied force", f_type_user); + + init_feature(f_cv_output_total_force, "output total force", f_type_user); + require_feature_self(f_cv_output_total_force, f_cv_total_force); + + init_feature(f_cv_subtract_applied_force, "subtract applied force from total force", f_type_user); + require_feature_self(f_cv_subtract_applied_force, f_cv_total_force); + + init_feature(f_cv_lower_boundary, "lower boundary", f_type_user); + require_feature_self(f_cv_lower_boundary, f_cv_scalar); + + init_feature(f_cv_upper_boundary, "upper boundary", f_type_user); + require_feature_self(f_cv_upper_boundary, f_cv_scalar); + + init_feature(f_cv_grid, "grid", f_type_dynamic); + require_feature_self(f_cv_grid, f_cv_lower_boundary); + require_feature_self(f_cv_grid, f_cv_upper_boundary); + + init_feature(f_cv_runave, "running average", f_type_user); + + init_feature(f_cv_corrfunc, "correlation function", f_type_user); + + init_feature(f_cv_scripted, "scripted", f_type_user); + + init_feature(f_cv_custom_function, "custom function", f_type_user); + exclude_feature_self(f_cv_custom_function, f_cv_scripted); + + init_feature(f_cv_periodic, "periodic", f_type_static); + require_feature_self(f_cv_periodic, f_cv_scalar); + init_feature(f_cv_scalar, "scalar", f_type_static); + init_feature(f_cv_linear, "linear", f_type_static); + init_feature(f_cv_homogeneous, "homogeneous", f_type_static); + + // because total forces are obtained from the previous time step, + // we cannot (currently) have colvar values and total forces for the same timestep + init_feature(f_cv_multiple_ts, "multiple timestep colvar", f_type_static); + exclude_feature_self(f_cv_multiple_ts, f_cv_total_force_calc); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cv_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } } } + + // Initialize feature_states for each instance + feature_states.reserve(f_cv_ntot); + for (i = 0; i < f_cv_ntot; i++) { + feature_states.push_back(feature_state(true, false)); + // Most features are available, so we set them so + // and list exceptions below + } + + feature_states[f_cv_fdiff_velocity].available = + cvm::main()->proxy->simulation_running(); + + return COLVARS_OK; +} + + +void colvar::setup() +{ + // loop over all components to update masses and charges of all groups + for (size_t i = 0; i < cvcs.size(); i++) { + for (size_t ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { + cvm::atom_group *atoms = cvcs[i]->atom_groups[ig]; + atoms->setup(); + atoms->print_properties(name, i, ig); + atoms->read_positions(); + } + } +} + + +std::vector > colvar::get_atom_lists() +{ + std::vector > lists; + for (size_t i = 0; i < cvcs.size(); i++) { + std::vector > li = cvcs[i]->get_atom_lists(); + lists.insert(lists.end(), li.begin(), li.end()); + } + return lists; } @@ -953,8 +1096,8 @@ colvar::~colvar() // because the children are cvcs and will be deleted // just below -// Clear references to this colvar's cvcs as children -// for dependency purposes + // Clear references to this colvar's cvcs as children + // for dependency purposes remove_all_children(); for (std::vector::reverse_iterator ci = cvcs.rbegin(); @@ -1231,7 +1374,6 @@ int colvar::calc_cvc_gradients(int first_cvc, size_t num_cvcs) int colvar::collect_cvc_gradients() { size_t i; - if (is_enabled(f_cv_collect_gradient)) { // Collect the atomic gradients inside colvar object for (unsigned int a = 0; a < atomic_gradients.size(); a++) { @@ -1239,34 +1381,7 @@ int colvar::collect_cvc_gradients() } for (i = 0; i < cvcs.size(); i++) { if (!cvcs[i]->is_enabled()) continue; - // Coefficient: d(a * x^n) = a * n * x^(n-1) * dx - cvm::real coeff = (cvcs[i])->sup_coeff * cvm::real((cvcs[i])->sup_np) * - cvm::integer_power((cvcs[i])->value().real_value, (cvcs[i])->sup_np-1); - - for (size_t j = 0; j < cvcs[i]->atom_groups.size(); j++) { - - cvm::atom_group &ag = *(cvcs[i]->atom_groups[j]); - - // If necessary, apply inverse rotation to get atomic - // gradient in the laboratory frame - if (ag.b_rotate) { - cvm::rotation const rot_inv = ag.rot.inverse(); - - for (size_t k = 0; k < ag.size(); k++) { - size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), - ag[k].id) - atom_ids.begin(); - atomic_gradients[a] += coeff * rot_inv.rotate(ag[k].grad); - } - - } else { - - for (size_t k = 0; k < ag.size(); k++) { - size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), - ag[k].id) - atom_ids.begin(); - atomic_gradients[a] += coeff * ag[k].grad; - } - } - } + cvcs[i]->collect_gradients(atom_ids, atomic_gradients); } } return COLVARS_OK; @@ -1391,20 +1506,20 @@ int colvar::calc_colvar_properties() // initialize the restraint center in the first step to the value // just calculated from the cvcs if (cvm::step_relative() == 0 && !after_restart) { - xr = x; - vr.reset(); // (already 0; added for clarity) + x_ext = x; + v_ext.reset(); // (already 0; added for clarity) } // Special case of a repeated timestep (eg. multiple NAMD "run" statements) // revert values of the extended coordinate and velocity prior to latest integration - if (cvm::step_relative() == prev_timestep) { - xr = prev_xr; - vr = prev_vr; + if (cvm::proxy->simulation_running() && cvm::step_relative() == prev_timestep) { + x_ext = prev_x_ext; + v_ext = prev_v_ext; } // report the restraint center as "value" - x_reported = xr; - v_reported = vr; + x_reported = x_ext; + v_reported = v_ext; // the "total force" with the extended Lagrangian is // calculated in update_forces_energy() below @@ -1458,77 +1573,86 @@ cvm::real colvar::update_forces_energy() // extended variable if there is one if (is_enabled(f_cv_extended_Lagrangian)) { - if (cvm::debug()) { - cvm::log("Updating extended-Lagrangian degree of freedom.\n"); - } - - if (prev_timestep > -1) { - // Keep track of slow timestep to integrate MTS colvars - // the colvar checks the interval after waking up twice - int n_timesteps = cvm::step_relative() - prev_timestep; - if (n_timesteps != 0 && n_timesteps != time_step_factor) { - cvm::error("Error: extended-Lagrangian " + description + " has timeStepFactor " + - cvm::to_str(time_step_factor) + ", but was activated after " + cvm::to_str(n_timesteps) + - " steps at timestep " + cvm::to_str(cvm::step_absolute()) + " (relative step: " + - cvm::to_str(cvm::step_relative()) + ").\n" + - "Make sure that this colvar is requested by biases at multiples of timeStepFactor.\n"); - return 0.; + if (cvm::proxy->simulation_running()) { + // Only integrate the extended equations of motion in running MD simulations + if (cvm::debug()) { + cvm::log("Updating extended-Lagrangian degree of freedom.\n"); } - } - // Integrate with slow timestep (if time_step_factor != 1) - cvm::real dt = cvm::dt() * cvm::real(time_step_factor); + if (prev_timestep > -1) { + // Keep track of slow timestep to integrate MTS colvars + // the colvar checks the interval after waking up twice + int n_timesteps = cvm::step_relative() - prev_timestep; + if (n_timesteps != 0 && n_timesteps != time_step_factor) { + cvm::error("Error: extended-Lagrangian " + description + " has timeStepFactor " + + cvm::to_str(time_step_factor) + ", but was activated after " + cvm::to_str(n_timesteps) + + " steps at timestep " + cvm::to_str(cvm::step_absolute()) + " (relative step: " + + cvm::to_str(cvm::step_relative()) + ").\n" + + "Make sure that this colvar is requested by biases at multiples of timeStepFactor.\n"); + return 0.; + } + } - colvarvalue f_ext(fr.type()); // force acting on the extended variable - f_ext.reset(); + // Integrate with slow timestep (if time_step_factor != 1) + cvm::real dt = cvm::dt() * cvm::real(time_step_factor); - // the total force is applied to the fictitious mass, while the - // atoms only feel the harmonic force + wall force - // fr: bias force on extended variable (without harmonic spring), for output in trajectory - // f_ext: total force on extended variable (including harmonic spring) - // f: - initially, external biasing force - // - after this code block, colvar force to be applied to atomic coordinates - // ie. spring force (fb_actual will be added just below) - fr = f; - // External force has been scaled for a 1-timestep impulse, scale it back because we will - // integrate it with the colvar's own timestep factor - f_ext = f / cvm::real(time_step_factor); - f_ext += (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); - f = (-0.5 * ext_force_k) * this->dist2_rgrad(xr, x); - // Coupling force is a slow force, to be applied to atomic coords impulse-style - f *= cvm::real(time_step_factor); + colvarvalue f_ext(fr.type()); // force acting on the extended variable + f_ext.reset(); - if (is_enabled(f_cv_subtract_applied_force)) { - // Report a "system" force without the biases on this colvar - // that is, just the spring force - ft_reported = (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); + // the total force is applied to the fictitious mass, while the + // atoms only feel the harmonic force + wall force + // fr: bias force on extended variable (without harmonic spring), for output in trajectory + // f_ext: total force on extended variable (including harmonic spring) + // f: - initially, external biasing force + // - after this code block, colvar force to be applied to atomic coordinates + // ie. spring force (fb_actual will be added just below) + fr = f; + // External force has been scaled for a 1-timestep impulse, scale it back because we will + // integrate it with the colvar's own timestep factor + f_ext = f / cvm::real(time_step_factor); + f_ext += (-0.5 * ext_force_k) * this->dist2_lgrad(x_ext, x); + f = (-0.5 * ext_force_k) * this->dist2_rgrad(x_ext, x); + // Coupling force is a slow force, to be applied to atomic coords impulse-style + f *= cvm::real(time_step_factor); + + if (is_enabled(f_cv_subtract_applied_force)) { + // Report a "system" force without the biases on this colvar + // that is, just the spring force + ft_reported = (-0.5 * ext_force_k) * this->dist2_lgrad(x_ext, x); + } else { + // The total force acting on the extended variable is f_ext + // This will be used in the next timestep + ft_reported = f_ext; + } + + // backup in case we need to revert this integration timestep + // if the same MD timestep is re-run + prev_x_ext = x_ext; + prev_v_ext = v_ext; + + // leapfrog: starting from x_i, f_i, v_(i-1/2) + v_ext += (0.5 * dt) * f_ext / ext_mass; + // Because of leapfrog, kinetic energy at time i is approximate + kinetic_energy = 0.5 * ext_mass * v_ext * v_ext; + potential_energy = 0.5 * ext_force_k * this->dist2(x_ext, x); + // leap to v_(i+1/2) + if (is_enabled(f_cv_Langevin)) { + v_ext -= dt * ext_gamma * v_ext; + colvarvalue rnd(x); + rnd.set_random(); + v_ext += dt * ext_sigma * rnd / ext_mass; + } + v_ext += (0.5 * dt) * f_ext / ext_mass; + x_ext += dt * v_ext; + x_ext.apply_constraints(); + this->wrap(x_ext); } else { - // The total force acting on the extended variable is f_ext - // This will be used in the next timestep - ft_reported = f_ext; + // If this is a postprocessing run (eg. in VMD), the extended DOF + // is equal to the actual coordinate + x_ext = x; } - - // backup in case we need to revert this integration timestep - // if the same MD timestep is re-run - prev_xr = xr; - prev_vr = vr; - - // leapfrog: starting from x_i, f_i, v_(i-1/2) - vr += (0.5 * dt) * f_ext / ext_mass; - // Because of leapfrog, kinetic energy at time i is approximate - kinetic_energy = 0.5 * ext_mass * vr * vr; - potential_energy = 0.5 * ext_force_k * this->dist2(xr, x); - // leap to v_(i+1/2) - if (is_enabled(f_cv_Langevin)) { - vr -= dt * ext_gamma * vr; - colvarvalue rnd(x); - rnd.set_random(); - vr += dt * ext_sigma * rnd / ext_mass; - } - vr += (0.5 * dt) * f_ext / ext_mass; - xr += dt * vr; - xr.apply_constraints(); - this->wrap(xr); + // Report extended value + x_reported = x_ext; } // Now adding the force on the actual colvar (for those biases that @@ -1730,7 +1854,7 @@ int colvar::update_cvc_config(std::vector const &confs) // ******************** METRIC FUNCTIONS ******************** -// Use the metrics defined by \link cvc \endlink objects +// Use the metrics defined by \link colvar::cvc \endlink objects bool colvar::periodic_boundaries(colvarvalue const &lb, colvarvalue const &ub) const @@ -1742,7 +1866,7 @@ bool colvar::periodic_boundaries(colvarvalue const &lb, colvarvalue const &ub) c } if (period > 0.0) { - if ( ((std::sqrt(this->dist2(lb, ub))) / this->width) + if ( ((cvm::sqrt(this->dist2(lb, ub))) / this->width) < 1.0E-10 ) { return true; } @@ -1792,21 +1916,21 @@ colvarvalue colvar::dist2_rgrad(colvarvalue const &x1, } } -void colvar::wrap(colvarvalue &x) const + +void colvar::wrap(colvarvalue &x_unwrapped) const { - if ( !is_enabled(f_cv_periodic) ) { + if (!is_enabled(f_cv_periodic)) { return; } if ( is_enabled(f_cv_scripted) || is_enabled(f_cv_custom_function) ) { // Scripted functions do their own wrapping, as cvcs might not be periodic - cvm::real shift = std::floor((x.real_value - wrap_center) / period + 0.5); - x.real_value -= shift * period; + cvm::real shift = cvm::floor((x_unwrapped.real_value - wrap_center) / + period + 0.5); + x_unwrapped.real_value -= shift * period; } else { - cvcs[0]->wrap(x); + cvcs[0]->wrap(x_unwrapped); } - - return; } @@ -1852,15 +1976,15 @@ std::istream & colvar::read_restart(std::istream &is) if (is_enabled(f_cv_extended_Lagrangian)) { - if ( !(get_keyval(conf, "extended_x", xr, + if ( !(get_keyval(conf, "extended_x", x_ext, colvarvalue(x.type()), colvarparse::parse_silent)) && - !(get_keyval(conf, "extended_v", vr, + !(get_keyval(conf, "extended_v", v_ext, colvarvalue(x.type()), colvarparse::parse_silent)) ) { cvm::log("Error: restart file does not contain " "\"extended_x\" or \"extended_v\" for the colvar \""+ name+"\", but you requested \"extendedLagrangian\".\n"); } - x_reported = xr; + x_reported = x_ext; } else { x_reported = x; } @@ -1875,7 +1999,7 @@ std::istream & colvar::read_restart(std::istream &is) } if (is_enabled(f_cv_extended_Lagrangian)) { - v_reported = vr; + v_reported = v_ext; } else { v_reported = v_fdiff; } @@ -1901,8 +2025,8 @@ std::istream & colvar::read_traj(std::istream &is) } if (is_enabled(f_cv_extended_Lagrangian)) { - is >> xr; - x_reported = xr; + is >> x_ext; + x_reported = x_ext; } else { x_reported = x; } @@ -1913,8 +2037,8 @@ std::istream & colvar::read_traj(std::istream &is) is >> v_fdiff; if (is_enabled(f_cv_extended_Lagrangian)) { - is >> vr; - v_reported = vr; + is >> v_ext; + v_reported = v_ext; } else { v_reported = v_fdiff; } @@ -1955,11 +2079,11 @@ std::ostream & colvar::write_restart(std::ostream &os) { os << " extended_x " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << xr << "\n" + << x_ext << "\n" << " extended_v " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << vr << "\n"; + << v_ext << "\n"; } os << "}\n\n"; @@ -2190,6 +2314,7 @@ int colvar::calc_acf() acf_x_history_p = acf_x_history.begin(); break; + case acf_notset: default: break; } @@ -2222,6 +2347,7 @@ int colvar::calc_acf() history_incr(acf_x_history, acf_x_history_p); break; + case acf_notset: default: break; } @@ -2257,7 +2383,7 @@ void colvar::calc_vel_acf(std::list &v_list, void colvar::calc_coor_acf(std::list &x_list, - colvarvalue const &x) + colvarvalue const &x_now) { // same as above but for coordinates if (x_list.size() >= acf_length+acf_offset) { @@ -2269,7 +2395,7 @@ void colvar::calc_coor_acf(std::list &x_list, *(acf_i++) += x.norm2(); - colvarvalue::inner_opt(x, xs_i, x_list.end(), acf_i); + colvarvalue::inner_opt(x_now, xs_i, x_list.end(), acf_i); acf_nframes++; } @@ -2277,7 +2403,7 @@ void colvar::calc_coor_acf(std::list &x_list, void colvar::calc_p2coor_acf(std::list &x_list, - colvarvalue const &x) + colvarvalue const &x_now) { // same as above but with second order Legendre polynomial instead // of just the scalar product @@ -2291,7 +2417,7 @@ void colvar::calc_p2coor_acf(std::list &x_list, // value of P2(0) = 1 *(acf_i++) += 1.0; - colvarvalue::p2leg_opt(x, xs_i, x_list.end(), acf_i); + colvarvalue::p2leg_opt(x_now, xs_i, x_list.end(), acf_i); acf_nframes++; } @@ -2316,6 +2442,9 @@ int colvar::write_acf(std::ostream &os) case acf_p2coor: os << "Coordinate (2nd Legendre poly)"; break; + case acf_notset: + default: + break; } if (acf_colvar_name == name) { @@ -2420,7 +2549,7 @@ int colvar::calc_runave() << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) << runave << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << std::sqrt(runave_variance) << "\n"; + << cvm::sqrt(runave_variance) << "\n"; } history_add_value(runave_length, *x_history_p, x); diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index a67749d577..74f7fdee51 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -92,7 +92,7 @@ public: static std::vector cv_features; /// \brief Implementation of the feature list accessor for colvar - virtual const std::vector &features() + virtual const std::vector &features() const { return cv_features; } @@ -133,7 +133,7 @@ protected: Here: S(x(t)) = x - s(t) = xr + s(t) = x_ext DS = Ds = delta */ @@ -170,13 +170,13 @@ protected: // Options for extended_lagrangian /// Restraint center - colvarvalue xr; + colvarvalue x_ext; /// Previous value of the restraint center; - colvarvalue prev_xr; + colvarvalue prev_x_ext; /// Velocity of the restraint center - colvarvalue vr; + colvarvalue v_ext; /// Previous velocity of the restraint center - colvarvalue prev_vr; + colvarvalue prev_v_ext; /// Mass of the restraint center cvm::real ext_mass; /// Restraint force constant @@ -273,6 +273,9 @@ public: /// Init output flags int init_output_flags(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + private: /// Parse the CVC configuration for all components of a certain type template int init_components_type(std::string const &conf, @@ -373,7 +376,7 @@ protected: void update_active_cvc_square_norm(); /// \brief Absolute timestep number when this colvar was last updated - int prev_timestep; + cvm::step_number prev_timestep; public: @@ -383,32 +386,32 @@ public: /// \brief Return the number of CVC objects with an active flag (as set by update_cvc_flags) inline size_t num_active_cvcs() const { return n_active_cvcs; } - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to wrap a value into a standard interval /// /// Handles correctly symmetries and periodic boundary conditions - void wrap(colvarvalue &x) const; + void wrap(colvarvalue &x_unwrapped) const; /// Read the analysis tasks @@ -546,6 +549,7 @@ public: class polar_phi; class distance_inv; class distance_pairs; + class dipole_magnitude; class angle; class dipole_angle; class dihedral; @@ -574,7 +578,7 @@ public: protected: - /// \brief Array of \link cvc \endlink objects + /// \brief Array of \link colvar::cvc \endlink objects std::vector cvcs; /// \brief Flags to enable or disable cvcs at next colvar evaluation @@ -619,6 +623,9 @@ public: inline size_t n_components() const { return cvcs.size(); } + + /// \brief Get vector of vectors of atom IDs for all atom groups + virtual std::vector > get_atom_lists(); }; inline cvm::real const & colvar::force_constant() const @@ -655,6 +662,8 @@ inline colvarvalue const & colvar::total_force() const inline void colvar::add_bias_force(colvarvalue const &force) { + check_enabled(f_cv_gradient, + std::string("applying a force to the variable \""+name+"\"")); if (cvm::debug()) { cvm::log("Adding biasing force "+cvm::to_str(force)+" to colvar \""+name+"\".\n"); } diff --git a/lib/colvars/colvar_UIestimator.h b/lib/colvars/colvar_UIestimator.h index 759b8d54a0..365f46148a 100644 --- a/lib/colvars/colvar_UIestimator.h +++ b/lib/colvars/colvar_UIestimator.h @@ -33,24 +33,24 @@ namespace UIestimator { public: n_matrix() {} - n_matrix(const std::vector & lowerboundary, // lowerboundary of x - const std::vector & upperboundary, // upperboundary of - const std::vector & width, // width of x - const int y_size) { // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + n_matrix(const std::vector & lowerboundary_input, // lowerboundary of x + const std::vector & upperboundary_input, // upperboundary of + const std::vector & width_input, // width of x + const int y_size_input) { // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered int i; - this->lowerboundary = lowerboundary; - this->upperboundary = upperboundary; - this->width = width; - this->dimension = lowerboundary.size(); - this->y_size = y_size; // keep in mind the internal (spare) matrix is stored in diagonal form - this->y_total_size = int(std::pow(double(y_size), double(dimension)) + EPSILON); + this->lowerboundary = lowerboundary_input; + this->upperboundary = upperboundary_input; + this->width = width_input; + this->dimension = lowerboundary_input.size(); + this->y_size = y_size_input; // keep in mind the internal (spare) matrix is stored in diagonal form + this->y_total_size = int(cvm::pow(double(y_size_input), double(dimension)) + EPSILON); // the range of the matrix is [lowerboundary, upperboundary] x_total_size = 1; for (i = 0; i < dimension; i++) { - x_size.push_back(int((upperboundary[i] - lowerboundary[i]) / width[i] + EPSILON)); + x_size.push_back(int((upperboundary_input[i] - lowerboundary_input[i]) / width_input[i] + EPSILON)); x_total_size *= x_size[i]; } @@ -89,9 +89,10 @@ namespace UIestimator { std::vector temp; // this vector is used in convert_x and convert_y to save computational resource - int i, j; - int convert_x(const std::vector & x) { // convert real x value to its interal index + + int i, j; + for (i = 0; i < dimension; i++) { temp[i] = int((x[i] - lowerboundary[i]) / width[i] + EPSILON); } @@ -121,7 +122,7 @@ namespace UIestimator { int index = 0; for (i = 0; i < dimension; i++) { if (i + 1 < dimension) - index += temp[i] * int(std::pow(double(y_size), double(dimension - i - 1)) + EPSILON); + index += temp[i] * int(cvm::pow(double(y_size), double(dimension - i - 1)) + EPSILON); else index += temp[i]; } @@ -139,19 +140,19 @@ namespace UIestimator { public: n_vector() {} - n_vector(const std::vector & lowerboundary, // lowerboundary of x - const std::vector & upperboundary, // upperboundary of - const std::vector & width, // width of x - const int y_size, // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + n_vector(const std::vector & lowerboundary_input, // lowerboundary of x + const std::vector & upperboundary_input, // upperboundary of + const std::vector & width_input, // width of x + const int y_size_input, // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered const T & default_value) { // the default value of T - this->width = width; - this->dimension = lowerboundary.size(); + this->width = width_input; + this->dimension = lowerboundary_input.size(); x_total_size = 1; for (int i = 0; i < dimension; i++) { - this->lowerboundary.push_back(lowerboundary[i] - (y_size - 1) / 2 * width[i] - EPSILON); - this->upperboundary.push_back(upperboundary[i] + (y_size - 1) / 2 * width[i] + EPSILON); + this->lowerboundary.push_back(lowerboundary_input[i] - (y_size_input - 1) / 2 * width_input[i] - EPSILON); + this->upperboundary.push_back(upperboundary_input[i] + (y_size_input - 1) / 2 * width_input[i] + EPSILON); x_size.push_back(int((this->upperboundary[i] - this->lowerboundary[i]) / this->width[i] + EPSILON)); x_total_size *= x_size[i]; @@ -215,26 +216,26 @@ namespace UIestimator { UIestimator() {} //called when (re)start an eabf simulation - UIestimator(const std::vector & lowerboundary, - const std::vector & upperboundary, - const std::vector & width, - const std::vector & krestr, // force constant in eABF - const std::string & output_filename, // the prefix of output files - const int output_freq, - const bool restart, // whether restart from a .count and a .grad file - const std::vector & input_filename, // the prefixes of input files - const double temperature) { + UIestimator(const std::vector & lowerboundary_input, + const std::vector & upperboundary_input, + const std::vector & width_input, + const std::vector & krestr_input, // force constant in eABF + const std::string & output_filename_input, // the prefix of output files + const int output_freq_input, + const bool restart_input, // whether restart from a .count and a .grad file + const std::vector & input_filename_input, // the prefixes of input files + const double temperature_input) { // initialize variables - this->lowerboundary = lowerboundary; - this->upperboundary = upperboundary; - this->width = width; - this->krestr = krestr; - this->output_filename = output_filename; - this->output_freq = output_freq; - this->restart = restart; - this->input_filename = input_filename; - this->temperature = temperature; + this->lowerboundary = lowerboundary_input; + this->upperboundary = upperboundary_input; + this->width = width_input; + this->krestr = krestr_input; + this->output_filename = output_filename_input; + this->output_freq = output_freq_input; + this->restart = restart_input; + this->input_filename = input_filename_input; + this->temperature = temperature_input; int i, j; @@ -300,7 +301,7 @@ namespace UIestimator { ~UIestimator() {} // called from MD engine every step - bool update(const int step, std::vector x, std::vector y) { + bool update(cvm::step_number step, std::vector x, std::vector y) { int i; @@ -431,7 +432,7 @@ namespace UIestimator { loop_flag_y[k] = loop_flag_x[k] - HALF_Y_SIZE * width[k]; } - int j = 0; + j = 0; while (j >= 0) { norm += distribution_x_y.get_value(loop_flag_x, loop_flag_y); for (k = 0; k < dimension; k++) { @@ -672,7 +673,7 @@ namespace UIestimator { } // read input files - void read_inputfiles(const std::vector input_filename) + void read_inputfiles(const std::vector filename) { char sharp; double nothing; @@ -683,11 +684,11 @@ namespace UIestimator { std::vector position_temp(dimension, 0); std::vector grad_temp(dimension, 0); int count_temp = 0; - for (i = 0; i < int(input_filename.size()); i++) { + for (i = 0; i < int(filename.size()); i++) { int size = 1 , size_temp = 0; - std::string count_filename = input_filename[i] + ".UI.count"; - std::string grad_filename = input_filename[i] + ".UI.grad"; + std::string count_filename = filename[i] + ".UI.count"; + std::string grad_filename = filename[i] + ".UI.grad"; std::ifstream count_file(count_filename.c_str(), std::ios::in); std::ifstream grad_file(grad_filename.c_str(), std::ios::in); diff --git a/lib/colvars/colvaratoms.cpp b/lib/colvars/colvaratoms.cpp index 3315007b54..eeb7985fec 100644 --- a/lib/colvars/colvaratoms.cpp +++ b/lib/colvars/colvaratoms.cpp @@ -22,7 +22,7 @@ cvm::atom::atom() index = -1; id = -1; mass = 1.0; - charge = 1.0; + charge = 0.0; reset_data(); } @@ -107,6 +107,8 @@ cvm::atom_group::~atom_group() delete fitting_group; fitting_group = NULL; } + + cvm::main()->unregister_named_atom_group(this); } @@ -183,10 +185,7 @@ int cvm::atom_group::init() // These may be overwritten by parse(), if a name is provided atoms.clear(); - - // TODO: check with proxy whether atom forces etc are available - init_ag_requires(); - + init_dependencies(); index = -1; b_dummy = false; @@ -207,8 +206,67 @@ int cvm::atom_group::init() } +int cvm::atom_group::init_dependencies() { + size_t i; + // Initialize static array once and for all + if (features().size() == 0) { + for (i = 0; i < f_ag_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_ag_active, "active", f_type_dynamic); + init_feature(f_ag_center, "translational fit", f_type_static); + init_feature(f_ag_rotate, "rotational fit", f_type_static); + init_feature(f_ag_fitting_group, "fitting group", f_type_static); + init_feature(f_ag_explicit_gradient, "explicit atom gradient", f_type_dynamic); + init_feature(f_ag_fit_gradients, "fit gradients", f_type_user); + require_feature_self(f_ag_fit_gradients, f_ag_explicit_gradient); + + init_feature(f_ag_atom_forces, "atomic forces", f_type_dynamic); + + // parallel calculation implies that we have at least a scalable center of mass, + // but f_ag_scalable is kept as a separate feature to deal with future dependencies + init_feature(f_ag_scalable, "scalable group calculation", f_type_static); + init_feature(f_ag_scalable_com, "scalable group center of mass calculation", f_type_static); + require_feature_self(f_ag_scalable, f_ag_scalable_com); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_ag_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + // default as unavailable, not enabled + feature_states.reserve(f_ag_ntot); + for (i = 0; i < colvardeps::f_ag_ntot; i++) { + feature_states.push_back(feature_state(false, false)); + } + + // Features that are implemented (or not) by all atom groups + feature_states[f_ag_active].available = true; + // f_ag_scalable_com is provided by the CVC iff it is COM-based + feature_states[f_ag_scalable_com].available = false; + // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) + feature_states[f_ag_scalable].available = true; + feature_states[f_ag_fit_gradients].available = true; + feature_states[f_ag_fitting_group].available = true; + feature_states[f_ag_explicit_gradient].available = true; + + return COLVARS_OK; +} + + int cvm::atom_group::setup() { + if (atoms_ids.size() == 0) { + atoms_ids.reserve(atoms.size()); + for (cvm::atom_iter ai = atoms.begin(); ai != atoms.end(); ai++) { + atoms_ids.push_back(ai->id); + } + } for (cvm::atom_iter ai = atoms.begin(); ai != atoms.end(); ai++) { ai->update_mass(); ai->update_charge(); @@ -237,15 +295,6 @@ void cvm::atom_group::update_total_mass() } -void cvm::atom_group::reset_mass(std::string &name, int i, int j) -{ - update_total_mass(); - cvm::log("Re-initialized atom group "+name+":"+cvm::to_str(i)+"/"+ - cvm::to_str(j)+". "+ cvm::to_str(atoms_ids.size())+ - " atoms: total mass = "+cvm::to_str(total_mass)+".\n"); -} - - void cvm::atom_group::update_total_charge() { if (b_dummy) { @@ -264,6 +313,19 @@ void cvm::atom_group::update_total_charge() } +void cvm::atom_group::print_properties(std::string const &colvar_name, + int i, int j) +{ + if (cvm::proxy->updated_masses() && cvm::proxy->updated_charges()) { + cvm::log("Re-initialized atom group for variable \""+colvar_name+"\":"+ + cvm::to_str(i)+"/"+ + cvm::to_str(j)+". "+ cvm::to_str(atoms_ids.size())+ + " atoms: total mass = "+cvm::to_str(total_mass)+ + ", total charge = "+cvm::to_str(total_charge)+".\n"); + } +} + + int cvm::atom_group::parse(std::string const &group_conf) { cvm::log("Initializing atom group \""+key+"\".\n"); @@ -450,10 +512,21 @@ int cvm::atom_group::parse(std::string const &group_conf) if (cvm::debug()) cvm::log("Done initializing atom group \""+key+"\".\n"); - cvm::log("Atom group \""+key+"\" defined, "+ - cvm::to_str(atoms_ids.size())+" atoms initialized: total mass = "+ - cvm::to_str(total_mass)+", total charge = "+ - cvm::to_str(total_charge)+".\n"); + { + std::string init_msg; + init_msg.append("Atom group \""+key+"\" defined with "+ + cvm::to_str(atoms_ids.size())+" atoms requested"); + if ((cvm::proxy)->updated_masses()) { + init_msg.append(": total mass = "+ + cvm::to_str(total_mass)); + if ((cvm::proxy)->updated_charges()) { + init_msg.append(", total charge = "+ + cvm::to_str(total_charge)); + } + } + init_msg.append(".\n"); + cvm::log(init_msg); + } if (b_print_atom_ids) { cvm::log("Internal definition of the atom group:\n"); @@ -464,7 +537,7 @@ int cvm::atom_group::parse(std::string const &group_conf) } -int cvm::atom_group::add_atoms_of_group(atom_group const * ag) +int cvm::atom_group::add_atoms_of_group(atom_group const *ag) { std::vector const &source_ids = ag->atoms_ids; @@ -696,6 +769,7 @@ int cvm::atom_group::parse_fitting_options(std::string const &group_conf) return INPUT_ERROR; } } + enable(f_ag_fitting_group); } atom_group *group_for_fit = fitting_group ? fitting_group : this; @@ -800,24 +874,24 @@ int cvm::atom_group::create_sorted_ids() // Sort the internal IDs std::list sorted_atoms_ids_list; - for (size_t i = 0; i < this->size(); i++) { + for (size_t i = 0; i < atoms_ids.size(); i++) { sorted_atoms_ids_list.push_back(atoms_ids[i]); } sorted_atoms_ids_list.sort(); sorted_atoms_ids_list.unique(); - if (sorted_atoms_ids_list.size() != this->size()) { + if (sorted_atoms_ids_list.size() != atoms_ids.size()) { return cvm::error("Error: duplicate atom IDs in atom group? (found " + cvm::to_str(sorted_atoms_ids_list.size()) + " unique atom IDs instead of " + - cvm::to_str(this->size()) + ").\n", BUG_ERROR); + cvm::to_str(atoms_ids.size()) + ").\n", BUG_ERROR); } // Compute map between sorted and unsorted elements - sorted_atoms_ids.resize(this->size()); - sorted_atoms_ids_map.resize(this->size()); + sorted_atoms_ids.resize(atoms_ids.size()); + sorted_atoms_ids_map.resize(atoms_ids.size()); std::list::iterator lsii = sorted_atoms_ids_list.begin(); size_t ii = 0; - for ( ; ii < this->size(); lsii++, ii++) { + for ( ; ii < atoms_ids.size(); lsii++, ii++) { sorted_atoms_ids[ii] = *lsii; size_t const pos = std::find(atoms_ids.begin(), atoms_ids.end(), *lsii) - atoms_ids.begin(); @@ -1038,15 +1112,15 @@ int cvm::atom_group::calc_center_of_mass() } -int cvm::atom_group::calc_dipole(cvm::atom_pos const &com) +int cvm::atom_group::calc_dipole(cvm::atom_pos const &dipole_center) { if (b_dummy) { - cvm::error("Error: trying to compute the dipole of an empty group.\n", INPUT_ERROR); - return COLVARS_ERROR; + return cvm::error("Error: trying to compute the dipole " + "of a dummy group.\n", INPUT_ERROR); } dip.reset(); for (cvm::atom_const_iter ai = this->begin(); ai != this->end(); ai++) { - dip += ai->charge * (ai->pos - com); + dip += ai->charge * (ai->pos - dipole_center); } return COLVARS_OK; } @@ -1056,13 +1130,12 @@ void cvm::atom_group::set_weighted_gradient(cvm::rvector const &grad) { if (b_dummy) return; - if (is_enabled(f_ag_scalable)) { - scalar_com_gradient = grad; - return; - } + scalar_com_gradient = grad; - for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { - ai->grad = (ai->mass/total_mass) * grad; + if (!is_enabled(f_ag_scalable)) { + for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { + ai->grad = (ai->mass/total_mass) * grad; + } } } diff --git a/lib/colvars/colvaratoms.h b/lib/colvars/colvaratoms.h index 0b0dd62c70..9756e0e364 100644 --- a/lib/colvars/colvaratoms.h +++ b/lib/colvars/colvaratoms.h @@ -17,7 +17,7 @@ /// \brief Stores numeric id, mass and all mutable data for an atom, -/// mostly used by a \link cvc \endlink +/// mostly used by a \link colvar::cvc \endlink /// /// This class may be used to keep atomic data such as id, mass, /// position and collective variable derivatives) altogether. @@ -63,7 +63,7 @@ public: /// from the \link colvarvalue \endlink class), which is also the /// most frequent case. For more complex types of \link /// colvarvalue \endlink objects, atomic gradients should be - /// defined within the specific \link cvc \endlink + /// defined within the specific \link colvar::cvc \endlink /// implementation cvm::rvector grad; @@ -100,13 +100,19 @@ public: /// Get the latest value of the mass inline void update_mass() { - mass = (cvm::proxy)->get_atom_mass(index); + colvarproxy *p = cvm::proxy; + if (p->updated_masses()) { + mass = p->get_atom_mass(index); + } } /// Get the latest value of the charge inline void update_charge() { - charge = (cvm::proxy)->get_atom_charge(index); + colvarproxy *p = cvm::proxy; + if (p->updated_charges()) { + charge = p->get_atom_charge(index); + } } /// Get the current position @@ -145,7 +151,7 @@ public: /// \brief Group of \link atom \endlink objects, mostly used by a -/// \link cvc \endlink object to gather all atomic data +/// \link colvar::cvc \endlink object to gather all atomic data class colvarmodule::atom_group : public colvarparse, public colvardeps { @@ -174,6 +180,9 @@ public: /// \brief Set default values for common flags int init(); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Update data required to calculate cvc's int setup(); @@ -198,16 +207,16 @@ public: /// \brief Remove an atom object from this group int remove_atom(cvm::atom_iter ai); - /// \brief Re-initialize the total mass of a group. + /// \brief Print the updated the total mass and charge of a group. /// This is needed in case the hosting MD code has an option to /// change atom masses after their initialization. - void reset_mass(std::string &name, int i, int j); + void print_properties(std::string const &colvar_name, int i, int j); /// \brief Implementation of the feature list for atom group static std::vector ag_features; /// \brief Implementation of the feature list accessor for atom group - virtual const std::vector &features() + virtual const std::vector &features() const { return ag_features; } @@ -347,15 +356,19 @@ public: /// Total mass of the atom group cvm::real total_mass; + + /// Update the total mass of the atom group void update_total_mass(); /// Total charge of the atom group cvm::real total_charge; + + /// Update the total mass of the group void update_total_charge(); /// \brief Don't apply any force on this group (use its coordinates /// only to calculate a colvar) - bool noforce; + bool noforce; /// \brief Get the current positions void read_positions(); @@ -423,20 +436,32 @@ public: /// \brief Calculate the center of mass of the atomic positions, assuming that /// they are already pbc-wrapped int calc_center_of_mass(); + private: + /// \brief Center of mass cvm::atom_pos com; + /// \brief The derivative of a scalar variable with respect to the COM // TODO for scalable calculations of more complex variables (e.g. rotation), // use a colvarvalue of vectors to hold the entire derivative cvm::rvector scalar_com_gradient; + public: - /// \brief Return the center of mass of the atomic positions + + /// \brief Return the center of mass (COM) of the atomic positions inline cvm::atom_pos center_of_mass() const { return com; } + /// \brief Return previously gradient of scalar variable with respect to the + /// COM + inline cvm::rvector center_of_mass_scalar_gradient() const + { + return scalar_com_gradient; + } + /// \brief Return a copy of the current atom positions, shifted by a constant vector std::vector positions_shifted(cvm::rvector const &shift) const; @@ -444,10 +469,15 @@ public: std::vector velocities() const; ///\brief Calculate the dipole of the atom group around the specified center - int calc_dipole(cvm::atom_pos const &com); + int calc_dipole(cvm::atom_pos const &dipole_center); + private: + + /// Dipole moment of the atom group cvm::rvector dip; + public: + ///\brief Return the (previously calculated) dipole of the atom group inline cvm::rvector dipole() const { diff --git a/lib/colvars/colvarbias.cpp b/lib/colvars/colvarbias.cpp index 9363fcdcb6..724326d3b4 100644 --- a/lib/colvars/colvarbias.cpp +++ b/lib/colvars/colvarbias.cpp @@ -17,15 +17,14 @@ colvarbias::colvarbias(char const *key) : bias_type(to_lower_cppstr(key)) { - init_cvb_requires(); - + description = "uninitialized " + cvm::to_str(key) + " bias"; + init_dependencies(); rank = 1; has_data = false; b_output_energy = false; reset(); - state_file_step = 0; - description = "uninitialized " + cvm::to_str(key) + " bias"; + state_file_step = 0L; } @@ -76,6 +75,7 @@ int colvarbias::init(std::string const &conf) cvm::error("Error: no collective variables specified.\n", INPUT_ERROR); return INPUT_ERROR; } + } else { cvm::log("Reinitializing bias \""+name+"\".\n"); } @@ -98,6 +98,70 @@ int colvarbias::init(std::string const &conf) } +int colvarbias::init_dependencies() { + int i; + if (features().size() == 0) { + for (i = 0; i < f_cvb_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cvb_active, "active", f_type_dynamic); + require_feature_children(f_cvb_active, f_cv_active); + + init_feature(f_cvb_awake, "awake", f_type_static); + require_feature_self(f_cvb_awake, f_cvb_active); + + init_feature(f_cvb_apply_force, "apply force", f_type_user); + require_feature_children(f_cvb_apply_force, f_cv_gradient); + + init_feature(f_cvb_get_total_force, "obtain total force", f_type_dynamic); + require_feature_children(f_cvb_get_total_force, f_cv_total_force); + + init_feature(f_cvb_output_acc_work, "output accumulated work", f_type_user); + require_feature_self(f_cvb_output_acc_work, f_cvb_apply_force); + + init_feature(f_cvb_history_dependent, "history-dependent", f_type_static); + + init_feature(f_cvb_time_dependent, "time-dependent", f_type_static); + + init_feature(f_cvb_scalar_variables, "require scalar variables", f_type_static); + require_feature_children(f_cvb_scalar_variables, f_cv_scalar); + + init_feature(f_cvb_calc_pmf, "calculate a PMF", f_type_static); + + init_feature(f_cvb_calc_ti_samples, "calculate TI samples", f_type_dynamic); + require_feature_self(f_cvb_calc_ti_samples, f_cvb_get_total_force); + require_feature_children(f_cvb_calc_ti_samples, f_cv_grid); + + init_feature(f_cvb_write_ti_samples, "write TI samples ", f_type_user); + require_feature_self(f_cvb_write_ti_samples, f_cvb_calc_ti_samples); + + init_feature(f_cvb_write_ti_pmf, "write TI PMF", f_type_user); + require_feature_self(f_cvb_write_ti_pmf, f_cvb_calc_ti_samples); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cvb_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + feature_states.reserve(f_cvb_ntot); + for (i = 0; i < f_cvb_ntot; i++) { + feature_states.push_back(feature_state(true, false)); + // Most features are available, so we set them so + // and list exceptions below + } + + // only compute TI samples when deriving from colvarbias_ti + feature_states[f_cvb_calc_ti_samples].available = false; + + return COLVARS_OK; +} + + int colvarbias::reset() { bias_energy = 0.0; @@ -217,6 +281,9 @@ int colvarbias::update() void colvarbias::communicate_forces() { + if (! is_enabled(f_cvb_apply_force)) { + return; + } size_t i = 0; for (i = 0; i < num_variables(); i++) { if (cvm::debug()) { @@ -345,7 +412,8 @@ std::istream & colvarbias::read_state(std::istream &is) (set_state_params(conf) != COLVARS_OK) ) { cvm::error("Error: in reading state configuration for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -355,7 +423,8 @@ std::istream & colvarbias::read_state(std::istream &is) if (!read_state_data(is)) { cvm::error("Error: in reading state data for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -365,7 +434,8 @@ std::istream & colvarbias::read_state(std::istream &is) if (brace != "}") { cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ this->name+"\": no matching brace at position "+ - cvm::to_str(is.tellg())+" in stream.\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n"); is.setstate(std::ios::failbit); } @@ -381,7 +451,8 @@ std::istream & colvarbias::read_state_data_key(std::istream &is, char const *key !(key_in == to_lower_cppstr(std::string(key))) ) { cvm::error("Error: in reading restart configuration for "+ bias_type+" bias \""+this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -640,7 +711,7 @@ int colvarbias_ti::write_output_files() cvm::proxy->close_output_stream(ti_count_file_name); } - std::string const ti_grad_file_name(ti_output_prefix+".ti.grad"); + std::string const ti_grad_file_name(ti_output_prefix+".ti.force"); os = cvm::proxy->output_stream(ti_grad_file_name); if (os) { ti_avg_forces->write_multicol(*os); diff --git a/lib/colvars/colvarbias.h b/lib/colvars/colvarbias.h index 391826e79e..eac88a7f18 100644 --- a/lib/colvars/colvarbias.h +++ b/lib/colvars/colvarbias.h @@ -96,6 +96,9 @@ public: /// \brief Parse config string and (re)initialize virtual int init(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Set to zero all mutable data virtual int reset(); @@ -181,7 +184,7 @@ public: static std::vector cvb_features; /// \brief Implementation of the feature list accessor for colvarbias - virtual const std::vector &features() + virtual const std::vector &features() const { return cvb_features; } @@ -220,7 +223,7 @@ protected: bool has_data; /// \brief Step number read from the last state file - size_t state_file_step; + cvm::step_number state_file_step; }; diff --git a/lib/colvars/colvarbias_abf.cpp b/lib/colvars/colvarbias_abf.cpp index e5edd92ae6..bac021be99 100644 --- a/lib/colvars/colvarbias_abf.cpp +++ b/lib/colvars/colvarbias_abf.cpp @@ -191,10 +191,10 @@ int colvarbias_abf::init(std::string const &conf) // Projected ABF get_keyval(conf, "pABFintegrateFreq", pabf_freq, 0); // Parameters for integrating initial (and final) gradient data - get_keyval(conf, "integrateInitSteps", integrate_initial_steps, 1e4); + get_keyval(conf, "integrateInitMaxIterations", integrate_initial_iterations, 1e4); get_keyval(conf, "integrateInitTol", integrate_initial_tol, 1e-6); // for updating the integrated PMF on the fly - get_keyval(conf, "integrateSteps", integrate_steps, 100); + get_keyval(conf, "integrateMaxIterations", integrate_iterations, 100); get_keyval(conf, "integrateTol", integrate_tol, 1e-4); } } else { @@ -366,10 +366,10 @@ int colvarbias_abf::update() if ( b_integrate ) { if ( pabf_freq && cvm::step_relative() % pabf_freq == 0 ) { cvm::real err; - int iter = pmf->integrate(integrate_steps, integrate_tol, err); - if ( iter == integrate_steps ) { + int iter = pmf->integrate(integrate_iterations, integrate_tol, err); + if ( iter == integrate_iterations ) { cvm::log("Warning: PMF integration did not converge to " + cvm::to_str(integrate_tol) - + " in " + cvm::to_str(integrate_steps) + + " in " + cvm::to_str(integrate_iterations) + " steps. Residual error: " + cvm::to_str(err)); } pmf->set_zero_minimum(); // TODO: do this only when necessary @@ -597,7 +597,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app if (b_integrate) { // Do numerical integration (to high precision) and output a PMF cvm::real err; - pmf->integrate(integrate_initial_steps, integrate_initial_tol, err); + pmf->integrate(integrate_initial_iterations, integrate_initial_tol, err); pmf->set_zero_minimum(); std::string pmf_out_name = prefix + ".pmf"; @@ -661,7 +661,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app // Do numerical integration (to high precision) and output a PMF cvm::real err; czar_pmf->set_div(); - czar_pmf->integrate(integrate_initial_steps, integrate_initial_tol, err); + czar_pmf->integrate(integrate_initial_iterations, integrate_initial_tol, err); czar_pmf->set_zero_minimum(); std::string czar_pmf_out_name = prefix + ".czar.pmf"; diff --git a/lib/colvars/colvarbias_abf.h b/lib/colvars/colvarbias_abf.h index 52bf2df210..4bcc149da5 100644 --- a/lib/colvars/colvarbias_abf.h +++ b/lib/colvars/colvarbias_abf.h @@ -27,9 +27,13 @@ class colvarbias_abf : public colvarbias { public: + /// Constructor for ABF bias colvarbias_abf(char const *key); + /// Initializer for ABF bias virtual int init(std::string const &conf); + /// Default destructor for ABF bias virtual ~colvarbias_abf(); + /// Per-timestep update of ABF bias virtual int update(); private: @@ -40,11 +44,17 @@ private: /// Base filename(s) for reading previous gradient data (replaces data from restart file) std::vector input_prefix; + /// Adapt the bias at each time step (as opposed to keeping it constant)? bool update_bias; + /// Use normalized definition of PMF for distance functions? (flat at long distances) + /// by including the Jacobian term separately of the recorded PMF bool hide_Jacobian; + /// Integrate gradients into a PMF on output bool b_integrate; + /// Number of samples per bin before applying the full biasing force size_t full_samples; + /// Number of samples per bin before applying a scaled-down biasing force size_t min_samples; /// frequency for updating output files int output_freq; @@ -52,6 +62,7 @@ private: bool b_history_files; /// Write CZAR output file for stratified eABF (.zgrad) bool b_czar_window_file; + /// Number of timesteps between recording data in history files (if non-zero) size_t history_freq; /// Umbrella Integration estimator of free energy from eABF UIestimator::UIestimator eabf_UI; @@ -63,25 +74,30 @@ private: /// Frequency for updating pABF PMF (if zero, pABF is not used) int pabf_freq; /// Max number of CG iterations for integrating PMF at startup and for file output - int integrate_initial_steps; + int integrate_initial_iterations; /// Tolerance for integrating PMF at startup and for file output cvm::real integrate_initial_tol; /// Max number of CG iterations for integrating PMF at on-the-fly pABF updates - int integrate_steps; + int integrate_iterations; /// Tolerance for integrating PMF at on-the-fly pABF updates cvm::real integrate_tol; - /// Cap the biasing force to be applied? + /// Cap the biasing force to be applied? (option maxForce) bool cap_force; + /// Maximum force to be applied std::vector max_force; - // Frequency for updating 2D gradients - int integrate_freq; - // Internal data and methods - std::vector bin, force_bin, z_bin; - gradient_t system_force, applied_force; + /// Current bin in sample grid + std::vector bin; + /// Current bin in force grid + std::vector force_bin; + /// Cuurent bin in "actual" coordinate, when running extended Lagrangian dynamics + std::vector z_bin; + + /// Measured instantaneous system force + gradient_t system_force; /// n-dim grid of free energy gradients colvar_grid_gradient *gradients; @@ -118,7 +134,7 @@ private: // shared ABF bool shared_on; size_t shared_freq; - int shared_last_step; + cvm::step_number shared_last_step; // Share between replicas -- may be called independently of update virtual int replica_share(); diff --git a/lib/colvars/colvarbias_histogram.h b/lib/colvars/colvarbias_histogram.h index b9c1b49950..23565caa5c 100644 --- a/lib/colvars/colvarbias_histogram.h +++ b/lib/colvars/colvarbias_histogram.h @@ -37,7 +37,7 @@ protected: std::string out_name, out_name_dx; size_t output_freq; - /// If one or more of the variables are \link type_vector \endlink, treat them as arrays of this length + /// If one or more of the variables are \link colvarvalue::type_vector \endlink, treat them as arrays of this length size_t colvar_array_size; /// If colvar_array_size is larger than 1, weigh each one by this number before accumulating the histogram std::vector weights; diff --git a/lib/colvars/colvarbias_meta.cpp b/lib/colvars/colvarbias_meta.cpp index f3ae3631a0..27781ec733 100644 --- a/lib/colvars/colvarbias_meta.cpp +++ b/lib/colvars/colvarbias_meta.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include // used to set the absolute path of a replica file @@ -39,6 +38,8 @@ colvarbias_meta::colvarbias_meta(char const *key) new_hills_begin = hills.end(); hills_traj_os = NULL; replica_hills_os = NULL; + + ebmeta_equil_steps = 0L; } @@ -61,7 +62,7 @@ int colvarbias_meta::init(std::string const &conf) enable(f_cvb_history_dependent); } - get_keyval(conf, "hillWidth", hill_width, std::sqrt(2.0 * PI) / 2.0); + get_keyval(conf, "hillWidth", hill_width, cvm::sqrt(2.0 * PI) / 2.0); cvm::log("Half-widths of the Gaussian hills (sigma's):\n"); for (size_t i = 0; i < num_variables(); i++) { cvm::log(variables(i)->name+std::string(": ")+ @@ -201,6 +202,7 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf) } target_dist = new colvar_grid_scalar(); target_dist->init_from_colvars(colvars); + std::string target_dist_file; get_keyval(conf, "targetdistfile", target_dist_file); std::ifstream targetdiststream(target_dist_file.c_str()); target_dist->read_multicol(targetdiststream); @@ -221,9 +223,9 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf) } // normalize target distribution and multiply by effective volume = exp(differential entropy) target_dist->multiply_constant(1.0/target_dist->integral()); - cvm::real volume = std::exp(target_dist->entropy()); + cvm::real volume = cvm::exp(target_dist->entropy()); target_dist->multiply_constant(volume); - get_keyval(conf, "ebMetaEquilSteps", ebmeta_equil_steps, 0); + get_keyval(conf, "ebMetaEquilSteps", ebmeta_equil_steps, ebmeta_equil_steps); } return COLVARS_OK; @@ -291,7 +293,7 @@ colvarbias_meta::create_hill(colvarbias_meta::hill const &h) // need to be computed analytically when the colvar returns // off-grid cvm::real const min_dist = hills_energy->bin_distance_from_boundaries(h.centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(h); } } @@ -387,7 +389,7 @@ int colvarbias_meta::update_grid_params() // first of all, expand the grids, if specified bool changed_grids = false; int const min_buffer = - (3 * (size_t) std::floor(hill_width)) + 1; + (3 * (size_t) cvm::floor(hill_width)) + 1; std::vector new_sizes(hills_energy->sizes()); std::vector new_lower_boundaries(hills_energy->lower_boundaries); @@ -492,9 +494,9 @@ int colvarbias_meta::update_bias() if (ebmeta) { hills_scale *= 1.0/target_dist->value(target_dist->get_colvars_index()); - if(cvm::step_absolute() <= long(ebmeta_equil_steps)) { + if(cvm::step_absolute() <= ebmeta_equil_steps) { cvm::real const hills_lambda = - (cvm::real(long(ebmeta_equil_steps) - cvm::step_absolute())) / + (cvm::real(ebmeta_equil_steps - cvm::step_absolute())) / (cvm::real(ebmeta_equil_steps)); hills_scale = hills_lambda + (1-hills_lambda)*hills_scale; } @@ -508,7 +510,7 @@ int colvarbias_meta::update_bias() } else { calc_hills(new_hills_begin, hills.end(), hills_energy_sum_here); } - hills_scale *= std::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann())); + hills_scale *= cvm::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann())); } switch (comm) { @@ -710,7 +712,7 @@ void colvarbias_meta::calc_hills(colvarbias_meta::hill_iter h_first, // set it to zero if the exponent is more negative than log(1.0E-05) h->value(0.0); } else { - h->value(std::exp(-0.5*cv_sqdev)); + h->value(cvm::exp(-0.5*cv_sqdev)); } energy += h->energy(); } @@ -904,7 +906,7 @@ void colvarbias_meta::recount_hills_off_grid(colvarbias_meta::hill_iter h_first for (hill_iter h = h_first; h != h_last; h++) { cvm::real const min_dist = hills_energy->bin_distance_from_boundaries(h->centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(*h); } } @@ -1427,8 +1429,8 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) return is; } - size_t h_it; - get_keyval(data, "step", h_it, 0, parse_silent); + cvm::step_number h_it; + get_keyval(data, "step", h_it, 0L, parse_silent); if (h_it <= state_file_step) { if (cvm::debug()) cvm::log("Skipping a hill older than the state file for metadynamics bias \""+ @@ -1457,7 +1459,7 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) std::vector h_widths(num_variables()); get_keyval(data, "widths", h_widths, - std::vector(num_variables(), (std::sqrt(2.0 * PI) / 2.0)), + std::vector(num_variables(), (cvm::sqrt(2.0 * PI) / 2.0)), parse_silent); std::string h_replica = ""; @@ -1482,7 +1484,7 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) // be computed analytically cvm::real const min_dist = hills_energy->bin_distance_from_boundaries((hills.back()).centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(hills.back()); } } diff --git a/lib/colvars/colvarbias_meta.h b/lib/colvars/colvarbias_meta.h index 78b2d35d41..0ba2bef1c3 100644 --- a/lib/colvars/colvarbias_meta.h +++ b/lib/colvars/colvarbias_meta.h @@ -19,8 +19,8 @@ #include "colvargrid.h" /// Metadynamics bias (implementation of \link colvarbias \endlink) -class colvarbias_meta - : public virtual colvarbias, +class colvarbias_meta + : public virtual colvarbias, public virtual colvarbias_ti { @@ -174,12 +174,14 @@ protected: /// \brief Biasing temperature in well-tempered metadynamics cvm::real bias_temperature; - // EBmeta parameters + /// Ensemble-biased metadynamics (EBmeta) flag bool ebmeta; + + /// Target distribution for EBmeta colvar_grid_scalar* target_dist; - std::string target_dist_file; - cvm::real target_dist_volume; - size_t ebmeta_equil_steps; + + /// Number of equilibration steps for EBmeta + cvm::step_number ebmeta_equil_steps; /// \brief Try to read the restart information by allocating new @@ -285,7 +287,7 @@ public: friend class colvarbias_meta; /// Time step at which this hill was added - size_t it; + cvm::step_number it; /// Identity of the replica who added this hill (only in multiple replica simulations) std::string replica; @@ -296,9 +298,9 @@ public: /// replica (optional) Identity of the replica which creates the /// hill inline hill(cvm::real const &W_in, - std::vector &cv, - cvm::real const &hill_width, - std::string const &replica_in = "") + std::vector &cv, + cvm::real const &hill_width, + std::string const &replica_in = "") : sW(1.0), W(W_in), centers(cv.size()), @@ -325,11 +327,11 @@ public: /// weight Weight of the hill \param centers Center of the hill /// \param widths Width of the hill around centers \param replica /// (optional) Identity of the replica which creates the hill - inline hill(size_t const &it_in, - cvm::real const &W_in, - std::vector const ¢ers_in, - std::vector const &widths_in, - std::string const &replica_in = "") + inline hill(cvm::step_number const &it_in, + cvm::real const &W_in, + std::vector const ¢ers_in, + std::vector const &widths_in, + std::string const &replica_in = "") : sW(1.0), W(W_in), centers(centers_in), diff --git a/lib/colvars/colvarbias_restraint.cpp b/lib/colvars/colvarbias_restraint.cpp index 2daf7a0876..90588f5a1f 100644 --- a/lib/colvars/colvarbias_restraint.cpp +++ b/lib/colvars/colvarbias_restraint.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarproxy.h" #include "colvarvalue.h" @@ -179,7 +177,7 @@ int colvarbias_restraint_k::change_configuration(std::string const &conf) colvarbias_restraint_moving::colvarbias_restraint_moving(char const *key) { target_nstages = 0; - target_nsteps = 0; + target_nsteps = 0L; stage = 0; acc_work = 0.0; b_chg_centers = false; @@ -241,8 +239,8 @@ int colvarbias_restraint_moving::set_state_params(std::string const &conf) { if (b_chg_centers || b_chg_force_k) { if (target_nstages) { - if (!get_keyval(conf, "stage", stage)) - cvm::error("Error: current stage is missing from the restart.\n"); + get_keyval(conf, "stage", stage, stage, + colvarparse::parse_restart | colvarparse::parse_required); } } return COLVARS_OK; @@ -436,13 +434,13 @@ int colvarbias_restraint_centers_moving::set_state_params(std::string const &con colvarbias_restraint::set_state_params(conf); if (b_chg_centers) { - // cvm::log ("Reading the updated restraint centers from the restart.\n"); - if (!get_keyval(conf, "centers", colvar_centers)) - cvm::error("Error: restraint centers are missing from the restart.\n"); - if (is_enabled(f_cvb_output_acc_work)) { - if (!get_keyval(conf, "accumulatedWork", acc_work)) - cvm::error("Error: accumulatedWork is missing from the restart.\n"); - } + get_keyval(conf, "centers", colvar_centers, colvar_centers, + colvarparse::parse_restart | colvarparse::parse_required); + } + + if (is_enabled(f_cvb_output_acc_work)) { + get_keyval(conf, "accumulatedWork", acc_work, acc_work, + colvarparse::parse_restart | colvarparse::parse_required); } return COLVARS_OK; @@ -563,7 +561,7 @@ int colvarbias_restraint_k_moving::update() lambda = 0.0; } force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); cvm::log("Restraint " + this->name + ", stage " + cvm::to_str(stage) + " : lambda = " + cvm::to_str(lambda) + ", k = " + cvm::to_str(force_k)); @@ -585,7 +583,7 @@ int colvarbias_restraint_k_moving::update() for (size_t i = 0; i < num_variables(); i++) { dU_dk += d_restraint_potential_dk(i); } - restraint_FE += force_k_exp * std::pow(lambda, force_k_exp - 1.0) + restraint_FE += force_k_exp * cvm::pow(lambda, force_k_exp - 1.0) * (target_force_k - starting_force_k) * dU_dk; } @@ -608,7 +606,7 @@ int colvarbias_restraint_k_moving::update() lambda = cvm::real(stage) / cvm::real(target_nstages); } force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); cvm::log("Restraint " + this->name + ", stage " + cvm::to_str(stage) + " : lambda = " + cvm::to_str(lambda) + ", k = " + cvm::to_str(force_k)); @@ -622,7 +620,7 @@ int colvarbias_restraint_k_moving::update() lambda = cvm::real(cvm::step_absolute()) / cvm::real(target_nsteps); cvm::real const force_k_old = force_k; force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); force_k_incr = force_k - force_k_old; } } @@ -672,13 +670,13 @@ int colvarbias_restraint_k_moving::set_state_params(std::string const &conf) colvarbias_restraint::set_state_params(conf); if (b_chg_force_k) { - // cvm::log ("Reading the updated force constant from the restart.\n"); - if (!get_keyval(conf, "forceConstant", force_k, force_k)) - cvm::error("Error: force constant is missing from the restart.\n"); - if (is_enabled(f_cvb_output_acc_work)) { - if (!get_keyval(conf, "accumulatedWork", acc_work)) - cvm::error("Error: accumulatedWork is missing from the restart.\n"); - } + get_keyval(conf, "forceConstant", force_k, force_k, + colvarparse::parse_restart | colvarparse::parse_required); + } + + if (is_enabled(f_cvb_output_acc_work)) { + get_keyval(conf, "accumulatedWork", acc_work, acc_work, + colvarparse::parse_restart | colvarparse::parse_required); } return COLVARS_OK; @@ -719,7 +717,8 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) (set_state_params(conf) != COLVARS_OK) ) { cvm::error("Error: in reading state configuration for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -729,7 +728,8 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) if (!read_state_data(is)) { cvm::error("Error: in reading state data for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -740,7 +740,7 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) cvm::log("brace = "+brace+"\n"); cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ this->name+"\": no matching brace at position "+ - cvm::to_str(is.tellg())+" in stream.\n"); + cvm::to_str(static_cast(is.tellg()))+" in stream.\n"); is.setstate(std::ios::failbit); } @@ -787,11 +787,11 @@ int colvarbias_restraint_harmonic::init(std::string const &conf) colvarbias_restraint_k_moving::init(conf); for (size_t i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The force constant for colvar \""+variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(force_k / (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The force constant for colvar \""+variables(i)->name+ + "\" will be rescaled to "+ + cvm::to_str(force_k/(w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } return COLVARS_OK; @@ -1014,7 +1014,7 @@ int colvarbias_restraint_harmonic_walls::init(std::string const &conf) INPUT_ERROR); return INPUT_ERROR; } - force_k = std::sqrt(lower_wall_k * upper_wall_k); + force_k = cvm::sqrt(lower_wall_k * upper_wall_k); // transform the two constants to relative values using gemetric mean as ref // to preserve force_k if provided as single parameter // (allow changing both via force_k) @@ -1037,25 +1037,21 @@ int colvarbias_restraint_harmonic_walls::init(std::string const &conf) if (lower_walls.size() > 0) { for (i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The lower wall force constant for colvar \""+ - variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(lower_wall_k * force_k / - (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The lower wall force constant for colvar \""+ + variables(i)->name+"\" will be rescaled to "+ + cvm::to_str(lower_wall_k * force_k / (w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } } if (upper_walls.size() > 0) { for (i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The upper wall force constant for colvar \""+ - variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(upper_wall_k * force_k / - (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The upper wall force constant for colvar \""+ + variables(i)->name+"\" will be rescaled to "+ + cvm::to_str(upper_wall_k * force_k / (w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } } @@ -1225,11 +1221,11 @@ int colvarbias_restraint_linear::init(std::string const &conf) INPUT_ERROR); return INPUT_ERROR; } - if (variables(i)->width != 1.0) - cvm::log("The force constant for colvar \""+variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(force_k / variables(i)->width)+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The force constant for colvar \""+variables(i)->name+ + "\" will be rescaled to "+ + cvm::to_str(force_k / w)+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } return COLVARS_OK; @@ -1367,6 +1363,7 @@ colvarbias_restraint_histogram::colvarbias_restraint_histogram(char const *key) int colvarbias_restraint_histogram::init(std::string const &conf) { colvarbias::init(conf); + enable(f_cvb_apply_force); get_keyval(conf, "lowerBoundary", lower_boundary, lower_boundary); get_keyval(conf, "upperBoundary", upper_boundary, upper_boundary); @@ -1390,7 +1387,7 @@ int colvarbias_restraint_histogram::init(std::string const &conf) cvm::real const nbins = (upper_boundary - lower_boundary) / width; int const nbins_round = (int)(nbins); - if (std::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { + if (cvm::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { cvm::log("Warning: grid interval ("+ cvm::to_str(lower_boundary, cvm::cv_width, cvm::cv_prec)+" - "+ cvm::to_str(upper_boundary, cvm::cv_width, cvm::cv_prec)+ @@ -1440,7 +1437,7 @@ int colvarbias_restraint_histogram::init(std::string const &conf) } } cvm::real const ref_integral = ref_p.sum() * width; - if (std::fabs(ref_integral - 1.0) > 1.0e-03) { + if (cvm::fabs(ref_integral - 1.0) > 1.0e-03) { cvm::log("Reference distribution not normalized, normalizing to unity.\n"); ref_p /= ref_integral; } @@ -1471,7 +1468,7 @@ int colvarbias_restraint_histogram::update() vector_size += variables(icv)->value().size(); } - cvm::real const norm = 1.0/(std::sqrt(2.0*PI)*gaussian_width*vector_size); + cvm::real const norm = 1.0/(cvm::sqrt(2.0*PI)*gaussian_width*vector_size); // calculate the histogram p.reset(); @@ -1482,7 +1479,7 @@ int colvarbias_restraint_histogram::update() size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); - p[igrid] += norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + p[igrid] += norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)); } } else if (cv.type() == colvarvalue::type_vector) { @@ -1492,7 +1489,7 @@ int colvarbias_restraint_histogram::update() size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); - p[igrid] += norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + p[igrid] += norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)); } } @@ -1523,7 +1520,7 @@ int colvarbias_restraint_histogram::update() for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); force += force_k_cv * p_diff[igrid] * - norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)) * (-1.0 * (x_grid - cv_value) / (gaussian_width * gaussian_width)); } @@ -1536,7 +1533,7 @@ int colvarbias_restraint_histogram::update() for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); force += force_k_cv * p_diff[igrid] * - norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)) * (-1.0 * (x_grid - cv_value) / (gaussian_width * gaussian_width)); } @@ -1550,7 +1547,7 @@ int colvarbias_restraint_histogram::update() } -std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) +int colvarbias_restraint_histogram::write_output_files() { if (b_write_histogram) { std::string file_name(cvm::output_prefix()+"."+this->name+".hist.dat"); @@ -1558,6 +1555,9 @@ std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) *os << "# " << cvm::wrap_string(variables(0)->name, cvm::cv_width) << " " << "p(" << cvm::wrap_string(variables(0)->name, cvm::cv_width-3) << ")\n"; + + os->setf(std::ios::fixed, std::ios::floatfield); + size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+1)*width); @@ -1572,13 +1572,7 @@ std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) } cvm::proxy->close_output_stream(file_name); } - return os; -} - - -std::istream & colvarbias_restraint_histogram::read_restart(std::istream &is) -{ - return is; + return COLVARS_OK; } diff --git a/lib/colvars/colvarbias_restraint.h b/lib/colvars/colvarbias_restraint.h index 3ee999c262..6493f7f16b 100644 --- a/lib/colvars/colvarbias_restraint.h +++ b/lib/colvars/colvarbias_restraint.h @@ -132,7 +132,7 @@ protected: /// \brief Number of steps required to reach the target force constant /// or restraint centers - long target_nsteps; + cvm::step_number target_nsteps; /// \brief Accumulated work (computed when outputAccumulatedWork == true) cvm::real acc_work; @@ -328,8 +328,7 @@ public: virtual int update(); - virtual std::istream & read_restart(std::istream &is); - virtual std::ostream & write_restart(std::ostream &os); + virtual int write_output_files(); virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); diff --git a/lib/colvars/colvarcomp.cpp b/lib/colvars/colvarcomp.cpp index cb272eed05..3075ed82ca 100644 --- a/lib/colvars/colvarcomp.cpp +++ b/lib/colvars/colvarcomp.cpp @@ -20,7 +20,8 @@ colvar::cvc::cvc() b_periodic(false), b_try_scalable(true) { - init_cvc_requires(); + description = "uninitialized colvar component"; + init_dependencies(); sup_coeff = 1.0; period = 0.0; wrap_center = 0.0; @@ -33,7 +34,8 @@ colvar::cvc::cvc(std::string const &conf) b_periodic(false), b_try_scalable(true) { - init_cvc_requires(); + description = "uninitialized colvar component"; + init_dependencies(); sup_coeff = 1.0; period = 0.0; wrap_center = 0.0; @@ -176,6 +178,100 @@ cvm::atom_group *colvar::cvc::parse_group(std::string const &conf, } +int colvar::cvc::init_dependencies() { + size_t i; + // Initialize static array once and for all + if (features().size() == 0) { + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cvc_active, "active", f_type_dynamic); +// The dependency below may become useful if we use dynamic atom groups +// require_feature_children(f_cvc_active, f_ag_active); + + init_feature(f_cvc_scalar, "scalar", f_type_static); + + init_feature(f_cvc_gradient, "gradient", f_type_dynamic); + + init_feature(f_cvc_explicit_gradient, "explicit gradient", f_type_static); + require_feature_children(f_cvc_explicit_gradient, f_ag_explicit_gradient); + + init_feature(f_cvc_inv_gradient, "inverse gradient", f_type_dynamic); + require_feature_self(f_cvc_inv_gradient, f_cvc_gradient); + + init_feature(f_cvc_debug_gradient, "debug gradient", f_type_user); + require_feature_self(f_cvc_debug_gradient, f_cvc_gradient); + require_feature_self(f_cvc_debug_gradient, f_cvc_explicit_gradient); + + init_feature(f_cvc_Jacobian, "Jacobian derivative", f_type_dynamic); + require_feature_self(f_cvc_Jacobian, f_cvc_inv_gradient); + + init_feature(f_cvc_com_based, "depends on group centers of mass", f_type_static); + + init_feature(f_cvc_pbc_minimum_image, "use minimum-image distances with PBCs", f_type_user); + + // Compute total force on first site only to avoid unwanted + // coupling to other colvars (see e.g. Ciccotti et al., 2005) + init_feature(f_cvc_one_site_total_force, "compute total force from one group", f_type_user); + require_feature_self(f_cvc_one_site_total_force, f_cvc_com_based); + + init_feature(f_cvc_scalable, "scalable calculation", f_type_static); + require_feature_self(f_cvc_scalable, f_cvc_scalable_com); + + init_feature(f_cvc_scalable_com, "scalable calculation of centers of mass", f_type_static); + require_feature_self(f_cvc_scalable_com, f_cvc_com_based); + + + // TODO only enable this when f_ag_scalable can be turned on for a pre-initialized group + // require_feature_children(f_cvc_scalable, f_ag_scalable); + // require_feature_children(f_cvc_scalable_com, f_ag_scalable_com); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + // default as available, not enabled + // except dynamic features which default as unavailable + feature_states.reserve(f_cvc_ntot); + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + bool avail = is_dynamic(i) ? false : true; + feature_states.push_back(feature_state(avail, false)); + } + + // Features that are implemented by all cvcs by default + // Each cvc specifies what other features are available + feature_states[f_cvc_active].available = true; + feature_states[f_cvc_gradient].available = true; + + // CVCs are enabled from the start - get disabled based on flags + enable(f_cvc_active); + // feature_states[f_cvc_active].enabled = true; + + // Explicit gradients are implemented in mosts CVCs. Exceptions must be specified explicitly. + // feature_states[f_cvc_explicit_gradient].enabled = true; + enable(f_cvc_explicit_gradient); + + // Use minimum-image distances by default + // feature_states[f_cvc_pbc_minimum_image].enabled = true; + enable(f_cvc_pbc_minimum_image); + + // Features that are implemented by default if their requirements are + feature_states[f_cvc_one_site_total_force].available = true; + + // Features That are implemented only for certain simulation engine configurations + feature_states[f_cvc_scalable_com].available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); + feature_states[f_cvc_scalable].available = feature_states[f_cvc_scalable_com].available; + + return COLVARS_OK; +} + + int colvar::cvc::setup() { description = "cvc " + name; @@ -192,6 +288,7 @@ colvar::cvc::~cvc() } } + void colvar::cvc::read_data() { size_t ig; @@ -214,6 +311,66 @@ void colvar::cvc::read_data() } +std::vector > colvar::cvc::get_atom_lists() +{ + std::vector > lists; + + std::vector::iterator agi = atom_groups.begin(); + for ( ; agi != atom_groups.end(); ++agi) { + (*agi)->create_sorted_ids(); + lists.push_back((*agi)->sorted_ids()); + if ((*agi)->is_enabled(f_ag_fitting_group) && (*agi)->is_enabled(f_ag_fit_gradients)) { + cvm::atom_group &fg = *((*agi)->fitting_group); + fg.create_sorted_ids(); + lists.push_back(fg.sorted_ids()); + } + } + return lists; +} + + +void colvar::cvc::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + // Coefficient: d(a * x^n) = a * n * x^(n-1) * dx + cvm::real coeff = sup_coeff * cvm::real(sup_np) * + cvm::integer_power(value().real_value, sup_np-1); + + for (size_t j = 0; j < atom_groups.size(); j++) { + + cvm::atom_group &ag = *(atom_groups[j]); + + // If necessary, apply inverse rotation to get atomic + // gradient in the laboratory frame + if (ag.b_rotate) { + cvm::rotation const rot_inv = ag.rot.inverse(); + + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * rot_inv.rotate(ag[k].grad); + } + + } else { + + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + if (ag.is_enabled(f_ag_fitting_group) && ag.is_enabled(f_ag_fit_gradients)) { + cvm::atom_group const &fg = *(ag.fitting_group); + for (size_t k = 0; k < fg.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + fg[k].id) - atom_ids.begin(); + // fit gradients are in the unrotated (simulation) frame + atomic_gradients[a] += coeff * fg.fit_gradients[k]; + } + } + } +} + + void colvar::cvc::calc_force_invgrads() { cvm::error("Error: calculation of inverse gradients is not implemented " @@ -306,8 +463,8 @@ void colvar::cvc::debug_gradients() cvm::log("dx(interp) = "+cvm::to_str(dx_pred, 21, 14)+"\n"); cvm::log("|dx(actual) - dx(interp)|/|dx(actual)| = "+ - cvm::to_str(std::fabs(x_1 - x_0 - dx_pred) / - std::fabs(x_1 - x_0), 12, 5)+"\n"); + cvm::to_str(cvm::fabs(x_1 - x_0 - dx_pred) / + cvm::fabs(x_1 - x_0), 12, 5)+"\n"); } } @@ -341,8 +498,8 @@ void colvar::cvc::debug_gradients() cvm::log("dx(interp) = "+cvm::to_str (dx_pred, 21, 14)+"\n"); cvm::log ("|dx(actual) - dx(interp)|/|dx(actual)| = "+ - cvm::to_str(std::fabs (x_1 - x_0 - dx_pred) / - std::fabs (x_1 - x_0), + cvm::to_str(cvm::fabs (x_1 - x_0 - dx_pred) / + cvm::fabs (x_1 - x_0), 12, 5)+ ".\n"); } @@ -378,7 +535,7 @@ colvarvalue colvar::cvc::dist2_rgrad(colvarvalue const &x1, } -void colvar::cvc::wrap(colvarvalue &x) const +void colvar::cvc::wrap(colvarvalue &x_unwrapped) const { return; } diff --git a/lib/colvars/colvarcomp.h b/lib/colvars/colvarcomp.h index 1a6df3771e..f615680ba6 100644 --- a/lib/colvars/colvarcomp.h +++ b/lib/colvars/colvarcomp.h @@ -27,12 +27,12 @@ /// \brief Colvar component (base class for collective variables) /// -/// A \link cvc \endlink object (or an object of a +/// A \link colvar::cvc \endlink object (or an object of a /// cvc-derived class) implements the calculation of a collective /// variable, its gradients and any other related physical quantities /// that depend on microscopic degrees of freedom. /// -/// No restriction is set to what kind of calculation a \link cvc \endlink +/// No restriction is set to what kind of calculation a \link colvar::cvc \endlink /// object performs (usually an analytical function of atomic coordinates). /// The only constraints are that: \par /// @@ -42,9 +42,9 @@ /// alike, and allows an automatic selection of the applicable algorithms. /// /// - The object provides an implementation \link apply_force() \endlink to -/// apply forces to atoms. Typically, one or more \link cvm::atom_group +/// apply forces to atoms. Typically, one or more \link colvarmodule::atom_group /// \endlink objects are used, but this is not a requirement for as long as -/// the \link cvc \endlink object communicates with the simulation program. +/// the \link colvar::cvc \endlink object communicates with the simulation program. /// /// If you wish to implement a new collective variable component, you /// should write your own class by inheriting directly from \link @@ -75,9 +75,9 @@ public: /// \brief Description of the type of collective variable /// /// Normally this string is set by the parent \link colvar \endlink - /// object within its constructor, when all \link cvc \endlink + /// object within its constructor, when all \link colvar::cvc \endlink /// objects are initialized; therefore the main "config string" - /// constructor does not need to define it. If a \link cvc + /// constructor does not need to define it. If a \link colvar::cvc /// \endlink is initialized and/or a different constructor is used, /// this variable definition should be set within the constructor. std::string function_type; @@ -109,6 +109,9 @@ public: /// cvc \endlink virtual int init(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Within the constructor, make a group parse its own /// options from the provided configuration string /// Returns reference to new group @@ -122,7 +125,7 @@ public: /// \brief After construction, set data related to dependency handling int setup(); - /// \brief Default constructor (used when \link cvc \endlink + /// \brief Default constructor (used when \link colvar::cvc \endlink /// objects are declared within other ones) cvc(); @@ -133,7 +136,7 @@ public: static std::vector cvc_features; /// \brief Implementation of the feature list accessor for colvar - virtual const std::vector &features() + virtual const std::vector &features() const { return cvc_features; } @@ -148,6 +151,9 @@ public: cvc_features.clear(); } + /// \brief Get vector of vectors of atom IDs for all atom groups + virtual std::vector > get_atom_lists(); + /// \brief Obtain data needed for the calculation for the backend virtual void read_data(); @@ -164,6 +170,10 @@ public: /// \brief Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component virtual void debug_gradients(); + /// \brief Calculate atomic gradients and add them to the corresponding item in gradient vector + /// May be overridden by CVCs that do not store their gradients in the classic way, see dihedPC + virtual void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); + /// \brief Calculate the total force from the system using the /// inverse atomic gradients virtual void calc_force_invgrads(); @@ -237,7 +247,7 @@ public: colvarvalue const &x2) const; /// \brief Wrap value (for periodic/symmetric cvcs) - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; /// \brief Pointers to all atom groups, to let colvars collect info /// e.g. atomic gradients @@ -246,7 +256,7 @@ public: /// \brief Store a pointer to new atom group, and list as child for dependencies inline void register_atom_group(cvm::atom_group *ag) { atom_groups.push_back(ag); - add_child((colvardeps *) ag); + add_child(ag); } /// \brief Whether or not this CVC will be computed in parallel whenever possible @@ -415,7 +425,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// \brief Redefined to make use of the user-provided period - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -474,7 +484,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -559,6 +569,35 @@ public: +/// \brief Colvar component: dipole magnitude of a molecule +class colvar::dipole_magnitude + : public colvar::cvc +{ +protected: + /// Dipole atom group + cvm::atom_group *atoms; + cvm::atom_pos dipoleV; +public: + /// Initialize by parsing the configuration + dipole_magnitude (std::string const &conf); + dipole_magnitude (cvm::atom const &a1); + dipole_magnitude(); + virtual inline ~dipole_magnitude() {} + virtual void calc_value(); + virtual void calc_gradients(); + //virtual void calc_force_invgrads(); + //virtual void calc_Jacobian_derivative(); + virtual void apply_force (colvarvalue const &force); + virtual cvm::real dist2 (colvarvalue const &x1, + colvarvalue const &x2) const; + virtual colvarvalue dist2_lgrad (colvarvalue const &x1, + colvarvalue const &x2) const; + virtual colvarvalue dist2_rgrad (colvarvalue const &x1, + colvarvalue const &x2) const; +}; + + + /// \brief Colvar component: Radius of gyration of an atom group /// (colvarvalue::type_scalar type, range [0:*)) class colvar::gyration @@ -818,7 +857,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1002,7 +1041,7 @@ public: cvm::atom const &donor, cvm::real r0, int en, int ed); h_bond(); - virtual ~h_bond(); + virtual ~h_bond() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1090,6 +1129,8 @@ public: virtual ~alpha_angles(); void calc_value(); void calc_gradients(); + /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs + void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); void apply_force(colvarvalue const &force); virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -1120,6 +1161,8 @@ public: virtual ~dihedPC(); void calc_value(); void calc_gradients(); + /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs + void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); void apply_force(colvarvalue const &force); virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -1159,6 +1202,7 @@ public: orientation(std::string const &conf); orientation(); + virtual int init(std::string const &conf); virtual ~orientation() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1183,6 +1227,7 @@ public: orientation_angle(std::string const &conf); orientation_angle(); + virtual int init(std::string const &conf); virtual ~orientation_angle() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1207,6 +1252,7 @@ public: orientation_proj(std::string const &conf); orientation_proj(); + virtual int init(std::string const &conf); virtual ~orientation_proj() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1234,6 +1280,7 @@ public: tilt(std::string const &conf); tilt(); + virtual int init(std::string const &conf); virtual ~tilt() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1261,6 +1308,7 @@ public: spin_angle(std::string const &conf); spin_angle(); + virtual int init(std::string const &conf); virtual ~spin_angle() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1275,7 +1323,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; diff --git a/lib/colvars/colvarcomp_angles.cpp b/lib/colvars/colvarcomp_angles.cpp index 9f879a4c41..97fb23b181 100644 --- a/lib/colvars/colvarcomp_angles.cpp +++ b/lib/colvars/colvarcomp_angles.cpp @@ -11,9 +11,6 @@ #include "colvar.h" #include "colvarcomp.h" -#include - - colvar::angle::angle(std::string const &conf) : cvc(conf) @@ -77,14 +74,14 @@ void colvar::angle::calc_value() cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - x.real_value = (180.0/PI) * std::acos(cos_theta); + x.real_value = (180.0/PI) * cvm::acos(cos_theta); } void colvar::angle::calc_gradients() { cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - cvm::real const dxdcos = -1.0 / std::sqrt(1.0 - cos_theta*cos_theta); + cvm::real const dxdcos = -1.0 / cvm::sqrt(1.0 - cos_theta*cos_theta); dxdr1 = (180.0/PI) * dxdcos * (1.0/r21l) * ( r23/r23l + (-1.0) * cos_theta * r21/r21l ); @@ -126,7 +123,7 @@ void colvar::angle::calc_Jacobian_derivative() // det(J) = (2 pi) r^2 * sin(theta) // hence Jd = cot(theta) const cvm::real theta = x.real_value * PI / 180.0; - jd = PI / 180.0 * (theta != 0.0 ? std::cos(theta) / std::sin(theta) : 0.0); + jd = PI / 180.0 * (theta != 0.0 ? cvm::cos(theta) / cvm::sin(theta) : 0.0); } @@ -202,7 +199,7 @@ void colvar::dipole_angle::calc_value() cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - x.real_value = (180.0/PI) * std::acos(cos_theta); + x.real_value = (180.0/PI) * cvm::acos(cos_theta); } //to be implemented @@ -212,7 +209,7 @@ void colvar::dipole_angle::calc_value() void colvar::dipole_angle::calc_gradients() { cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - cvm::real const dxdcos = -1.0 / std::sqrt(1.0 - cos_theta*cos_theta); + cvm::real const dxdcos = -1.0 / cvm::sqrt(1.0 - cos_theta*cos_theta); dxdr1 = (180.0/PI) * dxdcos * (1.0/r21l)* (r23/r23l + (-1.0) * cos_theta * r21/r21l ); @@ -346,7 +343,7 @@ void colvar::dihedral::calc_value() cvm::real const cos_phi = n1 * n2; cvm::real const sin_phi = n1 * r34 * r23.norm(); - x.real_value = (180.0/PI) * std::atan2(sin_phi, cos_phi); + x.real_value = (180.0/PI) * cvm::atan2(sin_phi, cos_phi); this->wrap(x); } @@ -368,7 +365,7 @@ void colvar::dihedral::calc_gradients() rB = 1.0/rB; B *= rB; - if (std::fabs(sin_phi) > 0.1) { + if (cvm::fabs(sin_phi) > 0.1) { rA = 1.0/rA; A *= rA; cvm::rvector const dcosdA = rA*(cos_phi*A-B); @@ -440,8 +437,8 @@ void colvar::dihedral::calc_force_invgrads() cvm::real const dot1 = u23 * u12; cvm::real const dot4 = u23 * u34; - cvm::real const fact1 = d12 * std::sqrt(1.0 - dot1 * dot1); - cvm::real const fact4 = d34 * std::sqrt(1.0 - dot4 * dot4); + cvm::real const fact1 = d12 * cvm::sqrt(1.0 - dot1 * dot1); + cvm::real const fact4 = d34 * cvm::sqrt(1.0 - dot4 * dot4); group1->read_total_forces(); if (is_enabled(f_cvc_one_site_total_force)) { @@ -508,19 +505,17 @@ colvarvalue colvar::dihedral::dist2_rgrad(colvarvalue const &x1, } -void colvar::dihedral::wrap(colvarvalue &x) const +void colvar::dihedral::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } - - return; } @@ -548,8 +543,8 @@ void colvar::polar_theta::calc_value() cvm::rvector pos = atoms->center_of_mass(); r = atoms->center_of_mass().norm(); // Internal values of theta and phi are radians - theta = (r > 0.) ? std::acos(pos.z / r) : 0.; - phi = std::atan2(pos.y, pos.x); + theta = (r > 0.) ? cvm::acos(pos.z / r) : 0.; + phi = cvm::atan2(pos.y, pos.x); x.real_value = (180.0/PI) * theta; } @@ -560,9 +555,9 @@ void colvar::polar_theta::calc_gradients() atoms->set_weighted_gradient(cvm::rvector(0., 0., 0.)); else atoms->set_weighted_gradient(cvm::rvector( - (180.0/PI) * std::cos(theta) * std::cos(phi) / r, - (180.0/PI) * std::cos(theta) * std::sin(phi) / r, - (180.0/PI) * -std::sin(theta) / r)); + (180.0/PI) * cvm::cos(theta) * cvm::cos(phi) / r, + (180.0/PI) * cvm::cos(theta) * cvm::sin(phi) / r, + (180.0/PI) * -cvm::sin(theta) / r)); } @@ -602,8 +597,8 @@ void colvar::polar_phi::calc_value() cvm::rvector pos = atoms->center_of_mass(); r = atoms->center_of_mass().norm(); // Internal values of theta and phi are radians - theta = (r > 0.) ? std::acos(pos.z / r) : 0.; - phi = std::atan2(pos.y, pos.x); + theta = (r > 0.) ? cvm::acos(pos.z / r) : 0.; + phi = cvm::atan2(pos.y, pos.x); x.real_value = (180.0/PI) * phi; } @@ -611,8 +606,8 @@ void colvar::polar_phi::calc_value() void colvar::polar_phi::calc_gradients() { atoms->set_weighted_gradient(cvm::rvector( - (180.0/PI) * -std::sin(phi) / (r*std::sin(theta)), - (180.0/PI) * std::cos(phi) / (r*std::sin(theta)), + (180.0/PI) * -cvm::sin(phi) / (r*cvm::sin(theta)), + (180.0/PI) * cvm::cos(phi) / (r*cvm::sin(theta)), 0.)); } @@ -653,15 +648,15 @@ colvarvalue colvar::polar_phi::dist2_rgrad(colvarvalue const &x1, } -void colvar::polar_phi::wrap(colvarvalue &x) const +void colvar::polar_phi::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } diff --git a/lib/colvars/colvarcomp_coordnums.cpp b/lib/colvars/colvarcomp_coordnums.cpp index ec53391ef5..059b0c825b 100644 --- a/lib/colvars/colvarcomp_coordnums.cpp +++ b/lib/colvars/colvarcomp_coordnums.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarparse.h" #include "colvaratoms.h" @@ -102,6 +100,12 @@ colvar::coordnum::coordnum(std::string const &conf) group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); + if (group1 == NULL || group2 == NULL) { + cvm::error("Error: failed to initialize atom groups.\n", + INPUT_ERROR); + return; + } + if (int atom_number = cvm::atom_group::overlap(*group1, *group2)) { cvm::error("Error: group1 and group2 share a common atom (number: " + cvm::to_str(atom_number) + ")\n", INPUT_ERROR); @@ -408,12 +412,6 @@ colvar::h_bond::h_bond() } -colvar::h_bond::~h_bond() -{ - delete atom_groups[0]; -} - - void colvar::h_bond::calc_value() { int const flags = coordnum::ef_null; @@ -655,8 +653,6 @@ colvar::groupcoordnum::groupcoordnum() void colvar::groupcoordnum::calc_value() { - cvm::rvector const r0_vec(0.0); // TODO enable the flag? - // create fake atoms to hold the com coordinates cvm::atom group1_com_atom; cvm::atom group2_com_atom; @@ -680,8 +676,6 @@ void colvar::groupcoordnum::calc_value() void colvar::groupcoordnum::calc_gradients() { - cvm::rvector const r0_vec(0.0); // TODO enable the flag? - cvm::atom group1_com_atom; cvm::atom group2_com_atom; group1_com_atom.pos = group1->center_of_mass(); diff --git a/lib/colvars/colvarcomp_distances.cpp b/lib/colvars/colvarcomp_distances.cpp index a2b1a5cd23..d9cd9d55e4 100644 --- a/lib/colvars/colvarcomp_distances.cpp +++ b/lib/colvars/colvarcomp_distances.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -102,7 +100,7 @@ colvar::distance_vec::distance_vec(std::string const &conf) { function_type = "distance_vec"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_3vector); } @@ -112,7 +110,7 @@ colvar::distance_vec::distance_vec() { function_type = "distance_vec"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_3vector); } @@ -320,7 +318,7 @@ cvm::real colvar::distance_z::dist2(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return diff * diff; @@ -332,7 +330,7 @@ colvarvalue colvar::distance_z::dist2_lgrad(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return 2.0 * diff; @@ -344,22 +342,23 @@ colvarvalue colvar::distance_z::dist2_rgrad(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return (-2.0) * diff; } -void colvar::distance_z::wrap(colvarvalue &x) const +void colvar::distance_z::wrap(colvarvalue &x_unwrapped) const { if (!b_periodic) { // don't wrap if the period has not been set return; } - cvm::real shift = std::floor((x.real_value - wrap_center) / period + 0.5); - x.real_value -= shift * period; + cvm::real shift = + cvm::floor((x_unwrapped.real_value - wrap_center) / period + 0.5); + x_unwrapped.real_value -= shift * period; return; } @@ -481,7 +480,7 @@ colvar::distance_dir::distance_dir(std::string const &conf) { function_type = "distance_dir"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_unit3vector); } @@ -491,7 +490,7 @@ colvar::distance_dir::distance_dir() { function_type = "distance_dir"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_unit3vector); } @@ -629,7 +628,7 @@ void colvar::distance_inv::calc_value() } x.real_value *= 1.0 / cvm::real(group1->size() * group2->size()); - x.real_value = std::pow(x.real_value, -1.0/cvm::real(exponent)); + x.real_value = cvm::pow(x.real_value, -1.0/cvm::real(exponent)); cvm::real const dxdsum = (-1.0/(cvm::real(exponent))) * cvm::integer_power(x.real_value, exponent+1) / @@ -671,7 +670,7 @@ colvar::distance_pairs::distance_pairs(std::string const &conf) group2 = parse_group(conf, "group2"); x.type(colvarvalue::type_vector); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.vector1d_value.resize(group1->size() * group2->size()); } @@ -679,7 +678,7 @@ colvar::distance_pairs::distance_pairs(std::string const &conf) colvar::distance_pairs::distance_pairs() { function_type = "distance_pairs"; - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_vector); } @@ -747,6 +746,63 @@ void colvar::distance_pairs::apply_force(colvarvalue const &force) +colvar::dipole_magnitude::dipole_magnitude(std::string const &conf) + : cvc(conf) +{ + function_type = "dipole_magnitude"; + atoms = parse_group(conf, "atoms"); + init_total_force_params(conf); + x.type(colvarvalue::type_scalar); +} + + +colvar::dipole_magnitude::dipole_magnitude(cvm::atom const &a1) +{ + atoms = new cvm::atom_group(std::vector(1, a1)); + register_atom_group(atoms); + x.type(colvarvalue::type_scalar); +} + + +colvar::dipole_magnitude::dipole_magnitude() +{ + function_type = "dipole_magnitude"; + x.type(colvarvalue::type_scalar); +} + + +void colvar::dipole_magnitude::calc_value() +{ + cvm::atom_pos const atomsCom = atoms->center_of_mass(); + atoms->calc_dipole(atomsCom); + dipoleV = atoms->dipole(); + x.real_value = dipoleV.norm(); +} + + +void colvar::dipole_magnitude::calc_gradients() +{ + cvm::real const aux1 = atoms->total_charge/atoms->total_mass; + cvm::atom_pos const dipVunit = dipoleV.unit(); + + for (cvm::atom_iter ai = atoms->begin(); ai != atoms->end(); ai++) { + ai->grad = (ai->charge - aux1*ai->mass) * dipVunit; + } +} + + +void colvar::dipole_magnitude::apply_force(colvarvalue const &force) +{ + if (!atoms->noforce) { + atoms->apply_colvar_force(force.real_value); + } +} + + +simple_scalar_dist_functions(dipole_magnitude) + + + colvar::gyration::gyration(std::string const &conf) : cvc(conf) { @@ -782,7 +838,7 @@ void colvar::gyration::calc_value() for (cvm::atom_iter ai = atoms->begin(); ai != atoms->end(); ai++) { x.real_value += (ai->pos).norm2(); } - x.real_value = std::sqrt(x.real_value / cvm::real(atoms->size())); + x.real_value = cvm::sqrt(x.real_value / cvm::real(atoms->size())); } @@ -1029,7 +1085,7 @@ void colvar::rmsd::calc_value() x.real_value += ((*atoms)[ia].pos - ref_pos[ia]).norm2(); } x.real_value /= cvm::real(atoms->size()); // MSD - x.real_value = std::sqrt(x.real_value); + x.real_value = cvm::sqrt(x.real_value); } @@ -1405,7 +1461,7 @@ void colvar::eigenvector::calc_Jacobian_derivative() } } - jd.real_value = sum * std::sqrt(eigenvec_invnorm2); + jd.real_value = sum * cvm::sqrt(eigenvec_invnorm2); } @@ -1436,7 +1492,7 @@ colvar::cartesian::cartesian(std::string const &conf) } x.type(colvarvalue::type_vector); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.vector1d_value.resize(atoms->size() * axes.size()); } diff --git a/lib/colvars/colvarcomp_protein.cpp b/lib/colvars/colvarcomp_protein.cpp index 91e47f13d9..b9f9c60cdb 100644 --- a/lib/colvars/colvarcomp_protein.cpp +++ b/lib/colvars/colvarcomp_protein.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -27,7 +25,7 @@ colvar::alpha_angles::alpha_angles(std::string const &conf) cvm::log("Initializing alpha_angles object.\n"); function_type = "alpha_angles"; - enable(f_cvc_implicit_gradient); + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); std::string segment_id; @@ -118,7 +116,7 @@ colvar::alpha_angles::alpha_angles() : cvc() { function_type = "alpha_angles"; - enable(f_cvc_implicit_gradient); + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -133,6 +131,8 @@ colvar::alpha_angles::~alpha_angles() delete hb.back(); hb.pop_back(); } + // Our references to atom groups have become invalid now that children cvcs are deleted + atom_groups.clear(); } @@ -191,6 +191,58 @@ void colvar::alpha_angles::calc_gradients() } +void colvar::alpha_angles::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + cvm::real cvc_coeff = sup_coeff * cvm::real(sup_np) * cvm::integer_power(value().real_value, sup_np-1); + + if (theta.size()) { + cvm::real const theta_norm = (1.0-hb_coeff) / cvm::real(theta.size()); + + for (size_t i = 0; i < theta.size(); i++) { + cvm::real const t = ((theta[i])->value().real_value-theta_ref)/theta_tol; + cvm::real const f = ( (1.0 - (t*t)) / + (1.0 - (t*t*t*t)) ); + cvm::real const dfdt = + 1.0/(1.0 - (t*t*t*t)) * + ( (-2.0 * t) + (-1.0*f)*(-4.0 * (t*t*t)) ); + + // Coeficient of this CVC's gradient in the colvar gradient, times coefficient of this + // angle's gradient in the CVC's gradient + cvm::real const coeff = cvc_coeff * theta_norm * dfdt * (1.0/theta_tol); + + for (size_t j = 0; j < theta[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(theta[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } + } + + if (hb.size()) { + + cvm::real const hb_norm = hb_coeff / cvm::real(hb.size()); + + for (size_t i = 0; i < hb.size(); i++) { + // Coeficient of this CVC's gradient in the colvar gradient, times coefficient of this + // hbond's gradient in the CVC's gradient + cvm::real const coeff = cvc_coeff * 0.5 * hb_norm; + + for (size_t j = 0; j < hb[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(hb[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } + } +} + + void colvar::alpha_angles::apply_force(colvarvalue const &force) { @@ -242,7 +294,8 @@ colvar::dihedPC::dihedPC(std::string const &conf) cvm::log("Initializing dihedral PC object.\n"); function_type = "dihedPC"; - enable(f_cvc_implicit_gradient); + // Supported through references to atom groups of children cvcs + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); std::string segment_id; @@ -372,7 +425,8 @@ colvar::dihedPC::dihedPC() : cvc() { function_type = "dihedPC"; - enable(f_cvc_implicit_gradient); + // Supported through references to atom groups of children cvcs + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -383,6 +437,8 @@ colvar::dihedPC::~dihedPC() delete theta.back(); theta.pop_back(); } + // Our references to atom groups have become invalid now that children cvcs are deleted + atom_groups.clear(); } @@ -392,8 +448,8 @@ void colvar::dihedPC::calc_value() for (size_t i = 0; i < theta.size(); i++) { theta[i]->calc_value(); cvm::real const t = (PI / 180.) * theta[i]->value().real_value; - x.real_value += coeffs[2*i ] * std::cos(t) - + coeffs[2*i+1] * std::sin(t); + x.real_value += coeffs[2*i ] * cvm::cos(t) + + coeffs[2*i+1] * cvm::sin(t); } } @@ -406,12 +462,35 @@ void colvar::dihedPC::calc_gradients() } +void colvar::dihedPC::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + cvm::real cvc_coeff = sup_coeff * cvm::real(sup_np) * cvm::integer_power(value().real_value, sup_np-1); + for (size_t i = 0; i < theta.size(); i++) { + cvm::real const t = (PI / 180.) * theta[i]->value().real_value; + cvm::real const dcosdt = - (PI / 180.) * cvm::sin(t); + cvm::real const dsindt = (PI / 180.) * cvm::cos(t); + // Coeficient of this dihedPC's gradient in the colvar gradient, times coefficient of this + // dihedral's gradient in the dihedPC's gradient + cvm::real const coeff = cvc_coeff * (coeffs[2*i] * dcosdt + coeffs[2*i+1] * dsindt); + + for (size_t j = 0; j < theta[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(theta[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } +} + + void colvar::dihedPC::apply_force(colvarvalue const &force) { for (size_t i = 0; i < theta.size(); i++) { cvm::real const t = (PI / 180.) * theta[i]->value().real_value; - cvm::real const dcosdt = - (PI / 180.) * std::sin(t); - cvm::real const dsindt = (PI / 180.) * std::cos(t); + cvm::real const dcosdt = - (PI / 180.) * cvm::sin(t); + cvm::real const dsindt = (PI / 180.) * cvm::cos(t); theta[i]->apply_force((coeffs[2*i ] * dcosdt + coeffs[2*i+1] * dsindt) * force); diff --git a/lib/colvars/colvarcomp_rotations.cpp b/lib/colvars/colvarcomp_rotations.cpp index 498ef7c2f5..3c8d0b4af6 100644 --- a/lib/colvars/colvarcomp_rotations.cpp +++ b/lib/colvars/colvarcomp_rotations.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -18,21 +16,27 @@ colvar::orientation::orientation(std::string const &conf) - : cvc(conf) + : cvc() { function_type = "orientation"; - atoms = parse_group(conf, "atoms"); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_quaternion); + init(conf); +} + +int colvar::orientation::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + + atoms = parse_group(conf, "atoms"); ref_pos.reserve(atoms->size()); if (get_keyval(conf, "refPositions", ref_pos, ref_pos)) { cvm::log("Using reference positions from input file.\n"); if (ref_pos.size() != atoms->size()) { - cvm::error("Error: reference positions do not " - "match the number of requested atoms.\n"); - return; + return cvm::error("Error: reference positions do not " + "match the number of requested atoms.\n", INPUT_ERROR); } } @@ -46,9 +50,8 @@ colvar::orientation::orientation(std::string const &conf) // use PDB flags if column is provided bool found = get_keyval(conf, "refPositionsColValue", file_col_value, 0.0); if (found && file_col_value==0.0) { - cvm::error("Error: refPositionsColValue, " - "if provided, must be non-zero.\n"); - return; + return cvm::error("Error: refPositionsColValue, " + "if provided, must be non-zero.\n", INPUT_ERROR); } } @@ -59,9 +62,8 @@ colvar::orientation::orientation(std::string const &conf) } if (!ref_pos.size()) { - cvm::error("Error: must define a set of " - "reference coordinates.\n"); - return; + return cvm::error("Error: must define a set of " + "reference coordinates.\n", INPUT_ERROR); } @@ -85,6 +87,7 @@ colvar::orientation::orientation(std::string const &conf) rot.request_group2_gradients(atoms->size()); } + return error_code; } @@ -92,7 +95,7 @@ colvar::orientation::orientation() : cvc() { function_type = "orientation"; - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_quaternion); } @@ -158,10 +161,18 @@ colvarvalue colvar::orientation::dist2_rgrad(colvarvalue const &x1, colvar::orientation_angle::orientation_angle(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "orientation_angle"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::orientation_angle::init(std::string const &conf) +{ + return orientation::init(conf); } @@ -169,6 +180,7 @@ colvar::orientation_angle::orientation_angle() : orientation() { function_type = "orientation_angle"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -180,9 +192,9 @@ void colvar::orientation_angle::calc_value() rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); if ((rot.q).q0 >= 0.0) { - x.real_value = (180.0/PI) * 2.0 * std::acos((rot.q).q0); + x.real_value = (180.0/PI) * 2.0 * cvm::acos((rot.q).q0); } else { - x.real_value = (180.0/PI) * 2.0 * std::acos(-1.0 * (rot.q).q0); + x.real_value = (180.0/PI) * 2.0 * cvm::acos(-1.0 * (rot.q).q0); } } @@ -191,7 +203,7 @@ void colvar::orientation_angle::calc_gradients() { cvm::real const dxdq0 = ( ((rot.q).q0 * (rot.q).q0 < 1.0) ? - ((180.0 / PI) * (-2.0) / std::sqrt(1.0 - ((rot.q).q0 * (rot.q).q0))) : + ((180.0 / PI) * (-2.0) / cvm::sqrt(1.0 - ((rot.q).q0 * (rot.q).q0))) : 0.0 ); for (size_t ia = 0; ia < atoms->size(); ia++) { @@ -214,10 +226,18 @@ simple_scalar_dist_functions(orientation_angle) colvar::orientation_proj::orientation_proj(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "orientation_proj"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::orientation_proj::init(std::string const &conf) +{ + return orientation::init(conf); } @@ -225,6 +245,7 @@ colvar::orientation_proj::orientation_proj() : orientation() { function_type = "orientation_proj"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -261,18 +282,28 @@ simple_scalar_dist_functions(orientation_proj) colvar::tilt::tilt(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "tilt"; + enable(f_cvc_explicit_gradient); + x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::tilt::init(std::string const &conf) +{ + int error_code = COLVARS_OK; + + error_code |= orientation::init(conf); get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); - if (axis.norm2() != 1.0) { axis /= axis.norm(); cvm::log("Normalizing rotation axis to "+cvm::to_str(axis)+".\n"); } - x.type(colvarvalue::type_scalar); + return error_code; } @@ -280,6 +311,7 @@ colvar::tilt::tilt() : orientation() { function_type = "tilt"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -322,20 +354,30 @@ simple_scalar_dist_functions(tilt) colvar::spin_angle::spin_angle(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "spin_angle"; + period = 360.0; + b_periodic = true; + enable(f_cvc_explicit_gradient); + x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::spin_angle::init(std::string const &conf) +{ + int error_code = COLVARS_OK; + + error_code |= orientation::init(conf); get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); - if (axis.norm2() != 1.0) { axis /= axis.norm(); cvm::log("Normalizing rotation axis to "+cvm::to_str(axis)+".\n"); } - period = 360.0; - b_periodic = true; - x.type(colvarvalue::type_scalar); + return error_code; } @@ -345,6 +387,7 @@ colvar::spin_angle::spin_angle() function_type = "spin_angle"; period = 360.0; b_periodic = true; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -410,15 +453,15 @@ colvarvalue colvar::spin_angle::dist2_rgrad(colvarvalue const &x1, } -void colvar::spin_angle::wrap(colvarvalue &x) const +void colvar::spin_angle::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index d20ee6e55c..276f2b39e7 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -122,12 +122,7 @@ bool colvardeps::get_keyval_feature(colvarparse *cvp, int colvardeps::enable(int feature_id, bool dry_run /* default: false */, - // dry_run: fail silently, do not enable if available - // flag is passed recursively to deps of this feature bool toplevel /* default: true */) -// toplevel: false if this is called as part of a chain of dependency resolution -// this is used to diagnose failed dependencies by displaying the full stack -// only the toplevel dependency will throw a fatal error { int res; size_t i, j; @@ -143,8 +138,7 @@ int colvardeps::enable(int feature_id, if (fs->enabled) { if (!(dry_run || toplevel)) { - // This is a dependency - // Prevent disabling this feature as long + // This is a dependency: prevent disabling this feature as long // as requirement is enabled fs->ref_count++; if (cvm::debug()) @@ -173,7 +167,10 @@ int colvardeps::enable(int feature_id, if (!toplevel && !is_dynamic(feature_id)) { if (!dry_run) { cvm::log(feature_type_descr + " feature \"" + f->description - + "\" may not be enabled as a dependency in " + description + ".\n"); + + "\" cannot be enabled automatically in " + description + "."); + if (is_user(feature_id)) { + cvm::log("Try setting it manually.\n"); + } } return COLVARS_ERROR; } @@ -354,6 +351,7 @@ int colvardeps::disable(int feature_id) { return COLVARS_OK; } + int colvardeps::decr_ref_count(int feature_id) { int &rc = feature_states[feature_id].ref_count; feature *f = features()[feature_id]; @@ -379,324 +377,52 @@ int colvardeps::decr_ref_count(int feature_id) { return COLVARS_OK; } -void colvardeps::init_feature(int feature_id, const char *description, feature_type type) { - modify_features()[feature_id]->description = description; + +void colvardeps::init_feature(int feature_id, const char *description_in, feature_type type) { + modify_features()[feature_id]->description = description_in; modify_features()[feature_id]->type = type; } -// Shorthand macros for describing dependencies -#define f_req_self(f, g) features()[f]->requires_self.push_back(g) -// This macro ensures that exclusions are symmetric -#define f_req_exclude(f, g) features()[f]->requires_exclude.push_back(g); \ - features()[g]->requires_exclude.push_back(f) -#define f_req_children(f, g) features()[f]->requires_children.push_back(g) -#define f_req_alt2(f, g, h) features()[f]->requires_alt.push_back(std::vector(2));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h -#define f_req_alt3(f, g, h, i) features()[f]->requires_alt.push_back(std::vector(3));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h; \ - features()[f]->requires_alt.back()[2] = i -#define f_req_alt4(f, g, h, i, j) features()[f]->requires_alt.push_back(std::vector(4));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h; \ - features()[f]->requires_alt.back()[2] = i; \ - features()[f]->requires_alt.back()[3] = j -void colvardeps::init_cvb_requires() { - int i; - if (features().size() == 0) { - for (i = 0; i < f_cvb_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cvb_active, "active", f_type_dynamic); - f_req_children(f_cvb_active, f_cv_active); - - init_feature(f_cvb_awake, "awake", f_type_static); - f_req_self(f_cvb_awake, f_cvb_active); - - init_feature(f_cvb_apply_force, "apply force", f_type_user); - f_req_children(f_cvb_apply_force, f_cv_gradient); - - init_feature(f_cvb_get_total_force, "obtain total force", f_type_dynamic); - f_req_children(f_cvb_get_total_force, f_cv_total_force); - - init_feature(f_cvb_output_acc_work, "output accumulated work", f_type_user); - f_req_self(f_cvb_output_acc_work, f_cvb_apply_force); - - init_feature(f_cvb_history_dependent, "history-dependent", f_type_static); - - init_feature(f_cvb_time_dependent, "time-dependent", f_type_static); - - init_feature(f_cvb_scalar_variables, "require scalar variables", f_type_static); - f_req_children(f_cvb_scalar_variables, f_cv_scalar); - - init_feature(f_cvb_calc_pmf, "calculate a PMF", f_type_static); - - init_feature(f_cvb_calc_ti_samples, "calculate TI samples", f_type_dynamic); - f_req_self(f_cvb_calc_ti_samples, f_cvb_get_total_force); - f_req_children(f_cvb_calc_ti_samples, f_cv_grid); - - init_feature(f_cvb_write_ti_samples, "write TI samples ", f_type_user); - f_req_self(f_cvb_write_ti_samples, f_cvb_calc_ti_samples); - - init_feature(f_cvb_write_ti_pmf, "write TI PMF", f_type_user); - f_req_self(f_cvb_write_ti_pmf, f_cvb_calc_ti_samples); - } - - // Initialize feature_states for each instance - feature_states.reserve(f_cvb_ntot); - for (i = 0; i < f_cvb_ntot; i++) { - feature_states.push_back(feature_state(true, false)); - // Most features are available, so we set them so - // and list exceptions below - } - - // only compute TI samples when deriving from colvarbias_ti - feature_states[f_cvb_calc_ti_samples].available = false; +// Shorthand functions for describing dependencies +void colvardeps::require_feature_self(int f, int g) { + features()[f]->requires_self.push_back(g); } -void colvardeps::init_cv_requires() { - size_t i; - if (features().size() == 0) { - for (i = 0; i < f_cv_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cv_active, "active", f_type_dynamic); - // Do not require f_cvc_active in children, as some components may be disabled - // Colvars must be either a linear combination, or scalar (and polynomial) or scripted/custom - f_req_alt4(f_cv_active, f_cv_scalar, f_cv_linear, f_cv_scripted, f_cv_custom_function); - - init_feature(f_cv_awake, "awake", f_type_static); - f_req_self(f_cv_awake, f_cv_active); - - init_feature(f_cv_gradient, "gradient", f_type_dynamic); - f_req_children(f_cv_gradient, f_cvc_gradient); - - init_feature(f_cv_collect_gradient, "collect gradient", f_type_dynamic); - f_req_self(f_cv_collect_gradient, f_cv_gradient); - f_req_self(f_cv_collect_gradient, f_cv_scalar); - // The following exlusion could be lifted by implementing the feature - f_req_exclude(f_cv_collect_gradient, f_cv_scripted); - - init_feature(f_cv_fdiff_velocity, "velocity from finite differences", f_type_dynamic); - - // System force: either trivial (spring force); through extended Lagrangian, or calculated explicitly - init_feature(f_cv_total_force, "total force", f_type_dynamic); - f_req_alt2(f_cv_total_force, f_cv_extended_Lagrangian, f_cv_total_force_calc); - - // Deps for explicit total force calculation - init_feature(f_cv_total_force_calc, "total force calculation", f_type_dynamic); - f_req_self(f_cv_total_force_calc, f_cv_scalar); - f_req_self(f_cv_total_force_calc, f_cv_linear); - f_req_children(f_cv_total_force_calc, f_cvc_inv_gradient); - f_req_self(f_cv_total_force_calc, f_cv_Jacobian); - - init_feature(f_cv_Jacobian, "Jacobian derivative", f_type_dynamic); - f_req_self(f_cv_Jacobian, f_cv_scalar); - f_req_self(f_cv_Jacobian, f_cv_linear); - f_req_children(f_cv_Jacobian, f_cvc_Jacobian); - - init_feature(f_cv_hide_Jacobian, "hide Jacobian force", f_type_user); - f_req_self(f_cv_hide_Jacobian, f_cv_Jacobian); // can only hide if calculated - - init_feature(f_cv_extended_Lagrangian, "extended Lagrangian", f_type_user); - f_req_self(f_cv_extended_Lagrangian, f_cv_scalar); - f_req_self(f_cv_extended_Lagrangian, f_cv_gradient); - - init_feature(f_cv_Langevin, "Langevin dynamics", f_type_user); - f_req_self(f_cv_Langevin, f_cv_extended_Lagrangian); - - init_feature(f_cv_linear, "linear", f_type_static); - - init_feature(f_cv_scalar, "scalar", f_type_static); - - init_feature(f_cv_output_energy, "output energy", f_type_user); - - init_feature(f_cv_output_value, "output value", f_type_user); - - init_feature(f_cv_output_velocity, "output velocity", f_type_user); - f_req_self(f_cv_output_velocity, f_cv_fdiff_velocity); - - init_feature(f_cv_output_applied_force, "output applied force", f_type_user); - - init_feature(f_cv_output_total_force, "output total force", f_type_user); - f_req_self(f_cv_output_total_force, f_cv_total_force); - - init_feature(f_cv_subtract_applied_force, "subtract applied force from total force", f_type_user); - f_req_self(f_cv_subtract_applied_force, f_cv_total_force); - - init_feature(f_cv_lower_boundary, "lower boundary", f_type_user); - f_req_self(f_cv_lower_boundary, f_cv_scalar); - - init_feature(f_cv_upper_boundary, "upper boundary", f_type_user); - f_req_self(f_cv_upper_boundary, f_cv_scalar); - - init_feature(f_cv_grid, "grid", f_type_dynamic); - f_req_self(f_cv_grid, f_cv_lower_boundary); - f_req_self(f_cv_grid, f_cv_upper_boundary); - - init_feature(f_cv_runave, "running average", f_type_user); - - init_feature(f_cv_corrfunc, "correlation function", f_type_user); - - init_feature(f_cv_scripted, "scripted", f_type_user); - - init_feature(f_cv_custom_function, "custom function", f_type_user); - f_req_exclude(f_cv_custom_function, f_cv_scripted); - - init_feature(f_cv_periodic, "periodic", f_type_static); - f_req_self(f_cv_periodic, f_cv_scalar); - init_feature(f_cv_scalar, "scalar", f_type_static); - init_feature(f_cv_linear, "linear", f_type_static); - init_feature(f_cv_homogeneous, "homogeneous", f_type_static); - - // because total forces are obtained from the previous time step, - // we cannot (currently) have colvar values and total forces for the same timestep - init_feature(f_cv_multiple_ts, "multiple timestep colvar"); - f_req_exclude(f_cv_multiple_ts, f_cv_total_force_calc); - } - - // Initialize feature_states for each instance - feature_states.reserve(f_cv_ntot); - for (i = 0; i < f_cv_ntot; i++) { - feature_states.push_back(feature_state(true, false)); - // Most features are available, so we set them so - // and list exceptions below - } - - feature_states[f_cv_fdiff_velocity].available = - cvm::main()->proxy->simulation_running(); +// Ensure that exclusions are symmetric +void colvardeps::exclude_feature_self(int f, int g) { + features()[f]->requires_exclude.push_back(g); + features()[g]->requires_exclude.push_back(f); } -void colvardeps::init_cvc_requires() { - size_t i; - // Initialize static array once and for all - if (features().size() == 0) { - for (i = 0; i < colvardeps::f_cvc_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cvc_active, "active", f_type_dynamic); -// The dependency below may become useful if we use dynamic atom groups -// f_req_children(f_cvc_active, f_ag_active); - - init_feature(f_cvc_scalar, "scalar", f_type_static); - - init_feature(f_cvc_gradient, "gradient", f_type_dynamic); - - init_feature(f_cvc_implicit_gradient, "implicit gradient", f_type_static); - f_req_children(f_cvc_implicit_gradient, f_ag_implicit_gradient); - - init_feature(f_cvc_inv_gradient, "inverse gradient", f_type_dynamic); - f_req_self(f_cvc_inv_gradient, f_cvc_gradient); - - init_feature(f_cvc_debug_gradient, "debug gradient", f_type_user); - f_req_self(f_cvc_debug_gradient, f_cvc_gradient); - f_req_exclude(f_cvc_debug_gradient, f_cvc_implicit_gradient); - - init_feature(f_cvc_Jacobian, "Jacobian derivative", f_type_dynamic); - f_req_self(f_cvc_Jacobian, f_cvc_inv_gradient); - - init_feature(f_cvc_com_based, "depends on group centers of mass", f_type_static); - - // init_feature(f_cvc_pbc_minimum_image, "use minimum-image distances with PBCs", f_type_user); - - // Compute total force on first site only to avoid unwanted - // coupling to other colvars (see e.g. Ciccotti et al., 2005) - init_feature(f_cvc_one_site_total_force, "compute total force from one group", f_type_user); - f_req_self(f_cvc_one_site_total_force, f_cvc_com_based); - - init_feature(f_cvc_scalable, "scalable calculation", f_type_static); - f_req_self(f_cvc_scalable, f_cvc_scalable_com); - - init_feature(f_cvc_scalable_com, "scalable calculation of centers of mass", f_type_static); - f_req_self(f_cvc_scalable_com, f_cvc_com_based); - - - // TODO only enable this when f_ag_scalable can be turned on for a pre-initialized group - // f_req_children(f_cvc_scalable, f_ag_scalable); - // f_req_children(f_cvc_scalable_com, f_ag_scalable_com); - } - - // Initialize feature_states for each instance - // default as available, not enabled - // except dynamic features which default as unavailable - feature_states.reserve(f_cvc_ntot); - for (i = 0; i < colvardeps::f_cvc_ntot; i++) { - bool avail = is_dynamic(i) ? false : true; - feature_states.push_back(feature_state(avail, false)); - } - - // CVCs are enabled from the start - get disabled based on flags - feature_states[f_cvc_active].enabled = true; - - // Features that are implemented by all cvcs by default - // Each cvc specifies what other features are available - feature_states[f_cvc_active].available = true; - feature_states[f_cvc_gradient].available = true; - - // Use minimum-image distances by default - feature_states[f_cvc_pbc_minimum_image].enabled = true; - - // Features that are implemented by default if their requirements are - feature_states[f_cvc_one_site_total_force].available = true; - - // Features That are implemented only for certain simulation engine configurations - feature_states[f_cvc_scalable_com].available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); - feature_states[f_cvc_scalable].available = feature_states[f_cvc_scalable_com].available; +void colvardeps::require_feature_children(int f, int g) { + features()[f]->requires_children.push_back(g); } -void colvardeps::init_ag_requires() { - size_t i; - // Initialize static array once and for all - if (features().size() == 0) { - for (i = 0; i < f_ag_ntot; i++) { - modify_features().push_back(new feature); - } +void colvardeps::require_feature_alt(int f, int g, int h) { + features()[f]->requires_alt.push_back(std::vector(2)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; +} - init_feature(f_ag_active, "active", f_type_dynamic); - init_feature(f_ag_center, "translational fit", f_type_static); - init_feature(f_ag_rotate, "rotational fit", f_type_static); - init_feature(f_ag_fitting_group, "reference positions group", f_type_static); - init_feature(f_ag_implicit_gradient, "implicit atom gradient", f_type_dynamic); - init_feature(f_ag_fit_gradients, "fit gradients", f_type_user); - f_req_exclude(f_ag_fit_gradients, f_ag_implicit_gradient); - init_feature(f_ag_atom_forces, "atomic forces", f_type_dynamic); +void colvardeps::require_feature_alt(int f, int g, int h, int i) { + features()[f]->requires_alt.push_back(std::vector(3)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; + features()[f]->requires_alt.back()[2] = i; +} - // parallel calculation implies that we have at least a scalable center of mass, - // but f_ag_scalable is kept as a separate feature to deal with future dependencies - init_feature(f_ag_scalable, "scalable group calculation", f_type_static); - init_feature(f_ag_scalable_com, "scalable group center of mass calculation", f_type_static); - f_req_self(f_ag_scalable, f_ag_scalable_com); -// init_feature(f_ag_min_msd_fit, "minimum MSD fit") -// f_req_self(f_ag_min_msd_fit, f_ag_center) -// f_req_self(f_ag_min_msd_fit, f_ag_rotate) -// f_req_exclude(f_ag_min_msd_fit, f_ag_fitting_group) - } - - // Initialize feature_states for each instance - // default as unavailable, not enabled - feature_states.reserve(f_ag_ntot); - for (i = 0; i < colvardeps::f_ag_ntot; i++) { - feature_states.push_back(feature_state(false, false)); - } - - // Features that are implemented (or not) by all atom groups - feature_states[f_ag_active].available = true; - // f_ag_scalable_com is provided by the CVC iff it is COM-based - feature_states[f_ag_scalable_com].available = false; - // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) - feature_states[f_ag_scalable].available = true; - feature_states[f_ag_fit_gradients].available = true; - feature_states[f_ag_implicit_gradient].available = true; +void colvardeps::require_feature_alt(int f, int g, int h, int i, int j) { + features()[f]->requires_alt.push_back(std::vector(4)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; + features()[f]->requires_alt.back()[2] = i; + features()[f]->requires_alt.back()[3] = j; } @@ -720,7 +446,7 @@ void colvardeps::print_state() { void colvardeps::add_child(colvardeps *child) { children.push_back(child); - child->parents.push_back((colvardeps *)this); + child->parents.push_back(this); // Solve dependencies of already enabled parent features // in the new child diff --git a/lib/colvars/colvardeps.h b/lib/colvars/colvardeps.h index 940eefb01b..198a24f330 100644 --- a/lib/colvars/colvardeps.h +++ b/lib/colvars/colvardeps.h @@ -23,7 +23,11 @@ /// 3. Static features are static properties of the object, determined /// programatically at initialization time. /// -/// In all classes, feature 0 is active. When an object is inactivated +/// The following diagram summarizes the dependency tree at the bias, colvar, and colvarcomp levels. +/// Isolated and atom group features are not shown to save space. +/// @image html deps_2019.svg +/// +/// In all classes, feature 0 is `active`. When an object is inactivated /// all its children dependencies are dereferenced (free_children_deps) /// While the object is inactive, no dependency solving is done on children /// it is done when the object is activated back (restore_children_deps) @@ -72,7 +76,6 @@ protected: /// Unused by lower-level objects (cvcs and atom groups) int time_step_factor; -private: /// List of the states of all features std::vector feature_states; @@ -89,14 +92,14 @@ public: inline int get_time_step_factor() const {return time_step_factor;} /// Pair a numerical feature ID with a description and type - void init_feature(int feature_id, const char *description, feature_type type = f_type_not_set); + void init_feature(int feature_id, const char *description, feature_type type); /// Describes a feature and its dependencies /// used in a static array within each subclass class feature { public: - feature() {} + feature() : type(f_type_not_set) {} ~feature() {} std::string description; // Set by derived object initializer @@ -126,6 +129,7 @@ public: feature_type type; }; + inline bool is_not_set(int id) { return features()[id]->type == f_type_not_set; } inline bool is_dynamic(int id) { return features()[id]->type == f_type_dynamic; } inline bool is_static(int id) { return features()[id]->type == f_type_static; } inline bool is_user(int id) { return features()[id]->type == f_type_user; } @@ -135,7 +139,7 @@ public: // with a non-static array // Intermediate classes (colvarbias and colvarcomp, which are also base classes) // implement this as virtual to allow overriding - virtual const std::vector&features() = 0; + virtual const std::vector &features() const = 0; virtual std::vector&modify_features() = 0; void add_child(colvardeps *child); @@ -188,10 +192,12 @@ protected: public: - /// enable a feature and recursively solve its dependencies - /// for proper reference counting, one should not add - /// spurious calls to enable() - /// dry_run is set to true to recursively test if a feature is available, without enabling it + /// Enable a feature and recursively solve its dependencies. + /// For accurate reference counting, do not add spurious calls to enable() + /// \param dry_run Recursively test if a feature is available, without enabling it + /// \param toplevel False if this is called as part of a chain of dependency resolution. + /// This is used to diagnose failed dependencies by displaying the full stack: + /// only the toplevel dependency will throw a fatal error. int enable(int f, bool dry_run = false, bool toplevel = true); /// Disable a feature, decrease the reference count of its dependencies @@ -318,8 +324,8 @@ public: f_cvc_active, f_cvc_scalar, f_cvc_gradient, - /// \brief CVC doesn't calculate and store explicit atom gradients - f_cvc_implicit_gradient, + /// \brief CVC calculates and stores explicit atom gradients + f_cvc_explicit_gradient, f_cvc_inv_gradient, /// \brief If enabled, calc_gradients() will call debug_gradients() for every group needed f_cvc_debug_gradient, @@ -341,7 +347,7 @@ public: /// ie. not using refpositionsgroup // f_ag_min_msd_fit, /// \brief Does not have explicit atom gradients from parent CVC - f_ag_implicit_gradient, + f_ag_explicit_gradient, f_ag_fit_gradients, f_ag_atom_forces, f_ag_scalable, @@ -349,13 +355,39 @@ public: f_ag_ntot }; - void init_cvb_requires(); - void init_cv_requires(); - void init_cvc_requires(); - void init_ag_requires(); + /// Initialize dependency tree for object of a derived class + virtual int init_dependencies() = 0; + + /// Make feature f require feature g within the same object + void require_feature_self(int f, int g); + + /// Make features f and g mutually exclusive within the same object + void exclude_feature_self(int f, int g); + + /// Make feature f require feature g within children + void require_feature_children(int f, int g); + + /// Make feature f require either g or h within the same object + void require_feature_alt(int f, int g, int h); + + /// Make feature f require any of g, h, or i within the same object + void require_feature_alt(int f, int g, int h, int i); + + /// Make feature f require any of g, h, i, or j within the same object + void require_feature_alt(int f, int g, int h, int i, int j); /// \brief print all enabled features and those of children, for debugging void print_state(); + + /// \brief Check that a feature is enabled, raising BUG_ERROR if not + inline void check_enabled(int f, std::string const &reason) const + { + if (! is_enabled(f)) { + cvm::error("Error: "+reason+" requires that the feature \""+ + features()[f]->description+"\" is active.\n", BUG_ERROR); + } + } + }; #endif diff --git a/lib/colvars/colvargrid.cpp b/lib/colvars/colvargrid.cpp index 407b336afd..dc1a709edb 100644 --- a/lib/colvars/colvargrid.cpp +++ b/lib/colvars/colvargrid.cpp @@ -109,7 +109,7 @@ cvm::real colvar_grid_scalar::entropy() const { cvm::real sum = 0.0; for (size_t i = 0; i < nt; i++) { - sum += -1.0 * data[i] * std::log(data[i]); + sum += -1.0 * data[i] * cvm::logn(data[i]); } cvm::real bin_volume = 1.0; for (size_t id = 0; id < widths.size(); id++) { diff --git a/lib/colvars/colvargrid.h b/lib/colvars/colvargrid.h index 9a0fe4c8ec..2ba0566e49 100644 --- a/lib/colvars/colvargrid.h +++ b/lib/colvars/colvargrid.h @@ -12,7 +12,6 @@ #include #include -#include #include "colvar.h" #include "colvarmodule.h" @@ -53,7 +52,7 @@ protected: std::vector cv; /// Do we request actual value (for extended-system colvars)? - std::vector actual_value; + std::vector use_actual_value; /// Get the low-level index corresponding to an index inline size_t address(std::vector const &ix) const @@ -136,8 +135,8 @@ public: inline void request_actual_value(bool b = true) { size_t i; - for (i = 0; i < actual_value.size(); i++) { - actual_value[i] = b; + for (i = 0; i < use_actual_value.size(); i++) { + use_actual_value[i] = b; } } @@ -215,7 +214,7 @@ public: mult(g.mult), data(), cv(g.cv), - actual_value(g.actual_value), + use_actual_value(g.use_actual_value), lower_boundaries(g.lower_boundaries), upper_boundaries(g.upper_boundaries), periodic(g.periodic), @@ -290,13 +289,13 @@ public: periodic.push_back(cv[i]->periodic_boundaries()); // By default, get reported colvar value (for extended Lagrangian colvars) - actual_value.push_back(false); + use_actual_value.push_back(false); // except if a colvar is specified twice in a row // then the first instance is the actual value // For histograms of extended-system coordinates if (i > 0 && cv[i-1] == cv[i]) { - actual_value[i-1] = true; + use_actual_value[i-1] = true; } if (margin) { @@ -319,8 +318,7 @@ public: return this->setup(); } - int init_from_boundaries(T const &t = T(), - size_t const &mult_i = 1) + int init_from_boundaries() { if (cvm::debug()) { cvm::log("Configuring grid dimensions from colvars boundaries.\n"); @@ -337,7 +335,7 @@ public: lower_boundaries[i].real_value ) / widths[i]; int nbins_round = (int)(nbins+0.5); - if (std::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { + if (cvm::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { cvm::log("Warning: grid interval("+ cvm::to_str(lower_boundaries[i], cvm::cv_width, cvm::cv_prec)+" - "+ cvm::to_str(upper_boundaries[i], cvm::cv_width, cvm::cv_prec)+ @@ -392,20 +390,20 @@ public: /// \brief Report the bin corresponding to the current value of variable i inline int current_bin_scalar(int const i) const { - return value_to_bin_scalar(actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); + return value_to_bin_scalar(use_actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); } /// \brief Report the bin corresponding to the current value of variable i /// and assign first or last bin if out of boundaries inline int current_bin_scalar_bound(int const i) const { - return value_to_bin_scalar_bound(actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); + return value_to_bin_scalar_bound(use_actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); } /// \brief Report the bin corresponding to the current value of item iv in variable i inline int current_bin_scalar(int const i, int const iv) const { - return value_to_bin_scalar(actual_value[i] ? + return value_to_bin_scalar(use_actual_value[i] ? cv[i]->actual_value().vector1d_value[iv] : cv[i]->value().vector1d_value[iv], i); } @@ -414,14 +412,14 @@ public: /// the provided value is in inline int value_to_bin_scalar(colvarvalue const &value, const int i) const { - return (int) std::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); + return (int) cvm::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); } /// \brief Use the lower boundary and the width to report which bin /// the provided value is in and assign first or last bin if out of boundaries inline int value_to_bin_scalar_bound(colvarvalue const &value, const int i) const { - int bin_index = std::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); + int bin_index = cvm::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); if (bin_index < 0) bin_index=0; if (bin_index >=int(nx[i])) bin_index=int(nx[i])-1; return (int) bin_index; @@ -432,7 +430,7 @@ public: colvarvalue const &new_offset, cvm::real const &new_width) const { - return (int) std::floor( (value.real_value - new_offset.real_value) / new_width ); + return (int) cvm::floor( (value.real_value - new_offset.real_value) / new_width ); } /// \brief Use the two boundaries and the width to report the @@ -611,8 +609,8 @@ public: if (periodic[i]) continue; - cvm::real dl = std::sqrt(cv[i]->dist2(values[i], lower_boundaries[i])) / widths[i]; - cvm::real du = std::sqrt(cv[i]->dist2(values[i], upper_boundaries[i])) / widths[i]; + cvm::real dl = cvm::sqrt(cv[i]->dist2(values[i], lower_boundaries[i])) / widths[i]; + cvm::real du = cvm::sqrt(cv[i]->dist2(values[i], upper_boundaries[i])) / widths[i]; if (values[i].real_value < lower_boundaries[i]) dl *= -1.0; @@ -841,7 +839,7 @@ public: if (nd < lower_boundaries.size()) nd = lower_boundaries.size(); - if (! actual_value.size()) actual_value.assign(nd, false); + if (! use_actual_value.size()) use_actual_value.assign(nd, false); if (! periodic.size()) periodic.assign(nd, false); if (! widths.size()) widths.assign(nd, 1.0); @@ -849,7 +847,7 @@ public: if (old_nx.size()) { for (size_t i = 0; i < nd; i++) { if ( (old_nx[i] != nx[i]) || - (std::sqrt(cv[i]->dist2(old_lb[i], + (cvm::sqrt(cv[i]->dist2(old_lb[i], lower_boundaries[i])) > 1.0E-10) ) { new_params = true; } @@ -874,11 +872,11 @@ public: void check_consistency() { for (size_t i = 0; i < nd; i++) { - if ( (std::sqrt(cv[i]->dist2(cv[i]->lower_boundary, + if ( (cvm::sqrt(cv[i]->dist2(cv[i]->lower_boundary, lower_boundaries[i])) > 1.0E-10) || - (std::sqrt(cv[i]->dist2(cv[i]->upper_boundary, + (cvm::sqrt(cv[i]->dist2(cv[i]->upper_boundary, upper_boundaries[i])) > 1.0E-10) || - (std::sqrt(cv[i]->dist2(cv[i]->width, + (cvm::sqrt(cv[i]->dist2(cv[i]->width, widths[i])) > 1.0E-10) ) { cvm::error("Error: restart information for a grid is " "inconsistent with that of its colvars.\n"); @@ -896,11 +894,11 @@ public: // we skip dist2(), because periodicities and the like should // matter: boundaries should be EXACTLY the same (otherwise, // map_grid() should be used) - if ( (std::fabs(other_grid.lower_boundaries[i] - + if ( (cvm::fabs(other_grid.lower_boundaries[i] - lower_boundaries[i]) > 1.0E-10) || - (std::fabs(other_grid.upper_boundaries[i] - + (cvm::fabs(other_grid.upper_boundaries[i] - upper_boundaries[i]) > 1.0E-10) || - (std::fabs(other_grid.widths[i] - + (cvm::fabs(other_grid.widths[i] - widths[i]) > 1.0E-10) || (data.size() != other_grid.data.size()) ) { cvm::error("Error: inconsistency between " @@ -1036,11 +1034,11 @@ public: std::istream & read_multicol(std::istream &is, bool add = false) { // Data in the header: nColvars, then for each - // xiMin, dXi, nPoints, periodic + // xiMin, dXi, nPoints, periodic flag std::string hash; cvm::real lower, width, x; - size_t n, periodic; + size_t n, periodic_flag; bool remap; std::vector new_value; std::vector nx_read; @@ -1053,7 +1051,8 @@ public: if ( !(is >> hash) || (hash != "#") ) { cvm::error("Error reading grid at position "+ - cvm::to_str(is.tellg())+" in stream(read \"" + hash + "\")\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream(read \"" + hash + "\")\n"); return is; } @@ -1075,15 +1074,16 @@ public: for (size_t i = 0; i < nd; i++ ) { if ( !(is >> hash) || (hash != "#") ) { cvm::error("Error reading grid at position "+ - cvm::to_str(is.tellg())+" in stream(read \"" + hash + "\")\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream(read \"" + hash + "\")\n"); return is; } - is >> lower >> width >> nx_read[i] >> periodic; + is >> lower >> width >> nx_read[i] >> periodic_flag; - if ( (std::fabs(lower - lower_boundaries[i].real_value) > 1.0e-10) || - (std::fabs(width - widths[i] ) > 1.0e-10) || + if ( (cvm::fabs(lower - lower_boundaries[i].real_value) > 1.0e-10) || + (cvm::fabs(width - widths[i] ) > 1.0e-10) || (nx_read[i] != nx[i]) ) { cvm::log("Warning: reading from different grid definition (colvar " + cvm::to_str(i+1) + "); remapping data on new grid.\n"); @@ -1246,7 +1246,7 @@ public: if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { - return (std::log((cvm::real)A1) - std::log((cvm::real)A0)) + return (cvm::logn((cvm::real)A1) - cvm::logn((cvm::real)A0)) / (widths[n] * 2.); } } else if (ix[n] > 0 && ix[n] < nx[n]-1) { // not an edge @@ -1258,7 +1258,7 @@ public: if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { - return (std::log((cvm::real)A1) - std::log((cvm::real)A0)) + return (cvm::logn((cvm::real)A1) - cvm::logn((cvm::real)A0)) / (widths[n] * 2.); } } else { @@ -1271,8 +1271,8 @@ public: if (A0 * A1 * A2 == 0) { return 0.; // can't handle empty bins } else { - return (-1.5 * std::log((cvm::real)A0) + 2. * std::log((cvm::real)A1) - - 0.5 * std::log((cvm::real)A2)) * increment / widths[n]; + return (-1.5 * cvm::logn((cvm::real)A0) + 2. * cvm::logn((cvm::real)A1) + - 0.5 * cvm::logn((cvm::real)A2)) * increment / widths[n]; } } } diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index d88a97a441..baffc25c28 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -28,6 +28,8 @@ colvarmodule::colvarmodule(colvarproxy *proxy_in) { depth_s = 0; + log_level_ = 10; + cv_traj_os = NULL; if (proxy == NULL) { @@ -152,12 +154,12 @@ int colvarmodule::read_config_string(std::string const &config_str) { cvm::log(cvm::line_marker); cvm::log("Reading new configuration:\n"); - std::istringstream config_s(config_str); + std::istringstream new_config_s(config_str); // strip the comments away std::string conf = ""; std::string line; - while (parse->read_config_line(config_s, line)) { + while (parse->read_config_line(new_config_s, line)) { // Delete lines that contain only white space after removing comments if (line.find_first_not_of(colvarparse::white_space) != std::string::npos) conf.append(line+"\n"); @@ -255,13 +257,16 @@ int colvarmodule::append_new_config(std::string const &new_conf) int colvarmodule::parse_global_params(std::string const &conf) { - colvarmodule *cvm = cvm::main(); + // TODO document and then echo this keyword + parse->get_keyval(conf, "logLevel", log_level_, log_level_, + colvarparse::parse_silent); { std::string index_file_name; size_t pos = 0; while (parse->key_lookup(conf, "indexFile", &index_file_name, &pos)) { - cvm->read_index_file(index_file_name.c_str()); + cvm::log("# indexFile = \""+index_file_name+"\"\n"); + read_index_file(index_file_name.c_str()); index_file_name.clear(); } } @@ -580,6 +585,24 @@ cvm::atom_group *colvarmodule::atom_group_by_name(std::string const &name) } +void colvarmodule::register_named_atom_group(atom_group *ag) { + named_atom_groups.push_back(ag); +} + + +void colvarmodule::unregister_named_atom_group(cvm::atom_group *ag) +{ + for (std::vector::iterator agi = named_atom_groups.begin(); + agi != named_atom_groups.end(); + agi++) { + if (*agi == ag) { + named_atom_groups.erase(agi); + break; + } + } +} + + int colvarmodule::change_configuration(std::string const &bias_name, std::string const &conf) { @@ -1034,9 +1057,6 @@ int colvarmodule::analyze() cvm::log("colvarmodule::analyze(), step = "+cvm::to_str(it)+".\n"); } - if (cvm::step_relative() == 0) - cvm::log("Performing analysis.\n"); - // perform colvar-specific analysis for (std::vector::iterator cvi = variables_active()->begin(); cvi != variables_active()->end(); @@ -1089,7 +1109,6 @@ int colvarmodule::end_of_step() int colvarmodule::setup() { if (this->size() == 0) return cvm::get_error(); - // loop over all components of all colvars to reset masses of all groups for (std::vector::iterator cvi = variables()->begin(); cvi != variables()->end(); cvi++) { (*cvi)->setup(); @@ -1248,13 +1267,13 @@ std::istream & colvarmodule::read_restart(std::istream &is) std::string restart_conf; if (is >> colvarparse::read_block("configuration", restart_conf)) { parse->get_keyval(restart_conf, "step", - it_restart, (size_t) 0, - colvarparse::parse_silent); + it_restart, static_cast(0), + colvarparse::parse_restart); it = it_restart; std::string restart_version; parse->get_keyval(restart_conf, "version", restart_version, std::string(""), - colvarparse::parse_silent); + colvarparse::parse_restart); if (restart_version.size() && (restart_version != std::string(COLVARS_VERSION))) { cvm::log("This state file was generated with version "+restart_version+"\n"); } @@ -1600,14 +1619,16 @@ std::ostream & colvarmodule::write_traj(std::ostream &os) } -void cvm::log(std::string const &message) +void cvm::log(std::string const &message, int min_log_level) { + if (cvm::log_level() < min_log_level) return; // allow logging when the module is not fully initialized size_t const d = (cvm::main() != NULL) ? depth() : 0; - if (d > 0) + if (d > 0) { proxy->log((std::string(2*d, ' '))+message); - else + } else { proxy->log(message); + } } @@ -1915,14 +1936,190 @@ int cvm::replica_comm_send(char* msg_data, int msg_len, int dest_rep) +template std::string _to_str(T const &x, + size_t width, size_t prec) +{ + std::ostringstream os; + if (width) os.width(width); + if (prec) { + os.setf(std::ios::scientific, std::ios::floatfield); + os.precision(prec); + } + os << x; + return os.str(); +} + + +template std::string _to_str_vector(std::vector const &x, + size_t width, size_t prec) +{ + if (!x.size()) return std::string(""); + std::ostringstream os; + if (prec) { + os.setf(std::ios::scientific, std::ios::floatfield); + } + os << "{ "; + if (width) os.width(width); + if (prec) os.precision(prec); + os << x[0]; + for (size_t i = 1; i < x.size(); i++) { + os << ", "; + if (width) os.width(width); + if (prec) os.precision(prec); + os << x[i]; + } + os << " }"; + return os.str(); +} + + + +std::string colvarmodule::to_str(std::string const &x) +{ + return std::string("\"")+x+std::string("\""); +} + +std::string colvarmodule::to_str(char const *x) +{ + return std::string("\"")+std::string(x)+std::string("\""); +} + +std::string colvarmodule::to_str(bool x) +{ + return (x ? "on" : "off"); +} + +std::string colvarmodule::to_str(int const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(size_t const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(long int const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(step_number const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::real const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::rvector const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::quaternion const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(colvarvalue const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::vector1d const &x, + size_t width, size_t prec) +{ + return _to_str< cvm::vector1d >(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::matrix2d const &x, + size_t width, size_t prec) +{ + return _to_str< cvm::matrix2d >(x, width, prec); +} + + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + + +std::string cvm::wrap_string(std::string const &s, size_t nchars) +{ + if (!s.size()) { + return std::string(nchars, ' '); + } else { + return ( (s.size() <= nchars) ? + (s+std::string(nchars-s.size(), ' ')) : + (std::string(s, 0, nchars)) ); + } +} + + // shared pointer to the proxy object colvarproxy *colvarmodule::proxy = NULL; // static runtime data cvm::real colvarmodule::debug_gradients_step_size = 1.0e-07; int colvarmodule::errorCode = 0; -long colvarmodule::it = 0; -long colvarmodule::it_restart = 0; +int colvarmodule::log_level_ = 10; +cvm::step_number colvarmodule::it = 0; +cvm::step_number colvarmodule::it_restart = 0; size_t colvarmodule::restart_out_freq = 0; size_t colvarmodule::cv_traj_freq = 0; bool colvarmodule::use_scripted_forces = false; diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index 99b797627e..30620a2527 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -10,6 +10,8 @@ #ifndef COLVARMODULE_H #define COLVARMODULE_H +#include + #include "colvars_version.h" #ifndef COLVARS_DEBUG @@ -55,6 +57,7 @@ class colvar; class colvarbias; class colvarproxy; class colvarscript; +class colvarvalue; /// \brief Collective variables module (main class) @@ -88,10 +91,16 @@ public: // TODO colvarscript should be unaware of colvarmodule's internals friend class colvarscript; + /// Use a 64-bit integer to store the step number + typedef long long step_number; + /// Defining an abstract real number allows to switch precision typedef double real; - /// Override std::pow with a product for n integer + + // Math functions + + /// Override the STL pow() with a product for n integer static inline real integer_power(real const &x, int const n) { // Original code: math_special.h in LAMMPS @@ -105,8 +114,68 @@ public: return (n > 0) ? yy : 1.0/yy; } - /// Residue identifier - typedef int residue_id; + /// Reimplemented to work around MS compiler issues + static inline real pow(real const &x, real const &y) + { + return ::pow(static_cast(x), static_cast(y)); + } + + /// Reimplemented to work around MS compiler issues + static inline real floor(real const &x) + { + return ::floor(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real fabs(real const &x) + { + return ::fabs(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real sqrt(real const &x) + { + return ::sqrt(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real sin(real const &x) + { + return ::sin(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real cos(real const &x) + { + return ::cos(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real acos(real const &x) + { + return ::acos(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real atan2(real const &x, real const &y) + { + return ::atan2(static_cast(x), static_cast(y)); + } + + /// Reimplemented to work around MS compiler issues + static inline real exp(real const &x) + { + return ::exp(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues. Note: log() is + /// currently defined as the text logging function, but this can be changed + /// at a later time + static inline real logn(real const &x) + { + return ::log(static_cast(x)); + } + class rvector; template class vector1d; @@ -114,6 +183,10 @@ public: class quaternion; class rotation; + + /// Residue identifier + typedef int residue_id; + /// \brief Atom position (different type name from rvector, to make /// possible future PBC-transparent implementations) typedef rvector atom_pos; @@ -150,19 +223,19 @@ public: /// Current step number - static long it; + static step_number it; /// Starting step number for this run - static long it_restart; + static step_number it_restart; /// Return the current step number from the beginning of this run - static inline long step_relative() + static inline step_number step_relative() { return it - it_restart; } /// Return the current step number from the beginning of the whole /// calculation - static inline long step_absolute() + static inline step_number step_absolute() { return it; } @@ -203,9 +276,10 @@ private: std::vector named_atom_groups; public: /// Register a named atom group into named_atom_groups - inline void register_named_atom_group(atom_group * ag) { - named_atom_groups.push_back(ag); - } + void register_named_atom_group(atom_group *ag); + + /// Remove a named atom group from named_atom_groups + void unregister_named_atom_group(atom_group *ag); /// Array of collective variables std::vector *variables(); @@ -254,8 +328,7 @@ public: /// \brief How many objects are configured yet? size_t size() const; - /// \brief Constructor \param config_name Configuration file name - /// \param restart_name (optional) Restart file name + /// \brief Constructor colvarmodule(colvarproxy *proxy); /// Destructor @@ -265,6 +338,7 @@ public: int reset(); /// Open a config file, load its contents, and pass it to config_string() + /// \param config_file_name Configuration file name int read_config_file(char const *config_file_name); /// \brief Parse a config string assuming it is a complete configuration @@ -431,26 +505,92 @@ public: long traj_read_begin, long traj_read_end); - /// Quick conversion of an object to a string - template static std::string to_str(T const &x, - size_t const &width = 0, - size_t const &prec = 0); - /// Quick conversion of a vector of objects to a string - template static std::string to_str(std::vector const &x, - size_t const &width = 0, - size_t const &prec = 0); + /// Convert to string for output purposes + static std::string to_str(char const *s); + + /// Convert to string for output purposes + static std::string to_str(std::string const &s); + + /// Convert to string for output purposes + static std::string to_str(bool x); + + /// Convert to string for output purposes + static std::string to_str(int const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(size_t const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(long int const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(step_number const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(real const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(rvector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(quaternion const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(colvarvalue const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(vector1d const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(matrix2d const &x, + size_t width = 0, size_t prec = 0); + + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + /// Reduce the number of characters in a string - static inline std::string wrap_string(std::string const &s, - size_t const &nchars) - { - if (!s.size()) - return std::string(nchars, ' '); - else - return ( (s.size() <= size_t(nchars)) ? - (s+std::string(nchars-s.size(), ' ')) : - (std::string(s, 0, nchars)) ); - } + static std::string wrap_string(std::string const &s, + size_t nchars); /// Number of characters to represent a time step static size_t const it_width; @@ -485,7 +625,9 @@ public: static void request_total_force(); /// Print a message to the main log - static void log(std::string const &message); + /// \param message Message to print + /// \param min_log_level Only print if cvm::log_level() >= min_log_level + static void log(std::string const &message, int min_log_level = 10); /// Print a message to the main log and exit with error code static int fatal_error(std::string const &message); @@ -493,6 +635,50 @@ public: /// Print a message to the main log and set global error code static int error(std::string const &message, int code = COLVARS_ERROR); +private: + + /// Level of logging requested by the user + static int log_level_; + +public: + + /// Level of logging requested by the user + static inline int log_level() + { + return log_level_; + } + + /// Level at which initialization messages are logged + static inline int log_init_messages() + { + return 1; + } + + /// Level at which a keyword's user-provided value is logged + static inline int log_user_params() + { + return 2; + } + + /// Level at which a keyword's default value is logged + static inline int log_default_params() + { + return 3; + } + + /// Level at which output-file operations are logged + static inline int log_output_files() + { + return 4; + } + + /// Level at which input-file operations (configuration, state) are logged + static inline int log_input_files() + { + return 5; + } + + // Replica exchange commands. static bool replica_enabled(); static int replica_index(); @@ -630,41 +816,4 @@ std::ostream & operator << (std::ostream &os, cvm::rvector const &v); std::istream & operator >> (std::istream &is, cvm::rvector &v); -template std::string cvm::to_str(T const &x, - size_t const &width, - size_t const &prec) { - std::ostringstream os; - if (width) os.width(width); - if (prec) { - os.setf(std::ios::scientific, std::ios::floatfield); - os.precision(prec); - } - os << x; - return os.str(); -} - - -template std::string cvm::to_str(std::vector const &x, - size_t const &width, - size_t const &prec) { - if (!x.size()) return std::string(""); - std::ostringstream os; - if (prec) { - os.setf(std::ios::scientific, std::ios::floatfield); - } - os << "{ "; - if (width) os.width(width); - if (prec) os.precision(prec); - os << x[0]; - for (size_t i = 1; i < x.size(); i++) { - os << ", "; - if (width) os.width(width); - if (prec) os.precision(prec); - os << x[i]; - } - os << " }"; - return os.str(); -} - - #endif diff --git a/lib/colvars/colvarparse.cpp b/lib/colvars/colvarparse.cpp index d8b3a359cd..10dce911ee 100644 --- a/lib/colvars/colvarparse.cpp +++ b/lib/colvars/colvarparse.cpp @@ -10,6 +10,7 @@ #include #include +#include #include "colvarmodule.h" #include "colvarvalue.h" @@ -20,15 +21,21 @@ char const * const colvarparse::white_space = " \t"; -// definition of single-value keyword parsers +namespace { -template bool colvarparse::_get_keyval_scalar_(std::string const &conf, - char const *key, - TYPE &value, - TYPE const &def_value, - Parse_Mode const parse_mode) + // Avoid having to put the bool assignment in the template :-( + void set_bool(void *p, bool val) + { + bool *v = reinterpret_cast(p); + *v = val; + } + +} + + +bool colvarparse::get_key_string_value(std::string const &conf, + char const *key, std::string &data) { - std::string data; bool b_found = false, b_found_any = false; size_t save_pos = 0, found_count = 0; @@ -48,29 +55,163 @@ template bool colvarparse::_get_keyval_scalar_(std::string const std::string(key)+"\".\n", INPUT_ERROR); } + return b_found_any; +} + + +template +void colvarparse::mark_key_set_user(std::string const &key_str, + TYPE const &value, + Parse_Mode const &parse_mode) +{ + key_set_modes[to_lower_cppstr(key_str)] = key_set_user; + if (parse_mode & parse_echo) { + cvm::log("# "+key_str+" = "+cvm::to_str(value)+"\n", + cvm::log_user_params()); + } +} + + +template +void colvarparse::mark_key_set_default(std::string const &key_str, + TYPE const &def_value, + Parse_Mode const &parse_mode) +{ + key_set_modes[to_lower_cppstr(key_str)] = key_set_default; + if (parse_mode & parse_echo_default) { + cvm::log("# "+key_str+" = "+cvm::to_str(def_value)+ + " [default]\n", cvm::log_default_params()); + } +} + + +void colvarparse::error_key_required(std::string const &key_str, + Parse_Mode const &parse_mode) +{ + if (key_already_set(key_str)) { + return; + } + if (parse_mode & parse_restart) { + cvm::error("Error: keyword \""+key_str+ + "\" is missing from the restart.\n", INPUT_ERROR); + } else { + cvm::error("Error: keyword \""+key_str+ + "\" is required.\n", INPUT_ERROR); + } +} + + +template +int colvarparse::_get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + TYPE &value, + TYPE const &def_value) +{ + std::istringstream is(data); + size_t value_count = 0; + TYPE x(def_value); + + while (is >> x) { + value = x; + value_count++; + } + + if (value_count == 0) { + return cvm::error("Error: in parsing \""+ + key_str+"\".\n", INPUT_ERROR); + } + + if (value_count > 1) { + return cvm::error("Error: multiple values " + "are not allowed for keyword \""+ + key_str+"\".\n", INPUT_ERROR); + } + + return COLVARS_OK; +} + + +template<> +int colvarparse::_get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + bool &value, + bool const &def_value) +{ + if ( (data == std::string("on")) || + (data == std::string("yes")) || + (data == std::string("true")) ) { + set_bool(reinterpret_cast(&value), true); + } else if ( (data == std::string("off")) || + (data == std::string("no")) || + (data == std::string("false")) ) { + set_bool(reinterpret_cast(&value), false); + } else { + return cvm::error("Error: boolean values only are allowed " + "for \""+key_str+"\".\n", INPUT_ERROR); + } + return COLVARS_OK; +} + + +template +int colvarparse::_get_keyval_scalar_novalue_(std::string const &key_str, + TYPE &value, + Parse_Mode const &parse_mode) +{ + return cvm::error("Error: improper or missing value " + "for \""+key_str+"\".\n", INPUT_ERROR); +} + +template<> +int colvarparse::_get_keyval_scalar_novalue_(std::string const &key_str, + bool &value, + Parse_Mode const &parse_mode) +{ + set_bool(reinterpret_cast(&value), true); + mark_key_set_user(key_str, value, parse_mode); + return COLVARS_OK; +} + + +template +bool colvarparse::_get_keyval_scalar_(std::string const &conf, + char const *key, + TYPE &value, + TYPE const &def_value, + Parse_Mode const &parse_mode) +{ + std::string const key_str(key); + + std::string data; + bool const b_found_any = get_key_string_value(conf, key, data); + if (data.size()) { - std::istringstream is(data); - TYPE x(def_value); - if (is >> x) { - value = x; + + _get_keyval_scalar_value_(key_str, data, value, def_value); + + mark_key_set_user(key_str, value, parse_mode); + + } else { // No string value + + if (b_found_any) { + + _get_keyval_scalar_novalue_(key_str, value, parse_mode); + } else { - cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(value)+"\n"); - } - } else { - if (b_found_any) { - cvm::error("Error: improper or missing value " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - } - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(def_value)+" [default]\n"); + if (parse_mode & parse_required) { + if (cvm::debug()) { + cvm::log("get_keyval, parse_required = "+cvm::to_str(parse_mode & parse_required)+ + "\n"); + } + error_key_required(key_str, parse_mode); + return false; + } + + if ( (parse_mode & parse_override) || !(key_already_set(key)) ) { + value = def_value; + mark_key_set_default(key_str, value, parse_mode); + } } } @@ -78,96 +219,17 @@ template bool colvarparse::_get_keyval_scalar_(std::string const } -bool colvarparse::_get_keyval_scalar_string_(std::string const &conf, - char const *key, - std::string &value, - std::string const &def_value, - Parse_Mode const parse_mode) +template +bool colvarparse::_get_keyval_vector_(std::string const &conf, + char const *key, + std::vector &values, + std::vector const &def_values, + Parse_Mode const &parse_mode) { + std::string const key_str(key); + std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - - if (data.size()) { - std::istringstream is(data); - size_t data_count = 0; - std::string x(def_value); - while (is >> x) { - value = x; - data_count++; - } - if (data_count == 0) - cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); - if (data_count > 1) { - cvm::error("Error: multiple values " - "are not allowed for keyword \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = \""+ - cvm::to_str(value)+"\"\n"); - } - } else { - - if (b_found_any) { - cvm::error("Error: improper or missing value " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - } - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = \""+ - cvm::to_str(def_value)+"\" [default]\n"); - } - } - - return b_found_any; -} - - -// multiple-value keyword parsers - -template bool colvarparse::_get_keyval_vector_(std::string const &conf, - char const *key, - std::vector &values, - std::vector const &def_values, - Parse_Mode const parse_mode) -{ - std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } + bool const b_found_any = get_key_string_value(conf, key, data); if (data.size()) { std::istringstream is(data); @@ -175,10 +237,11 @@ template bool colvarparse::_get_keyval_vector_(std::string const if (values.size() == 0) { std::vector x; - if (def_values.size()) + if (def_values.size()) { x = def_values; - else + } else { x.assign(1, TYPE()); + } for (size_t i = 0; ( is >> x[ ((i bool colvarparse::_get_keyval_vector_(std::string const values[i] = x; } else { cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); + key_str+"\".\n", INPUT_ERROR); } } } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(values)+"\n"); - } + mark_key_set_user< std::vector >(key_str, values, parse_mode); } else { if (b_found_any) { cvm::error("Error: improper or missing values for \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } + key_str+"\".\n", INPUT_ERROR); + } else { - for (size_t i = 0; i < values.size(); i++) - values[i] = def_values[ (i > def_values.size()) ? 0 : i ]; + if ((values.size() > 0) && (values.size() != def_values.size())) { + cvm::error("Error: the number of default values for \""+ + key_str+"\" is different from the number of " + "current values.\n", BUG_ERROR); + } + + if (parse_mode & parse_required) { + error_key_required(key_str, parse_mode); + return false; + } + + if ( (parse_mode & parse_override) || !(key_already_set(key)) ) { + for (size_t i = 0; i < values.size(); i++) { + values[i] = def_values[i]; + } + mark_key_set_default< std::vector >(key_str, def_values, + parse_mode); + } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(def_values)+" [default]\n"); } } @@ -255,13 +328,22 @@ bool colvarparse::get_keyval(std::string const &conf, return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } +bool colvarparse::get_keyval(std::string const &conf, + char const *key, + cvm::step_number &value, + cvm::step_number const &def_value, + Parse_Mode const parse_mode) +{ + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); +} + bool colvarparse::get_keyval(std::string const &conf, char const *key, std::string &value, std::string const &def_value, Parse_Mode const parse_mode) { - return _get_keyval_scalar_string_(conf, key, value, def_value, parse_mode); + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } bool colvarparse::get_keyval(std::string const &conf, @@ -300,66 +382,13 @@ bool colvarparse::get_keyval(std::string const &conf, return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } - bool colvarparse::get_keyval(std::string const &conf, char const *key, bool &value, bool const &def_value, Parse_Mode const parse_mode) { - std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - - if (data.size()) { - if ( (data == std::string("on")) || - (data == std::string("yes")) || - (data == std::string("true")) ) { - value = true; - } else if ( (data == std::string("off")) || - (data == std::string("no")) || - (data == std::string("false")) ) { - value = false; - } else - cvm::error("Error: boolean values only are allowed " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - (value ? "on" : "off")+"\n"); - } - } else { - - if (b_found_any) { - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = on\n"); - } - value = true; - } else { - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - (def_value ? "on" : "off")+" [default]\n"); - } - } - } - - return b_found_any; + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } @@ -440,15 +469,27 @@ bool colvarparse::get_keyval(std::string const &conf, void colvarparse::add_keyword(char const *key) { - for (std::list::iterator ki = allowed_keywords.begin(); - ki != allowed_keywords.end(); ki++) { - if (to_lower_cppstr(std::string(key)) == *ki) - return; + std::string const key_str_lower(to_lower_cppstr(std::string(key))); + + if (key_set_modes.find(key_str_lower) != key_set_modes.end()) { + return; } - // not found in the list - // if (cvm::debug()) - // cvm::log("Registering a new keyword, \""+std::string (key)+"\".\n"); - allowed_keywords.push_back(to_lower_cppstr(std::string(key))); + + key_set_modes[key_str_lower] = key_not_set; + + allowed_keywords.push_back(key_str_lower); +} + + +bool colvarparse::key_already_set(std::string const &key_str) +{ + std::string const key_str_lower(to_lower_cppstr(key_str)); + + if (key_set_modes.find(key_str_lower) == key_set_modes.end()) { + return false; + } + + return (key_set_modes[key_str_lower] > 0); } @@ -457,6 +498,10 @@ void colvarparse::strip_values(std::string &conf) size_t offset = 0; data_begin_pos.sort(); data_end_pos.sort(); + std::list::iterator data_begin_pos_last = std::unique(data_begin_pos.begin(), data_begin_pos.end()); + data_begin_pos.erase(data_begin_pos_last, data_begin_pos.end()); + std::list::iterator data_end_pos_last = std::unique(data_end_pos.begin(), data_end_pos.end()); + data_end_pos.erase(data_end_pos_last, data_end_pos.end()); std::list::iterator data_begin = data_begin_pos.begin(); std::list::iterator data_end = data_end_pos.begin(); @@ -464,28 +509,16 @@ void colvarparse::strip_values(std::string &conf) for ( ; (data_begin != data_begin_pos.end()) && (data_end != data_end_pos.end()) ; data_begin++, data_end++) { - - // std::cerr << "data_begin, data_end " - // << *data_begin << ", " << *data_end - // << "\n"; - size_t const nchars = *data_end-*data_begin; - - // std::cerr << "conf[data_begin:data_end] = \"" - // << std::string (conf, *data_begin - offset, nchars) - // << "\"\n"; - conf.erase(*data_begin - offset, nchars); offset += nchars; - - // std::cerr << ("Stripped config = \"\n"+conf+"\"\n"); - } } void colvarparse::clear_keyword_registry() { + key_set_modes.clear(); allowed_keywords.clear(); data_begin_pos.clear(); data_end_pos.clear(); diff --git a/lib/colvars/colvarparse.h b/lib/colvars/colvarparse.h index 28ad3c052b..8501ee8c14 100644 --- a/lib/colvars/colvarparse.h +++ b/lib/colvars/colvarparse.h @@ -12,6 +12,7 @@ #include #include +#include #include "colvarmodule.h" #include "colvarvalue.h" @@ -24,35 +25,9 @@ /// need to parse input inherit from this class colvarparse { -protected: - - /// \brief List of legal keywords for this object: this is updated - /// by each call to colvarparse::get_keyval() or - /// colvarparse::key_lookup() - std::list allowed_keywords; - - /// \brief List of delimiters for the values of each keyword in the - /// configuration string; all keywords will be stripped of their - /// values before the keyword check is performed - std::list data_begin_pos; - - /// \brief List of delimiters for the values of each keyword in the - /// configuration string; all keywords will be stripped of their - /// values before the keyword check is performed - std::list data_end_pos; - - /// \brief Add a new valid keyword to the list - void add_keyword(char const *key); - - /// \brief Remove all the values from the config string - void strip_values(std::string &conf); - - /// \brief Configuration string of the object (includes comments) - std::string config_string; - public: - + /// Default constructor inline colvarparse() { init(); @@ -88,14 +63,23 @@ public: /// How a keyword is parsed in a string enum Parse_Mode { - /// \brief(default) Read the first instance of a keyword (if - /// any), report its value, and print a warning when there is more - /// than one - parse_normal, - /// \brief Like parse_normal, but don't send any message to the log - /// (useful e.g. in restart files when such messages are very - /// numerous and redundant) - parse_silent + /// Zero for all flags + parse_null = 0, + /// Print the value of a keyword if it is given + parse_echo = (1<<1), + /// Print the default value of a keyword, if it is NOT given + parse_echo_default = (1<<2), + /// Do not print the keyword + parse_silent = 0, + /// Raise error if the keyword is not provided + parse_required = (1<<16), + /// Successive calls to get_keyval() will override the previous values + /// when the keyword is not given any more + parse_override = (1<<17), + /// The call is being executed from a read_restart() function + parse_restart = (1<<18), + /// Alias for old default behavior (should be phased out) + parse_normal = (1<<2) | (1<<1) | (1<<17) }; /// \brief Check that all the keywords within "conf" are in the list @@ -146,6 +130,11 @@ public: long &value, long const &def_value = 0, Parse_Mode const parse_mode = parse_normal); + bool get_keyval(std::string const &conf, + char const *key, + cvm::step_number &value, + cvm::step_number const &def_value = 0, + Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, std::string &value, @@ -219,23 +208,57 @@ public: protected: - // Templates - template bool _get_keyval_scalar_(std::string const &conf, - char const *key, - TYPE &value, - TYPE const &def_value, - Parse_Mode const parse_mode); - bool _get_keyval_scalar_string_(std::string const &conf, - char const *key, - std::string &value, - std::string const &def_value, - Parse_Mode const parse_mode); + /// Get the string value of a keyword, and save it for later parsing + bool get_key_string_value(std::string const &conf, + char const *key, std::string &data); - template bool _get_keyval_vector_(std::string const &conf, - char const *key, - std::vector &values, - std::vector const &def_values, - Parse_Mode const parse_mode); + /// Template for single-value keyword parsers + template + bool _get_keyval_scalar_(std::string const &conf, + char const *key, + TYPE &value, + TYPE const &def_value, + Parse_Mode const &parse_mode); + + /// Template for multiple-value keyword parsers + template + bool _get_keyval_vector_(std::string const &conf, + char const *key, + std::vector &values, + std::vector const &def_values, + Parse_Mode const &parse_mode); + + /// Extract the value of a variable from a string + template + int _get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + TYPE &value, + TYPE const &def_value); + + /// Handle the case where the user provides a keyword without value + template + int _get_keyval_scalar_novalue_(std::string const &key_str, + TYPE &value, + Parse_Mode const &parse_mode); + + /// Record that the keyword has just been user-defined + template + void mark_key_set_user(std::string const &key_str, + TYPE const &value, + Parse_Mode const &parse_mode); + + /// Record that the keyword has just been set to its default value + template + void mark_key_set_default(std::string const &key_str, + TYPE const &def_value, + Parse_Mode const &parse_mode); + + /// Raise error condition due to the keyword being required! + void error_key_required(std::string const &key_str, + Parse_Mode const &parse_mode); + + /// True if the keyword has been set already + bool key_already_set(std::string const &key_str); public: @@ -286,7 +309,7 @@ public: size_t *save_pos = NULL); /// \brief Reads a configuration line, adds it to config_string, and returns - /// the stream \param is Input stream \param s String that will hold the + /// the stream \param is Input stream \param line String that will hold the /// configuration line, with comments stripped std::istream & read_config_line(std::istream &is, std::string &line); @@ -299,7 +322,51 @@ public: /// from this position static int check_braces(std::string const &conf, size_t const start_pos); +protected: + + /// \brief List of legal keywords for this object: this is updated + /// by each call to colvarparse::get_keyval() or + /// colvarparse::key_lookup() + std::list allowed_keywords; + + /// How a keyword has been set + enum key_set_mode { + key_not_set = 0, + key_set_user = 1, + key_set_default = 2 + }; + + /// Track which keywords have been already set, and how + std::map key_set_modes; + + /// \brief List of delimiters for the values of each keyword in the + /// configuration string; all keywords will be stripped of their + /// values before the keyword check is performed + std::list data_begin_pos; + + /// \brief List of delimiters for the values of each keyword in the + /// configuration string; all keywords will be stripped of their + /// values before the keyword check is performed + std::list data_end_pos; + + /// \brief Add a new valid keyword to the list + void add_keyword(char const *key); + + /// \brief Remove all the values from the config string + void strip_values(std::string &conf); + + /// \brief Configuration string of the object (includes comments) + std::string config_string; + }; +/// Bitwise OR between two Parse_mode flags +inline colvarparse::Parse_Mode operator | (colvarparse::Parse_Mode const &mode1, + colvarparse::Parse_Mode const &mode2) +{ + return static_cast(static_cast(mode1) | + static_cast(mode2)); +} + #endif diff --git a/lib/colvars/colvarproxy.cpp b/lib/colvars/colvarproxy.cpp index da9257eee2..5f8e82d30a 100644 --- a/lib/colvars/colvarproxy.cpp +++ b/lib/colvars/colvarproxy.cpp @@ -60,7 +60,7 @@ bool colvarproxy_system::total_forces_same_step() const inline int round_to_integer(cvm::real x) { - return std::floor(x+0.5); + return cvm::floor(x+0.5); } @@ -129,7 +129,10 @@ cvm::rvector colvarproxy_system::position_distance(cvm::atom_pos const &pos1, -colvarproxy_atoms::colvarproxy_atoms() {} +colvarproxy_atoms::colvarproxy_atoms() +{ + updated_masses_ = updated_charges_ = false; +} colvarproxy_atoms::~colvarproxy_atoms() @@ -544,7 +547,7 @@ int colvarproxy_script::run_colvar_gradient_callback( colvarproxy_tcl::colvarproxy_tcl() { - _tcl_interp = NULL; + tcl_interp_ = NULL; } @@ -573,7 +576,7 @@ char const *colvarproxy_tcl::tcl_obj_to_str(unsigned char *obj) int colvarproxy_tcl::tcl_run_force_callback() { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); std::string cmd = std::string("calc_colvar_forces ") + cvm::to_str(cvm::step_absolute()); int err = Tcl_Eval(tcl_interp, cmd.c_str()); @@ -596,7 +599,7 @@ int colvarproxy_tcl::tcl_run_colvar_callback( { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); size_t i; std::string cmd = std::string("calc_") + name; for (i = 0; i < cvc_values.size(); i++) { @@ -633,7 +636,7 @@ int colvarproxy_tcl::tcl_run_colvar_gradient_callback( { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); size_t i; std::string cmd = std::string("calc_") + name + "_gradient"; for (i = 0; i < cvc_values.size(); i++) { diff --git a/lib/colvars/colvarproxy.h b/lib/colvars/colvarproxy.h index 3ff5f3c697..3bbdfe522e 100644 --- a/lib/colvars/colvarproxy.h +++ b/lib/colvars/colvarproxy.h @@ -29,7 +29,7 @@ /// /// To interface to a new MD engine, the simplest solution is to derive a new /// class from \link colvarproxy \endlink. Currently implemented are: \link -/// colvarproxy_lammps, \endlink, \link colvarproxy_namd, \endlink, \link +/// colvarproxy_lammps \endlink, \link colvarproxy_namd \endlink, \link /// colvarproxy_vmd \endlink. @@ -227,11 +227,15 @@ public: inline std::vector *modify_atom_masses() { + // assume that we are requesting masses to change them + updated_masses_ = true; return &atoms_masses; } inline std::vector *modify_atom_charges() { + // assume that we are requesting charges to change them + updated_charges_ = true; return &atoms_charges; } @@ -250,6 +254,18 @@ public: return &atoms_new_colvar_forces; } + /// Record whether masses have been updated + inline bool updated_masses() const + { + return updated_masses_; + } + + /// Record whether masses have been updated + inline bool updated_charges() const + { + return updated_charges_; + } + protected: /// \brief Array of 0-based integers used to uniquely associate atoms @@ -268,6 +284,9 @@ protected: /// \brief Forces applied from colvars, to be communicated to the MD integrator std::vector atoms_new_colvar_forces; + /// Whether the masses and charges have been updated from the host code + bool updated_masses_, updated_charges_; + /// Used by all init_atom() functions: create a slot for an atom not /// requested yet; returns the index in the arrays int add_atom_slot(int atom_id); @@ -522,7 +541,7 @@ public: protected: /// Pointer to Tcl interpreter object - void *_tcl_interp; + void *tcl_interp_; /// Set Tcl pointers virtual void init_tcl_pointers(); diff --git a/lib/colvars/colvars_version.h b/lib/colvars/colvars_version.h index bd84d077d7..2521fdf872 100644 --- a/lib/colvars/colvars_version.h +++ b/lib/colvars/colvars_version.h @@ -1,5 +1,5 @@ #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2018-11-16" +#define COLVARS_VERSION "2019-04-26" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp index c9fe0497a9..1ad3283337 100644 --- a/lib/colvars/colvarscript.cpp +++ b/lib/colvars/colvarscript.cpp @@ -137,6 +137,10 @@ int colvarscript::run(int objc, unsigned char *const objv[]) if (cmd == "update") { error_code |= proxy->update_input(); + if (error_code) { + result += "Error updating the Colvars module.\n"; + return error_code; + } error_code |= colvars->calc(); error_code |= proxy->update_output(); if (error_code) { @@ -273,6 +277,10 @@ int colvarscript::run(int objc, unsigned char *const objv[]) int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) { + if (objc < 3) { + result = "Missing arguments"; + return COLVARSCRIPT_ERROR; + } std::string const subcmd(obj_to_str(objv[2])); if (subcmd == "value") { @@ -323,6 +331,47 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) return COLVARS_OK; } + if (subcmd == "getatomgroups") { + std::vector > lists = cv->get_atom_lists(); + std::vector >::iterator li = lists.begin(); + + for ( ; li != lists.end(); ++li) { + result += "{"; + std::vector::iterator lj = (*li).begin(); + for ( ; lj != (*li).end(); ++lj) { + result += cvm::to_str(*lj); + result += " "; + } + result += "} "; + } + return COLVARS_OK; + } + + if (subcmd == "getatomids") { + std::vector::iterator li = cv->atom_ids.begin(); + + for ( ; li != cv->atom_ids.end(); ++li) { + result += cvm::to_str(*li); + result += " "; + } + return COLVARS_OK; + } + + if (subcmd == "getgradients") { + std::vector::iterator li = cv->atomic_gradients.begin(); + + for ( ; li != cv->atomic_gradients.end(); ++li) { + result += "{"; + int j; + for (j = 0; j < 3; ++j) { + result += cvm::to_str((*li)[j]); + result += " "; + } + result += "} "; + } + return COLVARS_OK; + } + if (subcmd == "getappliedforce") { result = (cv->applied_force()).to_simple_string(); return COLVARS_OK; @@ -410,6 +459,10 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) int colvarscript::proc_bias(colvarbias *b, int objc, unsigned char *const objv[]) { + if (objc < 3) { + result = "Missing arguments"; + return COLVARSCRIPT_ERROR; + } std::string const subcmd(obj_to_str(objv[2])); if (subcmd == "energy") { diff --git a/lib/colvars/colvarscript.h b/lib/colvars/colvarscript.h index 313dbd661b..341cb1f72c 100644 --- a/lib/colvars/colvarscript.h +++ b/lib/colvars/colvarscript.h @@ -191,8 +191,9 @@ inline static colvarbias *colvarbias_obj(void *pobj) #ifdef COLVARSCRIPT_CPP #define CVSCRIPT_COMM_FN(COMM,N_ARGS_MIN,N_ARGS_MAX,ARGS,FN_BODY) \ - int CVSCRIPT_COMM_FNAME(COMM)(void *pobj, \ - int objc, unsigned char *const objv[]) \ + extern "C" int CVSCRIPT_COMM_FNAME(COMM)(void *pobj, \ + int objc, \ + unsigned char *const objv[]) \ { \ colvarscript *script = colvarscript_obj(); \ script->clear_results(); \ diff --git a/lib/colvars/colvartypes.cpp b/lib/colvars/colvartypes.cpp index 2b45d77e07..b81a943eab 100644 --- a/lib/colvars/colvartypes.cpp +++ b/lib/colvars/colvartypes.cpp @@ -19,6 +19,8 @@ bool colvarmodule::rotation::monitor_crossings = false; cvm::real colvarmodule::rotation::crossing_threshold = 1.0E-02; +namespace { + /// Numerical recipes diagonalization static int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot); @@ -28,6 +30,7 @@ static int eigsrt(cvm::real *d, cvm::real **v); /// Transpose the matrix static int transpose(cvm::real **v); +} std::string cvm::rvector::to_simple_string() const @@ -245,13 +248,11 @@ cvm::quaternion::position_derivative_inner(cvm::rvector const &pos, // Seok C, Dill KA. Using quaternions to calculate RMSD. J Comput // Chem. 25(15):1849-57 (2004) DOI: 10.1002/jcc.20110 PubMed: 15376254 -void colvarmodule::rotation::build_matrix(std::vector const &pos1, - std::vector const &pos2, - cvm::matrix2d &S) +void colvarmodule::rotation::build_correlation_matrix( + std::vector const &pos1, + std::vector const &pos2) { // build the correlation matrix - C.resize(3, 3); - C.reset(); size_t i; for (i = 0; i < pos1.size(); i++) { C.xx() += pos1[i].x * pos2[i].x; @@ -264,7 +265,11 @@ void colvarmodule::rotation::build_matrix(std::vector const &pos1 C.zy() += pos1[i].z * pos2[i].y; C.zz() += pos1[i].z * pos2[i].z; } +} + +void colvarmodule::rotation::compute_overlap_matrix() +{ // build the "overlap" matrix, whose eigenvectors are stationary // points of the RMSD in the space of rotations S[0][0] = C.xx() + C.yy() + C.zz(); @@ -286,37 +291,38 @@ void colvarmodule::rotation::build_matrix(std::vector const &pos1 } -void colvarmodule::rotation::diagonalize_matrix(cvm::matrix2d &S, - cvm::vector1d &S_eigval, - cvm::matrix2d &S_eigvec) +void colvarmodule::rotation::diagonalize_matrix( + cvm::matrix2d &m, + cvm::vector1d &eigval, + cvm::matrix2d &eigvec) { - S_eigval.resize(4); - S_eigval.reset(); - S_eigvec.resize(4,4); - S_eigvec.reset(); + eigval.resize(4); + eigval.reset(); + eigvec.resize(4, 4); + eigvec.reset(); // diagonalize int jac_nrot = 0; - if (jacobi(S.c_array(), S_eigval.c_array(), S_eigvec.c_array(), &jac_nrot) != + if (jacobi(m.c_array(), eigval.c_array(), eigvec.c_array(), &jac_nrot) != COLVARS_OK) { cvm::error("Too many iterations in routine jacobi.\n" "This is usually the result of an ill-defined set of atoms for " "rotational alignment (RMSD, rotateReference, etc).\n"); } - eigsrt(S_eigval.c_array(), S_eigvec.c_array()); + eigsrt(eigval.c_array(), eigvec.c_array()); // jacobi saves eigenvectors by columns - transpose(S_eigvec.c_array()); + transpose(eigvec.c_array()); // normalize eigenvectors for (size_t ie = 0; ie < 4; ie++) { cvm::real norm2 = 0.0; size_t i; for (i = 0; i < 4; i++) { - norm2 += S_eigvec[ie][i] * S_eigvec[ie][i]; + norm2 += eigvec[ie][i] * eigvec[ie][i]; } - cvm::real const norm = std::sqrt(norm2); + cvm::real const norm = cvm::sqrt(norm2); for (i = 0; i < 4; i++) { - S_eigvec[ie][i] /= norm; + eigvec[ie][i] /= norm; } } } @@ -324,23 +330,26 @@ void colvarmodule::rotation::diagonalize_matrix(cvm::matrix2d &S, // Calculate the rotation, plus its derivatives -void colvarmodule::rotation::calc_optimal_rotation(std::vector const &pos1, - std::vector const &pos2) +void colvarmodule::rotation::calc_optimal_rotation( + std::vector const &pos1, + std::vector const &pos2) { - S.resize(4,4); + C.resize(3, 3); + C.reset(); + build_correlation_matrix(pos1, pos2); + + S.resize(4, 4); S.reset(); + compute_overlap_matrix(); - build_matrix(pos1, pos2, S); - - S_backup.resize(4,4); + S_backup.resize(4, 4); S_backup = S; if (b_debug_gradients) { - cvm::log("S = "+cvm::to_str(cvm::to_str(S_backup), cvm::cv_width, cvm::cv_prec)+"\n"); + cvm::log("S = "+cvm::to_str(S_backup, cvm::cv_width, cvm::cv_prec)+"\n"); } diagonalize_matrix(S, S_eigval, S_eigvec); - // eigenvalues and eigenvectors cvm::real const L0 = S_eigval[0]; cvm::real const L1 = S_eigval[1]; @@ -524,7 +533,7 @@ void colvarmodule::rotation::calc_optimal_rotation(std::vector co dq0_2[3][comp] * colvarmodule::debug_gradients_step_size); cvm::log( "|(l_0+dl_0) - l_0^new|/l_0 = "+ - cvm::to_str(std::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ + cvm::to_str(cvm::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ ", |(q_0+dq_0) - q_0^new| = "+ cvm::to_str((Q0+DQ0 - Q0_new).norm(), cvm::cv_width, cvm::cv_prec)+ "\n"); @@ -544,6 +553,9 @@ void colvarmodule::rotation::calc_optimal_rotation(std::vector co #define n 4 + +namespace { + int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot) { int j,iq,ip,i; @@ -567,7 +579,7 @@ int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot) sm=0.0; for (ip=0;ip 4 && (cvm::real)(std::fabs(d[ip])+g) == (cvm::real)std::fabs(d[ip]) - && (cvm::real)(std::fabs(d[iq])+g) == (cvm::real)std::fabs(d[iq])) + g=100.0*cvm::fabs(a[ip][iq]); + if (i > 4 && (cvm::real)(cvm::fabs(d[ip])+g) == (cvm::real)cvm::fabs(d[ip]) + && (cvm::real)(cvm::fabs(d[iq])+g) == (cvm::real)cvm::fabs(d[iq])) a[ip][iq]=0.0; - else if (std::fabs(a[ip][iq]) > tresh) { + else if (cvm::fabs(a[ip][iq]) > tresh) { h=d[iq]-d[ip]; - if ((cvm::real)(std::fabs(h)+g) == (cvm::real)std::fabs(h)) + if ((cvm::real)(cvm::fabs(h)+g) == (cvm::real)cvm::fabs(h)) t=(a[ip][iq])/h; else { theta=0.5*h/(a[ip][iq]); - t=1.0/(std::fabs(theta)+std::sqrt(1.0+theta*theta)); + t=1.0/(cvm::fabs(theta)+cvm::sqrt(1.0+theta*theta)); if (theta < 0.0) t = -t; } - c=1.0/std::sqrt(1+t*t); + c=1.0/cvm::sqrt(1+t*t); s=t*c; tau=s/(1.0+c); h=t*a[ip][iq]; @@ -663,5 +675,7 @@ int transpose(cvm::real **v) return COLVARS_OK; } +} + #undef n #undef ROTATE diff --git a/lib/colvars/colvartypes.h b/lib/colvars/colvartypes.h index 4ef9557dcb..9973d92e98 100644 --- a/lib/colvars/colvartypes.h +++ b/lib/colvars/colvartypes.h @@ -10,7 +10,6 @@ #ifndef COLVARTYPES_H #define COLVARTYPES_H -#include #include #include "colvarmodule.h" @@ -220,7 +219,7 @@ public: inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } inline cvm::real sum() const @@ -801,7 +800,7 @@ public: inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } inline cvm::rvector unit() const @@ -1008,17 +1007,17 @@ public: cvm::real theta_in, cvm::real psi_in) { - q0 = ( (std::cos(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::cos(psi_in/2.0)) + - (std::sin(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q0 = ( (cvm::cos(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) + + (cvm::sin(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q1 = ( (std::sin(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::cos(psi_in/2.0)) - - (std::cos(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q1 = ( (cvm::sin(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) - + (cvm::cos(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q2 = ( (std::cos(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::cos(psi_in/2.0)) + - (std::sin(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q2 = ( (cvm::cos(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) + + (cvm::sin(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q3 = ( (std::cos(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::sin(psi_in/2.0)) - - (std::sin(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::cos(psi_in/2.0)) ); + q3 = ( (cvm::cos(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) - + (cvm::sin(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) ); } /// \brief Default constructor @@ -1115,7 +1114,7 @@ public: /// Norm of the quaternion inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } /// Return the conjugate quaternion @@ -1177,7 +1176,7 @@ public: } /// \brief Provides the quaternion product. \b NOTE: for the inner - /// product use: \code h.inner (q); \endcode + /// product use: `h.inner (q);` friend inline cvm::quaternion operator * (cvm::quaternion const &h, cvm::quaternion const &q) { @@ -1263,7 +1262,7 @@ public: cvm::real const cos_omega = this->q0*Q2.q0 + this->q1*Q2.q1 + this->q2*Q2.q2 + this->q3*Q2.q3; - cvm::real const omega = std::acos( (cos_omega > 1.0) ? 1.0 : + cvm::real const omega = cvm::acos( (cos_omega > 1.0) ? 1.0 : ( (cos_omega < -1.0) ? -1.0 : cos_omega) ); // get the minimum distance: x and -x are the same quaternion @@ -1278,11 +1277,11 @@ public: inline cvm::quaternion dist2_grad(cvm::quaternion const &Q2) const { cvm::real const cos_omega = this->q0*Q2.q0 + this->q1*Q2.q1 + this->q2*Q2.q2 + this->q3*Q2.q3; - cvm::real const omega = std::acos( (cos_omega > 1.0) ? 1.0 : + cvm::real const omega = cvm::acos( (cos_omega > 1.0) ? 1.0 : ( (cos_omega < -1.0) ? -1.0 : cos_omega) ); - cvm::real const sin_omega = std::sin(omega); + cvm::real const sin_omega = cvm::sin(omega); - if (std::fabs(sin_omega) < 1.0E-14) { + if (cvm::fabs(sin_omega) < 1.0E-14) { // return a null 4d vector return cvm::quaternion(0.0, 0.0, 0.0, 0.0); } @@ -1338,14 +1337,16 @@ public: /// \brief Perform gradient tests bool b_debug_gradients; - /// \brief Positions to superimpose: the rotation should brings pos1 - /// into pos2 - std::vector pos1, pos2; - + /// Correlation matrix C (3, 3) cvm::rmatrix C; + /// Overlap matrix S (4, 4) cvm::matrix2d S; + + /// Eigenvalues of S cvm::vector1d S_eigval; + + /// Eigenvectors of S cvm::matrix2d S_eigvec; /// Used for debugging gradients @@ -1404,8 +1405,8 @@ public: : b_debug_gradients(false) { cvm::rvector const axis_n = axis.unit(); - cvm::real const sina = std::sin(angle/2.0); - q = cvm::quaternion(std::cos(angle/2.0), + cvm::real const sina = cvm::sin(angle/2.0); + q = cvm::quaternion(cvm::cos(angle/2.0), sina * axis_n.x, sina * axis_n.y, sina * axis_n.z); } @@ -1437,7 +1438,7 @@ public: inline cvm::real spin_angle(cvm::rvector const &axis) const { cvm::rvector const q_vec = q.get_vector(); - cvm::real alpha = (180.0/PI) * 2.0 * std::atan2(axis * q_vec, q.q0); + cvm::real alpha = (180.0/PI) * 2.0 * cvm::atan2(axis * q_vec, q.q0); while (alpha > 180.0) alpha -= 360; while (alpha < -180.0) alpha += 360; return alpha; @@ -1473,9 +1474,9 @@ public: { cvm::rvector const q_vec = q.get_vector(); cvm::real const alpha = - (180.0/PI) * 2.0 * std::atan2(axis * q_vec, q.q0); + (180.0/PI) * 2.0 * cvm::atan2(axis * q_vec, q.q0); - cvm::real const cos_spin_2 = std::cos(alpha * (PI/180.0) * 0.5); + cvm::real const cos_spin_2 = cvm::cos(alpha * (PI/180.0) * 0.5); cvm::real const cos_theta_2 = ( (cos_spin_2 != 0.0) ? (q.q0 / cos_spin_2) : (0.0) ); @@ -1489,7 +1490,7 @@ public: cvm::rvector const q_vec = q.get_vector(); cvm::real const iprod = axis * q_vec; - cvm::real const cos_spin_2 = std::cos(std::atan2(iprod, q.q0)); + cvm::real const cos_spin_2 = cvm::cos(cvm::atan2(iprod, q.q0)); if (q.q0 != 0.0) { @@ -1529,15 +1530,17 @@ protected: /// eigenvalue crossing) cvm::quaternion q_old; - /// Build the overlap matrix S (used by calc_optimal_rotation()) - void build_matrix(std::vector const &pos1, - std::vector const &pos2, - cvm::matrix2d &S); + /// Build the correlation matrix C (used by calc_optimal_rotation()) + void build_correlation_matrix(std::vector const &pos1, + std::vector const &pos2); - /// Diagonalize the overlap matrix S (used by calc_optimal_rotation()) - void diagonalize_matrix(cvm::matrix2d &S, - cvm::vector1d &S_eigval, - cvm::matrix2d &S_eigvec); + /// Compute the overlap matrix S (used by calc_optimal_rotation()) + void compute_overlap_matrix(); + + /// Diagonalize a given matrix m (used by calc_optimal_rotation()) + static void diagonalize_matrix(cvm::matrix2d &m, + cvm::vector1d &eigval, + cvm::matrix2d &eigvec); }; diff --git a/lib/colvars/colvarvalue.cpp b/lib/colvars/colvarvalue.cpp index 86b99ed3d6..accc5defec 100644 --- a/lib/colvars/colvarvalue.cpp +++ b/lib/colvars/colvarvalue.cpp @@ -144,10 +144,10 @@ void colvarvalue::apply_constraints() case colvarvalue::type_quaternionderiv: break; case colvarvalue::type_unit3vector: - rvector_value /= std::sqrt(rvector_value.norm2()); + rvector_value /= cvm::sqrt(rvector_value.norm2()); break; case colvarvalue::type_quaternion: - quaternion_value /= std::sqrt(quaternion_value.norm2()); + quaternion_value /= cvm::sqrt(quaternion_value.norm2()); break; case colvarvalue::type_vector: if (elem_types.size() > 0) { @@ -579,7 +579,7 @@ colvarvalue colvarvalue::dist2_grad(colvarvalue const &x2) const cvm::rvector const &v1 = this->rvector_value; cvm::rvector const &v2 = x2.rvector_value; cvm::real const cos_t = v1 * v2; - cvm::real const sin_t = std::sqrt(1.0 - cos_t*cos_t); + cvm::real const sin_t = cvm::sqrt(1.0 - cos_t*cos_t); return colvarvalue( 2.0 * sin_t * cvm::rvector((-1.0) * sin_t * v2.x + cos_t/sin_t * (v1.x - cos_t*v2.x), @@ -630,7 +630,7 @@ colvarvalue const colvarvalue::interpolate(colvarvalue const &x1, break; case colvarvalue::type_unit3vector: case colvarvalue::type_quaternion: - if (interp.norm()/std::sqrt(d2) < 1.0e-6) { + if (interp.norm()/cvm::sqrt(d2) < 1.0e-6) { cvm::error("Error: interpolation between "+cvm::to_str(x1)+" and "+ cvm::to_str(x2)+" with lambda = "+cvm::to_str(lambda)+ " is undefined: result = "+cvm::to_str(interp)+"\n", diff --git a/lib/colvars/colvarvalue.h b/lib/colvars/colvarvalue.h index 25255e2f7c..29b535a1a8 100644 --- a/lib/colvars/colvarvalue.h +++ b/lib/colvars/colvarvalue.h @@ -17,22 +17,22 @@ /// \brief Value of a collective variable: this is a metatype which /// can be set at runtime. By default it is set to be a scalar /// number, and can be treated as such in all operations (this is -/// done by most \link cvc \endlink implementations). +/// done by most \link colvar::cvc \endlink implementations). /// /// \link colvarvalue \endlink allows \link colvar \endlink to be /// treat different data types. By default, a \link colvarvalue /// \endlink variable is a scalar number. To use it as /// another type, declare and initialize it as -/// \code colvarvalue x(colvarvalue::type_xxx)\endcode, use \link x.type -/// (colvarvalue::type_xxx) \endlink at a later stage, or if unset, -/// assign the type with \code x = y; \endcode, provided y is correctly set. +/// `colvarvalue x(colvarvalue::type_xxx)`, use `x.type (colvarvalue::type_xxx)` +/// at a later stage, or if unset, +/// assign the type with `x = y;`, provided y is correctly set. /// /// All operators (either unary or binary) on a \link /// colvarvalue \endlink object performs one or more checks on the /// \link Type \endlink, except when reading from a stream, when there is no way to -/// detect the \link Type \endlink. To use \code is >> x; \endcode x \b MUST +/// detect the \link Type \endlink. To use `is >> x;` x \b MUST /// already have a type correcly set up for properly parsing the -/// stream. No problem of course with the output streams: \code os << x; \endcode +/// stream. No problem of course with the output streams: `os << x;` /// /// \em Note \em on \em performance: to avoid type checks in a long array of \link /// colvarvalue \endlink objects, use one of the existing "_opt" functions or implement a new one @@ -159,7 +159,7 @@ public: /// \brief If the variable has constraints (e.g. unitvector or /// quaternion), transform it to satisfy them; this function needs /// to be called only when the \link colvarvalue \endlink - /// is calculated outside of \link cvc \endlink objects + /// is calculated outside of \link colvar::cvc \endlink objects void apply_constraints(); /// Get the current type @@ -184,7 +184,7 @@ public: /// Norm of this colvarvalue inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } /// Sum of the components of this colvarvalue (if more than one dimension) @@ -728,7 +728,7 @@ inline cvm::real colvarvalue::dist2(colvarvalue const &x2) const case colvarvalue::type_unit3vector: case colvarvalue::type_unit3vectorderiv: // angle between (*this) and x2 is the distance - return std::acos(this->rvector_value * x2.rvector_value) * std::acos(this->rvector_value * x2.rvector_value); + return cvm::acos(this->rvector_value * x2.rvector_value) * cvm::acos(this->rvector_value * x2.rvector_value); case colvarvalue::type_quaternion: case colvarvalue::type_quaternionderiv: // angle between (*this) and x2 is the distance, the quaternion diff --git a/src/USER-COLVARS/colvarproxy_lammps.cpp b/src/USER-COLVARS/colvarproxy_lammps.cpp index ff74602b41..651999f79c 100644 --- a/src/USER-COLVARS/colvarproxy_lammps.cpp +++ b/src/USER-COLVARS/colvarproxy_lammps.cpp @@ -153,18 +153,29 @@ void colvarproxy_lammps::init(const char *conf_file) if (_lmp->update->ntimestep != 0) { cvm::log("Setting initial step number from LAMMPS: "+ cvm::to_str(_lmp->update->ntimestep)+"\n"); - colvars->it = colvars->it_restart = _lmp->update->ntimestep; + colvars->it = colvars->it_restart = + static_cast(_lmp->update->ntimestep); } if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log(cvm::line_marker); - log("Info: done initializing the colvars proxy object.\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log(cvm::line_marker); + cvm::log("Info: done initializing the colvars proxy object.\n"); } } +void colvarproxy_lammps::add_config_file(const char *conf_file) +{ + colvars->read_config_file(conf_file); +} + +void colvarproxy_lammps::add_config_string(const std::string &conf) +{ + colvars->read_config_string(conf); +} + colvarproxy_lammps::~colvarproxy_lammps() { delete _random; @@ -185,7 +196,7 @@ int colvarproxy_lammps::setup() double colvarproxy_lammps::compute() { if (cvm::debug()) { - log(std::string(cvm::line_marker)+ + cvm::log(std::string(cvm::line_marker)+ "colvarproxy_lammps step no. "+ cvm::to_str(_lmp->update->ntimestep)+" [first - last = "+ cvm::to_str(_lmp->update->beginstep)+" - "+ @@ -238,20 +249,20 @@ double colvarproxy_lammps::compute() bias_energy = 0.0; if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); } // call the collective variable module colvars->calc(); if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); } return bias_energy; diff --git a/src/USER-COLVARS/colvarproxy_lammps.h b/src/USER-COLVARS/colvarproxy_lammps.h index cdd86cbd16..c3d9dbb35f 100644 --- a/src/USER-COLVARS/colvarproxy_lammps.h +++ b/src/USER-COLVARS/colvarproxy_lammps.h @@ -103,6 +103,11 @@ class colvarproxy_lammps : public colvarproxy { // Write files expected from Colvars (called by post_run()) void write_output_files(); + // read additional config from file + void add_config_file(char const *config_filename); + + // read additional config from string + void add_config_string(const std::string &config); // implementation of pure methods from base class public: diff --git a/src/USER-COLVARS/colvarproxy_lammps_version.h b/src/USER-COLVARS/colvarproxy_lammps_version.h index edd6778c64..0a4f9fdf4f 100644 --- a/src/USER-COLVARS/colvarproxy_lammps_version.h +++ b/src/USER-COLVARS/colvarproxy_lammps_version.h @@ -1,5 +1,5 @@ #ifndef COLVARPROXY_VERSION -#define COLVARPROXY_VERSION "2018-08-29" +#define COLVARPROXY_VERSION "2019-04-09" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars diff --git a/src/USER-COLVARS/fix_colvars.cpp b/src/USER-COLVARS/fix_colvars.cpp index 545ceb7b0e..ff0e8fb334 100644 --- a/src/USER-COLVARS/fix_colvars.cpp +++ b/src/USER-COLVARS/fix_colvars.cpp @@ -480,6 +480,31 @@ void FixColvars::one_time_init() /* ---------------------------------------------------------------------- */ +int FixColvars::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"configfile") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (me == 0) { + if (! proxy) + error->one(FLERR,"Cannot use fix_modify before initialization"); + proxy->add_config_file(arg[1]); + } + return 2; + } else if (strcmp(arg[0],"config") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (me == 0) { + if (! proxy) + error->one(FLERR,"Cannot use fix_modify before initialization"); + std::string conf(arg[1]); + proxy->add_config_string(conf); + } + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- */ + void FixColvars::setup(int vflag) { const tagint * const tag = atom->tag; diff --git a/src/USER-COLVARS/fix_colvars.h b/src/USER-COLVARS/fix_colvars.h index 3029ba9db5..a0c197fca4 100644 --- a/src/USER-COLVARS/fix_colvars.h +++ b/src/USER-COLVARS/fix_colvars.h @@ -50,6 +50,7 @@ class FixColvars : public Fix { virtual int setmask(); virtual void init(); virtual void setup(int); + virtual int modify_param(int, char **); virtual void min_setup(int vflag) {setup(vflag);}; virtual void min_post_force(int); virtual void post_force(int);