diff --git a/doc/src/Section_commands.txt b/doc/src/Section_commands.txt index bf7b48f32..ae13c87cb 100644 --- a/doc/src/Section_commands.txt +++ b/doc/src/Section_commands.txt @@ -1,1228 +1,1229 @@ "Previous Section"_Section_start.html - "LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc - "Next Section"_Section_packages.html :c :link(lws,http://lammps.sandia.gov) :link(ld,Manual.html) :link(lc,Section_commands.html#comm) :line 3. Commands :h3 This section describes how a LAMMPS input script is formatted and the input script commands used to define a LAMMPS simulation. 3.1 "LAMMPS input script"_#cmd_1 3.2 "Parsing rules"_#cmd_2 3.3 "Input script structure"_#cmd_3 3.4 "Commands listed by category"_#cmd_4 3.5 "Commands listed alphabetically"_#cmd_5 :all(b) :line :line 3.1 LAMMPS input script :link(cmd_1),h4 LAMMPS executes by reading commands from a input script (text file), one line at a time. When the input script ends, LAMMPS exits. Each command causes LAMMPS to take some action. It may set an internal variable, read in a file, or run a simulation. Most commands have default settings, which means you only need to use the command if you wish to change the default. In many cases, the ordering of commands in an input script is not important. However the following rules apply: (1) LAMMPS does not read your entire input script and then perform a simulation with all the settings. Rather, the input script is read one line at a time and each command takes effect when it is read. Thus this sequence of commands: timestep 0.5 run 100 run 100 :pre does something different than this sequence: run 100 timestep 0.5 run 100 :pre In the first case, the specified timestep (0.5 fmsec) is used for two simulations of 100 timesteps each. In the 2nd case, the default timestep (1.0 fmsec) is used for the 1st 100 step simulation and a 0.5 fmsec timestep is used for the 2nd one. (2) Some commands are only valid when they follow other commands. For example you cannot set the temperature of a group of atoms until atoms have been defined and a group command is used to define which atoms belong to the group. (3) Sometimes command B will use values that can be set by command A. This means command A must precede command B in the input script if it is to have the desired effect. For example, the "read_data"_read_data.html command initializes the system by setting up the simulation box and assigning atoms to processors. If default values are not desired, the "processors"_processors.html and "boundary"_boundary.html commands need to be used before read_data to tell LAMMPS how to map processors to the simulation box. Many input script errors are detected by LAMMPS and an ERROR or WARNING message is printed. "This section"_Section_errors.html gives more information on what errors mean. The documentation for each command lists restrictions on how the command can be used. :line 3.2 Parsing rules :link(cmd_2),h4 Each non-blank line in the input script is treated as a command. LAMMPS commands are case sensitive. Command names are lower-case, as are specified command arguments. Upper case letters may be used in file names or user-chosen ID strings. Here is how each line in the input script is parsed by LAMMPS: (1) If the last printable character on the line is a "&" character, the command is assumed to continue on the next line. The next line is concatenated to the previous line by removing the "&" character and line break. This allows long commands to be continued across two or more lines. See the discussion of triple quotes in (6) for how to continue a command across multiple line without using "&" characters. (2) All characters from the first "#" character onward are treated as comment and discarded. See an exception in (6). Note that a comment after a trailing "&" character will prevent the command from continuing on the next line. Also note that for multi-line commands a single leading "#" will comment out the entire command. (3) The line is searched repeatedly for $ characters, which indicate variables that are replaced with a text string. See an exception in (6). If the $ is followed by curly brackets, then the variable name is the text inside the curly brackets. If no curly brackets follow the $, then the variable name is the single character immediately following the $. Thus $\{myTemp\} and $x refer to variable names "myTemp" and "x". How the variable is converted to a text string depends on what style of variable it is; see the "variable"_variable.html doc page for details. It can be a variable that stores multiple text strings, and return one of them. The returned text string can be multiple "words" (space separated) which will then be interpreted as multiple arguments in the input command. The variable can also store a numeric formula which will be evaluated and its numeric result returned as a string. As a special case, if the $ is followed by parenthesis, then the text inside the parenthesis is treated as an "immediate" variable and evaluated as an "equal-style variable"_variable.html. This is a way to use numeric formulas in an input script without having to assign them to variable names. For example, these 3 input script lines: variable X equal (xlo+xhi)/2+sqrt(v_area) region 1 block $X 2 INF INF EDGE EDGE variable X delete :pre can be replaced by region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE :pre so that you do not have to define (or discard) a temporary variable X. Note that neither the curly-bracket or immediate form of variables can contain nested $ characters for other variables to substitute for. Thus you cannot do this: variable a equal 2 variable b2 equal 4 print "B2 = $\{b$a\}" :pre Nor can you specify this $($x-1.0) for an immediate variable, but you could use $(v_x-1.0), since the latter is valid syntax for an "equal-style variable"_variable.html. See the "variable"_variable.html command for more details of how strings are assigned to variables and evaluated, and how they can be used in input script commands. (4) The line is broken into "words" separated by whitespace (tabs, spaces). Note that words can thus contain letters, digits, underscores, or punctuation characters. (5) The first word is the command name. All successive words in the line are arguments. (6) If you want text with spaces to be treated as a single argument, it can be enclosed in either single or double or triple quotes. A long single argument enclosed in single or double quotes can span multiple lines if the "&" character is used, as described above. When the lines are concatenated together (and the "&" characters and line breaks removed), the text will become a single line. If you want multiple lines of an argument to retain their line breaks, the text can be enclosed in triple quotes, in which case "&" characters are not needed. For example: print "Volume = $v" print 'Volume = $v' if "$\{steps\} > 1000" then quit variable a string "red green blue & purple orange cyan" print """ System volume = $v System temperature = $t """ :pre In each case, the single, double, or triple quotes are removed when the single argument they enclose is stored internally. See the "dump modify format"_dump_modify.html, "print"_print.html, "if"_if.html, and "python"_python.html commands for examples. A "#" or "$" character that is between quotes will not be treated as a comment indicator in (2) or substituted for as a variable in (3). NOTE: If the argument is itself a command that requires a quoted argument (e.g. using a "print"_print.html command as part of an "if"_if.html or "run every"_run.html command), then single, double, or triple quotes can be nested in the usual manner. See the doc pages for those commands for examples. Only one of level of nesting is allowed, but that should be sufficient for most use cases. :line 3.3 Input script structure :h4,link(cmd_3) This section describes the structure of a typical LAMMPS input script. The "examples" directory in the LAMMPS distribution contains many sample input scripts; the corresponding problems are discussed in "Section 7"_Section_example.html, and animated on the "LAMMPS WWW Site"_lws. A LAMMPS input script typically has 4 parts: Initialization Atom definition Settings Run a simulation :ol The last 2 parts can be repeated as many times as desired. I.e. run a simulation, change some settings, run some more, etc. Each of the 4 parts is now described in more detail. Remember that almost all the commands need only be used if a non-default value is desired. (1) Initialization Set parameters that need to be defined before atoms are created or read-in from a file. The relevant commands are "units"_units.html, "dimension"_dimension.html, "newton"_newton.html, "processors"_processors.html, "boundary"_boundary.html, "atom_style"_atom_style.html, "atom_modify"_atom_modify.html. If force-field parameters appear in the files that will be read, these commands tell LAMMPS what kinds of force fields are being used: "pair_style"_pair_style.html, "bond_style"_bond_style.html, "angle_style"_angle_style.html, "dihedral_style"_dihedral_style.html, "improper_style"_improper_style.html. (2) Atom definition There are 3 ways to define atoms in LAMMPS. Read them in from a data or restart file via the "read_data"_read_data.html or "read_restart"_read_restart.html commands. These files can contain molecular topology information. Or create atoms on a lattice (with no molecular topology), using these commands: "lattice"_lattice.html, "region"_region.html, "create_box"_create_box.html, "create_atoms"_create_atoms.html. The entire set of atoms can be duplicated to make a larger simulation using the "replicate"_replicate.html command. (3) Settings Once atoms and molecular topology are defined, a variety of settings can be specified: force field coefficients, simulation parameters, output options, etc. Force field coefficients are set by these commands (they can also be set in the read-in files): "pair_coeff"_pair_coeff.html, "bond_coeff"_bond_coeff.html, "angle_coeff"_angle_coeff.html, "dihedral_coeff"_dihedral_coeff.html, "improper_coeff"_improper_coeff.html, "kspace_style"_kspace_style.html, "dielectric"_dielectric.html, "special_bonds"_special_bonds.html. Various simulation parameters are set by these commands: "neighbor"_neighbor.html, "neigh_modify"_neigh_modify.html, "group"_group.html, "timestep"_timestep.html, "reset_timestep"_reset_timestep.html, "run_style"_run_style.html, "min_style"_min_style.html, "min_modify"_min_modify.html. Fixes impose a variety of boundary conditions, time integration, and diagnostic options. The "fix"_fix.html command comes in many flavors. Various computations can be specified for execution during a simulation using the "compute"_compute.html, "compute_modify"_compute_modify.html, and "variable"_variable.html commands. Output options are set by the "thermo"_thermo.html, "dump"_dump.html, and "restart"_restart.html commands. (4) Run a simulation A molecular dynamics simulation is run using the "run"_run.html command. Energy minimization (molecular statics) is performed using the "minimize"_minimize.html command. A parallel tempering (replica-exchange) simulation can be run using the "temper"_temper.html command. :line 3.4 Commands listed by category :link(cmd_4),h4 This section lists core LAMMPS commands, grouped by category. The "next section"_#cmd_5 lists all commands alphabetically. The next section also includes (long) lists of style options for entries that appear in the following categories as a single command (fix, compute, pair, etc). Commands that are added by user packages are not included in the categories here, but they are in the next section. Initialization: "newton"_newton.html, "package"_package.html, "processors"_processors.html, "suffix"_suffix.html, "units"_units.html Setup simulation box: "boundary"_boundary.html, "box"_box.html, "change_box"_change_box.html, "create_box"_create_box.html, "dimension"_dimension.html, "lattice"_lattice.html, "region"_region.html Setup atoms: "atom_modify"_atom_modify.html, "atom_style"_atom_style.html, "balance"_balance.html, "create_atoms"_create_atoms.html, "create_bonds"_create_bonds.html, "delete_atoms"_delete_atoms.html, "delete_bonds"_delete_bonds.html, "displace_atoms"_displace_atoms.html, "group"_group.html, "mass"_mass.html, "molecule"_molecule.html, "read_data"_read_data.html, "read_dump"_read_dump.html, "read_restart"_read_restart.html, "replicate"_replicate.html, "set"_set.html, "velocity"_velocity.html Force fields: "angle_coeff"_angle_coeff.html, "angle_style"_angle_style.html, "bond_coeff"_bond_coeff.html, "bond_style"_bond_style.html, "bond_write"_bond_write.html, "dielectric"_dielectric.html, "dihedral_coeff"_dihedral_coeff.html, "dihedral_style"_dihedral_style.html, "improper_coeff"_improper_coeff.html, "improper_style"_improper_style.html, "kspace_modify"_kspace_modify.html, "kspace_style"_kspace_style.html, "pair_coeff"_pair_coeff.html, "pair_modify"_pair_modify.html, "pair_style"_pair_style.html, "pair_write"_pair_write.html, "special_bonds"_special_bonds.html Settings: "comm_modify"_comm_modify.html, "comm_style"_comm_style.html, "info"_info.html, "min_modify"_min_modify.html, "min_style"_min_style.html, "neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html, "partition"_partition.html, "reset_timestep"_reset_timestep.html, "run_style"_run_style.html, "timer"_timer.html, "timestep"_timestep.html Operations within timestepping (fixes) and diagnostics (computes): "compute"_compute.html, "compute_modify"_compute_modify.html, "fix"_fix.html, "fix_modify"_fix_modify.html, "uncompute"_uncompute.html, "unfix"_unfix.html Output: "dump image"_dump_image.html, "dump movie"_dump_image.html, "dump"_dump.html, "dump_modify"_dump_modify.html, "restart"_restart.html, "thermo"_thermo.html, "thermo_modify"_thermo_modify.html, "thermo_style"_thermo_style.html, "undump"_undump.html, "write_coeff"_write_coeff.html, "write_data"_write_data.html, "write_dump"_write_dump.html, "write_restart"_write_restart.html Actions: "minimize"_minimize.html, "neb"_neb.html, "prd"_prd.html, "rerun"_rerun.html, "run"_run.html, "tad"_tad.html, "temper"_temper.html Input script control: "clear"_clear.html, "echo"_echo.html, "if"_if.html, "include"_include.html, "jump"_jump.html, "label"_label.html, "log"_log.html, "next"_next.html, "print"_print.html, "python"_python.html, "quit"_quit.html, "shell"_shell.html, "variable"_variable.html :line 3.5 Individual commands :h4,link(cmd_5),link(comm) This section lists all LAMMPS commands alphabetically, with a separate listing below of styles within certain commands. The "previous section"_#cmd_4 lists the same commands, grouped by category. Note that some style options for some commands are part of specific LAMMPS packages, which means they cannot be used unless the package was included when LAMMPS was built. Not all packages are included in a default LAMMPS build. These dependencies are listed as Restrictions in the command's documentation. "angle_coeff"_angle_coeff.html, "angle_style"_angle_style.html, "atom_modify"_atom_modify.html, "atom_style"_atom_style.html, "balance"_balance.html, "bond_coeff"_bond_coeff.html, "bond_style"_bond_style.html, "bond_write"_bond_write.html, "boundary"_boundary.html, "box"_box.html, "change_box"_change_box.html, "clear"_clear.html, "comm_modify"_comm_modify.html, "comm_style"_comm_style.html, "compute"_compute.html, "compute_modify"_compute_modify.html, "create_atoms"_create_atoms.html, "create_bonds"_create_bonds.html, "create_box"_create_box.html, "delete_atoms"_delete_atoms.html, "delete_bonds"_delete_bonds.html, "dielectric"_dielectric.html, "dihedral_coeff"_dihedral_coeff.html, "dihedral_style"_dihedral_style.html, "dimension"_dimension.html, "displace_atoms"_displace_atoms.html, "dump"_dump.html, "dump image"_dump_image.html, "dump_modify"_dump_modify.html, "dump movie"_dump_image.html, "echo"_echo.html, "fix"_fix.html, "fix_modify"_fix_modify.html, "group"_group.html, "if"_if.html, "info"_info.html, "improper_coeff"_improper_coeff.html, "improper_style"_improper_style.html, "include"_include.html, "jump"_jump.html, "kspace_modify"_kspace_modify.html, "kspace_style"_kspace_style.html, "label"_label.html, "lattice"_lattice.html, "log"_log.html, "mass"_mass.html, "minimize"_minimize.html, "min_modify"_min_modify.html, "min_style"_min_style.html, "molecule"_molecule.html, "neb"_neb.html, "neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html, "newton"_newton.html, "next"_next.html, "package"_package.html, "pair_coeff"_pair_coeff.html, "pair_modify"_pair_modify.html, "pair_style"_pair_style.html, "pair_write"_pair_write.html, "partition"_partition.html, "prd"_prd.html, "print"_print.html, "processors"_processors.html, "python"_python.html, "quit"_quit.html, "read_data"_read_data.html, "read_dump"_read_dump.html, "read_restart"_read_restart.html, "region"_region.html, "replicate"_replicate.html, "rerun"_rerun.html, "reset_timestep"_reset_timestep.html, "restart"_restart.html, "run"_run.html, "run_style"_run_style.html, "set"_set.html, "shell"_shell.html, "special_bonds"_special_bonds.html, "suffix"_suffix.html, "tad"_tad.html, "temper"_temper.html, "thermo"_thermo.html, "thermo_modify"_thermo_modify.html, "thermo_style"_thermo_style.html, "timer"_timer.html, "timestep"_timestep.html, "uncompute"_uncompute.html, "undump"_undump.html, "unfix"_unfix.html, "units"_units.html, "variable"_variable.html, "velocity"_velocity.html, "write_coeff"_write_coeff.html, "write_data"_write_data.html, "write_dump"_write_dump.html, "write_restart"_write_restart.html :tb(c=6,ea=c) These are additional commands in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "dump netcdf"_dump_netcdf.html, "dump netcdf/mpiio"_dump_netcdf.html, "dump vtk"_dump_vtk.html, "group2ndx"_group2ndx.html, "ndx2group"_group2ndx.html, "temper/grem"_temper_grem.html :tb(c=3,ea=c) :line Fix styles :h4 See the "fix"_fix.html command for one-line descriptions of each style or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "adapt"_fix_adapt.html, "addforce"_fix_addforce.html, "append/atoms"_fix_append_atoms.html, "atom/swap"_fix_atom_swap.html, "aveforce"_fix_aveforce.html, "ave/atom"_fix_ave_atom.html, "ave/chunk"_fix_ave_chunk.html, "ave/correlate"_fix_ave_correlate.html, "ave/histo"_fix_ave_histo.html, "ave/histo/weight"_fix_ave_histo.html, "ave/time"_fix_ave_time.html, "balance"_fix_balance.html, "bond/break"_fix_bond_break.html, "bond/create"_fix_bond_create.html, "bond/swap"_fix_bond_swap.html, "box/relax"_fix_box_relax.html, "cmap"_fix_cmap.html, "controller"_fix_controller.html, "deform (k)"_fix_deform.html, "deposit"_fix_deposit.html, "drag"_fix_drag.html, "dt/reset"_fix_dt_reset.html, "efield"_fix_efield.html, "ehex"_fix_ehex.html, "enforce2d"_fix_enforce2d.html, "evaporate"_fix_evaporate.html, "external"_fix_external.html, "freeze"_fix_freeze.html, "gcmc"_fix_gcmc.html, "gld"_fix_gld.html, "gravity (o)"_fix_gravity.html, "halt"_fix_halt.html, "heat"_fix_heat.html, "indent"_fix_indent.html, "langevin (k)"_fix_langevin.html, "lineforce"_fix_lineforce.html, "momentum (k)"_fix_momentum.html, "move"_fix_move.html, "mscg"_fix_mscg.html, "msst"_fix_msst.html, "neb"_fix_neb.html, "nph (ko)"_fix_nh.html, "nphug (o)"_fix_nphug.html, "nph/asphere (o)"_fix_nph_asphere.html, "nph/body"_fix_nph_body.html, "nph/sphere (o)"_fix_nph_sphere.html, "npt (kio)"_fix_nh.html, "npt/asphere (o)"_fix_npt_asphere.html, "npt/body"_fix_npt_body.html, "npt/sphere (o)"_fix_npt_sphere.html, "nve (kio)"_fix_nve.html, "nve/asphere (i)"_fix_nve_asphere.html, "nve/asphere/noforce"_fix_nve_asphere_noforce.html, "nve/body"_fix_nve_body.html, "nve/limit"_fix_nve_limit.html, "nve/line"_fix_nve_line.html, "nve/noforce"_fix_nve_noforce.html, "nve/sphere (o)"_fix_nve_sphere.html, "nve/tri"_fix_nve_tri.html, "nvt (iko)"_fix_nh.html, "nvt/asphere (o)"_fix_nvt_asphere.html, "nvt/body"_fix_nvt_body.html, "nvt/sllod (io)"_fix_nvt_sllod.html, "nvt/sphere (o)"_fix_nvt_sphere.html, "oneway"_fix_oneway.html, "orient/bcc"_fix_orient.html, "orient/fcc"_fix_orient.html, "planeforce"_fix_planeforce.html, "poems"_fix_poems.html, "pour"_fix_pour.html, "press/berendsen"_fix_press_berendsen.html, "print"_fix_print.html, "property/atom"_fix_property_atom.html, "qeq/comb (o)"_fix_qeq_comb.html, "qeq/dynamic"_fix_qeq.html, "qeq/fire"_fix_qeq.html, "qeq/point"_fix_qeq.html, "qeq/shielded"_fix_qeq.html, "qeq/slater"_fix_qeq.html, "rattle"_fix_shake.html, "reax/bonds"_fix_reax_bonds.html, "recenter"_fix_recenter.html, "restrain"_fix_restrain.html, "rigid (o)"_fix_rigid.html, "rigid/nph (o)"_fix_rigid.html, "rigid/npt (o)"_fix_rigid.html, "rigid/nve (o)"_fix_rigid.html, "rigid/nvt (o)"_fix_rigid.html, "rigid/small (o)"_fix_rigid.html, "rigid/small/nph (o)"_fix_rigid.html, "rigid/small/npt (o)"_fix_rigid.html, "rigid/small/nve (o)"_fix_rigid.html, "rigid/small/nvt (o)"_fix_rigid.html, "setforce (k)"_fix_setforce.html, "shake"_fix_shake.html, "spring"_fix_spring.html, "spring/chunk"_fix_spring_chunk.html, "spring/rg"_fix_spring_rg.html, "spring/self"_fix_spring_self.html, "srd"_fix_srd.html, "store/force"_fix_store_force.html, "store/state"_fix_store_state.html, "temp/berendsen"_fix_temp_berendsen.html, "temp/csld"_fix_temp_csvr.html, "temp/csvr"_fix_temp_csvr.html, "temp/rescale"_fix_temp_rescale.html, "tfmc"_fix_tfmc.html, "thermal/conductivity"_fix_thermal_conductivity.html, "tmd"_fix_tmd.html, "ttm"_fix_ttm.html, "tune/kspace"_fix_tune_kspace.html, "vector"_fix_vector.html, "viscosity"_fix_viscosity.html, "viscous"_fix_viscous.html, "wall/colloid"_fix_wall.html, "wall/gran"_fix_wall_gran.html, "wall/gran/region"_fix_wall_gran_region.html, "wall/harmonic"_fix_wall.html, "wall/lj1043"_fix_wall.html, "wall/lj126"_fix_wall.html, "wall/lj93"_fix_wall.html, "wall/piston"_fix_wall_piston.html, "wall/reflect (k)"_fix_wall_reflect.html, "wall/region"_fix_wall_region.html, "wall/srd"_fix_wall_srd.html :tb(c=8,ea=c) These are additional fix styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "adapt/fep"_fix_adapt_fep.html, "addtorque"_fix_addtorque.html, "atc"_fix_atc.html, "ave/correlate/long"_fix_ave_correlate_long.html, "colvars"_fix_colvars.html, "dpd/energy"_fix_dpd_energy.html, "drude"_fix_drude.html, "drude/transform/direct"_fix_drude_transform.html, "drude/transform/reverse"_fix_drude_transform.html, "eos/cv"_fix_eos_cv.html, "eos/table"_fix_eos_table.html, "eos/table/rx"_fix_eos_table_rx.html, "filter/corotate"_fix_filter_corotate.html, "flow/gauss"_fix_flow_gauss.html, "gle"_fix_gle.html, "grem"_fix_grem.html, "imd"_fix_imd.html, "ipi"_fix_ipi.html, "langevin/drude"_fix_langevin_drude.html, "langevin/eff"_fix_langevin_eff.html, "lb/fluid"_fix_lb_fluid.html, "lb/momentum"_fix_lb_momentum.html, "lb/pc"_fix_lb_pc.html, "lb/rigid/pc/sphere"_fix_lb_rigid_pc_sphere.html, "lb/viscous"_fix_lb_viscous.html, "meso"_fix_meso.html, "manifoldforce"_fix_manifoldforce.html, "meso/stationary"_fix_meso_stationary.html, "nve/dot"_fix_nve_dot.html, "nve/dotc/langevin"_fix_nve_dotc_langevin.html, "nve/manifold/rattle"_fix_nve_manifold_rattle.html, "nvk"_fix_nvk.html, "nvt/manifold/rattle"_fix_nvt_manifold_rattle.html, "nph/eff"_fix_nh_eff.html, "npt/eff"_fix_nh_eff.html, "nve/eff"_fix_nve_eff.html, "nvt/eff"_fix_nh_eff.html, "nvt/sllod/eff"_fix_nvt_sllod_eff.html, "phonon"_fix_phonon.html, "pimd"_fix_pimd.html, "qbmsst"_fix_qbmsst.html, "qeq/reax"_fix_qeq_reax.html, "qmmm"_fix_qmmm.html, "qtb"_fix_qtb.html, "reax/c/bonds"_fix_reax_bonds.html, "reax/c/species"_fix_reaxc_species.html, "rx"_fix_rx.html, "saed/vtk"_fix_saed_vtk.html, "shardlow"_fix_shardlow.html, "smd"_fix_smd.html, "smd/adjust/dt"_fix_smd_adjust_dt.html, "smd/integrate/tlsph"_fix_smd_integrate_tlsph.html, "smd/integrate/ulsph"_fix_smd_integrate_ulsph.html, "smd/move/triangulated/surface"_fix_smd_move_triangulated_surface.html, "smd/setvel"_fix_smd_setvel.html, "smd/wall/surface"_fix_smd_wall_surface.html, "temp/rescale/eff"_fix_temp_rescale_eff.html, "ti/spring"_fix_ti_spring.html, "ttm/mod"_fix_ttm.html :tb(c=6,ea=c) :line Compute styles :h4 See the "compute"_compute.html command for one-line descriptions of each style or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "angle"_compute_angle.html, "angle/local"_compute_angle_local.html, "angmom/chunk"_compute_angmom_chunk.html, "body/local"_compute_body_local.html, "bond"_compute_bond.html, "bond/local"_compute_bond_local.html, "centro/atom"_compute_centro_atom.html, "chunk/atom"_compute_chunk_atom.html, "cluster/atom"_compute_cluster_atom.html, "cna/atom"_compute_cna_atom.html, "com"_compute_com.html, "com/chunk"_compute_com_chunk.html, "contact/atom"_compute_contact_atom.html, "coord/atom"_compute_coord_atom.html, "damage/atom"_compute_damage_atom.html, "dihedral"_compute_dihedral.html, "dihedral/local"_compute_dihedral_local.html, "dilatation/atom"_compute_dilatation_atom.html, "dipole/chunk"_compute_dipole_chunk.html, "displace/atom"_compute_displace_atom.html, "erotate/asphere"_compute_erotate_asphere.html, "erotate/rigid"_compute_erotate_rigid.html, "erotate/sphere"_compute_erotate_sphere.html, "erotate/sphere/atom"_compute_erotate_sphere_atom.html, "event/displace"_compute_event_displace.html, "global/atom"_compute_global_atom.html, "group/group"_compute_group_group.html, "gyration"_compute_gyration.html, "gyration/chunk"_compute_gyration_chunk.html, "heat/flux"_compute_heat_flux.html, "hexorder/atom"_compute_hexorder_atom.html, "improper"_compute_improper.html, "improper/local"_compute_improper_local.html, "inertia/chunk"_compute_inertia_chunk.html, "ke"_compute_ke.html, "ke/atom"_compute_ke_atom.html, "ke/rigid"_compute_ke_rigid.html, "msd"_compute_msd.html, "msd/chunk"_compute_msd_chunk.html, "msd/nongauss"_compute_msd_nongauss.html, "omega/chunk"_compute_omega_chunk.html, "orientorder/atom"_compute_orientorder_atom.html, "pair"_compute_pair.html, "pair/local"_compute_pair_local.html, "pe"_compute_pe.html, "pe/atom"_compute_pe_atom.html, "plasticity/atom"_compute_plasticity_atom.html, "pressure"_compute_pressure.html, "property/atom"_compute_property_atom.html, "property/local"_compute_property_local.html, "property/chunk"_compute_property_chunk.html, "rdf"_compute_rdf.html, "reduce"_compute_reduce.html, "reduce/region"_compute_reduce.html, "rigid/local"_compute_rigid_local.html, "slice"_compute_slice.html, "sna/atom"_compute_sna_atom.html, "snad/atom"_compute_sna_atom.html, "snav/atom"_compute_sna_atom.html, "stress/atom"_compute_stress_atom.html, "temp (k)"_compute_temp.html, "temp/asphere"_compute_temp_asphere.html, "temp/body"_compute_temp_body.html, "temp/chunk"_compute_temp_chunk.html, "temp/com"_compute_temp_com.html, "temp/deform"_compute_temp_deform.html, "temp/partial"_compute_temp_partial.html, "temp/profile"_compute_temp_profile.html, "temp/ramp"_compute_temp_ramp.html, "temp/region"_compute_temp_region.html, "temp/sphere"_compute_temp_sphere.html, "ti"_compute_ti.html, "torque/chunk"_compute_torque_chunk.html, "vacf"_compute_vacf.html, "vcm/chunk"_compute_vcm_chunk.html, "voronoi/atom"_compute_voronoi_atom.html :tb(c=6,ea=c) These are additional compute styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "ackland/atom"_compute_ackland_atom.html, "basal/atom"_compute_basal_atom.html, "dpd"_compute_dpd.html, "dpd/atom"_compute_dpd_atom.html, "fep"_compute_fep.html, "force/tally"_compute_tally.html, "heat/flux/tally"_compute_tally.html, "ke/eff"_compute_ke_eff.html, "ke/atom/eff"_compute_ke_atom_eff.html, "meso/e/atom"_compute_meso_e_atom.html, "meso/rho/atom"_compute_meso_rho_atom.html, "meso/t/atom"_compute_meso_t_atom.html, "pe/tally"_compute_tally.html, "pe/mol/tally"_compute_tally.html, "saed"_compute_saed.html, "smd/contact/radius"_compute_smd_contact_radius.html, "smd/damage"_compute_smd_damage.html, "smd/hourglass/error"_compute_smd_hourglass_error.html, "smd/internal/energy"_compute_smd_internal_energy.html, "smd/plastic/strain"_compute_smd_plastic_strain.html, "smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html, "smd/rho"_compute_smd_rho.html, "smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html, "smd/tlsph/dt"_compute_smd_tlsph_dt.html, "smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html, "smd/tlsph/shape"_compute_smd_tlsph_shape.html, "smd/tlsph/strain"_compute_smd_tlsph_strain.html, "smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html, "smd/tlsph/stress"_compute_smd_tlsph_stress.html, "smd/triangle/mesh/vertices"_compute_smd_triangle_mesh_vertices.html, "smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html, "smd/ulsph/strain"_compute_smd_ulsph_strain.html, "smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html, "smd/ulsph/stress"_compute_smd_ulsph_stress.html, "smd/vol"_compute_smd_vol.html, "stress/tally"_compute_tally.html, "temp/drude"_compute_temp_drude.html, "temp/eff"_compute_temp_eff.html, "temp/deform/eff"_compute_temp_deform_eff.html, "temp/region/eff"_compute_temp_region_eff.html, "temp/rotate"_compute_temp_rotate.html, "xrd"_compute_xrd.html :tb(c=6,ea=c) :line Pair_style potentials :h4 See the "pair_style"_pair_style.html command for an overview of pair potentials. Click on the style itself for a full description. Many of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_pair_none.html, "zero"_pair_zero.html, "hybrid"_pair_hybrid.html, "hybrid/overlay"_pair_hybrid.html, "adp (o)"_pair_adp.html, "airebo (o)"_pair_airebo.html, "airebo/morse (o)"_pair_airebo.html, "beck (go)"_pair_beck.html, "body"_pair_body.html, "bop"_pair_bop.html, "born (go)"_pair_born.html, "born/coul/dsf"_pair_born.html, "born/coul/dsf/cs"_pair_born.html, "born/coul/long (go)"_pair_born.html, "born/coul/long/cs"_pair_born.html, "born/coul/msm (o)"_pair_born.html, "born/coul/wolf (go)"_pair_born.html, "brownian (o)"_pair_brownian.html, "brownian/poly (o)"_pair_brownian.html, "buck (gkio)"_pair_buck.html, "buck/coul/cut (gkio)"_pair_buck.html, "buck/coul/long (gkio)"_pair_buck.html, "buck/coul/long/cs"_pair_buck.html, "buck/coul/msm (o)"_pair_buck.html, "buck/long/coul/long (o)"_pair_buck_long.html, "colloid (go)"_pair_colloid.html, "comb (o)"_pair_comb.html, "comb3"_pair_comb.html, "coul/cut (gko)"_pair_coul.html, "coul/debye (gko)"_pair_coul.html, "coul/dsf (gko)"_pair_coul.html, "coul/long (gko)"_pair_coul.html, "coul/long/cs"_pair_coul.html, "coul/msm"_pair_coul.html, "coul/streitz"_pair_coul.html, "coul/wolf (ko)"_pair_coul.html, "dpd (go)"_pair_dpd.html, "dpd/tstat (go)"_pair_dpd.html, "dsmc"_pair_dsmc.html, "eam (gkiot)"_pair_eam.html, "eam/alloy (gkot)"_pair_eam.html, "eam/fs (gkot)"_pair_eam.html, "eim (o)"_pair_eim.html, "gauss (go)"_pair_gauss.html, "gayberne (gio)"_pair_gayberne.html, "gran/hertz/history (o)"_pair_gran.html, "gran/hooke (o)"_pair_gran.html, "gran/hooke/history (o)"_pair_gran.html, "gw"_pair_gw.html, "gw/zbl"_pair_gw.html, "hbond/dreiding/lj (o)"_pair_hbond_dreiding.html, "hbond/dreiding/morse (o)"_pair_hbond_dreiding.html, "kim"_pair_kim.html, "lcbop"_pair_lcbop.html, "line/lj"_pair_line_lj.html, "lj/charmm/coul/charmm (ko)"_pair_charmm.html, "lj/charmm/coul/charmm/implicit (ko)"_pair_charmm.html, "lj/charmm/coul/long (giko)"_pair_charmm.html, "lj/charmm/coul/msm"_pair_charmm.html, "lj/charmmfsw/coul/charmmfsh"_pair_charmm.html, "lj/charmmfsw/coul/long"_pair_charmm.html, "lj/class2 (gko)"_pair_class2.html, "lj/class2/coul/cut (ko)"_pair_class2.html, "lj/class2/coul/long (gko)"_pair_class2.html, "lj/cubic (go)"_pair_lj_cubic.html, "lj/cut (gikot)"_pair_lj.html, "lj/cut/coul/cut (gko)"_pair_lj.html, "lj/cut/coul/debye (gko)"_pair_lj.html, "lj/cut/coul/dsf (gko)"_pair_lj.html, "lj/cut/coul/long (gikot)"_pair_lj.html, "lj/cut/coul/long/cs"_pair_lj.html, "lj/cut/coul/msm (go)"_pair_lj.html, "lj/cut/dipole/cut (go)"_pair_dipole.html, "lj/cut/dipole/long"_pair_dipole.html, "lj/cut/tip4p/cut (o)"_pair_lj.html, "lj/cut/tip4p/long (ot)"_pair_lj.html, "lj/expand (gko)"_pair_lj_expand.html, "lj/gromacs (gko)"_pair_gromacs.html, "lj/gromacs/coul/gromacs (ko)"_pair_gromacs.html, "lj/long/coul/long (o)"_pair_lj_long.html, "lj/long/dipole/long"_pair_dipole.html, "lj/long/tip4p/long"_pair_lj_long.html, "lj/smooth (o)"_pair_lj_smooth.html, "lj/smooth/linear (o)"_pair_lj_smooth_linear.html, "lj96/cut (go)"_pair_lj96.html, "lubricate (o)"_pair_lubricate.html, "lubricate/poly (o)"_pair_lubricate.html, "lubricateU"_pair_lubricateU.html, "lubricateU/poly"_pair_lubricateU.html, "meam"_pair_meam.html, "mie/cut (o)"_pair_mie.html, "morse (gkot)"_pair_morse.html, "nb3b/harmonic (o)"_pair_nb3b_harmonic.html, "nm/cut (o)"_pair_nm.html, "nm/cut/coul/cut (o)"_pair_nm.html, "nm/cut/coul/long (o)"_pair_nm.html, "peri/eps"_pair_peri.html, "peri/lps (o)"_pair_peri.html, "peri/pmb (o)"_pair_peri.html, "peri/ves"_pair_peri.html, "polymorphic"_pair_polymorphic.html, "reax"_pair_reax.html, "rebo (o)"_pair_airebo.html, "resquared (go)"_pair_resquared.html, "snap"_pair_snap.html, "soft (go)"_pair_soft.html, "sw (gkio)"_pair_sw.html, "table (gko)"_pair_table.html, "tersoff (gkio)"_pair_tersoff.html, "tersoff/mod (gko)"_pair_tersoff_mod.html, "tersoff/mod/c (o)"_pair_tersoff_mod.html, "tersoff/zbl (gko)"_pair_tersoff_zbl.html, "tip4p/cut (o)"_pair_coul.html, "tip4p/long (o)"_pair_coul.html, "tri/lj"_pair_tri_lj.html, "vashishta (ko)"_pair_vashishta.html, "vashishta/table (o)"_pair_vashishta.html, "yukawa (go)"_pair_yukawa.html, "yukawa/colloid (go)"_pair_yukawa_colloid.html, "zbl (go)"_pair_zbl.html :tb(c=4,ea=c) These are additional pair styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "agni (o)"_pair_agni.html, "awpmd/cut"_pair_awpmd.html, "buck/mdf"_pair_mdf.html, "coul/cut/soft (o)"_pair_lj_soft.html, "coul/diel (o)"_pair_coul_diel.html, "coul/long/soft (o)"_pair_lj_soft.html, "dpd/fdt"_pair_dpd_fdt.html, "dpd/fdt/energy"_pair_dpd_fdt.html, "eam/cd (o)"_pair_eam.html, "edip (o)"_pair_edip.html, +"edip/multi"_pair_edip.html, "eff/cut"_pair_eff.html, "exp6/rx"_pair_exp6_rx.html, "gauss/cut"_pair_gauss.html, "kolmogorov/crespi/z"_pair_kolmogorov_crespi_z.html, "lennard/mdf"_pair_mdf.html, "list"_pair_list.html, "lj/charmm/coul/long/soft (o)"_pair_charmm.html, "lj/cut/coul/cut/soft (o)"_pair_lj_soft.html, "lj/cut/coul/long/soft (o)"_pair_lj_soft.html, "lj/cut/dipole/sf (go)"_pair_dipole.html, "lj/cut/soft (o)"_pair_lj_soft.html, "lj/cut/thole/long (o)"_pair_thole.html, "lj/cut/tip4p/long/soft (o)"_pair_lj_soft.html, "lj/mdf"_pair_mdf.html, "lj/sdk (gko)"_pair_sdk.html, "lj/sdk/coul/long (go)"_pair_sdk.html, "lj/sdk/coul/msm (o)"_pair_sdk.html, "lj/sf (o)"_pair_lj_sf.html, "meam/spline (o)"_pair_meam_spline.html, "meam/sw/spline"_pair_meam_sw_spline.html, "mgpt"_pair_mgpt.html, "momb"_pair_momb.html, "morse/smooth/linear"_pair_morse.html, "morse/soft"_pair_morse.html, "multi/lucy"_pair_multi_lucy.html, "multi/lucy/rx"_pair_multi_lucy_rx.html, "oxdna/coaxstk"_pair_oxdna.html, "oxdna/excv"_pair_oxdna.html, "oxdna/hbond"_pair_oxdna.html, "oxdna/stk"_pair_oxdna.html, "oxdna/xstk"_pair_oxdna.html, "oxdna2/coaxstk"_pair_oxdna2.html, "oxdna2/dh"_pair_oxdna2.html, "oxdna2/excv"_pair_oxdna2.html, "oxdna2/stk"_pair_oxdna2.html, "quip"_pair_quip.html, "reax/c (k)"_pair_reaxc.html, "smd/hertz"_pair_smd_hertz.html, "smd/tlsph"_pair_smd_tlsph.html, "smd/triangulated/surface"_pair_smd_triangulated_surface.html, "smd/ulsph"_pair_smd_ulsph.html, "smtbq"_pair_smtbq.html, "sph/heatconduction"_pair_sph_heatconduction.html, "sph/idealgas"_pair_sph_idealgas.html, "sph/lj"_pair_sph_lj.html, "sph/rhosum"_pair_sph_rhosum.html, "sph/taitwater"_pair_sph_taitwater.html, "sph/taitwater/morris"_pair_sph_taitwater_morris.html, "srp"_pair_srp.html, "table/rx"_pair_table_rx.html, "tersoff/table (o)"_pair_tersoff.html, "thole"_pair_thole.html, "tip4p/long/soft (o)"_pair_lj_soft.html :tb(c=4,ea=c) :line Bond_style potentials :h4 See the "bond_style"_bond_style.html command for an overview of bond potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_bond_none.html, "zero"_bond_zero.html, "hybrid"_bond_hybrid.html, "class2 (ko)"_bond_class2.html, "fene (iko)"_bond_fene.html, "fene/expand (o)"_bond_fene_expand.html, "harmonic (ko)"_bond_harmonic.html, "morse (o)"_bond_morse.html, "nonlinear (o)"_bond_nonlinear.html, "quartic (o)"_bond_quartic.html, "table (o)"_bond_table.html :tb(c=4,ea=c) These are additional bond styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "harmonic/shift (o)"_bond_harmonic_shift.html, "harmonic/shift/cut (o)"_bond_harmonic_shift_cut.html, "oxdna/fene"_bond_oxdna.html, "oxdna2/fene"_bond_oxdna.html :tb(c=4,ea=c) :line Angle_style potentials :h4 See the "angle_style"_angle_style.html command for an overview of angle potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_angle_none.html, "zero"_angle_zero.html, "hybrid"_angle_hybrid.html, "charmm (ko)"_angle_charmm.html, "class2 (ko)"_angle_class2.html, "cosine (o)"_angle_cosine.html, "cosine/delta (o)"_angle_cosine_delta.html, "cosine/periodic (o)"_angle_cosine_periodic.html, "cosine/squared (o)"_angle_cosine_squared.html, "harmonic (iko)"_angle_harmonic.html, "table (o)"_angle_table.html :tb(c=4,ea=c) These are additional angle styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "cosine/shift (o)"_angle_cosine_shift.html, "cosine/shift/exp (o)"_angle_cosine_shift_exp.html, "dipole (o)"_angle_dipole.html, "fourier (o)"_angle_fourier.html, "fourier/simple (o)"_angle_fourier_simple.html, "quartic (o)"_angle_quartic.html, "sdk"_angle_sdk.html :tb(c=4,ea=c) :line Dihedral_style potentials :h4 See the "dihedral_style"_dihedral_style.html command for an overview of dihedral potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_dihedral_none.html, "zero"_dihedral_zero.html, "hybrid"_dihedral_hybrid.html, "charmm (ko)"_dihedral_charmm.html, "charmmfsw"_dihedral_charmm.html, "class2 (ko)"_dihedral_class2.html, "harmonic (io)"_dihedral_harmonic.html, "helix (o)"_dihedral_helix.html, "multi/harmonic (o)"_dihedral_multi_harmonic.html, "opls (iko)"_dihedral_opls.html :tb(c=4,ea=c) These are additional dihedral styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "cosine/shift/exp (o)"_dihedral_cosine_shift_exp.html, "fourier (o)"_dihedral_fourier.html, "nharmonic (o)"_dihedral_nharmonic.html, "quadratic (o)"_dihedral_quadratic.html, "spherical (o)"_dihedral_spherical.html, "table (o)"_dihedral_table.html :tb(c=4,ea=c) :line Improper_style potentials :h4 See the "improper_style"_improper_style.html command for an overview of improper potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_improper_none.html, "zero"_improper_zero.html, "hybrid"_improper_hybrid.html, "class2 (ko)"_improper_class2.html, "cvff (io)"_improper_cvff.html, "harmonic (ko)"_improper_harmonic.html, "umbrella (o)"_improper_umbrella.html :tb(c=4,ea=c) These are additional improper styles in USER packages, which can be used if "LAMMPS is built with the appropriate package"_Section_start.html#start_3. "cossq (o)"_improper_cossq.html, "distance"_improper_distance.html, "fourier (o)"_improper_fourier.html, "ring (o)"_improper_ring.html :tb(c=4,ea=c) :line Kspace solvers :h4 See the "kspace_style"_kspace_style.html command for an overview of Kspace solvers. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "ewald (o)"_kspace_style.html, "ewald/disp"_kspace_style.html, "msm (o)"_kspace_style.html, "msm/cg (o)"_kspace_style.html, "pppm (go)"_kspace_style.html, "pppm/cg (o)"_kspace_style.html, "pppm/disp"_kspace_style.html, "pppm/disp/tip4p"_kspace_style.html, "pppm/stagger"_kspace_style.html, "pppm/tip4p (o)"_kspace_style.html :tb(c=4,ea=c) diff --git a/doc/src/pair_edip.txt b/doc/src/pair_edip.txt index cdfc26575..d0c90d76d 100644 --- a/doc/src/pair_edip.txt +++ b/doc/src/pair_edip.txt @@ -1,167 +1,171 @@ "LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c :link(lws,http://lammps.sandia.gov) :link(ld,Manual.html) :link(lc,Section_commands.html#comm) :line pair_style edip command :h3 [Syntax:] pair_style edip :pre pair_style edip/omp :pre +pair_style edip/multi :pre [Examples:] pair_style edip pair_coeff * * Si.edip Si [Description:] -The {edip} style computes a 3-body "EDIP"_#EDIP potential which is -popular for modeling silicon materials where it can have advantages -over other models such as the "Stillinger-Weber"_pair_sw.html or -"Tersoff"_pair_tersoff.html potentials. In EDIP, the energy E of a -system of atoms is +The {edip} and {edip/multi} styles compute a 3-body "EDIP"_#EDIP +potential which is popular for modeling silicon materials where +it can have advantages over other models such as the +"Stillinger-Weber"_pair_sw.html or "Tersoff"_pair_tersoff.html +potentials. The {edip} style has been programmed for single element +potentials, while {edip/multi} supports multi-element EDIP runs. + +In EDIP, the energy E of a system of atoms is :c,image(Eqs/pair_edip.jpg) where phi2 is a two-body term and phi3 is a three-body term. The summations in the formula are over all neighbors J and K of atom I within a cutoff distance = a. Both terms depend on the local environment of atom I through its effective coordination number defined by Z, which is unity for a cutoff distance < c and gently goes to 0 at distance = a. Only a single pair_coeff command is used with the {edip} style which specifies a EDIP potential file with parameters for all needed elements. These are mapped to LAMMPS atom types by specifying N additional arguments after the filename in the pair_coeff command, where N is the number of LAMMPS atom types: filename N element names = mapping of EDIP elements to atom types :ul See the "pair_coeff"_pair_coeff.html doc page for alternate ways to specify the path for the potential file. As an example, imagine a file Si.edip has EDIP values for Si. EDIP files in the {potentials} directory of the LAMMPS distribution have a ".edip" suffix. Lines that are not blank or comments (starting with #) define parameters for a triplet of elements. The parameters in a single entry correspond to the two-body and three-body coefficients in the formula above: element 1 (the center atom in a 3-body interaction) element 2 element 3 A (energy units) B (distance units) cutoffA (distance units) cutoffC (distance units) alpha beta eta gamma (distance units) lambda (energy units) mu tho sigma (distance units) Q0 u1 u2 u3 u4 :ul The A, B, beta, sigma parameters are used only for two-body interactions. The eta, gamma, lambda, mu, Q0 and all u1 to u4 parameters are used only for three-body interactions. The alpha and cutoffC parameters are used for the coordination environment function only. The EDIP potential file must contain entries for all the elements listed in the pair_coeff command. It can also contain entries for additional elements not being used in a particular simulation; LAMMPS ignores those entries. For a single-element simulation, only a single entry is required (e.g. SiSiSi). For a two-element simulation, the file must contain 8 entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that specify EDIP parameters for all permutations of the two elements interacting in three-body configurations. Thus for 3 elements, 27 entries would be required, etc. At the moment, only a single element parametrization is implemented. However, the author is not aware of other multi-element EDIP parameterization. If you know any and you are interest in that, please contact the author of the EDIP package. :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section 5"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, USER-OMP and OPT packages, respectively. They are only enabled if LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the "-suffix command-line switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can use the "suffix"_suffix.html command in your input script. See "Section 5"_Section_accelerate.html of the manual for more instructions on how to use the accelerated styles effectively. :line [Mixing, shift, table, tail correction, restart, rRESPA info]: This pair style does not support the "pair_modify"_pair_modify.html shift, table, and tail options. This pair style does not write its information to "binary restart files"_restart.html, since it is stored in potential files. Thus, you need to re-specify the pair_style and pair_coeff commands in an input script that reads a restart file. This pair style can only be used via the {pair} keyword of the "run_style respa"_run_style.html command. It does not support the {inner}, {middle}, {outer} keywords. :line [Restrictions:] -This angle style can only be used if LAMMPS was built with the +This pair style can only be used if LAMMPS was built with the USER-MISC package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info on packages. This pair style requires the "newton"_newton.html setting to be "on" for pair interactions. The EDIP potential files provided with LAMMPS (see the potentials directory) are parameterized for metal "units"_units.html. -You can use the SW potential with any LAMMPS units, but you would need +You can use the EDIP potential with any LAMMPS units, but you would need to create your own EDIP potential file with coefficients listed in the appropriate units if your simulation doesn't use "metal" units. [Related commands:] "pair_coeff"_pair_coeff.html [Default:] none :line :link(EDIP) [(EDIP)] J. F. Justo et al., Phys. Rev. B 58, 2539 (1998). diff --git a/examples/USER/misc/edip/Si.edip b/examples/USER/misc/edip/Si.edip new file mode 100644 index 000000000..b3b960e73 --- /dev/null +++ b/examples/USER/misc/edip/Si.edip @@ -0,0 +1,26 @@ +# DATE: 2011-09-15 CONTRIBUTOR: Unknown CITATION: Justo, Bazant, Kaxiras, Bulatov and Yip, Phys Rev B, 58, 2539 (1998) + +# EDIP parameters for various elements and mixtures +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# these entries are in LAMMPS "metal" units + +# format of a single entry (one or more lines) +# +# element 1, element 2, element 3, +# A B cutoffA cutoffC alpha beta eta +# gamma lambda mu rho sigma Q0 +# u1 u2 u3 u4 +# +# units for each parameters: +# A , lambda are in eV +# B, cutoffA, cutoffC, gamma, sigma are in Angstrom +# alpha, beta, eta, mu, rho, Q0, u1-u4 are pure numbers + +# Here are the original parameters in metal units, for Silicon from: +# J. F. Justo, M. Z. Bazant, E. Kaxiras, V. V. Bulatov, S. Yip +# Phys. Rev. B 58, 2539 (1998) +# + +Si Si Si 7.9821730 1.5075463 3.1213820 2.5609104 3.1083847 0.0070975 0.2523244 + 1.1247945 1.4533108 0.6966326 1.2085196 0.5774108 312.1341346 + -0.165799 32.557 0.286198 0.66 diff --git a/examples/USER/misc/edip/SiC.edip b/examples/USER/misc/edip/SiC.edip new file mode 100644 index 000000000..0485d345b --- /dev/null +++ b/examples/USER/misc/edip/SiC.edip @@ -0,0 +1,38 @@ +# DATE: 2017-05-16 CONTRIBUTOR: Laurent Pizzagalli CITATION: G. Lucas, M. Bertolus, and L. Pizzagalli, J. Phys. : Condens. Matter 22, 035802 (2010) +# element 1, element 2, element 3, +# A B cutoffA cutoffC alpha beta eta +# gamma lambda mu rho sigma Q0 +# u1 u2 u3 u4 +# +Si Si Si 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.589390 + 1.135256 2.417497 0.629131 1.343679 0.298443 208.924548 + -0.165799 32.557 0.286198 0.66 + +C C C 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.275605 + 1.084183 3.633621 0.594236 2.827634 0.536561 289.305617 + -0.165799 32.557 0.286198 0.66 + +C Si Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497 + 1.191567 3.025559 0.611684 2.061835 0.423863 249.115082 + -0.165799 32.557000 0.286198 0.660000 + +Si C C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497 + 1.191567 3.025559 0.611684 2.061835 0.423863 249.115082 + -0.165799 32.557000 0.286198 0.660000 + +Si Si C 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.510944 + 1.135256 2.721528 0.620407 1.343679 0.298443 229.019815 + -0.165799 32.557000 0.286198 0.660000 + +Si C Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.510944 + 1.191567 2.721528 0.620407 2.061835 0.423863 229.019815 + -0.165799 32.557000 0.286198 0.660000 + +C C Si 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.354051 + 1.084183 3.329590 0.602960 2.827634 0.536561 269.210350 + -0.165799 32.557000 0.286198 0.660000 + +C Si C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.354051 + 1.191567 3.329590 0.602960 2.061835 0.423863 269.210350 + -0.165799 32.557000 0.286198 0.660000 + diff --git a/examples/USER/misc/edip/data.SiC b/examples/USER/misc/edip/data.SiC new file mode 100644 index 000000000..fa50c1480 --- /dev/null +++ b/examples/USER/misc/edip/data.SiC @@ -0,0 +1,138 @@ +Position data for Silicon-Carbon system + + 128 atoms + 2 atom types + -6.00 5.97232152 xlo xhi + -6.00 5.97232152 ylo yhi + -6.00 5.97232152 zlo zhi + + Atoms + +1 2 -2.9378454 -4.4592615 -4.8109196 +2 2 5.6222143 -2.7335026 -1.7157569 +3 2 -2.6614623 -5.5431059 1.6353686 +4 2 -5.4326838 -4.6174577 5.9452279 +5 2 5.8679239 -0.1120535 -3.5839373 +6 2 -3.7174621 -0.6623311 -0.3714789 +7 2 -5.0724728 -2.5671623 4.4103461 +8 2 -3.3951436 0.9341126 4.9310702 +9 2 -5.4347593 1.9523767 -5.6180938 +10 2 -4.5884719 2.2904528 -1.0597739 +11 2 -5.9058662 0.6212406 2.0127574 +12 2 -4.7680660 0.1965740 4.3267764 +13 2 -5.4228882 5.2569673 -4.5162920 +14 2 -5.2683965 -5.9193658 -2.8648668 +15 2 -2.8610884 1.0484664 2.0299077 +16 2 -4.0711084 5.3133026 3.8009514 +17 2 -0.1947147 -4.1677696 -5.6950931 +18 2 -2.9892710 -3.1647368 -1.6173910 +19 2 -0.9129311 -4.3819066 -0.1601859 +20 2 -2.4513693 -5.2466501 4.8882912 +21 2 -2.8879952 -0.1633446 -3.3401150 +22 1 -4.6738762 -1.3807254 -2.2946777 +23 2 -0.6973948 -1.4885343 0.6005156 +24 1 -2.7392164 -2.4774843 0.2387186 +25 2 -2.6551254 -2.7229952 2.6350264 +26 1 -3.4644263 -4.6028144 3.3817786 +27 2 0.7227614 -2.0709446 2.9214737 +28 1 -2.1000577 -3.2131296 5.7273437 +29 2 -3.1057649 2.3204819 -2.2725622 +30 1 -2.2298751 0.7168389 -1.3107201 +31 2 -1.8698261 1.4006751 0.7265108 +32 1 -4.1103409 -0.7093340 1.9341753 +33 2 -0.3505581 3.2707182 -0.2880656 +34 1 -3.4045407 -1.4383961 4.3903527 +35 2 -3.0940529 1.4132478 -5.3635505 +36 1 -4.4560663 1.2072875 -3.7310176 +37 2 -2.6061002 4.6373499 -4.6903941 +38 1 -3.3477444 4.6768137 -2.6284678 +39 2 0.8121697 4.8602418 -4.6710946 +40 1 -2.5756922 3.3740738 -0.2136350 +41 2 -0.3867976 5.8745611 -2.1119905 +42 1 -1.6766249 1.3374292 3.8741477 +43 2 -0.8770613 3.3735941 4.3846975 +44 1 -1.8609254 3.3158245 -5.9786556 +45 1 -5.2732321 -4.6073253 -0.9581754 +46 1 -2.7888697 -5.6910152 -0.7922023 +47 1 -2.4717165 4.5801880 2.5083210 +48 1 -3.8819950 5.8456589 -5.7563384 +49 2 2.2314782 -2.7729214 -5.2356862 +50 2 0.2981976 -3.1385279 -3.1608167 +51 2 2.8810785 -3.4658695 -0.5823196 +52 2 0.2509625 -5.7595229 2.7389761 +53 2 -0.2934120 -0.8029431 -3.3698507 +54 1 -1.0075690 -2.0481922 -1.9419298 +55 2 2.0729069 1.4922441 -2.3898096 +56 1 1.1110944 -3.2004208 0.9491078 +57 2 1.6774298 -0.7901860 2.5158773 +58 1 -0.8342297 -4.3342518 2.0971458 +59 2 3.2747406 -1.3107897 4.7884706 +60 1 1.7126246 -3.3691471 4.5581012 +61 2 0.4770605 1.7769008 -5.3339915 +62 1 0.2944391 0.5892781 -2.2030106 +63 2 2.2039275 3.1557557 -2.0276796 +64 1 -0.0404494 0.4767818 1.0396418 +65 2 1.1395867 2.3763443 2.3481007 +66 1 -0.9738374 -1.6325161 3.7538567 +67 2 -0.3291998 0.2996990 5.2770809 +68 1 -1.6185604 -0.3964274 -5.1771220 +69 2 2.5999949 -5.1977715 5.8230717 +70 1 -1.6270675 2.3210900 -3.6299941 +71 2 3.6532700 4.9282597 -5.4319276 +72 1 0.0788934 4.0241037 -2.5011530 +73 2 2.8556507 2.6168653 2.1125546 +74 1 0.9738989 2.6255364 4.3412121 +75 2 3.7452938 3.4521356 4.5946426 +76 1 2.0805182 4.7039015 5.3280260 +77 1 -1.0324174 -5.8155041 -4.3265820 +78 1 0.7622442 -4.3631629 -1.3156572 +79 1 0.3263684 3.9937357 1.6172321 +80 1 -0.4350105 -5.7997058 4.5959134 +81 2 3.9161132 -4.6052788 -3.3191717 +82 2 1.9240657 5.7345079 -1.9754251 +83 2 -5.9794488 -4.2369359 1.8646522 +84 2 4.3339975 -4.4845227 5.3737440 +85 2 2.2755456 -0.6327737 -5.7931837 +86 1 1.8728190 -1.5504906 -3.4560010 +87 2 3.4558100 -1.1054068 -1.8333071 +88 1 4.3788172 -1.9466494 -0.3284637 +89 2 2.5999235 -3.7548996 2.5740569 +90 1 3.9983910 -4.4856603 1.1968663 +91 2 -5.7295580 -2.1475672 -5.9963645 +92 1 4.2664051 -2.6988975 -5.8005478 +93 2 4.5254685 2.2906832 -3.4765798 +94 1 2.3603088 1.3416442 -4.4173836 +95 2 4.7767057 1.4061217 -0.7524620 +96 1 1.8072666 -0.7835973 -0.4581995 +97 2 4.4745018 0.3736224 2.1068274 +98 1 3.6081170 -1.7315713 2.4019053 +99 2 4.6281423 -0.2865409 4.4756524 +100 1 1.7975239 0.2893530 4.2330830 +101 2 5.8341452 4.4986472 -5.9664541 +102 1 3.2401308 4.1655227 -3.5070029 +103 2 4.8720339 4.8709982 -2.3364366 +104 1 3.5526476 1.2262752 0.6926826 +105 2 -5.8173342 4.5420479 1.5578881 +106 1 3.9683224 1.5441137 3.8284375 +107 2 -5.5349308 1.9067049 3.7504113 +108 1 4.4728615 2.6415574 -5.5952809 +109 1 1.7000950 -4.8115440 -4.1953920 +110 1 1.7221527 4.1878404 -0.3712681 +111 1 3.9218156 4.5935583 1.3263407 +112 1 3.1310195 -5.8922481 3.6001155 +113 1 4.7558719 -2.2877771 -3.4742052 +114 1 -5.5050300 -2.7027381 0.8748867 +115 1 5.8418594 -4.6064370 3.8714113 +116 1 -4.7516868 -3.1691984 -4.4099768 +117 1 3.9404971 0.7188702 -2.2898786 +118 1 -5.6869740 0.2042380 -0.1916738 +119 1 5.8949589 -1.2422560 3.1201292 +120 1 5.9675804 -0.0712572 5.8964022 +121 1 -5.6208517 3.3600036 -2.9493510 +122 1 5.2065263 3.4517912 -0.3800894 +123 1 -4.6994522 2.5489583 1.8297431 +124 1 -4.0758407 3.0726196 5.0647973 +125 1 4.1587591 -5.0896820 -1.1443498 +126 1 -4.6963753 -5.7429833 1.1357818 +127 1 5.5994192 4.6887008 3.5948264 +128 1 5.0988369 -5.3774409 -4.9051267 diff --git a/examples/USER/misc/edip/in.edip-Si b/examples/USER/misc/edip/in.edip-Si new file mode 100644 index 000000000..b4c666962 --- /dev/null +++ b/examples/USER/misc/edip/in.edip-Si @@ -0,0 +1,72 @@ + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a & + a1 1.0 0.0 0.0 & + a2 0.0 1.0 0.0 & + a3 0.0 0.0 1.0 & + basis 0.0 0.0 0.0 & + basis 0.0 0.5 0.5 & + basis 0.5 0.0 0.5 & + basis 0.5 0.5 0.0 & + basis 0.25 0.25 0.25 & + basis 0.25 0.75 0.75 & + basis 0.75 0.25 0.75 & + basis 0.75 0.75 0.25 + +region myreg block 0 4 & + 0 4 & + 0 4 +create_box 1 myreg +create_atoms 1 region myreg + +mass 1 28.06 + +group Si type 1 + +velocity all create $t 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +delete_atoms group del + +pair_style edip +pair_coeff * * Si.edip Si + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 + diff --git a/examples/USER/misc/edip/in.edip-Si-multi b/examples/USER/misc/edip/in.edip-Si-multi new file mode 100644 index 000000000..73a2e0914 --- /dev/null +++ b/examples/USER/misc/edip/in.edip-Si-multi @@ -0,0 +1,72 @@ + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a & + a1 1.0 0.0 0.0 & + a2 0.0 1.0 0.0 & + a3 0.0 0.0 1.0 & + basis 0.0 0.0 0.0 & + basis 0.0 0.5 0.5 & + basis 0.5 0.0 0.5 & + basis 0.5 0.5 0.0 & + basis 0.25 0.25 0.25 & + basis 0.25 0.75 0.75 & + basis 0.75 0.25 0.75 & + basis 0.75 0.75 0.25 + +region myreg block 0 4 & + 0 4 & + 0 4 +create_box 1 myreg +create_atoms 1 region myreg + +mass 1 28.06 + +group Si type 1 + +velocity all create $t 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +delete_atoms group del + +pair_style edip/multi +pair_coeff * * Si.edip Si + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 + diff --git a/examples/USER/misc/edip/in.edip-SiC b/examples/USER/misc/edip/in.edip-SiC new file mode 100644 index 000000000..ac95f6c4d --- /dev/null +++ b/examples/USER/misc/edip/in.edip-SiC @@ -0,0 +1,33 @@ +# Test of MEAM potential for SiC system + +units metal +boundary p p p + +atom_style atomic + +read_data data.SiC + +pair_style edip/multi +pair_coeff * * SiC.edip Si C + +mass 1 28.085 +mass 2 12.001 + +neighbor 1.0 bin +neigh_modify delay 1 + +fix 1 all nve +thermo 10 +timestep 0.001 + +#dump 1 all atom 50 dump.meam + +#dump 2 all image 10 image.*.jpg element element & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 element Si C + +#dump 3 all movie 10 movie.mpg element element & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 element Si C + +run 100 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.1 b/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.1 new file mode 100644 index 000000000..ab7d33902 --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.1 @@ -0,0 +1,167 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 + +pair_style edip/multi +pair_coeff * * Si.edip Si +Reading potential file Si.edip with DATE: 2011-09-15 + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.12138 + ghost atom cutoff = 4.12138 + binsize = 2.06069, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip/multi, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.979 | 2.979 | 2.979 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1802.5039 -2372.6618 0 -2253.8359 12261.807 + 10 952.62744 -2316.428 0 -2253.6283 723.08194 + 20 549.13801 -2289.442 0 -2253.2413 -2444.5204 + 30 1047.0106 -2321.1523 0 -2252.1305 9013.201 + 40 663.46141 -2294.2083 0 -2250.4711 2942.5348 + 50 504.74535 -2282.849 0 -2249.5748 -461.44909 + 60 1019.2173 -2315.5639 0 -2248.3744 7706.4286 + 70 844.51195 -2302.5251 0 -2246.8526 3116.8302 + 80 814.90407 -2299.3372 0 -2245.6166 794.77455 + 90 1269.5636 -2327.4775 0 -2243.7845 7729.3968 + 100 977.61563 -2306.1118 0 -2241.6647 2969.9939 + 110 843.08539 -2295.6547 0 -2240.0763 1393.4039 + 120 1161.6968 -2314.6587 0 -2238.0766 7398.3492 + 130 918.19451 -2296.4321 0 -2235.9022 2537.3997 + 140 881.42548 -2292.2768 0 -2234.1709 1550.3339 + 150 1231.1005 -2313.1054 0 -2231.9479 8112.7566 + 160 967.01862 -2293.332 0 -2229.5836 3422.9627 + 170 833.51248 -2282.7489 0 -2227.8015 43.991459 + 180 1240.8488 -2307.3633 0 -2225.5632 6557.8651 + 190 1126.4621 -2297.1922 0 -2222.9328 4289.0067 + 200 947.59571 -2283.29 0 -2220.822 586.2811 + 210 1228.153 -2299.4702 0 -2218.5071 5315.0425 + 220 1215.4104 -2295.9408 0 -2215.8176 4870.3417 + 230 1112.436 -2286.7552 0 -2213.4204 2527.1879 + 240 1300.081 -2296.6013 0 -2210.8965 5738.3708 + 250 1192.5738 -2286.8463 0 -2208.2286 4076.49 + 260 1004.7055 -2272.1753 0 -2205.9424 359.37589 + 270 1241.2018 -2285.3632 0 -2203.5399 4160.5763 + 280 1360.1974 -2290.325 0 -2200.6572 5802.3902 + 290 1151.9365 -2273.9467 0 -2198.008 1418.8887 + 300 1174.3518 -2273.0089 0 -2195.5925 1998.229 + 310 1329.2727 -2280.5049 0 -2192.8757 4721.7297 + 320 1284.4414 -2274.7519 0 -2190.0781 2985.4674 + 330 1328.3761 -2274.9545 0 -2187.3844 4543.2109 + 340 1446.3847 -2279.8693 0 -2184.5198 6254.4059 + 350 1366.2165 -2271.7475 0 -2181.6828 3637.8335 + 360 1358.9609 -2268.5982 0 -2179.0118 3049.5798 + 370 1552.208 -2278.4802 0 -2176.1545 6334.0058 + 380 1562.5295 -2276.1793 0 -2173.1732 5787.5547 + 390 1415.5498 -2263.7824 0 -2170.4655 3438.5766 + 400 1323.1568 -2255.1641 0 -2167.938 2427.2294 + 410 1260.7186 -2248.5373 0 -2165.4273 1208.6299 + 420 1282.1118 -2247.3718 0 -2162.8516 462.65374 + 430 1451.944 -2255.7551 0 -2160.0391 2037.8025 + 440 1568.9415 -2260.417 0 -2156.9882 3531.1602 + 450 1565.8262 -2257.2396 0 -2154.0162 2586.7886 + 460 1677.7143 -2261.7214 0 -2151.122 4112.9756 + 470 1762.9071 -2264.4244 0 -2148.2089 5053.2139 + 480 1704.5898 -2257.8678 0 -2145.4967 4077.4626 + 490 1731.2619 -2257.1048 0 -2142.9753 4710.5263 + 500 1723.9777 -2254.161 0 -2140.5118 4760.7295 +Loop time of 0.679564 on 1 procs for 500 steps with 511 atoms + +Performance: 63.570 ns/day, 0.378 hours/ns, 735.765 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.65181 | 0.65181 | 0.65181 | 0.0 | 95.92 +Neigh | 0.013857 | 0.013857 | 0.013857 | 0.0 | 2.04 +Comm | 0.0033884 | 0.0033884 | 0.0033884 | 0.0 | 0.50 +Output | 0.00070739 | 0.00070739 | 0.00070739 | 0.0 | 0.10 +Modify | 0.0083694 | 0.0083694 | 0.0083694 | 0.0 | 1.23 +Other | | 0.001432 | | | 0.21 + +Nlocal: 511 ave 511 max 511 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 845 ave 845 max 845 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 7902 ave 7902 max 7902 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7902 +Ave neighs/atom = 15.4638 +Neighbor list builds = 19 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.4 b/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.4 new file mode 100644 index 000000000..91be601fa --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-Si-multi.4 @@ -0,0 +1,167 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 + +pair_style edip/multi +pair_coeff * * Si.edip Si +Reading potential file Si.edip with DATE: 2011-09-15 + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.12138 + ghost atom cutoff = 4.12138 + binsize = 2.06069, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip/multi, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.955 | 2.955 | 2.955 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1802.3816 -2372.6618 0 -2253.844 12260.967 + 10 938.75954 -2315.5185 0 -2253.6329 558.21646 + 20 534.27233 -2288.4721 0 -2253.2514 -2710.768 + 30 1043.7796 -2320.9485 0 -2252.1398 8679.4381 + 40 658.0916 -2293.8597 0 -2250.4765 2165.3742 + 50 517.93009 -2283.7238 0 -2249.5805 -1124.9373 + 60 1063.3594 -2318.4409 0 -2248.3414 7277.8526 + 70 868.14006 -2304.0134 0 -2246.7832 2050.2848 + 80 826.37805 -2300.0187 0 -2245.5416 91.099408 + 90 1289.6772 -2328.7151 0 -2243.6961 8180.7423 + 100 976.36208 -2305.9371 0 -2241.5727 3614.0499 + 110 810.81713 -2293.4705 0 -2240.0193 1359.368 + 120 1165.707 -2314.9026 0 -2238.056 7336.45 + 130 929.81245 -2297.139 0 -2235.8432 2793.8451 + 140 804.47874 -2287.2074 0 -2234.174 704.92455 + 150 1182.4141 -2310.0266 0 -2232.0787 7822.2337 + 160 979.92391 -2294.2969 0 -2229.6977 3206.7458 + 170 830.14748 -2282.6079 0 -2227.8824 -296.87377 + 180 1271.1133 -2309.4274 0 -2225.6322 7199.614 + 190 1209.6006 -2302.6407 0 -2222.9006 5528.3784 + 200 954.67693 -2283.6621 0 -2220.7273 47.02795 + 210 1260.814 -2301.5582 0 -2218.442 4829.788 + 220 1274.9954 -2299.7285 0 -2215.6774 5518.0597 + 230 1048.0074 -2282.398 0 -2213.3106 1754.4144 + 240 1261.7072 -2294.1108 0 -2210.9356 5233.2712 + 250 1272.6178 -2292.0793 0 -2208.1849 4795.9325 + 260 989.14205 -2271.0278 0 -2205.8209 -820.1828 + 270 1212.0445 -2283.4212 0 -2203.52 3395.8634 + 280 1391.9572 -2292.3809 0 -2200.6194 6666.2451 + 290 1093.1204 -2270.0421 0 -2197.9807 206.94523 + 300 1159.4831 -2272.102 0 -2195.6657 778.53806 + 310 1407.3528 -2285.6228 0 -2192.8463 5223.048 + 320 1236.7163 -2271.5389 0 -2190.0113 1865.3943 + 330 1258.8275 -2270.4611 0 -2187.4758 2333.3209 + 340 1507.9519 -2283.9906 0 -2184.5824 6775.5456 + 350 1366.5116 -2271.7287 0 -2181.6446 3432.115 + 360 1305.2829 -2265.1092 0 -2179.0614 1498.4073 + 370 1581.4335 -2280.4645 0 -2176.2122 6518.5597 + 380 1589.5319 -2277.9428 0 -2173.1567 6334.6506 + 390 1402.6781 -2262.9323 0 -2170.464 3278.3038 + 400 1374.9587 -2258.5717 0 -2167.9307 3608.7284 + 410 1295.7416 -2250.7752 0 -2165.3565 1877.5222 + 420 1278.6727 -2247.1099 0 -2162.8164 1599.4181 + 430 1508.1328 -2259.4245 0 -2160.0044 4300.2224 + 440 1624.2957 -2263.9806 0 -2156.9026 4432.625 + 450 1597.3356 -2259.263 0 -2153.9624 3370.3816 + 460 1772.0922 -2267.9106 0 -2151.0895 5788.3214 + 470 1806.4047 -2267.304 0 -2148.221 5950.1166 + 480 1593.0406 -2250.7469 0 -2145.7294 2518.0576 + 490 1660.9767 -2252.894 0 -2143.398 4282.1643 + 500 1714.283 -2253.9295 0 -2140.9194 5740.0247 +Loop time of 0.205398 on 4 procs for 500 steps with 511 atoms + +Performance: 210.324 ns/day, 0.114 hours/ns, 2434.304 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.16285 | 0.1688 | 0.17446 | 1.1 | 82.18 +Neigh | 0.0035172 | 0.0036234 | 0.0038214 | 0.2 | 1.76 +Comm | 0.018727 | 0.024851 | 0.030996 | 2.9 | 12.10 +Output | 0.0013061 | 0.0014012 | 0.0015635 | 0.3 | 0.68 +Modify | 0.0046582 | 0.0048603 | 0.0050988 | 0.2 | 2.37 +Other | | 0.001861 | | | 0.91 + +Nlocal: 127.75 ave 131 max 124 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 433.75 ave 441 max 426 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1979.5 ave 2040 max 1895 min +Histogram: 1 0 0 0 1 0 0 0 0 2 + +Total # of neighbors = 7918 +Ave neighs/atom = 15.4951 +Neighbor list builds = 19 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-Si.1 b/examples/USER/misc/edip/log.4May2017.g++.edip-Si.1 new file mode 100644 index 000000000..f7ce00371 --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-Si.1 @@ -0,0 +1,167 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 + +pair_style edip +pair_coeff * * Si.edip Si +Reading potential file Si.edip with DATE: 2011-09-15 + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.12138 + ghost atom cutoff = 4.12138 + binsize = 2.06069, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.979 | 2.979 | 2.979 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1802.5039 -2372.6618 0 -2253.8359 12261.807 + 10 952.62744 -2316.428 0 -2253.6283 723.08283 + 20 549.138 -2289.442 0 -2253.2413 -2444.5194 + 30 1047.0106 -2321.1522 0 -2252.1305 9013.2015 + 40 663.46143 -2294.2083 0 -2250.4711 2942.5358 + 50 504.74533 -2282.849 0 -2249.5748 -461.44817 + 60 1019.2173 -2315.5639 0 -2248.3744 7706.429 + 70 844.51197 -2302.5251 0 -2246.8526 3116.8313 + 80 814.90406 -2299.3372 0 -2245.6165 794.77536 + 90 1269.5635 -2327.4775 0 -2243.7845 7729.3971 + 100 977.61566 -2306.1118 0 -2241.6647 2969.9952 + 110 843.08538 -2295.6547 0 -2240.0763 1393.4046 + 120 1161.6968 -2314.6587 0 -2238.0766 7398.3495 + 130 918.19453 -2296.4321 0 -2235.9022 2537.4011 + 140 881.42546 -2292.2768 0 -2234.1709 1550.3345 + 150 1231.1005 -2313.1054 0 -2231.9479 8112.7568 + 160 967.01865 -2293.332 0 -2229.5836 3422.964 + 170 833.51246 -2282.7489 0 -2227.8015 43.99251 + 180 1240.8487 -2307.3633 0 -2225.5632 6557.8652 + 190 1126.4621 -2297.1922 0 -2222.9328 4289.0083 + 200 947.5957 -2283.29 0 -2220.8219 586.28203 + 210 1228.153 -2299.4702 0 -2218.5071 5315.0427 + 220 1215.4104 -2295.9407 0 -2215.8176 4870.343 + 230 1112.436 -2286.7552 0 -2213.4204 2527.1887 + 240 1300.081 -2296.6013 0 -2210.8965 5738.3711 + 250 1192.5739 -2286.8463 0 -2208.2286 4076.4913 + 260 1004.7055 -2272.1753 0 -2205.9424 359.3769 + 270 1241.2018 -2285.3632 0 -2203.5399 4160.5764 + 280 1360.1974 -2290.325 0 -2200.6572 5802.3912 + 290 1151.9366 -2273.9467 0 -2198.008 1418.8905 + 300 1174.3518 -2273.0089 0 -2195.5925 1998.2297 + 310 1329.2726 -2280.5049 0 -2192.8757 4721.7304 + 320 1284.4414 -2274.7519 0 -2190.0781 2985.4687 + 330 1328.3761 -2274.9545 0 -2187.3844 4543.2115 + 340 1446.3847 -2279.8693 0 -2184.5198 6254.4071 + 350 1366.2165 -2271.7475 0 -2181.6828 3637.8351 + 360 1358.9609 -2268.5982 0 -2179.0118 3049.5811 + 370 1552.2079 -2278.4802 0 -2176.1545 6334.0061 + 380 1562.5295 -2276.1793 0 -2173.1731 5787.5565 + 390 1415.5498 -2263.7823 0 -2170.4655 3438.5782 + 400 1323.1568 -2255.1641 0 -2167.938 2427.2311 + 410 1260.7186 -2248.5373 0 -2165.4273 1208.6316 + 420 1282.1118 -2247.3718 0 -2162.8516 462.65508 + 430 1451.9439 -2255.7551 0 -2160.0391 2037.8027 + 440 1568.9415 -2260.417 0 -2156.9882 3531.1613 + 450 1565.8261 -2257.2396 0 -2154.0161 2586.7896 + 460 1677.7143 -2261.7214 0 -2151.122 4112.976 + 470 1762.9071 -2264.4244 0 -2148.2089 5053.2148 + 480 1704.5898 -2257.8678 0 -2145.4966 4077.4649 + 490 1731.2619 -2257.1048 0 -2142.9753 4710.5276 + 500 1723.9777 -2254.161 0 -2140.5118 4760.7316 +Loop time of 0.312472 on 1 procs for 500 steps with 511 atoms + +Performance: 138.252 ns/day, 0.174 hours/ns, 1600.143 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.28525 | 0.28525 | 0.28525 | 0.0 | 91.29 +Neigh | 0.013753 | 0.013753 | 0.013753 | 0.0 | 4.40 +Comm | 0.0033333 | 0.0033333 | 0.0033333 | 0.0 | 1.07 +Output | 0.00071096 | 0.00071096 | 0.00071096 | 0.0 | 0.23 +Modify | 0.008044 | 0.008044 | 0.008044 | 0.0 | 2.57 +Other | | 0.001385 | | | 0.44 + +Nlocal: 511 ave 511 max 511 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 845 ave 845 max 845 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 7902 ave 7902 max 7902 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7902 +Ave neighs/atom = 15.4638 +Neighbor list builds = 19 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-Si.4 b/examples/USER/misc/edip/log.4May2017.g++.edip-Si.4 new file mode 100644 index 000000000..e33f0116f --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-Si.4 @@ -0,0 +1,167 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperature + +variable t equal 1800.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create $t 5287287 mom yes rot yes dist gaussian +velocity all create 1800 5287287 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 + +pair_style edip +pair_coeff * * Si.edip Si +Reading potential file Si.edip with DATE: 2011-09-15 + +thermo 10 + +fix 1 all nvt temp $t $t 0.1 +fix 1 all nvt temp 1800 $t 0.1 +fix 1 all nvt temp 1800 1800 0.1 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 500 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.12138 + ghost atom cutoff = 4.12138 + binsize = 2.06069, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.955 | 2.955 | 2.955 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1802.3816 -2372.6618 0 -2253.8439 12260.967 + 10 938.75954 -2315.5185 0 -2253.6329 558.21736 + 20 534.27232 -2288.4721 0 -2253.2514 -2710.767 + 30 1043.7796 -2320.9485 0 -2252.1398 8679.4385 + 40 658.09162 -2293.8597 0 -2250.4765 2165.3752 + 50 517.93008 -2283.7238 0 -2249.5805 -1124.9362 + 60 1063.3594 -2318.4409 0 -2248.3414 7277.853 + 70 868.14007 -2304.0133 0 -2246.7832 2050.2859 + 80 826.37803 -2300.0187 0 -2245.5416 91.100098 + 90 1289.6772 -2328.7151 0 -2243.6961 8180.7427 + 100 976.36211 -2305.9371 0 -2241.5727 3614.0511 + 110 810.81711 -2293.4705 0 -2240.0193 1359.3687 + 120 1165.707 -2314.9026 0 -2238.056 7336.4505 + 130 929.81248 -2297.139 0 -2235.8432 2793.8463 + 140 804.47872 -2287.2074 0 -2234.174 704.92524 + 150 1182.414 -2310.0266 0 -2232.0787 7822.2339 + 160 979.92395 -2294.2969 0 -2229.6977 3206.7474 + 170 830.14746 -2282.6079 0 -2227.8824 -296.87288 + 180 1271.1133 -2309.4274 0 -2225.6322 7199.614 + 190 1209.6006 -2302.6407 0 -2222.9006 5528.3799 + 200 954.67692 -2283.6621 0 -2220.7272 47.02925 + 210 1260.814 -2301.5582 0 -2218.442 4829.7879 + 220 1274.9954 -2299.7285 0 -2215.6774 5518.0611 + 230 1048.0074 -2282.398 0 -2213.3106 1754.4157 + 240 1261.7071 -2294.1107 0 -2210.9356 5233.2714 + 250 1272.6179 -2292.0793 0 -2208.1849 4795.934 + 260 989.14207 -2271.0278 0 -2205.8209 -820.18098 + 270 1212.0444 -2283.4212 0 -2203.52 3395.8631 + 280 1391.9572 -2292.3809 0 -2200.6194 6666.2464 + 290 1093.1205 -2270.0421 0 -2197.9807 206.94752 + 300 1159.483 -2272.102 0 -2195.6657 778.53823 + 310 1407.3528 -2285.6227 0 -2192.8463 5223.0487 + 320 1236.7164 -2271.5389 0 -2190.0112 1865.3963 + 330 1258.8275 -2270.4611 0 -2187.4758 2333.321 + 340 1507.9519 -2283.9906 0 -2184.5824 6775.546 + 350 1366.5116 -2271.7287 0 -2181.6446 3432.1175 + 360 1305.2828 -2265.1091 0 -2179.0614 1498.4079 + 370 1581.4334 -2280.4645 0 -2176.2122 6518.5598 + 380 1589.5319 -2277.9428 0 -2173.1566 6334.6527 + 390 1402.6782 -2262.9323 0 -2170.464 3278.3048 + 400 1374.9587 -2258.5717 0 -2167.9307 3608.7293 + 410 1295.7416 -2250.7752 0 -2165.3565 1877.5245 + 420 1278.6727 -2247.1099 0 -2162.8164 1599.4189 + 430 1508.1328 -2259.4245 0 -2160.0044 4300.2235 + 440 1624.2957 -2263.9806 0 -2156.9026 4432.6267 + 450 1597.3356 -2259.263 0 -2153.9623 3370.3829 + 460 1772.0921 -2267.9105 0 -2151.0895 5788.3219 + 470 1806.4047 -2267.304 0 -2148.221 5950.1188 + 480 1593.0406 -2250.7469 0 -2145.7294 2518.0601 + 490 1660.9766 -2252.894 0 -2143.398 4282.1654 + 500 1714.2831 -2253.9295 0 -2140.9194 5740.0268 +Loop time of 0.109584 on 4 procs for 500 steps with 511 atoms + +Performance: 394.220 ns/day, 0.061 hours/ns, 4562.726 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.074678 | 0.077817 | 0.084705 | 1.4 | 71.01 +Neigh | 0.0036662 | 0.0037943 | 0.0039661 | 0.2 | 3.46 +Comm | 0.013665 | 0.020312 | 0.023178 | 2.7 | 18.54 +Output | 0.0010247 | 0.0010931 | 0.0012922 | 0.3 | 1.00 +Modify | 0.0043213 | 0.0047521 | 0.0051889 | 0.6 | 4.34 +Other | | 0.001814 | | | 1.66 + +Nlocal: 127.75 ave 131 max 124 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 433.75 ave 441 max 426 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1979.5 ave 2040 max 1895 min +Histogram: 1 0 0 0 1 0 0 0 0 2 + +Total # of neighbors = 7918 +Ave neighs/atom = 15.4951 +Neighbor list builds = 19 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.1 b/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.1 new file mode 100644 index 000000000..125106c50 --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.1 @@ -0,0 +1,92 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task +# Test of MEAM potential for SiC system + +units metal +boundary p p p + +atom_style atomic + +read_data data.SiC + orthogonal box = (-6 -6 -6) to (5.97232 5.97232 5.97232) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 128 atoms + +pair_style edip/multi +pair_coeff * * SiC.edip Si C +Reading potential file SiC.edip with DATE: 2017-05-16 + +mass 1 28.085 +mass 2 12.001 + +neighbor 1.0 bin +neigh_modify delay 1 + +fix 1 all nve +thermo 10 +timestep 0.001 + +#dump 1 all atom 50 dump.meam + +#dump 2 all image 10 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 element Si C + +#dump 3 all movie 10 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 element Si C + +run 100 +Neighbor list info ... + update every 1 steps, delay 1 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.94159 + ghost atom cutoff = 3.94159 + binsize = 1.97079, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip/multi, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.692 | 2.692 | 2.692 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -563.61621 0 -563.61621 -726147.34 + 10 4224.3601 -633.24829 0 -563.90103 -312355.55 + 20 4528.5661 -638.15183 0 -563.81071 -20091.291 + 30 4817.3654 -642.92111 0 -563.83905 106625.5 + 40 4619.4324 -639.6884 0 -563.85562 107180.42 + 50 4783.0025 -642.26961 0 -563.75166 75134.335 + 60 4525.145 -638.06177 0 -563.77681 71591.713 + 70 4685.2578 -640.72377 0 -563.8104 63956.042 + 80 4621.8393 -639.75912 0 -563.88682 18177.383 + 90 4834.7702 -643.34582 0 -563.97805 15282.823 + 100 4424.0589 -636.60208 0 -563.97656 47963.501 +Loop time of 0.0552888 on 1 procs for 100 steps with 128 atoms + +Performance: 156.270 ns/day, 0.154 hours/ns, 1808.685 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.051872 | 0.051872 | 0.051872 | 0.0 | 93.82 +Neigh | 0.0023525 | 0.0023525 | 0.0023525 | 0.0 | 4.25 +Comm | 0.0004518 | 0.0004518 | 0.0004518 | 0.0 | 0.82 +Output | 0.00014806 | 0.00014806 | 0.00014806 | 0.0 | 0.27 +Modify | 0.00024796 | 0.00024796 | 0.00024796 | 0.0 | 0.45 +Other | | 0.0002165 | | | 0.39 + +Nlocal: 128 ave 128 max 128 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 473 ave 473 max 473 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 2376 ave 2376 max 2376 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2376 +Ave neighs/atom = 18.5625 +Neighbor list builds = 11 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.4 b/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.4 new file mode 100644 index 000000000..eb6955703 --- /dev/null +++ b/examples/USER/misc/edip/log.4May2017.g++.edip-SiC.4 @@ -0,0 +1,92 @@ +LAMMPS (4 May 2017) + using 1 OpenMP thread(s) per MPI task +# Test of MEAM potential for SiC system + +units metal +boundary p p p + +atom_style atomic + +read_data data.SiC + orthogonal box = (-6 -6 -6) to (5.97232 5.97232 5.97232) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 128 atoms + +pair_style edip/multi +pair_coeff * * SiC.edip Si C +Reading potential file SiC.edip with DATE: 2017-05-16 + +mass 1 28.085 +mass 2 12.001 + +neighbor 1.0 bin +neigh_modify delay 1 + +fix 1 all nve +thermo 10 +timestep 0.001 + +#dump 1 all atom 50 dump.meam + +#dump 2 all image 10 image.*.jpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 element Si C + +#dump 3 all movie 10 movie.mpg element element # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 element Si C + +run 100 +Neighbor list info ... + update every 1 steps, delay 1 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.94159 + ghost atom cutoff = 3.94159 + binsize = 1.97079, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair edip/multi, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.686 | 2.686 | 2.686 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -563.61621 0 -563.61621 -726147.34 + 10 4224.3601 -633.24829 0 -563.90103 -312355.55 + 20 4528.5661 -638.15183 0 -563.81071 -20091.291 + 30 4817.3654 -642.92111 0 -563.83905 106625.5 + 40 4619.4324 -639.6884 0 -563.85562 107180.42 + 50 4783.0025 -642.26961 0 -563.75166 75134.335 + 60 4525.145 -638.06177 0 -563.77681 71591.713 + 70 4685.2578 -640.72377 0 -563.8104 63956.042 + 80 4621.8393 -639.75912 0 -563.88682 18177.383 + 90 4834.7702 -643.34582 0 -563.97805 15282.823 + 100 4424.0589 -636.60208 0 -563.97656 47963.501 +Loop time of 0.020755 on 4 procs for 100 steps with 128 atoms + +Performance: 416.285 ns/day, 0.058 hours/ns, 4818.118 timesteps/s +99.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.011816 | 0.013825 | 0.016871 | 1.6 | 66.61 +Neigh | 0.00061321 | 0.00066817 | 0.00074816 | 0.0 | 3.22 +Comm | 0.0023363 | 0.0054012 | 0.0075014 | 2.7 | 26.02 +Output | 0.00020909 | 0.00022268 | 0.00025558 | 0.0 | 1.07 +Modify | 8.3208e-05 | 9.346e-05 | 0.00010395 | 0.0 | 0.45 +Other | | 0.0005446 | | | 2.62 + +Nlocal: 32 ave 36 max 25 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Nghost: 262.75 ave 273 max 255 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 594 ave 687 max 453 min +Histogram: 1 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 2376 +Ave neighs/atom = 18.5625 +Neighbor list builds = 11 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/potentials/SiC.edip b/potentials/SiC.edip new file mode 100644 index 000000000..a38f30d97 --- /dev/null +++ b/potentials/SiC.edip @@ -0,0 +1,38 @@ +# DATE: 2017-05-16 CONTRIBUTOR: Chao Jiang , Phys. Rev. B 86, 144118 (2012) +# element 1, element 2, element 3, +# A B cutoffA cutoffC alpha beta eta +# gamma lambda mu rho sigma Q0 +# u1 u2 u3 u4 +# +Si Si Si 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.589390 + 1.135256 2.417497 0.629131 1.343679 0.298443 208.924548 + -0.165799 32.557 0.286198 0.66 + +C C C 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.275605 + 1.084183 3.633621 0.594236 2.827634 0.536561 289.305617 + -0.165799 32.557 0.286198 0.66 + +C Si Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497 + 1.191567 3.025559 0.611684 2.061835 0.423863 249.115082 + -0.165799 32.557000 0.286198 0.660000 + +Si C C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497 + 1.191567 3.025559 0.611684 2.061835 0.423863 249.115082 + -0.165799 32.557000 0.286198 0.660000 + +Si Si C 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.510944 + 1.135256 2.721528 0.620407 1.343679 0.298443 229.019815 + -0.165799 32.557000 0.286198 0.660000 + +Si C Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.510944 + 1.191567 2.721528 0.620407 2.061835 0.423863 229.019815 + -0.165799 32.557000 0.286198 0.660000 + +C C Si 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.354051 + 1.084183 3.329590 0.602960 2.827634 0.536561 269.210350 + -0.165799 32.557000 0.286198 0.660000 + +C Si C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.354051 + 1.191567 3.329590 0.602960 2.061835 0.423863 269.210350 + -0.165799 32.557000 0.286198 0.660000 + diff --git a/src/.gitignore b/src/.gitignore index df5cea6eb..0b5328824 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,1070 +1,1072 @@ /Makefile.package /Makefile.package.settings /MAKE/MINE /Make.py.last /lmp_* /style_*.h /*_gpu.h /*_gpu.cpp /*_intel.h /*_intel.cpp /*_kokkos.h /*_kokkos.cpp /*_omp.h /*_omp.cpp /*_tally.h /*_tally.cpp /*_rx.h /*_rx.cpp /*_ssa.h /*_ssa.cpp /kokkos.cpp /kokkos.h /kokkos_type.h /kokkos_few.h /manifold*.cpp /manifold*.h /fix_*manifold*.cpp /fix_*manifold*.h /fix_qeq*.cpp /fix_qeq*.h /compute_test_nbl.cpp /compute_test_nbl.h /pair_multi_lucy.cpp /pair_multi_lucy.h /colvarproxy_lammps.cpp /colvarproxy_lammps.h /fix_colvars.cpp /fix_colvars.h /dump_molfile.cpp /dump_molfile.h /molfile_interface.cpp /molfile_interface.h /type_detector.h /intel_buffers.cpp /intel_buffers.h /intel_intrinsics.h /intel_preprocess.h /intel_simd.h /compute_sna_atom.cpp /compute_sna_atom.h /compute_snad_atom.cpp /compute_snad_atom.h /compute_snav_atom.cpp /compute_snav_atom.h /openmp_snap.h /pair_snap.cpp /pair_snap.h /sna.cpp /sna.h /atom_vec_wavepacket.cpp /atom_vec_wavepacket.h /fix_nve_awpmd.cpp /fix_nve_awpmd.h /pair_awpmd_cut.cpp /pair_awpmd_cut.h /dihedral_charmmfsw.cpp /dihedral_charmmfsw.h /pair_lj_charmmfsw_coul_charmmfsh.cpp /pair_lj_charmmfsw_coul_charmmfsh.h /pair_lj_charmmfsw_coul_long.cpp /pair_lj_charmmfsw_coul_long.h /angle_cg_cmm.cpp /angle_cg_cmm.h /angle_charmm.cpp /angle_charmm.h /angle_class2.cpp /angle_class2.h /angle_cosine.cpp /angle_cosine.h /angle_cosine_delta.cpp /angle_cosine_delta.h /angle_cosine_periodic.cpp /angle_cosine_periodic.h /angle_cosine_shift.cpp /angle_cosine_shift.h /angle_cosine_shift_exp.cpp /angle_cosine_shift_exp.h /angle_cosine_squared.cpp /angle_cosine_squared.h /angle_dipole.cpp /angle_dipole.h /angle_fourier.cpp /angle_fourier.h /angle_fourier_simple.cpp /angle_fourier_simple.h /angle_harmonic.cpp /angle_harmonic.h /angle_quartic.cpp /angle_quartic.h /angle_sdk.cpp /angle_sdk.h /angle_table.cpp /angle_table.h /atom_vec_angle.cpp /atom_vec_angle.h /atom_vec_bond.cpp /atom_vec_bond.h /atom_vec_colloid.cpp /atom_vec_colloid.h /atom_vec_dipole.cpp /atom_vec_dipole.h /atom_vec_dpd.cpp /atom_vec_dpd.h /atom_vec_electron.cpp /atom_vec_electron.h /atom_vec_ellipsoid.cpp /atom_vec_ellipsoid.h /atom_vec_full.cpp /atom_vec_full.h /atom_vec_full_hars.cpp /atom_vec_full_hars.h /atom_vec_granular.cpp /atom_vec_granular.h /atom_vec_meso.cpp /atom_vec_meso.h /atom_vec_molecular.cpp /atom_vec_molecular.h /atom_vec_peri.cpp /atom_vec_peri.h /atom_vec_template.cpp /atom_vec_template.h /body_nparticle.cpp /body_nparticle.h /bond_class2.cpp /bond_class2.h /bond_fene.cpp /bond_fene.h /bond_fene_expand.cpp /bond_fene_expand.h /bond_harmonic.cpp /bond_harmonic.h /bond_harmonic_shift.cpp /bond_harmonic_shift.h /bond_harmonic_shift_cut.cpp /bond_harmonic_shift_cut.h /bond_morse.cpp /bond_morse.h /bond_nonlinear.cpp /bond_nonlinear.h /bond_oxdna_fene.cpp /bond_oxdna_fene.h /bond_oxdna2_fene.cpp /bond_oxdna2_fene.h /bond_quartic.cpp /bond_quartic.h /bond_table.cpp /bond_table.h /cg_cmm_parms.cpp /cg_cmm_parms.h /commgrid.cpp /commgrid.h /compute_ackland_atom.cpp /compute_ackland_atom.h /compute_basal_atom.cpp /compute_basal_atom.h /compute_body_local.cpp /compute_body_local.h /compute_cna_atom2.cpp /compute_cna_atom2.h /compute_damage_atom.cpp /compute_damage_atom.h /compute_dilatation_atom.cpp /compute_dilatation_atom.h /compute_dpd.cpp /compute_dpd.h /compute_dpd_atom.cpp /compute_dpd_atom.h /compute_erotate_asphere.cpp /compute_erotate_asphere.h /compute_erotate_rigid.cpp /compute_erotate_rigid.h /compute_event_displace.cpp /compute_event_displace.h /compute_fep.cpp /compute_fep.h /compute_force_tally.cpp /compute_force_tally.h /compute_heat_flux_tally.cpp /compute_heat_flux_tally.h /compute_ke_atom_eff.cpp /compute_ke_atom_eff.h /compute_ke_eff.cpp /compute_ke_eff.h /compute_ke_rigid.cpp /compute_ke_rigid.h /compute_meso_e_atom.cpp /compute_meso_e_atom.h /compute_meso_rho_atom.cpp /compute_meso_rho_atom.h /compute_meso_t_atom.cpp /compute_meso_t_atom.h /compute_msd_nongauss.cpp /compute_msd_nongauss.h /compute_pe_tally.cpp /compute_pe_tally.h /compute_plasticity_atom.cpp /compute_plasticity_atom.h /compute_pressure_grem.cpp /compute_pressure_grem.h /compute_rigid_local.cpp /compute_rigid_local.h /compute_spec_atom.cpp /compute_spec_atom.h /compute_stress_tally.cpp /compute_stress_tally.h /compute_temp_asphere.cpp /compute_temp_asphere.h /compute_temp_body.cpp /compute_temp_body.h /compute_temp_deform_eff.cpp /compute_temp_deform_eff.h /compute_temp_eff.cpp /compute_temp_eff.h /compute_temp_region_eff.cpp /compute_temp_region_eff.h /compute_temp_rotate.cpp /compute_temp_rotate.h /compute_ti.cpp /compute_ti.h /compute_voronoi_atom.cpp /compute_voronoi_atom.h /dihedral_charmm.cpp /dihedral_charmm.h /dihedral_class2.cpp /dihedral_class2.h /dihedral_cosine_shift_exp.cpp /dihedral_cosine_shift_exp.h /dihedral_fourier.cpp /dihedral_fourier.h /dihedral_harmonic.cpp /dihedral_harmonic.h /dihedral_helix.cpp /dihedral_helix.h /dihedral_hybrid.cpp /dihedral_hybrid.h /dihedral_multi_harmonic.cpp /dihedral_multi_harmonic.h /dihedral_nharmonic.cpp /dihedral_nharmonic.h /dihedral_opls.cpp /dihedral_opls.h /dihedral_quadratic.cpp /dihedral_quadratic.h /dihedral_spherical.cpp /dihedral_spherical.h /dihedral_table.cpp /dihedral_table.h /dump_atom_gz.cpp /dump_atom_gz.h /dump_xyz_gz.cpp /dump_xyz_gz.h /dump_atom_mpiio.cpp /dump_atom_mpiio.h /dump_cfg_gz.cpp /dump_cfg_gz.h /dump_cfg_mpiio.cpp /dump_cfg_mpiio.h /dump_custom_gz.cpp /dump_custom_gz.h /dump_custom_mpiio.cpp /dump_custom_mpiio.h /dump_h5md.cpp /dump_h5md.h /dump_netcdf.cpp /dump_netcdf.h /dump_netcdf_mpiio.cpp /dump_netcdf_mpiio.h /dump_vtk.cpp /dump_vtk.h /dump_xtc.cpp /dump_xtc.h /dump_xyz_mpiio.cpp /dump_xyz_mpiio.h /ewald.cpp /ewald.h /ewald_cg.cpp /ewald_cg.h /ewald_disp.cpp /ewald_disp.h /ewald_n.cpp /ewald_n.h /fft3d.cpp /fft3d.h /fft3d_wrap.cpp /fft3d_wrap.h /fix_adapt_fep.cpp /fix_adapt_fep.h /fix_addtorque.cpp /fix_addtorque.h /fix_append_atoms.cpp /fix_append_atoms.h /fix_atc.cpp /fix_atc.h /fix_ave_correlate_long.cpp /fix_ave_correlate_long.h /fix_bond_break.cpp /fix_bond_break.h /fix_bond_create.cpp /fix_bond_create.h /fix_bond_swap.cpp /fix_bond_swap.h /fix_cmap.cpp /fix_cmap.h /fix_deposit.cpp /fix_deposit.h /fix_dpd_energy.cpp /fix_dpd_energy.h /fix_efield.cpp /fix_efield.h /fix_eos_cv.cpp /fix_eos_cv.h /fix_eos_table.cpp /fix_eos_table.h /fix_evaporate.cpp /fix_evaporate.h /fix_filter_corotate.cpp /fix_filter_corotate.h /fix_viscosity.cpp /fix_viscosity.h /fix_ehex.cpp /fix_ehex.h /fix_event.cpp /fix_event.h /fix_event_prd.cpp /fix_event_prd.h /fix_event_tad.cpp /fix_event_tad.h /fix_flow_gauss.cpp /fix_flow_gauss.h /fix_freeze.cpp /fix_freeze.h /fix_gcmc.cpp /fix_gcmc.h /fix_gld.cpp /fix_gld.h /fix_gle.cpp /fix_gle.h /fix_gpu.cpp /fix_gpu.h /fix_grem.cpp /fix_grem.h /fix_imd.cpp /fix_imd.h /fix_ipi.cpp /fix_ipi.h /fix_lambdah_calc.cpp /fix_lambdah_calc.h /fix_langevin_eff.cpp /fix_langevin_eff.h /fix_lb_fluid.cpp /fix_lb_fluid.h /fix_lb_momentum.cpp /fix_lb_momentum.h /fix_lb_pc.cpp /fix_lb_pc.h /fix_lb_rigid_pc_sphere.cpp /fix_lb_rigid_pc_sphere.h /fix_lb_viscous.cpp /fix_lb_viscous.h /fix_load_report.cpp /fix_load_report.h /fix_meso.cpp /fix_meso.h /fix_meso_stationary.cpp /fix_meso_stationary.h /fix_mscg.cpp /fix_mscg.h /fix_msst.cpp /fix_msst.h /fix_neb.cpp /fix_neb.h /fix_nh_asphere.cpp /fix_nh_asphere.h /fix_nph_asphere.cpp /fix_nph_asphere.h /fix_npt_asphere.cpp /fix_npt_asphere.h /fix_nve_asphere.cpp /fix_nve_asphere.h /fix_nve_asphere_noforce.cpp /fix_nve_asphere_noforce.h /fix_nve_dot.cpp /fix_nve_dot.h /fix_nve_dotc_langevin.cpp /fix_nve_dotc_langevin.h /fix_nh_body.cpp /fix_nh_body.h /fix_nph_body.cpp /fix_nph_body.h /fix_npt_body.cpp /fix_npt_body.h /fix_nvk.cpp /fix_nvk.h /fix_nvt_body.cpp /fix_nvt_body.h /fix_nve_body.cpp /fix_nve_body.h /fix_nvt_asphere.cpp /fix_nvt_asphere.h /fix_nh_eff.cpp /fix_nh_eff.h /fix_nph_eff.cpp /fix_nph_eff.h /fix_nphug.cpp /fix_nphug.h /fix_npt_eff.cpp /fix_npt_eff.h /fix_nve_eff.cpp /fix_nve_eff.h /fix_nve_line.cpp /fix_nve_line.h /fix_nvt_eff.cpp /fix_nvt_eff.h /fix_nvt_sllod_eff.cpp /fix_nvt_sllod_eff.h /fix_nve_tri.cpp /fix_nve_tri.h /fix_oneway.cpp /fix_oneway.h /fix_orient_bcc.cpp /fix_orient_bcc.h /fix_orient_fcc.cpp /fix_orient_fcc.h /fix_peri_neigh.cpp /fix_peri_neigh.h /fix_phonon.cpp /fix_phonon.h /fix_poems.cpp /fix_poems.h /fix_pour.cpp /fix_pour.h /fix_qeq_comb.cpp /fix_qeq_comb.h /fix_qeq_reax.cpp /fix_qeq_fire.cpp /fix_qeq_fire.h /fix_qeq_reax.h /fix_qmmm.cpp /fix_qmmm.h /fix_reax_bonds.cpp /fix_reax_bonds.h /fix_reaxc.cpp /fix_reaxc.h /fix_reaxc_bonds.cpp /fix_reaxc_bonds.h /fix_reaxc_species.cpp /fix_reaxc_species.h /fix_rigid.cpp /fix_rigid.h /fix_rigid_nh.cpp /fix_rigid_nh.h /fix_rigid_nph.cpp /fix_rigid_nph.h /fix_rigid_npt.cpp /fix_rigid_npt.h /fix_rigid_nve.cpp /fix_rigid_nve.h /fix_rigid_nvt.cpp /fix_rigid_nvt.h /fix_rigid_nh_small.cpp /fix_rigid_nh_small.h /fix_rigid_nph_small.cpp /fix_rigid_nph_small.h /fix_rigid_npt_small.cpp /fix_rigid_npt_small.h /fix_rigid_nve_small.cpp /fix_rigid_nve_small.h /fix_rigid_nvt_small.cpp /fix_rigid_nvt_small.h /fix_rigid_small.cpp /fix_rigid_small.h /fix_shake.cpp /fix_shake.h /fix_shardlow.cpp /fix_shardlow.h /fix_smd.cpp /fix_smd.h /fix_species.cpp /fix_species.h /fix_spring_pull.cpp /fix_spring_pull.h /fix_srd.cpp /fix_srd.h /fix_temp_rescale_eff.cpp /fix_temp_rescale_eff.h /fix_thermal_conductivity.cpp /fix_thermal_conductivity.h /fix_ti_rs.cpp /fix_ti_rs.h /fix_ti_spring.cpp /fix_ti_spring.h /fix_ttm.cpp /fix_ttm.h /fix_tune_kspace.cpp /fix_tune_kspace.h /fix_wall_colloid.cpp /fix_wall_colloid.h /fix_wall_gran.cpp /fix_wall_gran.h /fix_wall_gran_region.cpp /fix_wall_gran_region.h /fix_wall_piston.cpp /fix_wall_piston.h /fix_wall_srd.cpp /fix_wall_srd.h /gpu_extra.h /gridcomm.cpp /gridcomm.h /group_ndx.cpp /group_ndx.h /ndx_group.cpp /ndx_group.h /improper_class2.cpp /improper_class2.h /improper_cossq.cpp /improper_cossq.h /improper_cvff.cpp /improper_cvff.h /improper_distance.cpp /improper_distance.h /improper_fourier.cpp /improper_fourier.h /improper_harmonic.cpp /improper_harmonic.h /improper_hybrid.cpp /improper_hybrid.h /improper_ring.cpp /improper_ring.h /improper_umbrella.cpp /improper_umbrella.h /kissfft.h /lj_sdk_common.h /math_complex.h /math_vector.h /mgpt_*.cpp /mgpt_*.h /msm.cpp /msm.h /msm_cg.cpp /msm_cg.h /neb.cpp /neb.h /pair_adp.cpp /pair_adp.h /pair_agni.cpp /pair_agni.h /pair_airebo.cpp /pair_airebo.h /pair_airebo_morse.cpp /pair_airebo_morse.h /pair_body.cpp /pair_body.h /pair_bop.cpp /pair_bop.h /pair_born_coul_long.cpp /pair_born_coul_long.h /pair_born_coul_msm.cpp /pair_born_coul_msm.h /pair_brownian.cpp /pair_brownian.h /pair_brownian_poly.cpp /pair_brownian_poly.h /pair_buck_coul_long.cpp /pair_buck_coul_long.h /pair_buck_coul_msm.cpp /pair_buck_coul_msm.h /pair_buck_coul.cpp /pair_buck_coul.h /pair_buck_long_coul_long.cpp /pair_buck_long_coul_long.h /pair_cdeam.cpp /pair_cdeam.h /pair_cg_cmm.cpp /pair_cg_cmm.h /pair_cg_cmm_coul_cut.cpp /pair_cg_cmm_coul_cut.h /pair_cg_cmm_coul_long.cpp /pair_cg_cmm_coul_long.h /pair_cmm_common.cpp /pair_cmm_common.h /pair_cg_cmm_coul_msm.cpp /pair_cg_cmm_coul_msm.h /pair_comb.cpp /pair_comb.h /pair_comb3.cpp /pair_comb3.h /pair_colloid.cpp /pair_colloid.h /pair_coul_diel.cpp /pair_coul_diel.h /pair_coul_long.cpp /pair_coul_long.h /pair_coul_msm.cpp /pair_coul_msm.h /pair_dipole_cut.cpp /pair_dipole_cut.h /pair_dipole_sf.cpp /pair_dipole_sf.h /pair_dpd_mt.cpp /pair_dpd_mt.h /pair_dsmc.cpp /pair_dsmc.h /pair_eam.cpp /pair_eam.h /pair_eam_opt.cpp /pair_eam_opt.h /pair_eam_alloy.cpp /pair_eam_alloy.h /pair_eam_alloy_opt.cpp /pair_eam_alloy_opt.h /pair_eam_fs.cpp /pair_eam_fs.h /pair_eam_fs_opt.cpp /pair_eam_fs_opt.h /pair_edip.cpp /pair_edip.h +/pair_edip_multi.cpp +/pair_edip_multi.h /pair_eff_cut.cpp /pair_eff_cut.h /pair_eff_inline.h /pair_eim.cpp /pair_eim.h /pair_gauss_cut.cpp /pair_gauss_cut.h /pair_gayberne.cpp /pair_gayberne.h /pair_gran_easy.cpp /pair_gran_easy.h /pair_gran_hertz_history.cpp /pair_gran_hertz_history.h /pair_gran_hooke.cpp /pair_gran_hooke.h /pair_gran_hooke_history.cpp /pair_gran_hooke_history.h /pair_gw.cpp /pair_gw.h /pair_gw_zbl.cpp /pair_gw_zbl.h /pair_hbond_dreiding_lj.cpp /pair_hbond_dreiding_lj.h /pair_hbond_dreiding_morse.cpp /pair_hbond_dreiding_morse.h /pair_kolmogorov_crespi_z.cpp /pair_kolmogorov_crespi_z.h /pair_lcbop.cpp /pair_lcbop.h /pair_line_lj.cpp /pair_line_lj.h /pair_list.cpp /pair_list.h /pair_lj_charmm_coul_charmm.cpp /pair_lj_charmm_coul_charmm.h /pair_lj_charmm_coul_charmm_implicit.cpp /pair_lj_charmm_coul_charmm_implicit.h /pair_lj_charmm_coul_long.cpp /pair_lj_charmm_coul_long.h /pair_lj_charmm_coul_long_opt.cpp /pair_lj_charmm_coul_long_opt.h /pair_lj_charmm_coul_long_soft.cpp /pair_lj_charmm_coul_long_soft.h /pair_lj_charmm_coul_msm.cpp /pair_lj_charmm_coul_msm.h /pair_lj_class2.cpp /pair_lj_class2.h /pair_lj_class2_coul_cut.cpp /pair_lj_class2_coul_cut.h /pair_lj_class2_coul_long.cpp /pair_lj_class2_coul_long.h /pair_lj_coul.cpp /pair_lj_coul.h /pair_coul_cut_soft.cpp /pair_coul_cut_soft.h /pair_coul_long_soft.cpp /pair_coul_long_soft.h /pair_lj_cut_coul_cut_soft.cpp /pair_lj_cut_coul_cut_soft.h /pair_lj_cut_tip4p_cut.cpp /pair_lj_cut_tip4p_cut.h /pair_lj_cut_coul_long.cpp /pair_lj_cut_coul_long.h /pair_lj_cut_coul_long_opt.cpp /pair_lj_cut_coul_long_opt.h /pair_lj_cut_coul_long_soft.cpp /pair_lj_cut_coul_long_soft.h /pair_lj_cut_coul_msm.cpp /pair_lj_cut_coul_msm.h /pair_lj_cut_dipole_cut.cpp /pair_lj_cut_dipole_cut.h /pair_lj_cut_dipole_long.cpp /pair_lj_cut_dipole_long.h /pair_lj_cut_*hars_*.cpp /pair_lj_cut_*hars_*.h /pair_lj_cut_soft.cpp /pair_lj_cut_soft.h /pair_lj_cut_tip4p_long.cpp /pair_lj_cut_tip4p_long.h /pair_lj_cut_tip4p_long_opt.cpp /pair_lj_cut_tip4p_long_opt.h /pair_lj_cut_tip4p_long_soft.cpp /pair_lj_cut_tip4p_long_soft.h /pair_lj_long_coul_long.cpp /pair_lj_long_coul_long.h /pair_lj_long_coul_long_opt.cpp /pair_lj_long_coul_long_opt.h /pair_lj_long_dipole_long.cpp /pair_lj_long_dipole_long.h /pair_lj_long_tip4p_long.cpp /pair_lj_long_tip4p_long.h /pair_lj_cut_opt.cpp /pair_lj_cut_opt.h /pair_lj_cut_tgpu.cpp /pair_lj_cut_tgpu.h /pair_lj_sdk.cpp /pair_lj_sdk.h /pair_lj_sdk_coul_long.cpp /pair_lj_sdk_coul_long.h /pair_lj_sdk_coul_msm.cpp /pair_lj_sdk_coul_msm.h /pair_lj_sf.cpp /pair_lj_sf.h /pair_lj_sf_dipole_sf.cpp /pair_lj_sf_dipole_sf.h /pair_lubricateU.cpp /pair_lubricateU.h /pair_lubricateU_poly.cpp /pair_lubricateU_poly.h /pair_lubricate_poly.cpp /pair_lubricate_poly.h /pair_lubricate.cpp /pair_lubricate.h /pair_meam.cpp /pair_meam.h /pair_meam_spline.cpp /pair_meam_spline.h /pair_meam_sw_spline.cpp /pair_meam_sw_spline.h /pair_morse_opt.cpp /pair_morse_opt.h /pair_morse_soft.cpp /pair_morse_soft.h /pair_nb3b_harmonic.cpp /pair_nb3b_harmonic.h /pair_nm_cut.cpp /pair_nm_cut.h /pair_nm_cut_coul_cut.cpp /pair_nm_cut_coul_cut.h /pair_nm_cut_coul_long.cpp /pair_nm_cut_coul_long.h /pair_oxdna_*.cpp /pair_oxdna_*.h /pair_oxdna2_*.cpp /pair_oxdna2_*.h /mf_oxdna.h /pair_peri_eps.cpp /pair_peri_eps.h /pair_peri_lps.cpp /pair_peri_lps.h /pair_peri_pmb.cpp /pair_peri_pmb.h /pair_peri_ves.cpp /pair_peri_ves.h /pair_reax.cpp /pair_reax.h /pair_reax_fortran.h /pair_reaxc.cpp /pair_reaxc.h /pair_rebo.cpp /pair_rebo.h /pair_resquared.cpp /pair_resquared.h /pair_sph_heatconduction.cpp /pair_sph_heatconduction.h /pair_sph_idealgas.cpp /pair_sph_idealgas.h /pair_sph_lj.cpp /pair_sph_lj.h /pair_sph_rhosum.cpp /pair_sph_rhosum.h /pair_sph_taitwater.cpp /pair_sph_taitwater.h /pair_sph_taitwater_morris.cpp /pair_sph_taitwater_morris.h /pair_sw.cpp /pair_sw.h /pair_tersoff.cpp /pair_tersoff.h /pair_tersoff_mod.cpp /pair_tersoff_mod.h /pair_tersoff_mod_c.cpp /pair_tersoff_mod_c.h /pair_tersoff_table.cpp /pair_tersoff_table.h /pair_tersoff_zbl.cpp /pair_tersoff_zbl.h /pair_tip4p_cut.cpp /pair_tip4p_cut.h /pair_tip4p_long.cpp /pair_tip4p_long.h /pair_tip4p_long_soft.cpp /pair_tip4p_long_soft.h /pair_tri_lj.cpp /pair_tri_lj.h /pair_yukawa_colloid.cpp /pair_yukawa_colloid.h /pair_momb.cpp /pair_momb.h /pppm.cpp /pppm.h /pppm_cg.cpp /pppm_cg.h /pppm_disp.cpp /pppm_disp.h /pppm_disp_tip4p.cpp /pppm_disp_tip4p.h /pppm_old.cpp /pppm_old.h /pppm_proxy.cpp /pppm_proxy.h /pppm_stagger.cpp /pppm_stagger.h /pppm_tip4p.cpp /pppm_tip4p.h /pppm_tip4p_proxy.cpp /pppm_tip4p_proxy.h /pppm_tip4p_cg.cpp /pppm_tip4p_cg.h /prd.cpp /prd.h /python_impl.cpp /python_impl.h /fix_python.cpp /fix_python.h /reader_molfile.cpp /reader_molfile.h /reaxc_allocate.cpp /reaxc_allocate.h /reaxc_basic_comm.cpp /reaxc_basic_comm.h /reaxc_bond_orders.cpp /reaxc_bond_orders.h /reaxc_bonds.cpp /reaxc_bonds.h /reaxc_control.cpp /reaxc_control.h /reaxc_defs.h /reaxc_ffield.cpp /reaxc_ffield.h /reaxc_forces.cpp /reaxc_forces.h /reaxc_hydrogen_bonds.cpp /reaxc_hydrogen_bonds.h /reaxc_init_md.cpp /reaxc_init_md.h /reaxc_io_tools.cpp /reaxc_io_tools.h /reaxc_list.cpp /reaxc_list.h /reaxc_lookup.cpp /reaxc_lookup.h /reaxc_multi_body.cpp /reaxc_multi_body.h /reaxc_nonbonded.cpp /reaxc_nonbonded.h /reaxc_reset_tools.cpp /reaxc_reset_tools.h /reaxc_system_props.cpp /reaxc_system_props.h /reaxc_tool_box.cpp /reaxc_tool_box.h /reaxc_torsion_angles.cpp /reaxc_torsion_angles.h /reaxc_traj.cpp /reaxc_traj.h /reaxc_types.h /reaxc_valence_angles.cpp /reaxc_valence_angles.h /reaxc_vector.cpp /reaxc_vector.h /remap.cpp /remap.h /remap_wrap.cpp /remap_wrap.h /restart_mpiio.cpp /restart_mpiio.h /smd_kernels.h /smd_material_models.cpp /smd_material_models.h /smd_math.h /tad.cpp /tad.h /temper.cpp /temper.h /temper_grem.cpp /temper_grem.h /thr_data.cpp /thr_data.h /verlet_split.cpp /verlet_split.h /write_dump.cpp /write_dump.h /xdr_compat.cpp /xdr_compat.h /atom_vec_smd.cpp /atom_vec_smd.h /compute_saed.cpp /compute_saed.h /compute_saed_consts.h /compute_smd_contact_radius.cpp /compute_smd_contact_radius.h /compute_smd_damage.cpp /compute_smd_damage.h /compute_smd_hourglass_error.cpp /compute_smd_hourglass_error.h /compute_smd_internal_energy.cpp /compute_smd_internal_energy.h /compute_smd_plastic_strain.cpp /compute_smd_plastic_strain.h /compute_smd_plastic_strain_rate.cpp /compute_smd_plastic_strain_rate.h /compute_smd_rho.cpp /compute_smd_rho.h /compute_smd_tlsph_defgrad.cpp /compute_smd_tlsph_defgrad.h /compute_smd_tlsph_dt.cpp /compute_smd_tlsph_dt.h /compute_smd_tlsph_num_neighs.cpp /compute_smd_tlsph_num_neighs.h /compute_smd_tlsph_shape.cpp /compute_smd_tlsph_shape.h /compute_smd_tlsph_strain.cpp /compute_smd_tlsph_strain.h /compute_smd_tlsph_strain_rate.cpp /compute_smd_tlsph_strain_rate.h /compute_smd_tlsph_stress.cpp /compute_smd_tlsph_stress.h /compute_smd_triangle_mesh_vertices.cpp /compute_smd_triangle_mesh_vertices.h /compute_smd_ulsph_effm.cpp /compute_smd_ulsph_effm.h /compute_smd_ulsph_num_neighs.cpp /compute_smd_ulsph_num_neighs.h /compute_smd_ulsph_strain.cpp /compute_smd_ulsph_strain.h /compute_smd_ulsph_strain_rate.cpp /compute_smd_ulsph_strain_rate.h /compute_smd_ulsph_stress.cpp /compute_smd_ulsph_stress.h /compute_smd_vol.cpp /compute_smd_vol.h /compute_temp_cs.cpp /compute_temp_cs.h /compute_temp_drude.cpp /compute_temp_drude.h /compute_xrd.cpp /compute_xrd.h /compute_xrd_consts.h /fix_atom_swap.cpp /fix_atom_swap.h /fix_ave_spatial_sphere.cpp /fix_ave_spatial_sphere.h /fix_drude.cpp /fix_drude.h /fix_drude_transform.cpp /fix_drude_transform.h /fix_langevin_drude.cpp /fix_langevin_drude.h /fix_pimd.cpp /fix_pimd.h /fix_qbmsst.cpp /fix_qbmsst.h /fix_qtb.cpp /fix_qtb.h /fix_rattle.cpp /fix_rattle.h /fix_saed_vtk.cpp /fix_saed_vtk.h /fix_smd_adjust_dt.cpp /fix_smd_adjust_dt.h /fix_smd_integrate_tlsph.cpp /fix_smd_integrate_tlsph.h /fix_smd_integrate_ulsph.cpp /fix_smd_integrate_ulsph.h /fix_smd_move_triangulated_surface.cpp /fix_smd_move_triangulated_surface.h /fix_smd_setvel.cpp /fix_smd_setvel.h /fix_smd_tlsph_reference_configuration.cpp /fix_smd_tlsph_reference_configuration.h /fix_smd_wall_surface.cpp /fix_smd_wall_surface.h /fix_srp.cpp /fix_srp.h /fix_tfmc.cpp /fix_tfmc.h /fix_ttm_mod.cpp /fix_ttm_mod.h /pair_born_coul_long_cs.cpp /pair_born_coul_long_cs.h /pair_born_coul_dsf_cs.cpp /pair_born_coul_dsf_cs.h /pair_buck_coul_long_cs.cpp /pair_buck_coul_long_cs.h /pair_coul_long_cs.cpp /pair_coul_long_cs.h /pair_lj_cut_thole_long.cpp /pair_lj_cut_thole_long.h /pair_plum_hb.cpp /pair_plum_hb.h /pair_plum_hp.cpp /pair_plum_hp.h /pair_polymorphic.cpp /pair_polymorphic.h /pair_smd_hertz.cpp /pair_smd_hertz.h /pair_smd_tlsph.cpp /pair_smd_tlsph.h /pair_smd_triangulated_surface.cpp /pair_smd_triangulated_surface.h /pair_smd_ulsph.cpp /pair_smd_ulsph.h /pair_srp.cpp /pair_srp.h /pair_thole.cpp /pair_thole.h /pair_buck_mdf.cpp /pair_buck_mdf.h /pair_dpd_conservative.cpp /pair_dpd_conservative.h /pair_dpd_fdt.cpp /pair_dpd_fdt.h /pair_dpd_fdt_energy.cpp /pair_dpd_fdt_energy.h /pair_lennard_mdf.cpp /pair_lennard_mdf.h /pair_lj_cut_coul_long_cs.cpp /pair_lj_cut_coul_long_cs.h /pair_lj_mdf.cpp /pair_lj_mdf.h /pair_mgpt.cpp /pair_mgpt.h /pair_morse_smooth_linear.cpp /pair_morse_smooth_linear.h /pair_smtbq.cpp /pair_smtbq.h /pair_vashishta*.cpp /pair_vashishta*.h diff --git a/src/USER-MISC/pair_edip.cpp b/src/USER-MISC/pair_edip.cpp index 6ce84ab76..bd58b746b 100644 --- a/src/USER-MISC/pair_edip.cpp +++ b/src/USER-MISC/pair_edip.cpp @@ -1,1056 +1,1059 @@ /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator http://lammps.sandia.gov, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. This software is distributed under the GNU General Public License. See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- Contributing author: Luca Ferraro (CASPUR) email: luca.ferraro@caspur.it Environment Dependent Interatomic Potential References: 1) J. F. Justo, M. Z. Bazant, E. Kaxiras, V. V. Bulatov, S. Yip Phys. Rev. B 58, 2539 (1998) ------------------------------------------------------------------------- */ #include #include #include #include #include #include "pair_edip.h" #include "atom.h" #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" #include "force.h" #include "comm.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; #define MAXLINE 1024 #define DELTA 4 #define GRIDDENSITY 8000 #define GRIDSTART 0.1 // max number of interaction per atom for f(Z) environment potential #define leadDimInteractionList 64 /* ---------------------------------------------------------------------- */ PairEDIP::PairEDIP(LAMMPS *lmp) : Pair(lmp) { single_enable = 0; restartinfo = 0; one_coeff = 1; manybody_flag = 1; nelements = 0; elements = NULL; nparams = maxparam = 0; params = NULL; elem2param = NULL; } /* ---------------------------------------------------------------------- check if allocated, since class can be destructed when incomplete ------------------------------------------------------------------------- */ PairEDIP::~PairEDIP() { if (elements) for (int i = 0; i < nelements; i++) delete [] elements[i]; delete [] elements; memory->destroy(params); memory->destroy(elem2param); if (allocated) { memory->destroy(setflag); memory->destroy(cutsq); delete [] map; deallocateGrids(); deallocatePreLoops(); } } /* ---------------------------------------------------------------------- */ void PairEDIP::compute(int eflag, int vflag) { int i,j,k,ii,inum,jnum; int itype,jtype,ktype,ijparam,ikparam; double xtmp,ytmp,ztmp,evdwl; int *ilist,*jlist,*numneigh,**firstneigh; register int preForceCoord_counter; double invR_ij; double invR_ik; double directorCos_ij_x; double directorCos_ij_y; double directorCos_ij_z; double directorCos_ik_x; double directorCos_ik_y; double directorCos_ik_z; double cosTeta; int interpolIDX; double interpolTMP; double interpolDeltaX; double interpolY1; double interpolY2; double invRMinusCutoffA; double sigmaInvRMinusCutoffA; double gammInvRMinusCutoffA; double cosTetaDiff; double cosTetaDiffCosTetaDiff; double cutoffFunction_ij; double exp2B_ij; double exp2BDerived_ij; double pow2B_ij; double pow2BDerived_ij; double exp3B_ij; double exp3BDerived_ij; double exp3B_ik; double exp3BDerived_ik; double qFunction; double tauFunction; double tauFunctionDerived; double expMinusBetaZeta_iZeta_i; double qFunctionCosTetaDiffCosTetaDiff; double expMinusQFunctionCosTetaDiffCosTetaDiff; double zeta_i; double zeta_iDerived; double zeta_iDerivedInvR_ij; double forceModCoord_factor; double forceModCoord; double forceModCoord_ij; double forceMod2B; double forceMod3B_factor1_ij; double forceMod3B_factor2_ij; double forceMod3B_factor2; double forceMod3B_factor1_ik; double forceMod3B_factor2_ik; double potentia3B_factor; double potential2B_factor; evdwl = 0.0; if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; double **x = atom->x; double **f = atom->f; int *type = atom->type; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; inum = list->inum; ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; // loop over full neighbor list of my atoms for (ii = 0; ii < inum; ii++) { zeta_i = 0.0; int numForceCoordPairs = 0; i = ilist[ii]; itype = map[type[i]]; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; jlist = firstneigh[i]; jnum = numneigh[i]; // pre-loop to compute environment coordination f(Z) for (int neighbor_j = 0; neighbor_j < jnum; neighbor_j++) { j = jlist[neighbor_j]; j &= NEIGHMASK; double dr_ij[3], r_ij; dr_ij[0] = xtmp - x[j][0]; dr_ij[1] = ytmp - x[j][1]; dr_ij[2] = ztmp - x[j][2]; r_ij = dr_ij[0]*dr_ij[0] + dr_ij[1]*dr_ij[1] + dr_ij[2]*dr_ij[2]; jtype = map[type[j]]; ijparam = elem2param[itype][jtype][jtype]; if (r_ij > params[ijparam].cutsq) continue; r_ij = sqrt(r_ij); invR_ij = 1.0 / r_ij; preInvR_ij[neighbor_j] = invR_ij; invRMinusCutoffA = 1.0 / (r_ij - cutoffA); sigmaInvRMinusCutoffA = sigma * invRMinusCutoffA; gammInvRMinusCutoffA = gamm * invRMinusCutoffA; interpolDeltaX = r_ij - GRIDSTART; interpolTMP = (interpolDeltaX * GRIDDENSITY); interpolIDX = (int) interpolTMP; interpolY1 = exp3B[interpolIDX]; interpolY2 = exp3B[interpolIDX+1]; exp3B_ij = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); exp3BDerived_ij = - exp3B_ij * gammInvRMinusCutoffA * invRMinusCutoffA; preExp3B_ij[neighbor_j] = exp3B_ij; preExp3BDerived_ij[neighbor_j] = exp3BDerived_ij; interpolY1 = exp2B[interpolIDX]; interpolY2 = exp2B[interpolIDX+1]; exp2B_ij = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); exp2BDerived_ij = - exp2B_ij * sigmaInvRMinusCutoffA * invRMinusCutoffA; preExp2B_ij[neighbor_j] = exp2B_ij; preExp2BDerived_ij[neighbor_j] = exp2BDerived_ij; interpolY1 = pow2B[interpolIDX]; interpolY2 = pow2B[interpolIDX+1]; pow2B_ij = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); prePow2B_ij[neighbor_j] = pow2B_ij; // zeta and its derivative if (r_ij < cutoffC) zeta_i += 1.0; else { interpolY1 = cutoffFunction[interpolIDX]; interpolY2 = cutoffFunction[interpolIDX+1]; cutoffFunction_ij = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); zeta_i += cutoffFunction_ij; interpolY1 = cutoffFunctionDerived[interpolIDX]; interpolY2 = cutoffFunctionDerived[interpolIDX+1]; zeta_iDerived = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); zeta_iDerivedInvR_ij = zeta_iDerived * invR_ij; preForceCoord_counter=numForceCoordPairs*5; preForceCoord[preForceCoord_counter+0]=zeta_iDerivedInvR_ij; preForceCoord[preForceCoord_counter+1]=dr_ij[0]; preForceCoord[preForceCoord_counter+2]=dr_ij[1]; preForceCoord[preForceCoord_counter+3]=dr_ij[2]; preForceCoord[preForceCoord_counter+4]=j; numForceCoordPairs++; } } // quantities depending on zeta_i interpolDeltaX = zeta_i; interpolTMP = (interpolDeltaX * GRIDDENSITY); interpolIDX = (int) interpolTMP; interpolY1 = expMinusBetaZeta_iZeta_iGrid[interpolIDX]; interpolY2 = expMinusBetaZeta_iZeta_iGrid[interpolIDX+1]; expMinusBetaZeta_iZeta_i = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); interpolY1 = qFunctionGrid[interpolIDX]; interpolY2 = qFunctionGrid[interpolIDX+1]; qFunction = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); interpolY1 = tauFunctionGrid[interpolIDX]; interpolY2 = tauFunctionGrid[interpolIDX+1]; tauFunction = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); interpolY1 = tauFunctionDerivedGrid[interpolIDX]; interpolY2 = tauFunctionDerivedGrid[interpolIDX+1]; tauFunctionDerived = interpolY1 + (interpolY2 - interpolY1) * (interpolTMP-interpolIDX); forceModCoord_factor = 2.0 * beta * zeta_i * expMinusBetaZeta_iZeta_i; forceModCoord = 0.0; // two-body interactions, skip half of them for (int neighbor_j = 0; neighbor_j < jnum; neighbor_j++) { double dr_ij[3], r_ij, f_ij[3]; j = jlist[neighbor_j]; j &= NEIGHMASK; dr_ij[0] = x[j][0] - xtmp; dr_ij[1] = x[j][1] - ytmp; dr_ij[2] = x[j][2] - ztmp; r_ij = dr_ij[0]*dr_ij[0] + dr_ij[1]*dr_ij[1] + dr_ij[2]*dr_ij[2]; jtype = map[type[j]]; ijparam = elem2param[itype][jtype][jtype]; if (r_ij > params[ijparam].cutsq) continue; r_ij = sqrt(r_ij); invR_ij = preInvR_ij[neighbor_j]; pow2B_ij = prePow2B_ij[neighbor_j]; potential2B_factor = pow2B_ij - expMinusBetaZeta_iZeta_i; exp2B_ij = preExp2B_ij[neighbor_j]; pow2BDerived_ij = - rho * invR_ij * pow2B_ij; forceModCoord += (forceModCoord_factor*exp2B_ij); exp2BDerived_ij = preExp2BDerived_ij[neighbor_j]; forceMod2B = exp2BDerived_ij * potential2B_factor + exp2B_ij * pow2BDerived_ij; directorCos_ij_x = invR_ij * dr_ij[0]; directorCos_ij_y = invR_ij * dr_ij[1]; directorCos_ij_z = invR_ij * dr_ij[2]; exp3B_ij = preExp3B_ij[neighbor_j]; exp3BDerived_ij = preExp3BDerived_ij[neighbor_j]; f_ij[0] = forceMod2B * directorCos_ij_x; f_ij[1] = forceMod2B * directorCos_ij_y; f_ij[2] = forceMod2B * directorCos_ij_z; f[i][0] += f_ij[0]; f[i][1] += f_ij[1]; f[i][2] += f_ij[2]; f[j][0] -= f_ij[0]; f[j][1] -= f_ij[1]; f[j][2] -= f_ij[2]; // potential energy evdwl = (exp2B_ij * potential2B_factor); if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, -forceMod2B*invR_ij, dr_ij[0], dr_ij[1], dr_ij[2]); // three-body Forces for (int neighbor_k = neighbor_j + 1; neighbor_k < jnum; neighbor_k++) { double dr_ik[3], r_ik, f_ik[3]; k = jlist[neighbor_k]; k &= NEIGHMASK; ktype = map[type[k]]; ikparam = elem2param[itype][ktype][ktype]; dr_ik[0] = x[k][0] - xtmp; dr_ik[1] = x[k][1] - ytmp; dr_ik[2] = x[k][2] - ztmp; r_ik = dr_ik[0]*dr_ik[0] + dr_ik[1]*dr_ik[1] + dr_ik[2]*dr_ik[2]; if (r_ik > params[ikparam].cutsq) continue; r_ik = sqrt(r_ik); invR_ik = preInvR_ij[neighbor_k]; directorCos_ik_x = invR_ik * dr_ik[0]; directorCos_ik_y = invR_ik * dr_ik[1]; directorCos_ik_z = invR_ik * dr_ik[2]; cosTeta = directorCos_ij_x * directorCos_ik_x + directorCos_ij_y * directorCos_ik_y + directorCos_ij_z * directorCos_ik_z; cosTetaDiff = cosTeta + tauFunction; cosTetaDiffCosTetaDiff = cosTetaDiff * cosTetaDiff; qFunctionCosTetaDiffCosTetaDiff = cosTetaDiffCosTetaDiff * qFunction; expMinusQFunctionCosTetaDiffCosTetaDiff = exp(-qFunctionCosTetaDiffCosTetaDiff); potentia3B_factor = lambda * ((1.0 - expMinusQFunctionCosTetaDiffCosTetaDiff) + eta * qFunctionCosTetaDiffCosTetaDiff); exp3B_ik = preExp3B_ij[neighbor_k]; exp3BDerived_ik = preExp3BDerived_ij[neighbor_k]; forceMod3B_factor1_ij = - exp3BDerived_ij * exp3B_ik * potentia3B_factor; forceMod3B_factor2 = 2.0 * lambda * exp3B_ij * exp3B_ik * qFunction * cosTetaDiff * (eta + expMinusQFunctionCosTetaDiffCosTetaDiff); forceMod3B_factor2_ij = forceMod3B_factor2 * invR_ij; f_ij[0] = forceMod3B_factor1_ij * directorCos_ij_x + forceMod3B_factor2_ij * (cosTeta * directorCos_ij_x - directorCos_ik_x); f_ij[1] = forceMod3B_factor1_ij * directorCos_ij_y + forceMod3B_factor2_ij * (cosTeta * directorCos_ij_y - directorCos_ik_y); f_ij[2] = forceMod3B_factor1_ij * directorCos_ij_z + forceMod3B_factor2_ij * (cosTeta * directorCos_ij_z - directorCos_ik_z); forceMod3B_factor1_ik = - exp3BDerived_ik * exp3B_ij * potentia3B_factor; forceMod3B_factor2_ik = forceMod3B_factor2 * invR_ik; f_ik[0] = forceMod3B_factor1_ik * directorCos_ik_x + forceMod3B_factor2_ik * (cosTeta * directorCos_ik_x - directorCos_ij_x); f_ik[1] = forceMod3B_factor1_ik * directorCos_ik_y + forceMod3B_factor2_ik * (cosTeta * directorCos_ik_y - directorCos_ij_y); f_ik[2] = forceMod3B_factor1_ik * directorCos_ik_z + forceMod3B_factor2_ik * (cosTeta * directorCos_ik_z - directorCos_ij_z); forceModCoord += (forceMod3B_factor2 * (tauFunctionDerived - 0.5 * mu * cosTetaDiff)); f[j][0] += f_ij[0]; f[j][1] += f_ij[1]; f[j][2] += f_ij[2]; f[k][0] += f_ik[0]; f[k][1] += f_ik[1]; f[k][2] += f_ik[2]; f[i][0] -= f_ij[0] + f_ik[0]; f[i][1] -= f_ij[1] + f_ik[1]; f[i][2] -= f_ij[2] + f_ik[2]; // potential energy evdwl = (exp3B_ij * exp3B_ik * potentia3B_factor); if (evflag) ev_tally3(i,j,k,evdwl,0.0,f_ij,f_ik,dr_ij,dr_ik); } } // forces due to environment coordination f(Z) for (int idx = 0; idx < numForceCoordPairs; idx++) { double dr_ij[3],f_ij[3]; preForceCoord_counter = idx * 5; zeta_iDerivedInvR_ij=preForceCoord[preForceCoord_counter+0]; dr_ij[0]=preForceCoord[preForceCoord_counter+1]; dr_ij[1]=preForceCoord[preForceCoord_counter+2]; dr_ij[2]=preForceCoord[preForceCoord_counter+3]; j = static_cast (preForceCoord[preForceCoord_counter+4]); forceModCoord_ij = forceModCoord * zeta_iDerivedInvR_ij; f_ij[0] = forceModCoord_ij * dr_ij[0]; f_ij[1] = forceModCoord_ij * dr_ij[1]; f_ij[2] = forceModCoord_ij * dr_ij[2]; f[i][0] -= f_ij[0]; f[i][1] -= f_ij[1]; f[i][2] -= f_ij[2]; f[j][0] += f_ij[0]; f[j][1] += f_ij[1]; f[j][2] += f_ij[2]; // potential energy evdwl = 0.0; if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, -forceModCoord_ij, dr_ij[0], dr_ij[1], dr_ij[2]); } } if (vflag_fdotr) virial_fdotr_compute(); } /* ---------------------------------------------------------------------- */ void PairEDIP::allocateGrids(void) { int numGridPointsOneCutoffFunction; int numGridPointsNotOneCutoffFunction; int numGridPointsCutoffFunction; int numGridPointsR; int numGridPointsRTotal; int numGridPointsQFunctionGrid; int numGridPointsExpMinusBetaZeta_iZeta_i; int numGridPointsTauFunctionGrid; double maxArgumentTauFunctionGrid; double maxArgumentQFunctionGrid; double maxArgumentExpMinusBetaZeta_iZeta_i; double const leftLimitToZero = -DBL_MIN * 1000.0; // tauFunctionGrid maxArgumentTauFunctionGrid = leadDimInteractionList; numGridPointsTauFunctionGrid = (int) ((maxArgumentTauFunctionGrid) * GRIDDENSITY) + 2; memory->create(tauFunctionGrid,numGridPointsTauFunctionGrid, "edip:tauFunctionGrid"); memory->create(tauFunctionDerivedGrid,numGridPointsTauFunctionGrid, "edip:tauFunctionDerivedGrid"); // expMinusBetaZeta_iZeta_iGrid maxArgumentExpMinusBetaZeta_iZeta_i = leadDimInteractionList; numGridPointsExpMinusBetaZeta_iZeta_i = (int) ((maxArgumentExpMinusBetaZeta_iZeta_i) * GRIDDENSITY) + 2; memory->create(expMinusBetaZeta_iZeta_iGrid, numGridPointsExpMinusBetaZeta_iZeta_i, "edip:expMinusBetaZeta_iZeta_iGrid"); // qFunctionGrid maxArgumentQFunctionGrid = leadDimInteractionList; numGridPointsQFunctionGrid = (int) ((maxArgumentQFunctionGrid) * GRIDDENSITY) + 2; memory->create(qFunctionGrid,numGridPointsQFunctionGrid,"edip:qFunctionGrid"); // cutoffFunction numGridPointsOneCutoffFunction = (int) ((cutoffC - GRIDSTART) * GRIDDENSITY); numGridPointsNotOneCutoffFunction = (int) ((cutoffA-cutoffC) * GRIDDENSITY); numGridPointsCutoffFunction = numGridPointsOneCutoffFunction + numGridPointsNotOneCutoffFunction+2; memory->create(cutoffFunction,numGridPointsCutoffFunction, "edip:cutoffFunction"); memory->create(cutoffFunctionDerived,numGridPointsCutoffFunction, "edip:cutoffFunctionDerived"); // pow2B numGridPointsR = (int) ((cutoffA + leftLimitToZero - GRIDSTART) * GRIDDENSITY); numGridPointsRTotal = numGridPointsR + 2; memory->create(pow2B,numGridPointsRTotal,"edip:pow2B"); memory->create(exp2B,numGridPointsRTotal,"edip:exp2B"); memory->create(exp3B,numGridPointsRTotal,"edip:exp3B"); } /* ---------------------------------------------------------------------- pre-calculated structures ------------------------------------------------------------------------- */ void PairEDIP::allocatePreLoops(void) { int nthreads = comm->nthreads; memory->create(preInvR_ij,nthreads*leadDimInteractionList,"edip:preInvR_ij"); memory->create(preExp3B_ij,nthreads*leadDimInteractionList,"edip:preExp3B_ij"); memory->create(preExp3BDerived_ij,nthreads*leadDimInteractionList, "edip:preExp3BDerived_ij"); memory->create(preExp2B_ij,nthreads*leadDimInteractionList,"edip:preExp2B_ij"); memory->create(preExp2BDerived_ij,nthreads*leadDimInteractionList, "edip:preExp2BDerived_ij"); memory->create(prePow2B_ij,nthreads*leadDimInteractionList,"edip:prePow2B_ij"); memory->create(preForceCoord,5*nthreads*leadDimInteractionList,"edip:preForceCoord"); } /* ---------------------------------------------------------------------- deallocate grids ------------------------------------------------------------------------- */ void PairEDIP::deallocateGrids(void) { memory->destroy(cutoffFunction); memory->destroy(cutoffFunctionDerived); memory->destroy(pow2B); memory->destroy(exp2B); memory->destroy(exp3B); memory->destroy(qFunctionGrid); memory->destroy(expMinusBetaZeta_iZeta_iGrid); memory->destroy(tauFunctionGrid); memory->destroy(tauFunctionDerivedGrid); } /* ---------------------------------------------------------------------- deallocate preLoops ------------------------------------------------------------------------- */ void PairEDIP::deallocatePreLoops(void) { memory->destroy(preInvR_ij); memory->destroy(preExp3B_ij); memory->destroy(preExp3BDerived_ij); memory->destroy(preExp2B_ij); memory->destroy(preExp2BDerived_ij); memory->destroy(prePow2B_ij); memory->destroy(preForceCoord); } /* ---------------------------------------------------------------------- */ void PairEDIP::allocate() { allocated = 1; int n = atom->ntypes; memory->create(setflag,n+1,n+1,"pair:setflag"); memory->create(cutsq,n+1,n+1,"pair:cutsq"); map = new int[n+1]; } /* ---------------------------------------------------------------------- global settings ------------------------------------------------------------------------- */ void PairEDIP::settings(int narg, char **arg) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } /* ---------------------------------------------------------------------- */ void PairEDIP::initGrids(void) { int l; int numGridPointsOneCutoffFunction; int numGridPointsNotOneCutoffFunction; int numGridPointsCutoffFunction; int numGridPointsR; int numGridPointsQFunctionGrid; int numGridPointsExpMinusBetaZeta_iZeta_i; int numGridPointsTauFunctionGrid; double maxArgumentTauFunctionGrid; double maxArgumentQFunctionGrid; double maxArgumentExpMinusBetaZeta_iZeta_i; double r; double temp; double temp3; double temp4; double deltaArgumentR; double deltaArgumentCutoffFunction; double deltaArgumentQFunctionGrid; double deltaArgumentTauFunctionGrid; double deltaArgumentExpMinusBetaZeta_iZeta_i; double const leftLimitToZero = -DBL_MIN * 1000.0; // tauFunctionGrid maxArgumentTauFunctionGrid = leadDimInteractionList; numGridPointsTauFunctionGrid = (int) ((maxArgumentTauFunctionGrid) * GRIDDENSITY) + 2; r = 0.0; deltaArgumentTauFunctionGrid = 1.0 / GRIDDENSITY; for (l = 0; l < numGridPointsTauFunctionGrid; l++) { tauFunctionGrid[l] = u1 + u2 * u3 * exp(-u4 * r) - u2 * exp(-2.0 * u4 * r); tauFunctionDerivedGrid[l] = - u2 * u3 * u4 * exp(-u4 * r) + 2.0 * u2 * u4 * exp(-2.0 * u4 * r); r += deltaArgumentTauFunctionGrid; } // expMinusBetaZeta_iZeta_iGrid maxArgumentExpMinusBetaZeta_iZeta_i = leadDimInteractionList; numGridPointsExpMinusBetaZeta_iZeta_i = (int) ((maxArgumentExpMinusBetaZeta_iZeta_i) * GRIDDENSITY) + 2; r = 0.0; deltaArgumentExpMinusBetaZeta_iZeta_i = 1.0 / GRIDDENSITY; for (l = 0; l < numGridPointsExpMinusBetaZeta_iZeta_i; l++) { expMinusBetaZeta_iZeta_iGrid[l] = exp(-beta * r * r); r += deltaArgumentExpMinusBetaZeta_iZeta_i; } // qFunctionGrid maxArgumentQFunctionGrid = leadDimInteractionList; numGridPointsQFunctionGrid = (int) ((maxArgumentQFunctionGrid) * GRIDDENSITY) + 2; r = 0.0; deltaArgumentQFunctionGrid = 1.0 / GRIDDENSITY; for (l = 0; l < numGridPointsQFunctionGrid; l++) { qFunctionGrid[l] = Q0 * exp(-mu * r); r += deltaArgumentQFunctionGrid; } // cutoffFunction numGridPointsOneCutoffFunction = (int) ((cutoffC - GRIDSTART) * GRIDDENSITY); numGridPointsNotOneCutoffFunction = (int) ((cutoffA-cutoffC) * GRIDDENSITY); numGridPointsCutoffFunction = numGridPointsOneCutoffFunction+numGridPointsNotOneCutoffFunction+2; r = GRIDSTART; deltaArgumentCutoffFunction = 1.0 / GRIDDENSITY; for (l = 0; l < numGridPointsOneCutoffFunction; l++) { cutoffFunction[l] = 1.0; cutoffFunctionDerived[l] = 0.0; r += deltaArgumentCutoffFunction; } for (l = numGridPointsOneCutoffFunction; l < numGridPointsCutoffFunction; l++) { temp = (cutoffA - cutoffC)/(r - cutoffC); temp3 = temp * temp * temp; temp4 = temp3 * temp; cutoffFunction[l] = exp(alpha/(1.0-temp3)); cutoffFunctionDerived[l] = (-3*alpha/(cutoffA-cutoffC)) * (temp4/((1-temp3)*(1-temp3)))*exp(alpha/(1.0-temp3)); r += deltaArgumentCutoffFunction; } // pow2B numGridPointsR = (int) ((cutoffA + leftLimitToZero - GRIDSTART) * GRIDDENSITY); r = GRIDSTART; deltaArgumentR = 1.0 / GRIDDENSITY; for (l = 0; l < numGridPointsR; l++) { pow2B[l] = pow((B/r),rho); exp2B[l] = A * exp(sigma/(r-cutoffA)); exp3B[l] = exp(gamm/(r-cutoffA)); r += deltaArgumentR; } pow2B[numGridPointsR] = pow((B/r),rho); exp2B[numGridPointsR]=0; exp3B[numGridPointsR]=0; r += deltaArgumentR; pow2B[numGridPointsR+1] = pow((B/r),rho); exp2B[numGridPointsR+1]=0; exp3B[numGridPointsR+1]=0; } /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ void PairEDIP::coeff(int narg, char **arg) { int i,j,n; if (!allocated) allocate(); if (narg != 3 + atom->ntypes) error->all(FLERR,"Incorrect args for pair coefficients"); // insure I,J args are * * if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) error->all(FLERR,"Incorrect args for pair coefficients"); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL // nelements = # of unique elements // elements = list of element names if (elements) { for (i = 0; i < nelements; i++) delete [] elements[i]; delete [] elements; } elements = new char*[atom->ntypes]; for (i = 0; i < atom->ntypes; i++) elements[i] = NULL; nelements = 0; for (i = 3; i < narg; i++) { if (strcmp(arg[i],"NULL") == 0) { map[i-2] = -1; continue; } for (j = 0; j < nelements; j++) if (strcmp(arg[i],elements[j]) == 0) break; map[i-2] = j; if (j == nelements) { n = strlen(arg[i]) + 1; elements[j] = new char[n]; strcpy(elements[j],arg[i]); nelements++; } } + if (nelements != 1) + error->all(FLERR,"Pair style edip only supports single element potentials"); + // read potential file and initialize potential parameters read_file(arg[2]); setup_params(); // clear setflag since coeff() called once with I,J = * * n = atom->ntypes; for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) setflag[i][j] = 0; // set setflag i,j for type pairs where both are mapped to elements int count = 0; for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) if (map[i] >= 0 && map[j] >= 0) { setflag[i][j] = 1; count++; } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); // allocate tables and internal structures allocatePreLoops(); allocateGrids(); initGrids(); } /* ---------------------------------------------------------------------- init specific to this pair style ------------------------------------------------------------------------- */ void PairEDIP::init_style() { if (force->newton_pair == 0) - error->all(FLERR,"Pair style EDIP requires newton pair on"); + error->all(FLERR,"Pair style edip requires newton pair on"); // need a full neighbor list int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; } /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ double PairEDIP::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); return cutmax; } /* ---------------------------------------------------------------------- */ void PairEDIP::read_file(char *file) { int params_per_line = 20; char **words = new char*[params_per_line+1]; memory->sfree(params); params = NULL; nparams = maxparam = 0; // open file on proc 0 FILE *fp; if (comm->me == 0) { fp = force->open_potential(file); if (fp == NULL) { char str[128]; sprintf(str,"Cannot open EDIP potential file %s",file); error->one(FLERR,str); } } // read each set of params from potential file // one set of params can span multiple lines // store params if all 3 element tags are in element list int n,nwords,ielement,jelement,kelement; char line[MAXLINE],*ptr; int eof = 0; while (1) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == NULL) { eof = 1; fclose(fp); } else n = strlen(line) + 1; } MPI_Bcast(&eof,1,MPI_INT,0,world); if (eof) break; MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; nwords = atom->count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words while (nwords < params_per_line) { n = strlen(line); if (comm->me == 0) { ptr = fgets(&line[n],MAXLINE-n,fp); if (ptr == NULL) { eof = 1; fclose(fp); } else n = strlen(line) + 1; } MPI_Bcast(&eof,1,MPI_INT,0,world); if (eof) break; MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; nwords = atom->count_words(line); } if (nwords != params_per_line) error->all(FLERR,"Incorrect format in EDIP potential file"); // words = ptrs to all words in line nwords = 0; words[nwords++] = strtok(line," \t\n\r\f"); while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; // ielement,jelement,kelement = 1st args // if all 3 args are in element list, then parse this line // else skip to next entry in file for (ielement = 0; ielement < nelements; ielement++) if (strcmp(words[0],elements[ielement]) == 0) break; if (ielement == nelements) continue; for (jelement = 0; jelement < nelements; jelement++) if (strcmp(words[1],elements[jelement]) == 0) break; if (jelement == nelements) continue; for (kelement = 0; kelement < nelements; kelement++) if (strcmp(words[2],elements[kelement]) == 0) break; if (kelement == nelements) continue; // load up parameter settings and error check their values if (nparams == maxparam) { maxparam += DELTA; params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } params[nparams].ielement = ielement; params[nparams].jelement = jelement; params[nparams].kelement = kelement; params[nparams].A = atof(words[3]); params[nparams].B = atof(words[4]); params[nparams].cutoffA = atof(words[5]); params[nparams].cutoffC = atof(words[6]); params[nparams].alpha = atof(words[7]); params[nparams].beta = atof(words[8]); params[nparams].eta = atof(words[9]); params[nparams].gamm = atof(words[10]); params[nparams].lambda = atof(words[11]); params[nparams].mu = atof(words[12]); params[nparams].rho = atof(words[13]); params[nparams].sigma = atof(words[14]); params[nparams].Q0 = atof(words[15]); params[nparams].u1 = atof(words[16]); params[nparams].u2 = atof(words[17]); params[nparams].u3 = atof(words[18]); params[nparams].u4 = atof(words[19]); if (params[nparams].A < 0.0 || params[nparams].B < 0.0 || params[nparams].cutoffA < 0.0 || params[nparams].cutoffC < 0.0 || params[nparams].alpha < 0.0 || params[nparams].beta < 0.0 || params[nparams].eta < 0.0 || params[nparams].gamm < 0.0 || params[nparams].lambda < 0.0 || params[nparams].mu < 0.0 || params[nparams].rho < 0.0 || params[nparams].sigma < 0.0) error->all(FLERR,"Illegal EDIP parameter"); nparams++; } delete [] words; } /* ---------------------------------------------------------------------- */ void PairEDIP::setup_params() { int i,j,k,m,n; double rtmp; // set elem2param for all triplet combinations // must be a single exact match to lines read from file // do not allow for ACB in place of ABC memory->destroy(elem2param); memory->create(elem2param,nelements,nelements,nelements,"pair:elem2param"); for (i = 0; i < nelements; i++) for (j = 0; j < nelements; j++) for (k = 0; k < nelements; k++) { n = -1; for (m = 0; m < nparams; m++) { if (i == params[m].ielement && j == params[m].jelement && k == params[m].kelement) { if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); n = m; } } if (n < 0) error->all(FLERR,"Potential file is missing an entry"); elem2param[i][j][k] = n; } // set cutoff square for (m = 0; m < nparams; m++) { params[m].cutsq = params[m].cutoffA*params[m].cutoffA; } // set cutmax to max of all params cutmax = 0.0; for (m = 0; m < nparams; m++) { rtmp = sqrt(params[m].cutsq); if (rtmp > cutmax) cutmax = rtmp; } // this should be removed for multi species parameterization A = params[0].A; B = params[0].B; rho = params[0].rho; cutoffA = params[0].cutoffA; cutoffC = params[0].cutoffC; sigma = params[0].sigma; lambda = params[0].lambda; gamm = params[0].gamm; eta = params[0].eta; Q0 = params[0].Q0; mu = params[0].mu; beta = params[0].beta; alpha = params[0].alpha; u1 = params[0].u1; u2 = params[0].u2; u3 = params[0].u3; u4 = params[0].u4; } diff --git a/src/USER-MISC/pair_edip_multi.cpp b/src/USER-MISC/pair_edip_multi.cpp new file mode 100644 index 000000000..d52b2e4a4 --- /dev/null +++ b/src/USER-MISC/pair_edip_multi.cpp @@ -0,0 +1,807 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Environment Dependent Interatomic Potential + + Contributing author: Chao Jiang +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "pair_edip_multi.h" +#include "atom.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "force.h" +#include "comm.h" +#include "memory.h" +#include "error.h" +#include "citeme.h" + +using namespace LAMMPS_NS; + +#define MAXLINE 1024 +#define DELTA 4 + + +static const char cite_pair_edip[] = + "@article{cjiang2012\n" + " author = {Jian, Chao and Morgan, Dane, and Szlufarska, Izabella},\n" + " title = {Carbon tri-interstitial defect: A model for DII center},\n" + " journal = {Physical Review B},\n" + " volume = {86},\n" + " pages = {144118},\n" + " year = {2012},\n" + "}\n\n" + "@article{lpizzagalli2010,\n" + " author = {G. Lucas, M. Bertolus, and L. Pizzagalli},\n" + " journal = {J. Phys. : Condens. Matter 22},\n" + " volume = {22},\n" + " pages = {035802},\n" + " year = {2010},\n" + "}\n\n"; + + + +/* ---------------------------------------------------------------------- */ + +PairEDIPMulti::PairEDIPMulti(LAMMPS *lmp) : Pair(lmp) +{ + if (lmp->citeme) lmp->citeme->add(cite_pair_edip); + + single_enable = 0; + restartinfo = 0; + one_coeff = 1; + manybody_flag = 1; + + nelements = 0; + elements = NULL; + nparams = maxparam = 0; + params = NULL; + elem2param = NULL; +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +PairEDIPMulti::~PairEDIPMulti() +{ + if (elements) + for (int i = 0; i < nelements; i++) delete [] elements[i]; + delete [] elements; + memory->destroy(params); + memory->destroy(elem2param); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + delete [] map; + +//XXX deallocateGrids(); + deallocatePreLoops(); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairEDIPMulti::compute(int eflag, int vflag) +{ + int i,j,k,ii,jj,kk,inum,jnum; + int itype,jtype,ktype,ijparam,ikparam,ijkparam; + double xtmp,ytmp,ztmp,evdwl; + int *ilist,*jlist,*numneigh,**firstneigh; + register int preForceCoord_counter; + + double zeta_i; + double dzetair; + double fpair; + double costheta; + double dpairZ,dtripleZ; + + // eflag != 0 means compute energy contributions in this step + // vflag != 0 means compute virial contributions in this step + + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum;//total number of atoms in the cell + ilist = list->ilist;//list of atoms + numneigh = list->numneigh;//number of near neighbors + firstneigh = list->firstneigh;//list of neighbors + + // loop over full neighbor list of my atoms + + for (ii = 0; ii < inum; ii++) { + zeta_i = 0.0; + int numForceCoordPairs = 0; + + i = ilist[ii]; + itype = map[type[i]]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + // all the neighbors of atom i + + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // pre-loop to compute environment coordination f(Z) + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + double delx, dely, delz, r_ij; + + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; + r_ij = delx * delx + dely * dely + delz * delz; + + jtype = map[type[j]]; + ijparam = elem2param[itype][jtype][jtype]; + if (r_ij > params[ijparam].cutsq) continue; + + r_ij = sqrt(r_ij); + + // zeta and its derivative dZ/dr + + if (r_ij < params[ijparam].cutoffC) zeta_i += 1.0; + else { + double f, fdr; + edip_fc(r_ij, ¶ms[ijparam], f, fdr); + zeta_i += f; + dzetair = -fdr / r_ij; + + preForceCoord_counter=numForceCoordPairs*5; + preForceCoord[preForceCoord_counter+0]=dzetair; + preForceCoord[preForceCoord_counter+1]=delx; + preForceCoord[preForceCoord_counter+2]=dely; + preForceCoord[preForceCoord_counter+3]=delz; + preForceCoord[preForceCoord_counter+4]=j; + numForceCoordPairs++; + } + } + + // two-body interactions + + dpairZ=0; + dtripleZ=0; + + for (jj = 0; jj < jnum; jj++) { + double dr_ij[3], r_ij, f_ij[3]; + + j = jlist[jj]; + j &= NEIGHMASK; + + dr_ij[0] = x[j][0] - xtmp; + dr_ij[1] = x[j][1] - ytmp; + dr_ij[2] = x[j][2] - ztmp; + r_ij = dr_ij[0]*dr_ij[0] + dr_ij[1]*dr_ij[1] + dr_ij[2]*dr_ij[2]; + + jtype = map[type[j]]; + ijparam = elem2param[itype][jtype][jtype]; + if (r_ij > params[ijparam].cutsq) continue; + + r_ij = sqrt(r_ij); + + // potential energy and force + // since pair i-j is different from pair j-i, double counting is + // already considered in constructing the potential + + double fdr, fdZ; + edip_pair(r_ij, zeta_i, ¶ms[ijparam], evdwl, fdr, fdZ); + fpair = -fdr / r_ij; + dpairZ += fdZ; + + f[i][0] -= fpair * dr_ij[0]; + f[i][1] -= fpair * dr_ij[1]; + f[i][2] -= fpair * dr_ij[2]; + + f[j][0] += fpair * dr_ij[0]; + f[j][1] += fpair * dr_ij[1]; + f[j][2] += fpair * dr_ij[2]; + + if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, fpair, -dr_ij[0], -dr_ij[1], -dr_ij[2]); + + // three-body Forces + + for (kk = jj + 1; kk < jnum; kk++) { + double dr_ik[3], r_ik, f_ik[3]; + + k = jlist[kk]; + k &= NEIGHMASK; + ktype = map[type[k]]; + ikparam = elem2param[itype][ktype][ktype]; + ijkparam = elem2param[itype][jtype][ktype]; + + dr_ik[0] = x[k][0] - xtmp; + dr_ik[1] = x[k][1] - ytmp; + dr_ik[2] = x[k][2] - ztmp; + r_ik = dr_ik[0]*dr_ik[0] + dr_ik[1]*dr_ik[1] + dr_ik[2]*dr_ik[2]; + + if (r_ik > params[ikparam].cutsq) continue; + + r_ik = sqrt(r_ik); + + costheta=vec3_dot(dr_ij, dr_ik) / r_ij / r_ik; + + double v1, v2, v3, v4, v5, v6, v7; + + edip_fcut3(r_ij, ¶ms[ijparam], v1, v2); + edip_fcut3(r_ik, ¶ms[ikparam], v3, v4); + edip_h(costheta, zeta_i, ¶ms[ijkparam], v5, v6, v7); + + // potential energy and forces + evdwl = v1 * v3 * v5; + dtripleZ += v1 * v3 * v7; + + double dri[3], drj[3], drk[3]; + double dhl, dfr; + + dhl = v1 * v3 * v6; + + costheta_d(dr_ij, r_ij, dr_ik, r_ik, dri, drj, drk); + + f_ij[0] = -dhl * drj[0]; + f_ij[1] = -dhl * drj[1]; + f_ij[2] = -dhl * drj[2]; + f_ik[0] = -dhl * drk[0]; + f_ik[1] = -dhl * drk[1]; + f_ik[2] = -dhl * drk[2]; + + dfr = v2 * v3 * v5; + fpair = -dfr / r_ij; + + f_ij[0] += fpair * dr_ij[0]; + f_ij[1] += fpair * dr_ij[1]; + f_ij[2] += fpair * dr_ij[2]; + + dfr = v1 * v4 * v5; + fpair = -dfr / r_ik; + + f_ik[0] += fpair * dr_ik[0]; + f_ik[1] += fpair * dr_ik[1]; + f_ik[2] += fpair * dr_ik[2]; + + f[j][0] += f_ij[0]; + f[j][1] += f_ij[1]; + f[j][2] += f_ij[2]; + + f[k][0] += f_ik[0]; + f[k][1] += f_ik[1]; + f[k][2] += f_ik[2]; + + f[i][0] -= f_ij[0] + f_ik[0]; + f[i][1] -= f_ij[1] + f_ik[1]; + f[i][2] -= f_ij[2] + f_ik[2]; + + if (evflag) ev_tally3(i,j,k,evdwl,0.0,f_ij,f_ik,dr_ij,dr_ik); + } + } + + // forces due to environment coordination f(Z) + for (int idx = 0; idx < numForceCoordPairs; idx++) { + double delx, dely, delz; + + preForceCoord_counter = idx * 5; + dzetair = preForceCoord[preForceCoord_counter+0]; + delx = preForceCoord[preForceCoord_counter+1]; + dely = preForceCoord[preForceCoord_counter+2]; + delz = preForceCoord[preForceCoord_counter+3]; + j = static_cast (preForceCoord[preForceCoord_counter+4]); + + dzetair *= (dpairZ + dtripleZ); + + f[j][0] += dzetair * delx; + f[j][1] += dzetair * dely; + f[j][2] += dzetair * delz; + + f[i][0] -= dzetair * delx; + f[i][1] -= dzetair * dely; + f[i][2] -= dzetair * delz; + + evdwl = 0.0; + if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, dzetair, -delx, -dely, -delz); + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +double sqr(double x) +{ + return x * x; +} + +//pair Vij, partial derivatives dVij(r,Z)/dr and dVij(r,Z)/dZ +void PairEDIPMulti::edip_pair(double r, double z, Param *param, double &eng, + double &fdr, double &fZ) +{ + double A = param->A; + double B = param->B; + double rho = param->rho; + double beta = param->beta; + double v1,v2,v3,v4; + + v1 = pow(B / r, rho); + v2 = exp(-beta * z * z); + edip_fcut2(r, param, v3, v4); + + eng = A * (v1 - v2) * v3; + fdr = A * (v1 - v2) * v4 + A * (-rho * v1 / r) * v3; + fZ = A * (2 * beta * z * v2) * v3; +} + +//function fc(r) in calculating coordination Z and derivative fc'(r) +void PairEDIPMulti::edip_fc(double r, Param *param, double &f, double &fdr) +{ + double a = param->cutoffA; + double c = param->cutoffC; + double alpha = param->alpha; + double x; + double v1, v2, v3; + + if(r < c + 1E-6) + { + f=1.0; + fdr=0.0; + return; + } + + if(r > a - 1E-6) + { + f=0.0; + fdr=0.0; + return; + } + + x = (a - c) / (r - c); + v1 = x * x * x; + v2 = 1.0 / (1.0 - v1); + + f = exp(alpha * v2); + fdr = (3.0 * x * v1 / (a - c)) * (-alpha * v2 * v2) * f; +} + +//cut-off function for Vij and its derivative fcut2'(r) +void PairEDIPMulti::edip_fcut2(double r, Param *param, double &f, double &fdr) +{ + double sigma = param->sigma; + double a = param->cutoffA; + double v1; + + if(r > a - 1E-6) + { + f=0.0; + fdr=0.0; + return; + } + + v1 = 1.0 / (r - a); + f = exp(sigma * v1); + fdr = (-sigma * v1 * v1) * f; +} + +//function tau(Z) and its derivative tau'(Z) +void PairEDIPMulti::edip_tau(double z, Param *param, double &f, double &fdZ) +{ + double u1 = param->u1; + double u2 = param->u2; + double u3 = param->u3; + double u4 = param->u4; + double v1, v2; + + v1 = exp(-u4 * z); + v2 = exp(-2.0 * u4 * z); + + f = u1 + u2 * u3 * v1 - u2 * v2; + fdZ = -u2 * u3 * u4 * v1 + 2.0 * u2 * u4 * v2; +} + +//function h(l,Z) and its partial derivatives dh(l,Z)/dl and dh(l,Z)/dZ +void PairEDIPMulti::edip_h(double l, double z, Param *param, double &f, + double &fdl, double &fdZ) +{ + double lambda = param->lambda; + double eta = param->eta; + double Q0 = param->Q0; + double mu = param->mu; + double Q, QdZ, Tau, TaudZ; + double u2, du2l, du2Z; + double v1, v2, v3; + + //function Q(Z) + Q = Q0 * exp(-mu * z); + //derivative Q'(Z) + QdZ= -mu * Q; + + edip_tau(z, param, Tau, TaudZ); + + v1 = sqr(l + Tau); + u2 = Q * v1; + v2 = exp(-u2); + + f = lambda * (1 - v2 + eta * u2); + + //df/du2 + v3 = lambda * (v2 + eta); + + //du2/dl + du2l = Q * 2 * (l + Tau); + fdl = v3 * du2l; + + //du2/dZ + du2Z = QdZ * v1 + Q * 2 * (l + Tau) * TaudZ; + fdZ = v3 * du2Z; +} + +//cut-off function for Vijk and its derivative fcut3'(r) +void PairEDIPMulti::edip_fcut3(double r, Param *param, double &f, double &fdr) +{ + double gamma = param->gamma; + double a = param->cutoffA; + double v1; + + if(r > a - 1E-6) + { + f=0.0; + fdr=0.0; + return; + } + + v1 = 1.0 / (r - a); + f = exp(gamma * v1); + fdr = (-gamma * v1 * v1) * f; +} + +/* ---------------------------------------------------------------------- + pre-calculated structures +------------------------------------------------------------------------- */ + +void PairEDIPMulti::allocatePreLoops(void) +{ + int nthreads = comm->nthreads; + + memory->create(preForceCoord,5*nthreads*leadDimInteractionList,"edip:preForceCoord"); +} + +/* ---------------------------------------------------------------------- + deallocate preLoops +------------------------------------------------------------------------- */ + +void PairEDIPMulti::deallocatePreLoops(void) +{ + memory->destroy(preForceCoord); +} + +/* ---------------------------------------------------------------------- */ + +void PairEDIPMulti::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + map = new int[n+1]; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairEDIPMulti::settings(int narg, char **arg) +{ + if (narg != 0) error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairEDIPMulti::coeff(int narg, char **arg) +{ + int i,j,n; + + if (!allocated) allocate(); + + if (narg != 3 + atom->ntypes) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if NULL + // nelements = # of unique elements + // elements = list of element names + + if (elements) { + for (i = 0; i < nelements; i++) delete [] elements[i]; + delete [] elements; + } + elements = new char*[atom->ntypes]; + for (i = 0; i < atom->ntypes; i++) elements[i] = NULL; + + nelements = 0; + for (i = 3; i < narg; i++) { + if (strcmp(arg[i],"NULL") == 0) { + map[i-2] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (strcmp(arg[i],elements[j]) == 0) break; + map[i-2] = j; + if (j == nelements) { + n = strlen(arg[i]) + 1; + elements[j] = new char[n]; + strcpy(elements[j],arg[i]); + nelements++; + } + } + + // read potential file and initialize potential parameters + + read_file(arg[2]); + setup(); + + // clear setflag since coeff() called once with I,J = * * + + n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements + + int count = 0; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + + // allocate tables and internal structures + + allocatePreLoops(); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairEDIPMulti::init_style() +{ + if (atom->tag_enable == 0) + error->all(FLERR,"Pair style edip/multi requires atom IDs"); + if (force->newton_pair == 0) + error->all(FLERR,"Pair style edip/multi requires newton pair on"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairEDIPMulti::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + return cutmax; +} + +/* ---------------------------------------------------------------------- */ + +void PairEDIPMulti::read_file(char *file) +{ + int params_per_line = 20; + char **words = new char*[params_per_line+1]; + + memory->sfree(params); + params = NULL; + nparams = maxparam = 0; + + // open file on proc 0 + + FILE *fp; + if (comm->me == 0) { + fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open EDIP potential file %s",file); + error->one(FLERR,str); + } + } + + // read each set of params from potential file + // one set of params can span multiple lines + // store params if all 3 element tags are in element list + + int n,nwords,ielement,jelement,kelement; + char line[MAXLINE],*ptr; + int eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // concatenate additional lines until have params_per_line words + + while (nwords < params_per_line) { + n = strlen(line); + if (comm->me == 0) { + ptr = fgets(&line[n],MAXLINE-n,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + } + + if (nwords != params_per_line) + error->all(FLERR,"Incorrect format in EDIP potential file"); + + // words = ptrs to all words in line + + nwords = 0; + words[nwords++] = strtok(line," \t\n\r\f"); + while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + + for (ielement = 0; ielement < nelements; ielement++) + if (strcmp(words[0],elements[ielement]) == 0) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (strcmp(words[1],elements[jelement]) == 0) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (strcmp(words[2],elements[kelement]) == 0) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].A = atof(words[3]); + params[nparams].B = atof(words[4]); + params[nparams].cutoffA = atof(words[5]); + params[nparams].cutoffC = atof(words[6]); + params[nparams].alpha = atof(words[7]); + params[nparams].beta = atof(words[8]); + params[nparams].eta = atof(words[9]); + params[nparams].gamma = atof(words[10]); + params[nparams].lambda = atof(words[11]); + params[nparams].mu = atof(words[12]); + params[nparams].rho = atof(words[13]); + params[nparams].sigma = atof(words[14]); + params[nparams].Q0 = atof(words[15]); + params[nparams].u1 = atof(words[16]); + params[nparams].u2 = atof(words[17]); + params[nparams].u3 = atof(words[18]); + params[nparams].u4 = atof(words[19]); + + if (params[nparams].A < 0.0 || params[nparams].B < 0.0 || + params[nparams].cutoffA < 0.0 || params[nparams].cutoffC < 0.0 || + params[nparams].alpha < 0.0 || params[nparams].beta < 0.0 || + params[nparams].eta < 0.0 || params[nparams].gamma < 0.0 || + params[nparams].lambda < 0.0 || params[nparams].mu < 0.0 || + params[nparams].rho < 0.0 || params[nparams].sigma < 0.0) + error->all(FLERR,"Illegal EDIP parameter"); + + nparams++; + } + + delete [] words; +} + +/* ---------------------------------------------------------------------- */ + +void PairEDIPMulti::setup() +{ + int i,j,k,m,n; + double rtmp; + + // set elem2param for all triplet combinations + // must be a single exact match to lines read from file + // do not allow for ACB in place of ABC + + memory->destroy(elem2param); + memory->create(elem2param,nelements,nelements,nelements,"pair:elem2param"); + + for (i = 0; i < nelements; i++) + for (j = 0; j < nelements; j++) + for (k = 0; k < nelements; k++) { + n = -1; + for (m = 0; m < nparams; m++) { + if (i == params[m].ielement && j == params[m].jelement && + k == params[m].kelement) { + if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); + n = m; + } + } + if (n < 0) error->all(FLERR,"Potential file is missing an entry"); + elem2param[i][j][k] = n; + } + + // set cutoff square + + for (m = 0; m < nparams; m++) { + params[m].cutsq = params[m].cutoffA*params[m].cutoffA; + } + + // set cutmax to max of all params + + cutmax = 0.0; + for (m = 0; m < nparams; m++) { + rtmp = sqrt(params[m].cutsq); + if (rtmp > cutmax) cutmax = rtmp; + } + +} diff --git a/src/USER-MISC/pair_edip_multi.h b/src/USER-MISC/pair_edip_multi.h new file mode 100644 index 000000000..e55916f79 --- /dev/null +++ b/src/USER-MISC/pair_edip_multi.h @@ -0,0 +1,113 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(edip/multi,PairEDIPMulti) + +#else + +#ifndef LMP_PAIR_EDIP_MULTI_H +#define LMP_PAIR_EDIP_MULTI_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairEDIPMulti : public Pair { + public: + PairEDIPMulti(class LAMMPS *); + virtual ~PairEDIPMulti(); + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + + protected: + struct Param { + double A, B;//coefficients for pair interaction I-J + double cutoffA;//cut-off distance for pair interaction I-J + double cutoffC;//lower cut-off distance for calculating Z_I + double alpha;//coefficient for calculating Z_I + double beta;//attractive term for pair I-J + double sigma;//cut-off coefficient for pair I-J + double rho;//pair I-J + double gamma;//coefficient for three-body interaction I-J-K + double eta, lambda;//coefficients for function h(l,Z) + double mu, Q0;//coefficients for function Q(Z) + double u1, u2, u3, u4;//coefficients for function tau(Z) + double cutsq; + int ielement,jelement,kelement; + }; + + double *preForceCoord; + + double cutmax; // max cutoff for all elements + int nelements; // # of unique elements + char **elements; // names of unique elements + int ***elem2param; // mapping from element triplets to parameters + int *map; // mapping from atom types to elements + int nparams; // # of stored parameter sets + int maxparam; // max # of parameter sets + Param *params; // parameter set for an I-J-K interaction + + // max number of interaction per atom for f(Z) environment potential + + static const int leadDimInteractionList = 64; + + void allocate(); + void allocatePreLoops(void); + void deallocatePreLoops(void); + + void read_file(char *); + void setup(); + + void edip_pair(double, double, Param *, double &, double &, double &); + void edip_fc(double, Param *, double &, double &); + void edip_fcut2(double, Param *, double &, double &); + void edip_tau(double, Param *, double &, double &); + void edip_h(double, double, Param *, double &, double &, double &); + void edip_fcut3(double, Param *, double &, double &); + + double vec3_dot(double x[3], double y[3]) + { + return x[0]*y[0] + x[1]*y[1] + x[2]*y[2]; + } + + void vec3_add(double k1, double x[3], double k2, double y[3], double *z) + { + z[0] = k1 * x[0] + k2 * y[0]; + z[1] = k1 * x[1] + k2 * y[1]; + z[2] = k1 * x[2] + k2 * y[2]; + } + + //dr_ij=r_j - r_i + //dr_ik=r_k - r_i + void costheta_d(double *dr_ij, double r_ij, double *dr_ik, double r_ik, + double *dri, double *drj, double *drk) + { + double costheta; + + costheta = vec3_dot(dr_ij, dr_ik) / r_ij / r_ik; + vec3_add(1 / r_ij / r_ik, dr_ik, -costheta / r_ij / r_ij, dr_ij, drj); + vec3_add(1 / r_ij / r_ik, dr_ij, -costheta / r_ik / r_ik, dr_ik, drk); + vec3_add(-1, drj, -1, drk, dri); + } + +}; + +} + +#endif +#endif