ATC questions (bond-dihedral, Hardy, Noll, ....)

Dear All,

I have several questions regarding ATC package,

1) does it support bonds and/or dihedral potentials.
Strictly speaking a force, which act on any atom can always be decomposed into
sum of forces co-aligned with vectors between atoms. (for point-masses systems with not spins;
as it was recently mentioned in Admal, Tadmor 2010 A unified Interpretation of stress in Molecular Systems).
That is related to calculation of a contribution to the force on atom "a" from atom "b",
Fab (potential term of Hardy stress)

Is that already in ATC or does ATC support only bonded and pair potentials?
If not, which parts of AtC package should I look at closer in order to implement it?

2) Hardy solution is not the only one of div.S=sum(f_ij...),
there is at least one more, usually called Noll's, the resulting stress is
not symmetric then.

I doubt it is implemented or even planed to be, yet if authors of ATC could kindly
point me what parts of the code should be modified, i would be grateful.

3) At what points stress (density/energy/...) is evaluated using spatial/kernel average?
I assume - at the center of each finite element.
In AtC commands I see only comands to prescribe which weighting function to use, for example
fix_modify AtC transfer kernel step value
but nothing on at what points it's evaluated.

p/s/ if some of these issues are partly implemented but not published as an AtC package,
is it possible to share source codes?

Thank you in advance,

Kind regards,
Denis Davydov

Let's see if the ATC folks can answer
these Qs.

Steve

Hi Denis,

Let me try to answer your questions...

1) does it support bonds and/or dihedral potentials.
Strictly speaking a force, which act on any atom can always be
decomposed into
sum of forces co-aligned with vectors between atoms. (for point-masses
systems with not spins;
as it was recently mentioned in Admal, Tadmor 2010 A unified
Interpretation of stress in Molecular Systems).
That is related to calculation of a contribution to the force on atom
"a" from atom "b",
Fab (potential term of Hardy stress)

Is that already in ATC or does ATC support only bonded and pair
potentials?
If not, which parts of AtC package should I look at closer in order to
implement it?

The Hardy/continuum variable evaluation code in ATC only applies to "pair"
classes for which the function single() is defined and the flag
single_enable is set to a non-zero value. This is so for pair potentials
(e.g. Lennard-Jones) and EAM-type potentials, but not for other pair
classes such as Stillinger-Weber (pair_sw). We also haven't included
contributions from other types of classes, such as "bond".

In order to implement this in the Hardy framework, you'd have to look at
ATC_TransferHardy.cpp file in /lib/atc in routines where we access the
atom-atom forces (e.g. compute_force_matrix and compute_potential_stress).
You'll also want to look at LammpInterface.cpp to see how we bring LAMMPS'
info into the ATC class. Of course, you'll have to modify any particular
class that prescribes atom-atom forces and design a single() function or
some equivalent.

2) Hardy solution is not the only one of div.S=sum(f_ij...),
there is at least one more, usually called Noll's, the resulting stress
is
not symmetric then.

I doubt it is implemented or even planed to be, yet if authors of ATC
could kindly
point me what parts of the code should be modified, i would be
grateful.

The best thing to do is look at ATC_TransferHardy.cpp (in /lib/atc) to see
how we compute fields, including stress, from the LAMMPS information. You
could then create a new derived class that parallels ATC_TransferHardy but
uses a different formalism from Hardy's.

3) At what points stress (density/energy/...) is evaluated using
spatial/kernel average?
I assume - at the center of each finite element.
In AtC commands I see only comands to prescribe which weighting
function to use, for example
fix_modify AtC transfer kernel step value
but nothing on at what points it's evaluated.

Actually, no. All continuum variables are calculated at the nodes (I.e.
the vertices of the finite elements that make up the mesh). Basically, we
treat these nodal positions as either fixed spatial points (as per Hardy's
Eulerian formulation) or material points in the reference configuration
(as per the Lagrangian formulation by myself, Jones and Templeton). We
then use the kernel functions as Hardy's localization functions centered
on those nodal points.

p/s/ if some of these issues are partly implemented but not published
as an AtC package,
is it possible to share source codes?

We are working on some updates to the ATC package, and have restructured
much of the code from what I describe above. That should be released in
the near future. However, none of the issues you bring up (forces from
non-pair classes, alternative frameworks to Hardy, estimating fields for a
whole element instead of at nodes) is addressed in these updates. I
suspect that you could easily take nodal values and compute an "average"
field for a given element. This is probably even done in some
visualization programs.

Good luck,

Jon Zimmerman

Dear Prof. Zimmerman,

Thank you very much for your detailed answers.

Kind regards,
Denis Davydov.