CoreShell model

Dear all,

I am trying to perform a simulation of NaAlSi3O8.
In this case Oxygen atoms are expected to be simulated by employing the adiabatic core/shell model

As suggested in the documentation an equivalent temperature for the core/shell pair has to be computed as:
“compute CSequ all temp/cs O_core O_shell”

Unfortunately, still I don’t know how to update the following instructions:
"

velocity all create $T 1234 dist gaussian mom yes rot no bias yes temp T_tot
velocity all scale $T temp T_tot

fix thermoberendsen all temp/berendsen $T $T 0.4
fix nve all nve
fix_modify thermoberendsen temp T_tot

"
such as that the T_tot be the sum of the contribution from the Oxygen core/shell and other atoms.

Does anyone have any suggestion on how to solve this issue?

Thank you.

I’ve CCd Hendrik who can comment. You should also look at Section howto 26

(in the most current version), and at the examples/coreshell scripts.

Steve

Dear Dr. Plimpton,

I cheked in the howto documentation section and in the examples.
However, the issue come up when not all the atoms are described by using the Core/Shell model.

What I am looking for is something like the following:
"
compute CSequ CS temp/cs O_c O_s #CS = group of Core/Shell pairs
compute PCequ PC temp #PC = group of Point/Charge atoms (non core/shell)

variable N_CS equal count(O_c)
variable N_PC equal count(PC)
variable NTOT equal N_CS+N_PC

variable T_equ equal ((CSequN_CS)+(PCequN_PC))/NTOT

thermo_modify temp T_equ
"
where instead of using a “variable” command to estimate the T_equ will be a “compute” command.

This is because, if I am not wrong, the thermo_modify command require as parameter a “compute” kind.
I expect the same problem is also for the next two instructions:
"
velocity all scale $T temp T_equ


fix_modify thermoberendsen temp T_equ

"

I am quite inexpert in using the compute commands. So, I am wondering if there is any “compute” or other way to correctly express the summation of the temperature of the two groups (CS and PC).

Thank you in advance for any suggestion in this matter.

With my best regards,
Alberto

Dear Dr. Plimpton,

I cheked in the howto documentation section and in the examples.
However, the issue come up when not all the atoms are described by using the
Core/Shell model.

i don't think that this kind of setup is supported by the current
core-shell implementation.

axel.

Hendrik can comment, but I agree with Axel that the compute temp/cs doc page

only indicates it should be used for the core/shell pairs. If you want the

temperature on non c/s atoms, just define a regular compute temp for that

group, and print out the 2 temps, one for c/s, one for non c/s.

Steve

Hello everyone,

sorry for my belated answer.

I figure you want to calculate a temperature for the whole system by calculating a temperature
for the core/shell oscillators and the non core/shell pairs separately with the follwing?

compute CSequ CS temp/cs O_c O_s #CS = group of Core/Shell pairs
compute PCequ PC temp #PC = group of Point/Charge atoms (non core/shell)
variable N_CS equal count(O_c)
variable N_PC equal count(PC)
variable NTOT equal N_CS+N_PC
variable T_equ equal ((CSequN_CS)+(PCequN_PC))/NTOT
thermo_modify temp T_equ

That is in generally not necessary and might lead to the wrong results. The temp/cs command computes the
temperature of the whole system (including the non-core/shell part) you specify in the “group” keyword of
"compute ID group … ". The extra groups O_core and O_shell are merely necessary to specify for the compute
to know which atoms need to be treated as core/shell oscillators. Thus it is possible to treat a system mixed
with polarized ions via the core/shell model and non-polarized ions.

In your example NaAlSi3O8 you need to define your oxygen atoms in a core and a shell group i.e.:

group O_c type atomtype(O_core)

group O_s type atomtype(O_shell)

then the compute

compute CSequ all temp/cs O_c O_s

will compute a temperature according to the physical system NaAlSi3O8 where the movement of the oxygen ions
is defined as the center of mass movement of the core and shell particles belonging to the oxygen.

If you for example want to apply the core/shell polarizability also to silicon you add the corresponding types to

the core and shell groups i.e.:

group cores type atomtype(O_core) atomtype(Si_core)
group shells type atomtype(O_shell) atomtype(Si_shell)

then the compute

compute CSequ all temp/cs cores shells

will compute a temperature according to the physical system NaAlSi3O8 where the movement of the oxygen and silicon

ions are defined as the center of mass movement of the core and shell particles belonging to oxygen and silicon

respectively. (Naturally you would need to alter your data file accordingly in order to include the silicon.)

Now in order to let LAMMPS know that the temperature it gives out in the output corresponds to the
physical temperature you specify:

thermo_modify temp CSequ

Next for the application of a thermostat and setting velocities you also need to use the calculated temperature by the compute CSequ.

For the velocity the bias option removes the introduced (by an initial distribution of velocities) motion between two
core/shell oscillators, in order to tell the command which compute to use to obtain the bias, the compute CSequ needs to be specified.

velocity all create $T 134 dist gaussian mom yes rot no bias yes temp CSequ

The applied gaussian distribution of velocities is scaled to $T before the bias is removed. Therefore it is

necessary to rescale the velocities to the temperature of $T via:

velocity all scale $T temp CSequ

The thermostat works the same way, you need the fix_modify command to let the thermostat know that

the temperature it scales to is the physical temperature computed by CSequ:

fix thermoberendsen all temp/berendsen $T $T 0.4 # choose your thermostat with the physical target temperature of $T
fix nve all nve #integration of the equation of motion
fix_modify thermoberendsen temp CSequ

Hope that clarifies this issue and all your questions from your email.

Hendrik can comment, but I agree with Axel that the compute temp/cs doc page

only indicates it should be used for the core/shell pairs.

Sorry for that unclear part in the documentation I will update it as soon as possible.

Best

Hendrik

That is in generally not necessary and might lead to the wrong results. The temp/cs command computes the
temperature of the whole system (including the non-core/shell part) you specify in the “group” keyword of
"compute ID group … ". The extra groups O_core and O_shell are merely necessary to specify for the compute
to know which atoms need to be treated as core/shell oscillators. Thus it is possible to treat a system mixed
with polarized ions via the core/shell model and non-polarized ions.

This is good - I don’t see this clarification on the info on the doc page, so I will add it.

Steve

Dear all,

thank you very much for the clarification about the temp/cs compute command.
This solves the issue I had.

With my best regards,
Alberto