allow for command-line setting of initial temp

This commit is contained in:
Steve Plimpton
2021-08-26 11:52:07 -06:00
parent beffa0d1a1
commit 7b3e7d3d3a
16 changed files with 5379 additions and 134 deletions

View File

@ -4,6 +4,9 @@
fix ttm command
===============
fix ttm/grid command
===============
fix ttm/mod command
===================
@ -12,13 +15,13 @@ Syntax
.. parsed-literal::
fix ID group-ID ttm seed C_e rho_e kappa_e gamma_p gamma_s v_0 Nx Ny Nz T_infile N T_outfile
fix ID group-ID ttm/mod seed init_file Nx Ny Nz T_infile N T_outfile
fix ID group-ID ttm seed C_e rho_e kappa_e gamma_p gamma_s v_0 Nx Ny Nz keyword value ...
fix ID group-ID ttm/mod seed init_file Nx Ny Nz keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* style = *ttm* or *ttm_mod*
* style = *ttm* or *ttm/grid* or *ttm/mod*
* seed = random number seed to use for white noise (positive integer)
* remaining arguments for fix ttm:
* remaining arguments for fix ttm or fix ttm/grid
.. parsed-literal::
@ -31,9 +34,6 @@ Syntax
Nx = number of thermal solve grid points in the x-direction (positive integer)
Ny = number of thermal solve grid points in the y-direction (positive integer)
Nz = number of thermal solve grid points in the z-direction (positive integer)
T_infile = filename to read initial electronic temperature from
N = dump TTM temperatures every this many timesteps, 0 = no dump
T_outfile = filename to write TTM temperatures to (only needed if N > 0)
* remaining arguments for fix ttm/mod:
@ -43,18 +43,29 @@ Syntax
Nx = number of thermal solve grid points in the x-direction (positive integer)
Ny = number of thermal solve grid points in the y-direction (positive integer)
Nz = number of thermal solve grid points in the z-direction (positive integer)
T_infile = filename to read initial electronic temperature from
N = dump TTM temperatures every this many timesteps, 0 = no dump
T_outfile = filename to write TTM temperatures to (only needed if N > 0)
* zero or more keyword/value(s) pairs may be appended
* keyword = *set* or *infile" or *outfile"
.. parsed-literal::
*set* value = Tinit
Tinit = initial electronic temperature at all grid points (temperature units)
*infile* value = file.in with grid values for electronic temperatures
*outfile* values = Nout file.out
Nout = dump grid temperatures every this many timesteps
file.out = filename to write grid temperatures to
Examples
""""""""
.. code-block:: LAMMPS
fix 2 all ttm 699489 1.0 1.0 10 0.1 0.0 2.0 1 12 1 initialTs 1000 T.out
fix 2 all ttm 123456 1.0 1.0 1.0 1.0 1.0 5.0 5 5 5 Te.in 1 Te.out
fix 2 all ttm/mod 34277 parameters.txt 5 5 5 T_init 10 T_out
fix 2 all ttm 699489 1.0 1.0 10 0.1 0.0 2.0 1 12 1 infile initial outfile 1000 T.out
fix 3 all ttm/grid 123456 1.0 1.0 1.0 1.0 1.0 5.0 5 5 5 infile Te.in
fix 4 all ttm/mod 34277 parameters.txt 5 5 5 infile T_init outfile 10 T_out
Example input scripts using these commands can be found in examples/ttm.
Description
"""""""""""
@ -62,36 +73,48 @@ Description
Use a two-temperature model (TTM) to represent heat transfer through
and between electronic and atomic subsystems. LAMMPS models the
atomic subsystem as usual with a molecular dynamics model and the
classical force field specified by the user, but the electronic
subsystem is modeled as a continuum, or a background "gas", on a
regular grid. Energy can be transferred spatially within the grid
representing the electrons. Energy can also be transferred between
the electronic and the atomic subsystems. The algorithm underlying
this fix was derived by D. M. Duffy and A. M. Rutherford and is
discussed in two J Physics: Condensed Matter papers: :ref:`(Duffy) <Duffy>`
and :ref:`(Rutherford) <Rutherford>`. They used this algorithm in cascade
simulations where a primary knock-on atom (PKA) was initialized with a
high velocity to simulate a radiation event.
classical force field specified by the user. The electronic subsystem
is modeled as a continuum, or a background "gas", on a regular grid
which overlays the simulation domain. Energy can be transferred
spatially within the grid representing the electrons. Energy can also
be transferred between the electronic and atomic subsystems. The
algorithm underlying this fix was derived by D. M. Duffy
and A. M. Rutherford and is discussed in two J Physics: Condensed
Matter papers: :ref:`(Duffy) <Duffy>` and :ref:`(Rutherford)
<Rutherford>`. They used this algorithm in cascade simulations where
a primary knock-on atom (PKA) was initialized with a high velocity to
simulate a radiation event.
The description in this sub-section applies to both fix ttm and fix
ttm/mod. Fix ttm/mod adds options to account for external heat
sources (e.g. at a surface) and for specifying parameters that allow
the electronic heat capacity to depend strongly on electronic
temperature. It is more expensive computationally than fix ttm
because it treats the thermal diffusion equation as non-linear. More
details on fix ttm/mod are given below.
The description in this sub-section applies to all 3 of the fixes: fix
ttm, fix ttm/grid, and fix ttm/mod.
Fix ttm/grid distributes the regular grid across processors consistent
with the subdomains of atoms owned by each processor, but is otherwise
identical to fix ttm. Note that fix ttm stores a copy of the grid on
each processor, which is fine when the overall grid is reasonably
small. For very large grids you should use fix ttt/grid instead.
Fix ttm/mod adds options to account for external heat sources (e.g. at
a surface) and for specifying parameters that allow the electronic
heat capacity to depend strongly on electronic temperature. It is
more expensive computationally than fix ttm because it treats the
thermal diffusion equation as non-linear. More details on fix ttm/mod
are given below.
Heat transfer between the electronic and atomic subsystems is carried
out via an inhomogeneous Langevin thermostat. This thermostat differs
from the regular Langevin thermostat (:doc:`fix langevin <fix_langevin>`) in three important ways. First, the
Langevin thermostat is applied uniformly to all atoms in the
out via an inhomogeneous Langevin thermostat. Only atoms in the fix
group contribute to and are affected by this heat transfer.
This thermostatting differs from the regular Langevin thermostat
(:doc:`fix langevin <fix_langevin>`) in three important ways. First,
the Langevin thermostat is applied uniformly to all atoms in the
user-specified group for a single target temperature, whereas the TTM
fix applies Langevin thermostatting locally to atoms within the
fixes apply Langevin thermostatting locally to atoms within the
volumes represented by the user-specified grid points with a target
temperature specific to that grid point. Second, the Langevin
thermostat couples the temperature of the atoms to an infinite heat
reservoir, whereas the heat reservoir for fix TTM is finite and
represents the local electrons. Third, the TTM fix allows users to
reservoir, whereas the heat reservoir for the TTM fixes is finite and
represents the local electrons. Third, the TTM fixes allow users to
specify not just one friction coefficient, but rather two independent
friction coefficients: one for the electron-ion interactions
(*gamma_p*), and one for electron stopping (*gamma_s*).
@ -123,26 +146,54 @@ as that in equation 6 of :ref:`(Duffy) <Duffy>`, with the exception that the
electronic density is explicitly represented, rather than being part
of the specific heat parameter.
Currently, fix ttm assumes that none of the user-supplied parameters
will vary with temperature. Note that :ref:`(Duffy) <Duffy>` used a tanh()
functional form for the temperature dependence of the electronic
specific heat, but ignored temperature dependencies of any of the
other parameters. See more discussion below for fix ttm/mod.
Currently, the TTM fixes assume that none of the user-supplied
parameters will vary with temperature. Note that :ref:`(Duffy)
<Duffy>` used a tanh() functional form for the temperature dependence
of the electronic specific heat, but ignored temperature dependencies
of any of the other parameters. See more discussion below for fix
ttm/mod.
These fixes require use of periodic boundary conditions and a 3D
simulation. Periodic boundary conditions are also used in the heat
equation solve for the electronic subsystem. This varies from the
approach of :ref:`(Rutherford) <Rutherford>` where the atomic subsystem was
..note::
These fixes do not perform time integration of the atoms in the fix
group, they only rescale their velocities. Thus a time integration
fix such as :doc:`fix nve <fix_nve>` should be used in conjunction
with these fixes. These fixes should not normally be used on atoms
that have their temperature controlled by another thermostatting
fix, e.g. :doc:`fix nvt <fix_nh>` or :doc:`fix langevin
<fix_langevin>`.
..note::
These fixes require use of an orthogonal 3d simulation box with
periodic boundary conditions in all dimensions. They also require
that the size and shape of the simulation box do not vary
dynamically, e.g. due to use of the :doc:`fix npt <fix_nh>` command.
Likewise, the size/shape of processor subdomains cannot vary due to
dynamic load-balancing via use of the :doc:`fix balance
<fix_balance>` command. It is possible however to load balance
before the simulation starts using the :doc:`balance <balance>`
command, so that each processor has a different size subdomain.
Periodic boundary conditions are also used in the heat equation solve
for the electronic subsystem. This varies from the approach of
:ref:`(Rutherford) <Rutherford>` where the atomic subsystem was
embedded within a larger continuum representation of the electronic
subsystem.
The initial electronic temperature input file, *T_infile*, is a text
file LAMMPS reads in with no header and with four numeric columns
(ix,iy,iz,Temp) and with a number of rows equal to the number of
user-specified grid points (Nx by Ny by Nz). The ix,iy,iz are node
indices from 0 to nxnodes-1, etc. For example, the initial electronic
temperatures on a 1 by 2 by 3 grid could be specified in a *T_infile*
as follows:
The *set* keyword specifies a *Tinit* temperature value to initialize
the value stored on all grid points.
The *infile* keyword specifies an input file of electronic
temperatures for each grid point to be read in to initialize the grid.
By default the temperatures are all zero when the grid is created.
The input file is a text file with no header. Each line contains four
numeric columns: ix,iy,iz,Temperature. The number of lines must be
equal to the number of user-specified grid points (Nx by Ny by Nz).
The ix,iy,iz are grid point indices ranging from 0 to nxnodes-1
inclusive in each dimension. The lines can appear in any order. For
example, the initial electronic temperatures on a 1 by 2 by 3 grid
could be specified in the file as follows:
.. parsed-literal::
@ -155,34 +206,27 @@ as follows:
where the electronic temperatures along the y=0 plane have been set to
1.0, and the electronic temperatures along the y=1 plane have been set
to 2.0. The order of lines in this file is no important. If all the
nodal values are not specified, LAMMPS will generate an error.
The temperature output file, *T_oufile*, is created and written by
this fix. Temperatures for both the electronic and atomic subsystems
at every node and every N timesteps are output. If N is specified as
zero, no output is generated, and no output filename is needed. The
format of the output is as follows. One long line is written every
output timestep. The timestep itself is given in the first column.
The next Nx\*Ny\*Nz columns contain the temperatures for the atomic
subsystem, and the final Nx\*Ny\*Nz columns contain the temperatures for
the electronic subsystem. The ordering of the Nx\*Ny\*Nz columns is
with the z index varying fastest, y the next fastest, and x the
slowest.
These fixes do not change the coordinates of their atoms; they only
scales their velocities. Thus a time integration fix (e.g. :doc:`fix nve <fix_nve>`) should still be used to time integrate the affected
atoms. The fixes should not normally be used on atoms that have their
temperature controlled by another fix - e.g. :doc:`fix nvt <fix_nh>` or
:doc:`fix langevin <fix_langevin>`.
to 2.0. If all the grid point values are not specified, LAMMPS will
generate an error.
..note::
The current implementations of these fixes create a copy of the
electron grid that overlays the entire simulation domain, for each
processor. Values on the grid are summed across all processors. Thus
you should insure that this grid is not too large, else your
simulation could incur high memory and communication costs.
The electronic temperature at each grid point must be a non-zero
positive value, both initially, and as the temperature evovles over
time. Thus you must use either the *set* or *infile* keyword or be
restarting a simulation that used this fix previously.
The *outfile* keyword has 2 values. The first value *Nout* triggers
output of the electronic temperatures for each grid point every Nout
timesteps. The second value is the filename for output which will
be suffixed by the timestep. The format of each output file is exactly
the same as the input temperature file.
Note that the atomic temperature for atoms in each grid cell can also
be computed and output by the :doc:`fix ave/chunk <fix_ave_chunk>`
command using the :doc:`compute chunk/atom <compute_chunk_atom>`
command to create a 3d array of chunks consistent with the grid used
by this fix.
----------
@ -222,7 +266,8 @@ acting on an ion is:
.. math::
{\vec F}_i = - \partial U / \partial {\vec r}_i + {\vec F}_{langevin} - \nabla P_e/n_{ion}
{\vec F}_i = - \partial U / \partial {\vec r}_i + {\vec
F}_{langevin} - \nabla P_e/n_{ion}
where F_langevin is a force from Langevin thermostat simulating
electron-phonon coupling, and nabla P_e/n_ion is the electron blast
@ -246,7 +291,9 @@ is calculated as
.. math::
\nabla_x P_e = \left[\frac{C_e{}T_e(x)\lambda}{(x+\lambda)^2} + \frac{x}{x+\lambda}\frac{(C_e{}T_e)_{x+\Delta x}-(C_e{}T_e)_{x}}{\Delta x} \right]
\nabla_x P_e = \left[\frac{C_e{}T_e(x)\lambda}{(x+\lambda)^2} +
\frac{x}{x+\lambda}\frac{(C_e{}T_e)_{x+\Delta
x}-(C_e{}T_e)_{x}}{\Delta x} \right]
where lambda is the electron mean free path (see :ref:`(Norman) <Norman>`,
:ref:`(Pisarev) <Pisarev>`)
@ -286,10 +333,12 @@ Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
These fixes write the state of the electronic subsystem and the energy
exchange between the subsystems to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>` command
for info on how to re-specify a fix in an input script that reads a
exchange between the subsystems to :doc:`binary restart files
<restart>`. See the :doc:`read_restart <read_restart>` command for
info on how to re-specify a fix in an input script that reads a
restart file, so that the operation of the fix continues in an
uninterrupted fashion.
uninterrupted fashion. Note that the restart script must define the
same size grid as the original script.
Because the state of the random number generator is not saved in the
restart files, this means you cannot do "exact" restarts with this
@ -297,16 +346,16 @@ fix, where the simulation continues on the same as if no restart had
taken place. However, in a statistical sense, a restarted simulation
should produce the same behavior.
None of the :doc:`fix_modify <fix_modify>` options are relevant to these
fixes.
None of the :doc:`fix_modify <fix_modify>` options are relevant to
these fixes.
Both fixes compute 2 output quantities stored in a vector of length 2,
which can be accessed by various :doc:`output commands <Howto_output>`.
The first quantity is the total energy of the electronic
subsystem. The second quantity is the energy transferred from the
electronic to the atomic subsystem on that timestep. Note that the
velocity verlet integrator applies the fix ttm forces to the atomic
subsystem as two half-step velocity updates: one on the current
These fixes compute 2 output quantities stored in a vector of length
2, which can be accessed by various :doc:`output commands
<Howto_output>`. The first quantity is the total energy of the
electronic subsystem. The second quantity is the energy transferred
from the electronic to the atomic subsystem on that timestep. Note
that the velocity verlet integrator applies the fix ttm forces to the
atomic subsystem as two half-step velocity updates: one on the current
timestep and one on the subsequent timestep. Consequently, the change
in the atomic subsystem energy is lagged by half a timestep relative
to the change in the electronic subsystem energy. As a result of this,
@ -322,13 +371,12 @@ of the :doc:`run <run>` command. The fixes are not invoked during
Restrictions
""""""""""""
Fix *ttm* and *ttm/mod* are part of the EXTRA-FIX package. They are
only enabled if LAMMPS was built with that package.
See the :doc:`Build package <Build_package>` page for more info.
All these fixes are part of the EXTRA-FIX package. They are only
enabled if LAMMPS was built with that package. See the :doc:`Build
package <Build_package>` page for more info.
These fixes can only be used for 3d simulations and orthogonal
simulation boxes. You must also use periodic
:doc:`boundary <boundary>` conditions.
As mentioned above, these fixes require 3d simulations and orthogonal
simulation boxes periodic in all 3 dimensions.
Related commands
""""""""""""""""

View File

@ -175,24 +175,28 @@ include and perform all the usual operations of an input script that
uses the :doc:`run <run>` command. There are a few exceptions and
points to consider, as discussed here.
Fixes that perform time integration, such as :doc:`fix nve <fix_nve>` or
:doc:`fix npt <fix_nh>` are not invoked, since no time integration is
performed. Fixes that perturb or constrain the forces on atoms will
be invoked, just as they would during a normal run. Examples are :doc:`fix indent <fix_indent>` and :doc:`fix langevin <fix_langevin>`. So you
should think carefully as to whether that makes sense for the manner
in which you are reprocessing the dump snapshots.
Fixes that perform time integration, such as :doc:`fix nve <fix_nve>`
or :doc:`fix npt <fix_nh>` are not invoked, since no time integration
is performed. Fixes that perturb or constrain the forces on atoms
will be invoked, just as they would during a normal run. Examples are
:doc:`fix indent <fix_indent>` and :doc:`fix langevin <fix_langevin>`.
So you should think carefully as to whether that makes sense for the
manner in which you are reprocessing the dump snapshots.
If you only want the rerun script to perform an analysis that does
not involve pair interactions, such as use compute msd to calculated
displacements over time, you do not need to define a :doc:`pair style <pair_style>`, which may also mean neighbor lists will not
need to be calculated which saves time. The :doc:`comm_modify cutoff <comm_modify>` command can also be used to insure ghost
atoms are acquired from far enough away for operations like bond and
angle evaluations, if no pair style is being used.
If you only want the rerun script to perform an analysis that does not
involve pair interactions, such as use compute msd to calculated
displacements over time, you do not need to define a :doc:`pair style
<pair_style>`, which may also mean neighbor lists will not need to be
calculated which saves time. The :doc:`comm_modify cutoff
<comm_modify>` command can also be used to insure ghost atoms are
acquired from far enough away for operations like bond and angle
evaluations, if no pair style is being used.
Every time a snapshot is read, the timestep for the simulation is
reset, as if the :doc:`reset_timestep <reset_timestep>` command were
used. This command has some restrictions as to what fixes can be
defined. See its page for details. For example, the :doc:`fix deposit <fix_deposit>` and :doc:`fix dt/reset <fix_dt_reset>` fixes
defined. See its page for details. For example, the :doc:`fix
deposit <fix_deposit>` and :doc:`fix dt/reset <fix_dt_reset>` fixes
are in this category. They also make no sense to use with a rerun
command.

View File

@ -92,25 +92,25 @@ velocity field.
The *scale* style computes the current temperature of the group of
atoms and then rescales the velocities to the specified temperature.
The *ramp* style is similar to that used by the :doc:`compute temp/ramp <compute_temp_ramp>` command. Velocities ramped
uniformly from vlo to vhi are applied to dimension vx, or vy, or vz.
The value assigned to a particular atom depends on its relative
coordinate value (in dim) from clo to chi. For the example above, an
atom with y-coordinate of 10 (1/4 of the way from 5 to 25), would be
assigned a x-velocity of 1.25 (1/4 of the way from 0.0 to 5.0). Atoms
outside the coordinate bounds (less than 5 or greater than 25 in this
case), are assigned velocities equal to vlo or vhi (0.0 or 5.0 in this
case).
The *ramp* style is similar to that used by the :doc:`compute
temp/ramp <compute_temp_ramp>` command. Velocities ramped uniformly
from vlo to vhi are applied to dimension vx, or vy, or vz. The value
assigned to a particular atom depends on its relative coordinate value
(in dim) from clo to chi. For the example above, an atom with
y-coordinate of 10 (1/4 of the way from 5 to 25), would be assigned a
x-velocity of 1.25 (1/4 of the way from 0.0 to 5.0). Atoms outside
the coordinate bounds (less than 5 or greater than 25 in this case),
are assigned velocities equal to vlo or vhi (0.0 or 5.0 in this case).
The *zero* style adjusts the velocities of the group of atoms so that
the aggregate linear or angular momentum is zero. No other changes
are made to the velocities of the atoms. If the *rigid* option is
specified (see below), then the zeroing is performed on individual
rigid bodies, as defined by the :doc:`fix rigid or fix rigid/small <fix_rigid>` commands. In other words, zero linear
will set the linear momentum of each rigid body to zero, and zero
angular will set the angular momentum of each rigid body to zero.
This is done by adjusting the velocities of the atoms in each rigid
body.
rigid bodies, as defined by the :doc:`fix rigid or fix rigid/small
<fix_rigid>` commands. In other words, zero linear will set the
linear momentum of each rigid body to zero, and zero angular will set
the angular momentum of each rigid body to zero. This is done by
adjusting the velocities of the atoms in each rigid body.
All temperatures specified in the velocity command are in temperature
units; see the :doc:`units <units>` command. The units of velocities and

View File

@ -114,6 +114,7 @@ tad: temperature-accelerated dynamics of vacancy diffusion in bulk Si
template: examples for using atom_style template and comparing to atom style molecular
tersoff: regression test input for Tersoff variants
threebody: regression test input for a variety of threebody potentials
ttm: two-temeperature model examples
vashishta: models using the Vashishta potential
voronoi: Voronoi tesselation via compute voronoi/atom command
wall: use of reflective walls with different stochastic models

File diff suppressed because it is too large Load Diff

42
examples/ttm/in.ttm Normal file
View File

@ -0,0 +1,42 @@
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} &
units lattice
create_box 1 sim_box
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} &
units lattice
create_atoms 1 region atom_box
mass 1 55.845
include pot_iron.mod
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm 342785 1.2470e-5 0.087614 &
0.005365 29.5917 47.5679 58.4613 10 10 10 set 1800.0
compute pe all pe/atom
compute ke all ke/atom
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000

42
examples/ttm/in.ttm.grid Normal file
View File

@ -0,0 +1,42 @@
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} &
units lattice
create_box 1 sim_box
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} &
units lattice
create_atoms 1 region atom_box
mass 1 55.845
include pot_iron.mod
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm/grid 342785 1.2470e-5 0.087614 &
0.005365 29.5917 47.5679 58.4613 10 10 10 set 1800.0
compute pe all pe/atom
compute ke all ke/atom
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000

View File

@ -0,0 +1,118 @@
LAMMPS (30 Jul 2021)
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
lattice bcc 2.87
Lattice spacing in x,y,z = 2.8700000 2.8700000 2.8700000
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 10 units lattice
create_box 1 sim_box
Created orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
1 by 1 by 1 MPI processor grid
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 10 units lattice
create_atoms 1 region atom_box
Created 16000 atoms
using lattice units in orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
create_atoms CPU = 0.003 seconds
mass 1 55.845
include pot_iron.mod
pair_style eam/fs
pair_coeff * * FeVoter-ChenRecheck.fs Fe
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm 342785 1.2470e-5 0.087614 0.005365 29.5917 47.5679 58.4613 10 10 10 infile grid_10x10x10 outfile 1000 tmp.grid.ttm
compute pe all pe/atom
compute ke all ke/atom
dump 1 all custom 1000 tmp.dump.ttm id type x y z c_ke c_pe
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000
Neighbor list info ...
update every 5 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.524
ghost atom cutoff = 6.524
binsize = 3.262, bins = 18 18 18
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/fs, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 13.82 | 13.82 | 13.82 Mbytes
Step Temp TotEng f_twotemp[1] f_twotemp[2]
0 0 -68483.52254543516 371.9188105082105 0
100 17.00947824197047 -68446.51095116073 334.6305417428716 0.3760709738059772
200 27.90625180507924 -68413.17749063623 301.3358408995842 0.3161167973265658
300 32.19243232351598 -68383.2226191097 271.4018727219317 0.2902233631657705
400 33.4532840518293 -68355.76078178188 243.9648281740988 0.2545400268100776
500 35.52815331681829 -68331.6643206617 219.8831664440165 0.2389083849000776
600 40.61109011282667 -68309.39522245103 197.5869310464551 0.3052890341245368
700 46.19736836207273 -68290.15919155753 178.4094794163846 0.1982374463651033
800 50.43097177176409 -68272.75667145227 161.0251849674132 0.1708816198953868
900 52.16219449883412 -68257.88199640217 146.1880396210572 0.1034574178558495
1000 53.48751887610941 -68244.41443573481 132.7439331429908 0.06426914262099545
Loop time of 15.1122 on 1 procs for 1000 steps with 16000 atoms
Performance: 0.572 ns/day, 41.978 hours/ns, 66.172 timesteps/s
99.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 13.929 | 13.929 | 13.929 | 0.0 | 92.17
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.08636 | 0.08636 | 0.08636 | 0.0 | 0.57
Output | 0.029141 | 0.029141 | 0.029141 | 0.0 | 0.19
Modify | 1.0235 | 1.0235 | 1.0235 | 0.0 | 6.77
Other | | 0.04389 | | | 0.29
Nlocal: 16000.0 ave 16000 max 16000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 13449.0 ave 13449 max 13449 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 896000.0 ave 896000 max 896000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 896000
Ave neighs/atom = 56.000000
Neighbor list builds = 0
Dangerous builds = 0
write_restart tmp.restart.ttm
System init for write_restart ...
Total wall time: 0:00:15

View File

@ -0,0 +1,118 @@
LAMMPS (30 Jul 2021)
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
lattice bcc 2.87
Lattice spacing in x,y,z = 2.8700000 2.8700000 2.8700000
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 10 units lattice
create_box 1 sim_box
Created orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
1 by 2 by 2 MPI processor grid
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 10 units lattice
create_atoms 1 region atom_box
Created 16000 atoms
using lattice units in orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
create_atoms CPU = 0.002 seconds
mass 1 55.845
include pot_iron.mod
pair_style eam/fs
pair_coeff * * FeVoter-ChenRecheck.fs Fe
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm 342785 1.2470e-5 0.087614 0.005365 29.5917 47.5679 58.4613 10 10 10 infile grid_10x10x10 outfile 1000 tmp.grid.ttm
compute pe all pe/atom
compute ke all ke/atom
dump 1 all custom 1000 tmp.dump.ttm id type x y z c_ke c_pe
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000
Neighbor list info ...
update every 5 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.524
ghost atom cutoff = 6.524
binsize = 3.262, bins = 18 18 18
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/fs, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 6.559 | 6.559 | 6.559 Mbytes
Step Temp TotEng f_twotemp[1] f_twotemp[2]
0 0 -68483.52254530673 371.9188105082105 0
100 16.95254977583874 -68446.65370077227 334.7807307441603 0.3600757576618061
200 27.82076000591521 -68413.49962571842 301.6698518274451 0.2923012030382478
300 32.28064646099917 -68383.43127112807 271.620630836186 0.2697897656149546
400 33.32631162065878 -68356.76508047059 244.9939728689737 0.2059848798035755
500 35.13985645761556 -68332.75838831626 220.9563145448484 0.2799090544324762
600 39.58297841774112 -68311.05917212959 199.2875787815293 0.2309225167135088
700 45.34109481744322 -68291.67926830769 179.95673920187 0.1434664891770075
800 49.66116134168288 -68275.00925057202 163.282485803462 0.1598759550824534
900 52.17137809502143 -68259.83087950756 148.1293852818856 0.118013038413826
1000 54.2344556410713 -68245.61817879432 133.9139611916062 0.1315530159773972
Loop time of 4.97562 on 4 procs for 1000 steps with 16000 atoms
Performance: 1.736 ns/day, 13.821 hours/ns, 200.980 timesteps/s
98.4% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.1408 | 4.262 | 4.4044 | 5.5 | 85.66
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.18288 | 0.3266 | 0.44977 | 20.3 | 6.56
Output | 0.0091008 | 0.0099765 | 0.01029 | 0.5 | 0.20
Modify | 0.34765 | 0.35054 | 0.35404 | 0.4 | 7.05
Other | | 0.02651 | | | 0.53
Nlocal: 4000.00 ave 4000 max 4000 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 6329.00 ave 6329 max 6329 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 224000.0 ave 227436 max 220450 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Total # of neighbors = 896000
Ave neighs/atom = 56.000000
Neighbor list builds = 0
Dangerous builds = 0
write_restart tmp.restart.ttm
System init for write_restart ...
Total wall time: 0:00:05

View File

@ -0,0 +1,118 @@
LAMMPS (30 Jul 2021)
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
lattice bcc 2.87
Lattice spacing in x,y,z = 2.8700000 2.8700000 2.8700000
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 10 units lattice
create_box 1 sim_box
Created orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
1 by 1 by 1 MPI processor grid
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 10 units lattice
create_atoms 1 region atom_box
Created 16000 atoms
using lattice units in orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
create_atoms CPU = 0.005 seconds
mass 1 55.845
include pot_iron.mod
pair_style eam/fs
pair_coeff * * FeVoter-ChenRecheck.fs Fe
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm/grid 342785 1.2470e-5 0.087614 0.005365 29.5917 47.5679 58.4613 10 10 10 infile grid_10x10x10 outfile 1000 tmp.grid.ttm.grid
compute pe all pe/atom
compute ke all ke/atom
dump 1 all custom 1000 tmp.dump.ttm.grid id type x y z c_ke c_pe
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000
Neighbor list info ...
update every 5 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.524
ghost atom cutoff = 6.524
binsize = 3.262, bins = 18 18 18
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/fs, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 13.85 | 13.85 | 13.85 Mbytes
Step Temp TotEng f_twotemp[1] f_twotemp[2]
0 0 -68483.52254543516 371.9188105082105 0
100 17.00947824197047 -68446.51095116073 334.6305417428716 0.3760709738059774
200 27.90625180507924 -68413.17749063623 301.3358408995842 0.3161167973265658
300 32.19243232351597 -68383.2226191097 271.4018727219317 0.2902233631657708
400 33.45328405182931 -68355.76078178188 243.9648281740989 0.254540026810078
500 35.52815331681825 -68331.66432066172 219.8831664440165 0.2389083849000778
600 40.61109011282666 -68309.39522245103 197.5869310464551 0.3052890341245368
700 46.19736836207277 -68290.15919155753 178.4094794163846 0.1982374463651032
800 50.4309717717641 -68272.75667145227 161.0251849674133 0.1708816198953871
900 52.16219449883405 -68257.88199640217 146.1880396210573 0.1034574178558499
1000 53.48751887610945 -68244.41443573478 132.7439331429909 0.06426914262099563
Loop time of 16.6744 on 1 procs for 1000 steps with 16000 atoms
Performance: 0.518 ns/day, 46.318 hours/ns, 59.972 timesteps/s
100.0% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 15.418 | 15.418 | 15.418 | 0.0 | 92.46
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.095105 | 0.095105 | 0.095105 | 0.0 | 0.57
Output | 0.02782 | 0.02782 | 0.02782 | 0.0 | 0.17
Modify | 1.0867 | 1.0867 | 1.0867 | 0.0 | 6.52
Other | | 0.04719 | | | 0.28
Nlocal: 16000.0 ave 16000 max 16000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 13449.0 ave 13449 max 13449 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 896000.0 ave 896000 max 896000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 896000
Ave neighs/atom = 56.000000
Neighbor list builds = 0
Dangerous builds = 0
write_restart tmp.restart.ttm.grid
System init for write_restart ...
Total wall time: 0:00:16

View File

@ -0,0 +1,118 @@
LAMMPS (30 Jul 2021)
units metal
atom_style atomic
boundary p p p
variable latc equal 2.87
lattice bcc ${latc}
lattice bcc 2.87
Lattice spacing in x,y,z = 2.8700000 2.8700000 2.8700000
variable xmax equal 10.0
variable xmin equal -10.0
variable ymax equal 10.0
variable ymin equal -10.0
variable zmax equal 10.0
variable zmin equal -10.0
region sim_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 ${zmax} units lattice
region sim_box block -10 10 -10 10 -10 10 units lattice
create_box 1 sim_box
Created orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
1 by 2 by 2 MPI processor grid
region atom_box block ${xmin} ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 ${xmax} ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 ${ymin} ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 ${ymax} ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 ${zmin} ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 ${zmax} units lattice
region atom_box block -10 10 -10 10 -10 10 units lattice
create_atoms 1 region atom_box
Created 16000 atoms
using lattice units in orthogonal box = (-28.700000 -28.700000 -28.700000) to (28.700000 28.700000 28.700000)
create_atoms CPU = 0.002 seconds
mass 1 55.845
include pot_iron.mod
pair_style eam/fs
pair_coeff * * FeVoter-ChenRecheck.fs Fe
neighbor 2.0 bin
neigh_modify every 5 delay 0 check yes
fix 1 all nve
fix twotemp all ttm/grid 342785 1.2470e-5 0.087614 0.005365 29.5917 47.5679 58.4613 10 10 10 infile grid_10x10x10 outfile 1000 tmp.grid.ttm.grid
compute pe all pe/atom
compute ke all ke/atom
dump 1 all custom 1000 tmp.dump.ttm.grid id type x y z c_ke c_pe
timestep 0.0001
thermo 100
thermo_style custom step temp etotal f_twotemp[1] f_twotemp[2]
thermo_modify format float "%20.16g"
run 1000
Neighbor list info ...
update every 5 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.524
ghost atom cutoff = 6.524
binsize = 3.262, bins = 18 18 18
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/fs, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 6.557 | 6.557 | 6.557 Mbytes
Step Temp TotEng f_twotemp[1] f_twotemp[2]
0 0 -68483.52254530673 371.9188105082186 0
100 16.95254977583874 -68446.65370077227 334.7807307441606 0.3600757576618061
200 27.82076000591522 -68413.49962571842 301.669851827445 0.2923012030382476
300 32.28064646099917 -68383.43127112807 271.6206308361861 0.2697897656149546
400 33.32631162065878 -68356.76508047059 244.9939728689737 0.2059848798035755
500 35.13985645761555 -68332.75838831626 220.9563145448483 0.2799090544324762
600 39.58297841774112 -68311.05917212959 199.2875787815293 0.2309225167135089
700 45.34109481744325 -68291.67926830769 179.9567392018701 0.1434664891770076
800 49.66116134168287 -68275.00925057202 163.2824858034622 0.1598759550824539
900 52.17137809502142 -68259.83087950756 148.1293852818859 0.1180130384138258
1000 54.23445564107136 -68245.61817879431 133.9139611916063 0.1315530159773979
Loop time of 4.77383 on 4 procs for 1000 steps with 16000 atoms
Performance: 1.810 ns/day, 13.261 hours/ns, 209.476 timesteps/s
98.3% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.0601 | 4.1512 | 4.2622 | 4.0 | 86.96
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.16244 | 0.27412 | 0.36544 | 15.5 | 5.74
Output | 0.0085038 | 0.0088961 | 0.0093065 | 0.3 | 0.19
Modify | 0.31302 | 0.31333 | 0.31363 | 0.0 | 6.56
Other | | 0.02623 | | | 0.55
Nlocal: 4000.00 ave 4000 max 4000 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 6329.00 ave 6329 max 6329 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 224000.0 ave 227436 max 220450 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Total # of neighbors = 896000
Ave neighs/atom = 56.000000
Neighbor list builds = 0
Dangerous builds = 0
write_restart tmp.restart.ttm.grid
System init for write_restart ...
Total wall time: 0:00:04

View File

@ -0,0 +1,2 @@
pair_style eam/fs
pair_coeff * * FeVoter-ChenRecheck.fs Fe

View File

@ -78,11 +78,18 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
nygrid = utils::inumeric(FLERR,arg[11],false,lmp);
nzgrid = utils::inumeric(FLERR,arg[12],false,lmp);
tinit = 0.0;
infile = outfile = NULL;
int iarg = 13;
while (iarg < narg) {
if (strcmp(arg[iarg],"infile") == 0) {
if (strcmp(arg[iarg],"set") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ttm command");
tinit = utils::numeric(FLERR,arg[iarg+1],false,lmp);
if (tinit <= 0.0)
error->all(FLERR,"Fix ttm initial temperature must be > 0.0");
iarg += 2;
} else if (strcmp(arg[iarg],"infile") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ttm command");
int n = strlen(arg[iarg+1]) + 1;
infile = new char[n];
@ -183,9 +190,13 @@ void FixTTM::post_constructor()
allocate_grid();
// zero electron temperatures (default)
// initialize electron temperatures on grid
memset(&T_electron[0][0][0],0,ngridtotal*sizeof(double));
int ix,iy,iz;
for (iz = 0; iz < nzgrid; iz++)
for (iy = 0; iy < nygrid; iy++)
for (ix = 0; ix < nxgrid; ix++)
T_electron[iz][iy][ix] = tinit;
// zero net_energy_transfer_all
// in case compute_vector accesses it on timestep 0

View File

@ -55,7 +55,7 @@ class FixTTM : public Fix {
int ngridtotal; // total size of global grid
int deallocate_flag;
int outflag,outevery;
double shift;
double shift,tinit;
double e_energy,transfer_energy;
char *infile,*outfile;

View File

@ -65,9 +65,13 @@ void FixTTMGrid::post_constructor()
allocate_grid();
// zero electron temperatures (default)
// initialize electron temperatures on grid
memset(&T_electron[nzlo_out][nylo_out][nxlo_out],0,ngridout*sizeof(double));
int ix,iy,iz;
for (iz = nzlo_out; iz <= nzhi_out; iz++)
for (iy = nylo_out; iy <= nyhi_out; iy++)
for (ix = nxlo_out; ix <= nxhi_out; ix++)
T_electron[iz][iy][ix] = tinit;
// zero net_energy_transfer
// in case compute_vector accesses it on timestep 0

View File

@ -100,11 +100,18 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
nynodes = utils::inumeric(FLERR,arg[6],false,lmp);
nznodes = utils::inumeric(FLERR,arg[7],false,lmp);
double tinit = 0.0;
infile = outfile = NULL;
int iarg = 8;
while (iarg < narg) {
if (strcmp(arg[iarg],"infile") == 0) {
if (strcmp(arg[iarg],"set") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ttm/mod command");
tinit = utils::numeric(FLERR,arg[iarg+1],false,lmp);
if (tinit <= 0.0)
error->all(FLERR,"Fix ttm/mod initial temperature must be > 0.0");
iarg += 2;
} else if (strcmp(arg[iarg],"infile") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ttm/mod command");
int n = strlen(arg[iarg+1]) + 1;
infile = new char[n];
@ -198,10 +205,16 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
atom->add_callback(Atom::GROW);
atom->add_callback(Atom::RESTART);
// zero electron temperatures (default)
// initialize electron temperatures on grid
int ix,iy,iz;
for (ix = 0; ix < nxnodes; ix++)
for (iy = 0; iy < nynodes; iy++)
for (iz = 0; iz < nznodes; iz++)
T_electron[ix][iy][iz] = tinit;
// if specified, read initial electron temperatures from file
memset(&T_electron[0][0][0],0,ngridtotal*sizeof(double));
if (infile) {
if (comm->me == 0) read_electron_temperatures(infile);
MPI_Bcast(&T_electron[0][0][0],ngridtotal,MPI_DOUBLE,0,world);