Re: colvars: How to implement a collective variable of vector type?

From: yjcoshc (yjcoshc_at_gmail.com)
Date: Tue Mar 13 2018 - 03:12:51 CDT

Hi Giacomo,

Thanks for your reply! My collective variable is a 3D vector like
(k0,k1,k2) and I know how to calculate (dk0/dri,dk1/dri,dk2/dri) where
ri is the Cartesian coordinate of i-th COM. Now I encounter some other
problems:

1. What is implicit gradients? It looks all vector or quaternion based
colvars use enable(f_cvc_implicit_gradient) and have empty
calc_gradients(). How do I choose which features in features_cvc enum to
be enabled? Should I use some additional member variable to store the
gradients other than atom_group->grad?

2. What is the type of the force inapply_force(colvarvalue const &force)
? Is the force a 3D vector like (f0,f1,f2) or just any type defined in
theType enum?

Haochuan chen

在 2018年03月12日 20:13, Giacomo Fiorin 写道:
> Hi Haochuan, yes, that's because not finding the keyword "groupN" is
> considered an error, and it normally would be.
>
> You could either:
> (1) Add a keyword to set the number of groups in the configuration
> (numGroups?).
> (2) Use the lower-level parsing function colvarparse::key_lookup() to
> test whether the keyword "groupN" is used before attempting to parse
> it.  You probably don't need to call key_lookup() with more than two
> arguments, if you only use it to test the availability of the keyword.
>
> Regarding using scriptedFunction in Tcl, yes, a vector is represented
> by a Tcl list.
>
> Giacomo
>
> On Mon, Mar 12, 2018 at 6:01 AM, yjcoshc <yjcoshc_at_gmail.com
> <mailto:yjcoshc_at_gmail.com>> wrote:
>
> Hi Giacomo,
>
> Is there any way to parse unlimited atom groups
> (group1,...,groupN)? I decide to write a loop checking groupN by
> cvc::parse_group and break the loop when cvc::parse_group return
> NULL, but cvc::parse_group seems raising an error when groupN is
> not defined.
>
> Haochuan Chen
>
>
> 在 2018年03月11日 20:05, Giacomo Fiorin 写道:
>> Hi Haochuan, you need to derive a new class from the colvar::cvc,
>> whose structure is described here.
>> http://colvars.github.io/doxygen/html/classcolvar_1_1cvc.html#details
>> <http://colvars.github.io/doxygen/html/classcolvar_1_1cvc.html#details>
>> The rest of the webpage shows you also the current inheritance
>> structure (what classes are derived from what).
>>
>> Among the variables that have vector values, a good example to
>> take a look at could be distance_pairs.  Presumably you only need
>> to wrap your C++ code in the correct functions, and add the calls
>> that read coordinates or send forces.
>>
>> See also:
>> http://colvars.github.io/doxygen/html/index.html
>> <http://colvars.github.io/doxygen/html/index.html>
>> for documentation on the other classes.
>>
>> Giacomo
>>
>> On Sat, Mar 10, 2018 at 4:27 AM, yjcoshc <yjcoshc_at_gmail.com
>> <mailto:yjcoshc_at_gmail.com>> wrote:
>>
>> Hello,
>>
>> I want to implement a vector collective variable in NAMD
>> through the colvars module. It can calculate the least square
>> fitted plane among multiple atomgroups and return the normal
>> vector of the plane. The example pathCV script in colvartools
>> folder seems scalar type only. Any suggestion of implementing
>> a vector type one? I have finished a sample C++ code to
>> calculate this. How do I incorporate it in colvars?
>>
>> Thanks,
>>
>> Haochuan Chen
>>
>>
>>
>>
>> --
>> Giacomo Fiorin
>> Associate Professor of Research, Temple University, Philadelphia, PA
>> Contractor, National Institutes of Health, Bethesda, MD
>> http://goo.gl/Q3TBQU
>> https://github.com/giacomofiorin <https://github.com/giacomofiorin>
>
>
>
>
> --
> Giacomo Fiorin
> Associate Professor of Research, Temple University, Philadelphia, PA
> Contractor, National Institutes of Health, Bethesda, MD
> http://goo.gl/Q3TBQU
> https://github.com/giacomofiorin

This archive was generated by hypermail 2.1.6 : Thu Sep 19 2019 - 23:19:29 CDT